Я хочу помочь программистам, которые только начали делать первые шаги в профессиональной карьере, а также студентам, которые хотят выйти за рамки учебных дисциплин.
Если вам хочется узнать как строить карьеру в 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.
Книга для тех, кто хочет взглянуть на профессию программиста с высоты птичьего полета.
Результат
Надо понимать, что просто прочитав всю эту литературу вы не станете асом, но получите отличную теоретическую базу, от которой можно будет отталкиваться. К тому же полученные знания помогут вам выглядеть достойно на собеседовании и в дальнейшем стать продуктивными работниками.
Указанная литература скорее для мидлов, а не начинающих программистов. Для начинающих полезней будет почитать Framework Design Guidelines(http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613/ref=dp_ob_title_bk)
ОтветитьУдалитьпро tdd совсем недавно отличная книжка вышла http://www.amazon.com/exec/obidos/tg/detail/-/1933988274/
ОтветитьУдалитьи где code complete? :)
Я описал 3 критерия качественного кода, которые я ожидаю от новичков.
ОтветитьУдалитьFramework Design Guidelines в освоении этих 3х критериев бесполезен. Это скорее справочник по работе с .NET. А зачем себя ограничивать платформой?
@про tdd совсем недавно отличная...
ОтветитьУдалитьДа, Рой Ошеров не мог выпустить плохой книги :) Буду рад, если в комментариях появится пару десятков ссылок на полезные книжки или статьи.
Как можно было заметить, я не выдал список до пола ;) Книг очень много и в данном случае по своему разумению я выделил ключевые.
Уж лучше пусть новичек хорошо разбирается в конкретной платформе, чем плодит бесполезные абстрактные фабрики где попало.
ОтветитьУдалить@Уж лучше пусть новичек хорошо...
ОтветитьУдалитьЛучше, когда есть понимание дизайна. К этому пониманию надо стремиться. Высказывание "...лучше пусть новичек хорошо разбирается в конкретной платформе, чем..." сразу снижает планку.
То есть у вас сначала появилось понимание дизайна, а затем уже решили почитать что такое .Net? :)
ОтветитьУдалитьвроде литература рекомендуется новичкам, а вы их в архитектуру сразу.
хотя могу согласиться, что прочтение этих книг никому не помешает, вне зависимости от статуса.
@То есть у вас сначала появилось понимание дизайна...
ОтветитьУдалитьК вам одна просьба - представьтесь пожалуйста.
Я объясню предысторию этой статьи. На собеседование приходят очень разные программисты. И многие, повторю еще раз многие, просто не понимают как тестировать код, не знают шаблонов проектирования и вполне нормально себя чувствуют, копируя пару строчек из соседних классов.
Я хочу дать наводку, указать цель, показать возможность к самосовершенствованию.
>многие, просто не понимают как тестировать код
ОтветитьУдалитьпонимание приходит только с опытом, прочтение книг практически ничего не даст.
Рекомендую книгу 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.
@hazzik
ОтветитьУдалитьСпасибо за рекомендации!
Понимание необходимости вырабатывать дизайн, использовать шаблоны и бест практики как правило приходит с опытом. А новичек с опытом уже не совсем новичек. Так мне кажется...
ОтветитьУдалить@Andrey
ОтветитьУдалитьВ моем понимании новичек - это тот, кто пишет код, который не удовлетворяет 3м критериям качества. Пусть даже это будет программист с многолетним стажем работы на .NET, Java или любой другой платформы.
Видимо из-за разницы понятия у нас и возник спор.
Все не то...
ОтветитьУдалитьЕсли уж фундаментом хочется делиться, пускай уж лучше The Timeless Way of Building читают.
А остальному научить можно. На хороших примерах. У хорошего новичка голова должна быть светлая и пустая. А вот если он сам дошел до таких вот книжек — ни разу он не новичок.
А если так хочется что-нибудь посоветовать новичку — достаточно будет «Code Craft», благо она уже на русском есть под названием «Ремесло программиста».
@Все не то...
ОтветитьУдалитьУ меня есть живые примеры программистов, которые прошли путь с книгами, о которых я написал.
Одной Code Craft не хватит.
@hazzik
ОтветитьУдалить"понимание приходит только с опытом, прочтение книг практически ничего не даст."
Зачем же ты тогда их прочитал? Потренеровался бы да все понял? ;)
Я думаю ты сам понимаешь, что прочитать эту литературу все же необходимо.
@Александр Бындю
ОтветитьУдалитьЯ говорю не о том, что не нужно читать книги, а о том, что прочтение книг без практики ничего не даст.
@hazzik
ОтветитьУдалитьОно даст теоретическую базу. Для тех, кто понятия не имеет о тестировании, прочтение книги Кента Бека - это большой шаг вперед.
Да, книги хорошие, нужные, помогут и в работе, и на собеседовании. Но на него ещё нужно попасть. А у нас в городе компаний мало, все укомплектованы, новички-студенты никому не нужны, где набираться опыта - непонятно. Написал почти во все наши челябинские фирмы - в ответ либо "нет", либо вообще ничего. И что с этим делать - непонятно.
ОтветитьУдалить@type-mismatch
ОтветитьУдалитьИ нам писали?
http://moikrug.ru/vacancies/579752381
@ Александр Бындю
ОтветитьУдалитьКонечно, совсем недавно. Я и сам понимаю, что не знаю многого из списка требований к этой вакансии, и что обучать новичка - проблема, в некотором роде благотворительность. Беда в том, что когда все компании действуют таким же образом, то получается замкнутый круг: опытные специалисты очень редко оказываются свободными (у Джоэла Спольски на эту тему есть хорошая статья), а новичкам негде набраться опыта.
Вы то сами прочитали книжки из приведенного мною списка?
ОтветитьУдалитьPragmatic prgrammer и немного о паттернах и рефакторинге.
ОтветитьУдалитьОстальное в ближайших планах.
@type-mismatch
ОтветитьУдалитьТо, что есть стремление, уже хороший признак ;)
Скиньте мне, пожалуйста, ваше резюме еще раз. Не забудьте обозначить, что это вы.
Быть может, это прозвучит немного наивно, но у меня вызывает некоторые недоумение отсутствие в данном списке книг классиков жанра - GoF...
ОтветитьУдалить@Говоров Виктор
ОтветитьУдалитьЭто минимальный набор книг, которые, по моему мнению, необходимо прочитать. Я понимаю, что есть чем расширять этот список.
@Александр Бындю
ОтветитьУдалитьНу просто читать литературу по шаблонам проектирования, и в частности PoEAA, не познакомившись с GoF, - это приблизительно то же самое, что изучать C#, не имея представления о ООП и программировании вообще.
Разбираться, например, с паттерном "Репозиторий", не зная при этом, что такое "Синглтон", имхо, неправильно и даже глупо.
@Говоров Виктор
ОтветитьУдалитьМогу на своем примере сказать, что читать книжку GoF я так и не стал. В смысле чтения, а не полистать.
Прочитав PoEAA и Agile Principles, Patterns, and Practices in C# мне хватает знаний по шаблонам и принципам проектирования. Я не считаю книжку GoF чем-то уникальным на данный момент. Все идеи из этой книжки более детально разжевываются в последовавших после нее изданиях.
"Я хочу помочь программистам, которые только начали делать первые шаги в профессиональной карьере..."
ОтветитьУдалитьНе смешите. Пусть сначала в алгоритмическом плане хоть что-н(!) напишут стоящее.
Да и хотя бы язык нормально выучат. А то принципов то обычного кодирования не понимают, делают по аналогии с тем, что в книге написано.
Вот потом уже о стандартах проектирования задумываются.
И вообще, не будьте фанатами XP. Это уже ненормально. Всякими принципами нужно пользоваться в меру, а не применять их везде и сразу только потому что это паттерны и т.п.
@juver++
ОтветитьУдалить"Пусть сначала в алгоритмическом плане хоть что-н(!) напишут стоящее"
Одно другому не мешает. В перспективе более ценный программист, который разбирается в дизайне, а не в тонкостях платформы.
"И вообще, не будьте фанатами XP. Это уже ненормально."
А я буду фанатом XP и буду использовать его принципы, потому что это отлично работает в нашей компании и позволят создавать рабочий продукт. Главное ведь результат, так?
2 Александр Бындю:
ОтветитьУдалитьНу согласитесь, это не те книги для "начинающего программиста". Те же классические паттерны GoF знают очень малое количество людей, а умеют применять их правильно - единицы.
@juver
ОтветитьУдалитьВ том то и дело, что в этих книга описаны _подходы_ к проектированию, тестированию и т.д., а не просто перечислены шаблоны проектирования. Как раз если прочитать просто о шаблонах, то применять их будет очень сложно.
Паттерны для быдла, неспособного думать самостоятельно. Плодят в бОльшей части мусорный и громоздкий код — зато понятно любой макаке.
ОтветитьУдалитьПлюсы — под них можно запихнуть любую логику. Даже "бизнес-логику", которую правильнее назвать бизнес-бредом, но от нее никуда не деться большинству программеров-обезьянок, особенно веб (ибо сайты сейчас - подавляющее большинство веб-магазины, "морды" компаний и прочая лабуда, легко написуемая — не в плане сопровождения — в быдлокод-парадигме каждым вторым человеком)
ТДД - необходимый для жизни минимум в любом проекте, согласен на все 100.
Рекомендовал бы практиковать ФП, да сейчас набегут пхпшники (ничего личного к языку. только к его низкому порогу вхождения) и будут кидаться какашками из-за выноса их маленького мозга матчастью. Чистота и краткость кода выше, тестопригодность зашкаливает, расширяемость так же.
Желающих потрепаться и поспорить — пожалуйста по почте, не надо кидаться говном у человека в блоге
@Александр
ОтветитьУдалитьНу ты отжег =)
to Александр Бындю. Какие-то возражения?
ОтветитьУдалить@Silence
ОтветитьУдалитьНет, просто злобно как-то.
интересно твое мнение по книге С. Макконнелл
ОтветитьУдалитьСовершенный код http://www.ozon.ru/context/detail/id/3159814/
@Ринат Муллаянов
ОтветитьУдалитьДумаю, что надо прочитать вместе с остальными книгами этого автора. Мне лично очень понравилась его книга Профессиональная разработка программного обеспечения
Указанные книги безусловно полезны, спасибо!
ОтветитьУдалитьХотел бы упомянуть пару книг в направлении .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
К рефакторингу я бы еще добавил Clean Code R.Martin. По поводу высоты птичьего полета добавил бы Continuous Delivery.
ОтветитьУдалить"В перспективе более ценный программист, который разбирается в дизайне, а не в тонкостях платформы." Вот поэтому и рекомендую сменить книгу в списке Agile Principles, Patterns, and Practices in C# на аналогичную Agile Principles, Patterns, and Practices, и не будет никакой "платформозависимости".
PS GoF реквомендовал бы всем (притом именно GoF, а не чужие переиздания)
PPS Как всегда приятно читать Ваш блог, Александр.
Вышла замечательная книга - Принципы, паттерны и методики гибкой разработки на языке C# Мартинов. Время только нет...
ОтветитьУдалитьНа хорошее дело время всегда можно найти :)
ОтветитьУдалитьПочитайте про GTD, это сильно помогает. Только лучше книжку читать, а не разрозненные мысли в интернетах.
КОшмар. Не для начинающих же. Для начинающих же паскаль, html, азы систем типа Виндовс и Юникс. Но не такие сложные книги по теории программирования и "правильным" подходам.
ОтветитьУдалить"только начали делать первые шаги в профессиональной карьере, а также студентам, которые хотят выйти за рамки учебных дисциплин"
ОтветитьУдалитьРечь про профессиональную карьеру или выход за рамки учебных программ. Для меня начинающий программист - это любой, кто не владеет материалом их этих книг вне зависимости от его опыта работы (кол-во лет роли не играет).
Спасибо за подборку! Учусь на программиста. Как раз искал литературу, которая поможет очертить в голове контуры будущей профессии.))
ОтветитьУдалить