Delphi - Как я могу улучшить

Хорошо, поэтому я уже программировал в Delphi уже 3-4 года и считаю себя разработчиком приложений на промежуточном уровне с хорошим пониманием концепций. Но как мне стать лучше? Ive просто смотрел на источник нескольких компонентов, которые я использую довольно часто (virtualtreeview, asynccalls), и код там просто пень. Да, я могу понять его части, но другие вещи просто идут прямо над моей головой.

Итак, где лучшие ресурсы для улучшения моей программируемости? Книги, блоги или другие источники информации?

Ответ 1

Навыки программирования - это как мышцы; лучший способ улучшить их - это использовать их. Если вы хотите научиться быть лучшим кодером, работайте над более сложным проектом, чем раньше. Придумайте что-то, что вы хотели бы написать, но не знаете, как это сделать, и начните писать. Когда вы столкнетесь с концепциями, которые вы не понимаете, исследуйте их, и в конечном итоге вы добавите новые концепции и навыки в свой репертуар.

Ответ 2

Понимание кода, использующего понятия, с которыми вы не знакомы, сложно. Мой совет:

  • Выберите один или два проекта, которые вы не понимаете, и повторно их реализуйте. Из вашего вопроса попробуйте написать свой собственный компонент дерева (или списка) и попробуйте написать простую структуру потоков, в которой вы можете отправить задания и вернуть их работу в определенный момент. Это упрощенные версии двух упомянутых вами проектов.

    Как программист, вы учитесь, делая. Никакая теория не восполнит опыта решения и решения проблемы. [*]

    Когда вы решаете обе эти проблемы, вы столкнетесь с некоторыми из тех же проблем с авторами Virtual Treeview и AsyncCalls. (Если у вас есть проблемы, спросите здесь, пожалуйста!) Не только вы узнаете то же, что узнали, но вы, вероятно, вернетесь и перечитаете свой код и поймете, что они делают.

    Не поддавайтесь соблазну тем, что вы работаете над реализацией концепций вокруг (исходных проектов) и кода копирования - не стесняйтесь смотреть на него для вдохновения, но не копируйте его. Напишите это самостоятельно.

    Помните, что и Майк Лишке, и Андреас Хаусладен - очень умные люди. Не унывайте, если это тяжело работает. Многие программисты ходят по всей своей карьере, только будучи компетентными (как вам кажется), не подталкивая себя к тому, чтобы попытаться или научиться чему-то сложнее (так что если вы не возражаете, я так говорю, хорошо для вас, чтобы задать вопрос!)

