Что нужно прочитать начинающим программистам?

20 сентября 2009 г.

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

Если вам хочется узнать как строить карьеру в IT, я написал об этом в статье по ссылке http://blog.byndyu.ru/2011/04/it.html

Критерии качественного кода

Модульные тесты

Разработчики должны тестировать свой код. Наибольшую отдачу от тестов можно получить при использовании разработки с помощью тестов.

Литература

Базовой книжкой для изучения TDD является Test Driven Development: By Example Кента Бека.

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

Отсутствие дублирования

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

Литература

Отличное описание приемов рефакторинга можно найти в книге Refactoring: Improving the Design of Existing Code Мартина Фаулера.

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

Вписывание в общую архитектуру системы

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

Литература

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

Первая книга Patterns of Enterprise Application Architecture Мартина Фаулера.

Эта книга наполнена практическими примерами применения шаблонов проектирования. Каждый шаблон описан с дотошностью (в хорошем смысле) присущей Фаулеру.

Вторая книга уже для более матерых Agile Principles, Patterns, and Practices in C# Роберта Мартина.

Сила этой книги в том, что в ней раскрыты принципы проектирования.

Вливаемся в профессию

В завершение хочу посоветовать несколько книг, которые помогут «понять» профессию разработчика.

Базовой книгой в этом списке я считаю The Pragmatic Programmer: From Journeyman to Master Эндрю Ханта и Дэвида Томаса.

В свое время эта книга настроила меня на нужную волну мышления.

Наконец, книга Пете Гудлифа (Pete Goodliffe), которая охватывает все аспекты разработки ПО — Code Craft: The Practice of Writing Excellent Code.

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

Результат

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

