В прошлый раз мы подготовили компактные подборки с настольными справочниками для сисадминов и ресурсами для DevSecOps. Сегодня говорим о книгах для разработчиков, начинающих погружение в мир программного обеспечения. В списке «классика», которую рекомендуют резиденты Hacker News, Reddit и других профильных площадок.
В блоге T1 Cloud мы регулярно делимся полезными ресурсами для ИТ-специалистов — подписывайтесь, чтобы не пропустить будущие публикации.
Code Complete
Классика от программиста Стива Макконнелла. Опираясь на академические исследования и собственный опыт коммерческой разработки, он собрал под одной обложкой коллекцию лучших практик и принципов по написанию приложений. Книга затрагивает широкий спектр тем — например, производительность кода, отладка, составление документации.
Особое внимание автор уделяет структурированию кода, удобству чтения и восприятия. Один из резидентов Hacker News даже выделил любимую цитату в этом контексте: «Написать программу так, чтобы она была понятна компьютеру — это меньшая часть работы программиста; его основная задача — написать её так, чтобы её понял другой человек».
Читатели отмечают, что одна из наиболее интересных концепций, которую затрагивает Макконелл — это программирование с использованием псевдокода. Он позволяет изложить всю логику приложения, не написав ни одной строчки на каком-либо ЯП. Это может быть удобно при работе над масштабным проектом, в котором важно заранее предусмотреть потенциальные подводные камни.
В целом «Code Complete» подойдет как начинающим, так и опытным разработчикам — каждый сможет почерпнуть что-то полезное вне зависимости от сложности проекта at hand. Однако материал может показаться «тяжелым» к прочтению — он изложен на 960 страницах. Вероятно, не каждый «осилит» книгу до конца. Однако её вполне можно использовать как настольный справочник и обращаться только к тем главам, которые помогут решить текущую задачу.
Clean Code
Если «Code Complete» представляет собой полноценное руководство по разработке программного обеспечения, то «Clean Code» затрагивает аналогичные вопросы, но в более повествовательном формате. Вероятно, это одна из самых часто рекомендуемых книг по разработке ПО, несмотря на тот факт, что она и её автор регулярно подвергаются критике.
«Clean Code» написал разработчик Роберт Мартин, также известный в ИТ-сообществе как Дядя Боб. Он разбирает принципы и приемы написания чистого кода, приводит большое количество примеров. В то же время книга содержит серию практических упражнений, где необходимо найти и устранить проблемы в предложенных блоках кода. Особенно полезна книга будет разработчикам на Java, поскольку в ней есть отдельные главы, посвященные модулю JUnit.
Автор неплохо раскрывает принципы DRY, и акцентирует внимание на том, что функции должны решать только одну задачу, но делать это хорошо. С другой стороны, автора критикуют за не самые удачные примеры кода и спорные подходы к разработке — например, за идею, что идеальная функция не содержит аргументов.
Если вам понравится подача материала и стиль автора, то в его портфолио есть несколько аналогичных работ: «Clean Architecture», посвященная проектированию чистой архитектуры, «Clean Agile» об организации задач в условиях гибких методологий и «Clean Coder» с лучшими практиками для разработчиков.
Хотя резиденты Hacker News отмечают, что книги представляют собой набор рекомендаций, которым не нужно следовать беспрекословно. Однако с ними стоит познакомиться, чтобы сформировать собственное мнение о предлагаемых практиках и понять, когда можно нарушать правила. В ИТ-сообществе до сих пор нет абсолютного консенсуса по вопросам чистоты кода и архитектуры. Сам этот факт находит отражение в «Clean Architecture». Роберт Мартин включил туда отдельную главу, которую написал приглашённый автор — Саймон Браун, и его идеи во многом противоречат остальной части материала.
Structure and Interpretation of Computer Programs
По словам пользователя Hacker News, эта книга встречается в тематических подборках литературы недостаточно часто. Она написана профессорами MIT — Харольдом Абельсоном и Джеральдом Сассманом — и одно время служила учебником для начинающих программистов на диалекте LISP (сегодня в вузе используют Python).
Несмотря на то что первое издание книги было выпущено в далеком 1985 году, изложенные в ней базовые принципы до сих пор остаются актуальными — такие как абстракция данных, метаязыковая абстракция, рекурсия. С другой стороны, некоторые подразделы безвозвратно устарели. К ним стоит относиться как к исторической справке и обращаться исключительно для общего развития.
Книгу можно скачать бесплатно — текст второго издания распространяют по лицензии Creative Commons.
В этом контексте стоит отметить еще одну книгу от издательства MIT Press — «Concepts, Techniques, and Models of Computer Programming». Она раскрывает ключевые концепции программирования, техники и парадигмы, необходимые начинающему разработчику. Материал используют и дополняют многие курсы и лекции профессоров технологического института.
The Mythical Man-Month
Эта работа Фредерика Брукса, пожалуй, наиболее известная рекомендация в нашей сегодняшней подборке. The Mythical Man-Month — это сборник эссе о проблемах разработки масштабных программных проектов. В отличие от предыдущих материалов, автор концентрируется не на практических, а управленческих навыках. Одна из ключевых идей автора — привлечение новых людей на поздних этапах разработки лишь отодвигает сроки сдачи проекта.
Книга ориентирована на продакт-менеджеров и других управленцев в сфере ИТ, однако полезные знания могут почерпнуть и рядовые разработчики — особенно в вопросах планирования и управления собственным временем.
Расскажите нам о книгах, которые помогли вам стать лучшей версией себя и прокачаться как разработчику программного обеспечения. Давайте обсудим эти материалы в комментариях.
Свежие материалы в нашем блоге на Хабре:
Комментарии (10)
GospodinKolhoznik
04.09.2022 21:54+1Очень одобряю SICP. Как мне кажется просто лучшая книга всех времен. После нее реально приходит понимание и ощущение как надо и как не надо писать код. А вот после Дяди Боба вроде как остаются теоретические знания, но как их воплощать на практике не совсем понятно.
Rigidus
04.09.2022 23:04+2Надо добавить к этому что-то что можно читать "после SICP". HTDP или Reasoned Schemer, хотелось бы еще больше примеров подобных книг
lolipoka
04.09.2022 22:42+1Боб Мартин - это такой добрый сказочник, и его основная заслуга в том, что он популяризует TTD и чистый код, хотя делает это менее основательно, чем тот же Макконнелл. Если прочитать "Совершенный код" Макконнелла, то "Чистый код" Мартина уже читать смысла нет.
Uris
05.09.2022 05:31В своё время начал читать Хабр, через личку приставал с разными вопросами к юзерам, потом совместно запили пару проектов и — полетели.
Bone
05.09.2022 10:28А можете посоветовать что-нибудь не из классики? Что-то вроде лучшие книги по программированию 2020-2022.
GospodinKolhoznik
05.09.2022 21:30How to Design Programs, которую посоветовал @Rigidus2018 года - свежая. Ну и базовые концепции очень долго не устаревают, это вам не фреймворки.
lohabr
05.09.2022 16:18чего-то первая книга прям дежявюкнуло В.Ф.Очков "128 советов начинающему программисту" (псевдокод):
powerman
Классика? Да. Для начинающих? Вряд ли.
Для начинающих полезнее Clean* книжки дяди Боба. При всей спорности некоторых моментов и необходимости иногда что-то нарушать - они дают хорошую стартовую точку и базу как раз для начинающих, у которых ещё нет своего понимания как правильно, почему именно так, и в каких ситуациях это применимо а в каких нет. Без этого понимания пусть лучше пишут как рекомендовано в этих книжках - при всех недостатках этих книг средний результат будет на порядок лучше, чем без них.
Code Complete будет полезна тем, кто уже довольно глубоко "в теме". Т.е. минимальный уровень читателя (чтобы время потраченное на эти 960 страниц было потрачено не зря) - сениор или тимлид.
Брукса тоже мало смысла читать джунам - от них никто не ждёт умения корректно оценивать задачи, и не этому им нужно учиться в первую очередь.
sovaz1997
lolipoka
Code Complete начинающим я бы всё же советовал. Не обязательно иметь полный контекст в голове на момент чтения. Я начинал на платформе 1С, там разработчик имеет дело только с проприетарным ООП и сам имеет мало возможностей использовать эту парадигму, и многие вещи из Макконнелла мне были непонятны, но то, что всё же было понятно, повлияло самым положительным образом, потому что большая часть универсальна для любого процедурного кода. Потом, когда уже поработал на Java, многие ранее непонятые вещи, касающиеся ООП, стали понятными. Хотя это уже больше касается "Рефакторинга" Мартина Фаулера.
Всю книгу Макконнелла прочитал взахлёб. Самое сложное - первые главы, где он говорит об архитектуре, остальное более прикладное, более понятное для новичка.
Брукса имеет смысл читать больше для создания контекста. Он не устарел, мало что изменилось, т.к. он описывает, по большому счёту, не технические проблемы. То же самое, по сути, касается, того же Эдсгера Дейкстры. Мне его статьи очень зашли, это в любом случае некая отправная точка для дальнейшего развития.