Несколько других идей:

  • Изучите другой язык. Delphi здорово, но вы "думаете" на языке, и если вы хорошо изучите другой язык, вы будете подвержены другим концепциям или способам мышления или другим способам делать то же самое. Это действительно открывает вам разум.

    Например, С++ отлично подходит для использования RAII, шаблон метапрограммирования (это более мощно, чем позволяют шаблоны Delphi), некоторые довольно удивительные вещи в различных дополнительных библиотеках, таких как boost, и стрелять себе в ногу:) Функциональный язык полностью изменит ваше мнение (и я должен признать, что я немного лицемерен здесь: я был подвержен им, но сам не знаю "..) Цель C может быть хорошей для другого подхода к тому, что означает объектно-ориентированная (это и С++ - это объектно-ориентированные языки на основе C, но очень разные.) У вас есть идея.

  • Для просмотра этих конкретных проектов: один ответ на этой странице советовал проходить по очереди. Я нахожу, что понимаю код, который я не использовал до того, как это может быть подавляющим. Однажды я прочитал в блоге сотрудника Embarcadero несколько советов, чтобы использовать профилировщик, потому что он даст вам хорошее представление высокого уровня (a) всех классов/методов/частей программы и ( б), которые являются наиболее часто используемыми и, вероятно, наиболее важными частями, и как все это соединяется. Я не могу взять на себя ответственность за это предложение, но я думаю, что это хороший совет. Я рекомендую использовать AQTime.

    По этой причине я нахожу ответы, такие как "найти Foo, изучать источник" бесполезным: вы кодер, конечно, вы посмотрите на источник! Как посмотреть на источник, что более интересный вопрос.

  • Наконец, если вы дойдете до точки, где вы "смотрели на источник нескольких [проектов], а код там просто пень [вы]", или если вы делаете некоторые из вышеперечисленных и ничего не понимают, спросите здесь о SO!

[*] Сноска: я не сторонник не зная лежащую в основе теорию, просто что есть знание/уверенность вы сами что-то делаете что важно.

Ответ 4

Я думаю, что вы будете много расти в своих способностях delphi, если вы:

  • Научитесь создавать компоненты. Прочитайте статью "Конопка" в пользовательских компонентах Delphi или в статье EDN.

  • Изучите источники JEDI JVCL и JEDI JCL. Библиотеки API Jedi и JWSCL также ценны как источник информации. Документация MSDN (Microsoft) также неоценима, как источник документации по платформе для различных подсистем Windows, с которыми вам нужно будет взаимодействовать.

  • Получите копию книги мастера Marco Cantu Mastering Delphi или руководства разработчика Texeira и Pacheco Delphi.

  • Узнайте о тестируемой разработке, модульном тестировании, управлении версиями (изучите несколько систем, таких как Subversion, Git, Mercurial и т.д.), непрерывная интеграция и другие методы профессионального уровня.

Ответ 5

Лучший способ (для меня) понять, как работает код, из которого я не могу следовать, глядя только на код, - это спуститься и загрязниться и наблюдать за кодом, о котором идет речь. Поместите несколько точек останова вниз и начните отслеживать код во время его работы.

Чем больше вы это делаете, тем больше улучшается ваша способность впоследствии следовать коду, просто глядя на него.

Кроме того, вы еще не сделали этого, я настоятельно рекомендую прочитать следующую книгу:

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения (ISBN 0-201-63361-2)

Написано в 1994 году, оно по-прежнему актуально сегодня, как было тогда (если не больше).

Важная вещь в том, что он учит вас распознавать определенные шаблоны в коде и дает вам словарь для описания того, что все разделы кода выполняют только с одним термином.

В модели вы строите свое мнение о том, что делает какой-то сложный кусок кода и как он взаимодействует, вам больше не нужно хранить все мельчайшие детали, вместо этого вы можете построить абстракцию более высокого уровня в своем уме, где вы описываете код для себя как взаимодействие функциональных блоков на основе определенных шаблонов проектирования.

Это, естественно, предполагает, что данный код хорошо разработан. Иногда какой-то код просто беспорядок, который может заставить спагетти ревновать и неспособность с вашей стороны следовать, и понимание кода не является провалом вашего, а человека, который написал код.

Ответ 6

Если вы хотите выяснить код, который не принадлежит вам, вам нужно начать и спуститься и погрязнуть. Разбейте части кода, которые вы хотите понять, в "минимальную" программу и отлаживайте ее по строкам. Чаще всего это скажет вам, что происходит на низких уровнях. Иногда это только даст вам понимание, в котором вы нуждаетесь.

Но тогда, когда вы сталкиваетесь с тем, как работают конструкции кода, затем введите части нарушивших строк в Google для получения ответа. Это часто приводит вас к сообщениям в блоге или статьям, которые обсуждают аналогичный код, который объясняет концепции и как работает код.

Иногда я перехожу в Поиск кода Google и выбираю язык Pascal/Delphi для поиска. Я нахожу, что код здесь дает другую перспективу и часто содержит комментарии и другую информацию, которая помогает понять идеи.

Если я не могу понять другие способы, я прихожу к StackOverflow, который является фантастическим ресурсом для информации Delphi от очень знающих и опытных программистов Delphi. Если это то, что вы, как уже программист-программист, не можете понять, то, вероятно, это будет довольно хороший вопрос здесь, в SO, и вы получите несколько отличных ответов в коротком порядке, что я уверен, что это поможет вашему пониманию и обучению.

Ответ 7

Программирование сложное.

Типичное приложение RAD имеет формы с кодом в обработчиках событий, datamodules с запросами, а не с одним классом.

Вы можете написать сотни таких приложений и не знать ничего, кроме как использовать различные компоненты, их свойства и события.

Это основная проблема с Delphi, легко и естественно делать что-то не так. RAD = BAD. К сожалению, вероятно, 90% приложений написаны так.

И что не так с этим подходом? Отсутствует какая-либо архитектура. Почему это плохо? Это не изменяет устойчивость. Когда ваши требования изменятся, вам придется внести больше изменений, чем с соответствующим дизайном.

Хорошо известно, что приложения должны быть структурированы в слои.

Типичное разделение слоев

  • Бизнес-объекты/правила
  • Отображение данных/персистентность
  • GUI

С чисто разделенным бизнес-слоем вы можете иметь графический интерфейс Win32, веб-графический интерфейс, графический интерфейс мобильного устройства...

С чисто разделенным слоем Persistence вы можете иметь одинаковые слои Business и GUI, но переключаться с Interbase на Postgress.

Также гораздо легче писать тесты.

Теперь позвольте мне предупредить вас прямо сейчас, это долгий и трудный путь. Для освоения потребуется несколько лет, и вы никогда не будете полностью выполнены.

Когда вы хорошо разработали свое приложение и создали эти слои, и вы получите его на работу, и вы взволновательно покажете его своим коллегам, они расскажут вам странным образом и скажут: "Ну, я просто отбросил этот запрос на форма, выполнить и выглядит одинаково. Но вы будете знать лучше.

Я не согласен с предложениями по изучению другого языка. То есть, ИМХО, просто минуя проблему. Умение правильно организовывать и структурировать ваше приложение является агностическим. Любой истинный язык OO достаточен, поэтому нет необходимости изучать еще один на данный момент.

Я также не думаю, что смотреть на источник VirtualTreeView или подобные элементы управления научат вас многому. Вы узнаете о Winapi, но при этом полезны, что не поможет в разработке приложений.

Итак, чтобы обобщить, перейдите к ресурсам о дизайне приложений, бизнес-объектах, архитектуре, OPF, шаблонах и тестировании.

Ответ 8

Я не уверен, что есть простой ответ на ваш вопрос.

Один из способов постоянно оттачивать свое понимание основ - это практика и повторение. Одним из интересных способов добиться этого является так называемый код kata, который получает вдохновение от боевых искусств.

Само понятие само по себе является агностиком языка, и в нем много внимания уделяется TDD, который мне нравится. Джулиан Бакналл, похоже, тоже фанат. Некоторые люди даже записывают свои катаи. Быстрый поиск Google включает множество различных ссылок.

Ответ 9

Если вы работаете как часть команды, участвуйте в обзоре однорангового кода, используя такой инструмент, как Code Collaborator или ReviewBoard. Вы не только узнаете от других и свои комментарии к своему коду, но и разработаете критический взгляд на свою собственную работу и быстро начнете кодирование.

Ответ 10

Код virtualtreeview ужасен. Не беспокойтесь об этом.

Чтобы получить действительно хорошее объектно-ориентированное программирование, вы можете попробовать Smalltalk некоторое время. И для чего-то совершенно другого, добавьте в Seaside веб-фреймворк.

[edit] Есть несколько причин, почему поиск в Приморье - хорошая идея. Это яркий пример создания превосходных абстракций над зверствами, таких как html, css и javascript, что делает возможным, таким образом, сделать веб-разработку разумным образом. Он показывает, как создавать свободные интерфейсы и как их использовать, чтобы быть намного более продуктивными.

После 20 лет Turbo Pascal и Delphi мой стиль кодирования значительно улучшился благодаря использованию Smalltalk. Должен был найти его раньше.

Virtualtreeview, с другой стороны, состоит из огромного количества плохо структурированного кода. Нет абстракций, слишком длинных методов, плохих структур данных. Единственное его преимущество заключается в том, что он широко используется, поэтому вряд ли вы столкнетесь с ошибками, если будете придерживаться хорошо используемых частей.

[edit2] И после того, как вам будет удобно с Smalltalk и Seaside, попробуйте запустить его на Gemstone, объектно-ориентированной базе данных. Это покажет вам, как базы данных должны быть (невидимыми) и заставлять вас спорить с реляционными базами данных.