44 комментария:

  1. Указанная литература скорее для мидлов, а не начинающих программистов. Для начинающих полезней будет почитать Framework Design Guidelines(http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613/ref=dp_ob_title_bk)

    ОтветитьУдалить
  2. про tdd совсем недавно отличная книжка вышла http://www.amazon.com/exec/obidos/tg/detail/-/1933988274/

    и где code complete? :)

    ОтветитьУдалить
  3. Я описал 3 критерия качественного кода, которые я ожидаю от новичков.

    Framework Design Guidelines в освоении этих 3х критериев бесполезен. Это скорее справочник по работе с .NET. А зачем себя ограничивать платформой?

    ОтветитьУдалить
  4. @про tdd совсем недавно отличная...

    Да, Рой Ошеров не мог выпустить плохой книги :) Буду рад, если в комментариях появится пару десятков ссылок на полезные книжки или статьи.

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

    ОтветитьУдалить
  5. Уж лучше пусть новичек хорошо разбирается в конкретной платформе, чем плодит бесполезные абстрактные фабрики где попало.

    ОтветитьУдалить
  6. @Уж лучше пусть новичек хорошо...

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

    ОтветитьУдалить
  7. То есть у вас сначала появилось понимание дизайна, а затем уже решили почитать что такое .Net? :)

    вроде литература рекомендуется новичкам, а вы их в архитектуру сразу.

    хотя могу согласиться, что прочтение этих книг никому не помешает, вне зависимости от статуса.

    ОтветитьУдалить
  8. @То есть у вас сначала появилось понимание дизайна...

    К вам одна просьба - представьтесь пожалуйста.

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

    Я хочу дать наводку, указать цель, показать возможность к самосовершенствованию.

    ОтветитьУдалить
  9. >многие, просто не понимают как тестировать код
    понимание приходит только с опытом, прочтение книг практически ничего не даст.

    Рекомендую книгу xUnit Test Patterns: xUnit Test Patterns: Refactoring Test Code Джерарда Мессароша (http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054) Для новичков, конечно, будет бесполезна, для остальных маст рид.

    Еще порекомендую Джошуа Кириевски Refactoring To Patterns (http://www.amazon.com/Refactoring-Patterns-Joshua-Kerievsky/dp/0321213351) для новичков она будет полезней, чем просто рефакторинг Фаулера. Рекомендуется к прочтению после GoF.

    ОтветитьУдалить
  10. Понимание необходимости вырабатывать дизайн, использовать шаблоны и бест практики как правило приходит с опытом. А новичек с опытом уже не совсем новичек. Так мне кажется...

    ОтветитьУдалить
  11. @Andrey

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

    Видимо из-за разницы понятия у нас и возник спор.

    ОтветитьУдалить
  12. Все не то...

    Если уж фундаментом хочется делиться, пускай уж лучше The Timeless Way of Building читают.

    А остальному научить можно. На хороших примерах. У хорошего новичка голова должна быть светлая и пустая. А вот если он сам дошел до таких вот книжек — ни разу он не новичок.

    А если так хочется что-нибудь посоветовать новичку — достаточно будет «Code Craft», благо она уже на русском есть под названием «Ремесло программиста».

    ОтветитьУдалить
  13. @Все не то...

    У меня есть живые примеры программистов, которые прошли путь с книгами, о которых я написал.

    Одной Code Craft не хватит.

    ОтветитьУдалить
  14. @hazzik

    "понимание приходит только с опытом, прочтение книг практически ничего не даст."

    Зачем же ты тогда их прочитал? Потренеровался бы да все понял? ;)

    Я думаю ты сам понимаешь, что прочитать эту литературу все же необходимо.

    ОтветитьУдалить
  15. @Александр Бындю

    Я говорю не о том, что не нужно читать книги, а о том, что прочтение книг без практики ничего не даст.

    ОтветитьУдалить
  16. @hazzik

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

    ОтветитьУдалить
  17. Да, книги хорошие, нужные, помогут и в работе, и на собеседовании. Но на него ещё нужно попасть. А у нас в городе компаний мало, все укомплектованы, новички-студенты никому не нужны, где набираться опыта - непонятно. Написал почти во все наши челябинские фирмы - в ответ либо "нет", либо вообще ничего. И что с этим делать - непонятно.

    ОтветитьУдалить
  18. @type-mismatch

    И нам писали?

    http://moikrug.ru/vacancies/579752381

    ОтветитьУдалить
  19. @ Александр Бындю
    Конечно, совсем недавно. Я и сам понимаю, что не знаю многого из списка требований к этой вакансии, и что обучать новичка - проблема, в некотором роде благотворительность. Беда в том, что когда все компании действуют таким же образом, то получается замкнутый круг: опытные специалисты очень редко оказываются свободными (у Джоэла Спольски на эту тему есть хорошая статья), а новичкам негде набраться опыта.

    ОтветитьУдалить
  20. Вы то сами прочитали книжки из приведенного мною списка?

    ОтветитьУдалить
  21. Pragmatic prgrammer и немного о паттернах и рефакторинге.
    Остальное в ближайших планах.

    ОтветитьУдалить
  22. @type-mismatch

    То, что есть стремление, уже хороший признак ;)

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

    ОтветитьУдалить
  23. Быть может, это прозвучит немного наивно, но у меня вызывает некоторые недоумение отсутствие в данном списке книг классиков жанра - GoF...

    ОтветитьУдалить
  24. @Говоров Виктор
    Это минимальный набор книг, которые, по моему мнению, необходимо прочитать. Я понимаю, что есть чем расширять этот список.

    ОтветитьУдалить
  25. @Александр Бындю
    Ну просто читать литературу по шаблонам проектирования, и в частности PoEAA, не познакомившись с GoF, - это приблизительно то же самое, что изучать C#, не имея представления о ООП и программировании вообще.
    Разбираться, например, с паттерном "Репозиторий", не зная при этом, что такое "Синглтон", имхо, неправильно и даже глупо.

    ОтветитьУдалить
  26. @Говоров Виктор
    Могу на своем примере сказать, что читать книжку GoF я так и не стал. В смысле чтения, а не полистать.

    Прочитав PoEAA и Agile Principles, Patterns, and Practices in C# мне хватает знаний по шаблонам и принципам проектирования. Я не считаю книжку GoF чем-то уникальным на данный момент. Все идеи из этой книжки более детально разжевываются в последовавших после нее изданиях.

    ОтветитьУдалить
  27. "Я хочу помочь программистам, которые только начали делать первые шаги в профессиональной карьере..."

    Не смешите. Пусть сначала в алгоритмическом плане хоть что-н(!) напишут стоящее.
    Да и хотя бы язык нормально выучат. А то принципов то обычного кодирования не понимают, делают по аналогии с тем, что в книге написано.
    Вот потом уже о стандартах проектирования задумываются.
    И вообще, не будьте фанатами XP. Это уже ненормально. Всякими принципами нужно пользоваться в меру, а не применять их везде и сразу только потому что это паттерны и т.п.

    ОтветитьУдалить
  28. @juver++
    "Пусть сначала в алгоритмическом плане хоть что-н(!) напишут стоящее"
    Одно другому не мешает. В перспективе более ценный программист, который разбирается в дизайне, а не в тонкостях платформы.

    "И вообще, не будьте фанатами XP. Это уже ненормально."
    А я буду фанатом XP и буду использовать его принципы, потому что это отлично работает в нашей компании и позволят создавать рабочий продукт. Главное ведь результат, так?

    ОтветитьУдалить
  29. 2 Александр Бындю:

    Ну согласитесь, это не те книги для "начинающего программиста". Те же классические паттерны GoF знают очень малое количество людей, а умеют применять их правильно - единицы.

    ОтветитьУдалить
  30. @juver
    В том то и дело, что в этих книга описаны _подходы_ к проектированию, тестированию и т.д., а не просто перечислены шаблоны проектирования. Как раз если прочитать просто о шаблонах, то применять их будет очень сложно.

    ОтветитьУдалить
  31. Паттерны для быдла, неспособного думать самостоятельно. Плодят в бОльшей части мусорный и громоздкий код — зато понятно любой макаке.

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

    ТДД - необходимый для жизни минимум в любом проекте, согласен на все 100.

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

    Желающих потрепаться и поспорить — пожалуйста по почте, не надо кидаться говном у человека в блоге

    ОтветитьУдалить
  32. to Александр Бындю. Какие-то возражения?

    ОтветитьУдалить
  33. @Silence
    Нет, просто злобно как-то.

    ОтветитьУдалить
  34. интересно твое мнение по книге С. Макконнелл
    Совершенный код http://www.ozon.ru/context/detail/id/3159814/

    ОтветитьУдалить
  35. @Ринат Муллаянов

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

    ОтветитьУдалить
  36. Указанные книги безусловно полезны, спасибо!

    Хотел бы упомянуть пару книг в направлении .NET C#, которые могут использоваться как стартовые:

    1. Andrew Troelsen. Pro C# 2010 and the .NET 4 Platform (http://www.ozon.ru/context/detail/id/5602592/). Актуальная книга из данной серия книг по C# в рамках актуальной версии .NET всегда введёт новичка в курс дела. Рекомендую для первого ознакомления с платформой .NET и её возможностями.

    2. Jeffrey Richter, CLR via C#, Second Edition (Pro Developer) (http://www.ozon.ru/context/detail/id/3032556/).Считаю, что эта книга о внутреннем устройстве .NET обязательна к прочтению всеми, кто собирается продолжить карьеру программиста .NET

    ОтветитьУдалить
  37. К рефакторингу я бы еще добавил Clean Code R.Martin. По поводу высоты птичьего полета добавил бы Continuous Delivery.
    "В перспективе более ценный программист, который разбирается в дизайне, а не в тонкостях платформы." Вот поэтому и рекомендую сменить книгу в списке Agile Principles, Patterns, and Practices in C# на аналогичную Agile Principles, Patterns, and Practices, и не будет никакой "платформозависимости".
    PS GoF реквомендовал бы всем (притом именно GoF, а не чужие переиздания)
    PPS Как всегда приятно читать Ваш блог, Александр.

    ОтветитьУдалить
  38. Вышла замечательная книга - Принципы, паттерны и методики гибкой разработки на языке C# Мартинов. Время только нет...

    ОтветитьУдалить
  39. На хорошее дело время всегда можно найти :)

    Почитайте про GTD, это сильно помогает. Только лучше книжку читать, а не разрозненные мысли в интернетах.

    ОтветитьУдалить
  40. КОшмар. Не для начинающих же. Для начинающих же паскаль, html, азы систем типа Виндовс и Юникс. Но не такие сложные книги по теории программирования и "правильным" подходам.

    ОтветитьУдалить
  41. "только начали делать первые шаги в профессиональной карьере, а также студентам, которые хотят выйти за рамки учебных дисциплин"

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

    ОтветитьУдалить
  42. Спасибо за подборку! Учусь на программиста. Как раз искал литературу, которая поможет очертить в голове контуры будущей профессии.))

    ОтветитьУдалить

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...