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

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

11 голосов
/ 16 февраля 2011

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

Так, где лучшие ресурсы, чтобы улучшить мою способность к программированию? Книги, блоги или другие источники информации?

Ответы [ 10 ]

11 голосов
/ 16 февраля 2011

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

10 голосов
/ 16 февраля 2011

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

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

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

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

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

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

Пара других идей:

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

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

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

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

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

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

7 голосов
/ 16 февраля 2011

Вы должны прочитать эти статьи из Стив Трефетен :

, которые обеспечивают большое резюме тем, которыехороший разработчик в Delphi должен обрабатывать

4 голосов
/ 16 февраля 2011

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

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

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

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

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

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

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

4 голосов
/ 16 февраля 2011

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

  1. Научитесь создавать компоненты. Прочитайте книгу Рэя Конопки о пользовательских компонентах delphi или его статью EDN.

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

  3. Получите копию гигантской книги Мастеринга Delphi Марко Канту или Руководство разработчика Delphi от Texeira и Pacheco.

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

3 голосов
/ 16 февраля 2011

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

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

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

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

2 голосов
/ 16 февраля 2011

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

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

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

Это главная проблема с Delphi, легко и естественно делать вещи неправильно.RAD = ПЛОХО.К сожалению, вероятно, 90% приложений написаны так.

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

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

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

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

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

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

Также намного прощенаписать тесты.

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

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

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

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

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

0 голосов
/ 30 апреля 2012

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

0 голосов
/ 16 февраля 2011

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

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

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

0 голосов
/ 16 февраля 2011

Код виртуального дерева ужасен. Не беспокойся об этом.

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

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

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

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

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

...