Топ-10 книг для разработчика

Original author: Simon Holdorf
  • Translation

Совершенствоваться в сфере разработки — это не только писать хороший код, но и читать о том, как его писать.




Привет, хабр! Продолжаю делиться полезными подборками. Совсем недавно я опубликовал 2 поста с перечнем Github репозиториев: Часть1 и Часть2. На этот раз предлагаю вашему вниманию подборку полезных книг для разработчиков. Кому интересно — добро пожаловать под кат.

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

Найти отличные книги для разработки программного обеспечения — непростая задача, так как экосистема меняется настолько быстро, что многие вещи устаревают в короткие сроки. Особенно это касается тех книг, в которых описана определенная версия языка программирования.
Тем не менее, существуют “вечные” книги: они посвящены мета-темам, шаблонам проектирования или общим представлениям.

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

1. Cracking the Coding Interview или Карьера программиста



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

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

2. Code Complete или Совершенный код



Эта книга Стива Макконнелл — одна из тех книг, которую каждый программист, скорее всего, листал хотя бы раз в жизни.

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

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

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

3. Clean Code или Чистый код



Книга Роберта Мартина (или дяди Боба) “Чистый код” — одна из самых популярных книг по программированию. Она была написана для обучения инженеров-программистов принципам написания чистого программного кода. Книга содержит множество примеров, показывающих, как выполнять рефакторинг кода с целью сделать его более читабельным и поддерживаемым. Но учитывайте то, что издание ориентировано именно на Java. Хотя некоторые из шаблонов и техник распространяются на общее программирование и на другие языки, основной аудиторией книги являются Java-разработчики.

Следует также отметить, что книга вышла в 2008 году. Некоторая информация, например, форматирование кода, сегодня менее актуальна из-за доступных инструментов и IDE сред. Но все же, это отличная книга.

4. Refactoring или Улучшение проекта существующего кода



Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:

  • Зачем мне рефакторинг моего кода?
  • Как я могу распознать код, который нуждается в рефакторинге?
  • Как я могу успешно провести рефакторинг своего кода?

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

5. Head First Design Patterns или Паттерны проектирования



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

Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.

6. Patterns of Enterprise Application Architecture или Шаблоны корпоративных приложений



Еще одна отличная книга Мартина Фаулера, посвященная разработке корпоративных приложений. После краткого руководства Мартин предлагает вам более 40 шаблонов в качестве решения распространенных проблем при разработке корпоративных приложений. В книге вы найдете большое количество UML визуализаций и примеров кода, написанных на Java или C#.

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

Однако, книга довольно старая, поэтому современные концепции, например REST, cloud или JSON, не упоминаются. Это хороший материал для изучения, но все же будьте к нему критичны.

7. Working Effectively with Legacy Code или Эффективная работа с унаследованным кодом



В книге автор предлагает стратегии для работы с большими, непокрытыми тестами базами legacy-кода. Вы можете подумать: “На дворе 2020 год. Legacy-код больше не проблема, ведь у нас есть чистый, поддерживаемый код и микросервисы.” Позвольте мне заверить вас, что это ошибочное представление. Legacy-код по-прежнему является одной из самых сложных проблем для многих компаний.

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

В книге приведены примеры, написанные на Java, C ++, C и C #, а также в ней есть советы по работе с legacy-кодом, который не относится к объектно-ориентированному.

8. The Clean Coder или Идеальный программист



Еще одна книга дядюшки Боба, которая учит методам, практикам и инструментам настоящего мастерства в области программного обеспечения. Она содержит практические советы по оценке проектов, написанию кода, рефакторингу и тестированию.

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

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

Поэтому я советую прочесть эту книгу внимательно и с долей критики.

9. Introduction to Algorithms или Алгоритмы: построение и анализ



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

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

10. The Pragmatic Programmer или Программист-прагматик



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

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

Прочитав книгу, вы поймете, что такое непрерывное обучение и насколько оно важно; изучите, как писать гибкий, адаптируемый и динамический код, как решать проблемы конкурентности, как стоять на страже безопасности, как тестировать “безжалостно и эффективно”, и многое другое.

Если бы я должен был выбрать только одну книгу, которую вам посоветовать, я бы выбрал именно эту!

Заключение


Это был список одних из самых популярных книг для разработчиков. Лучшая из списка, на мой взгляд, — “Программист-прагматик” Э.Ханта и Д.Томаса. Книги Роберта С. Мартина востребованы и нравятся многим разработчикам, но я бы посоветовал быть критичным при их чтении, так как я не согласен с дядей Бобом во многих вопросах.

Наверняка, многие из этих книг вы уже читали или хотя бы держали их в руках, или хотя бы видели на просторах интернета. Как выразился автор статьи, это “вечные” книги, которые посвящены основам. Если у вас есть чем дополнить список — делитесь в комментах, думаю, всем будет полезно.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 40

  • UFO just landed and posted this here
      –2

      Ну и без K&R список выглядит маркетинговым нежели рабочим.

        +1
        Угу. Читал GoF и читал две книги из серии Head First (по java и android правда, а не по паттернам). Head First дико много воды содержит, из за чего читать их больно.
          +1
          Ну для того, чтобы быстро разобраться с основами — книга из серии Head First вполне себе сойдёт, она читается быстро, и задания интересные. После Head First легче читать что-то более сложное по этой теме.
          0
          недавно купил обе.
            –1

            Странно слышать, на мой взгляд книга GoF по качеству изложения мягко говоря так себе, и альтернативные варианты (в том числе и рекомендуемый Head First) заметно лучше.


            На мой взгляд не хватает еще архитектурно-инфраструктурных паттернов в списке, мне нравится документация Microsoft по ним: https://docs.microsoft.com/en-us/azure/architecture/patterns/

            +3
            Ни добавить, ни убавить, отличный выбор книг. Может быть, еще одну по DDD и одну по процессам разработки ПО еще бы порекомендовал, а так — чудесный список
              0
              Порекомендуйте по DDD, будьте любезны.
                0
                Извините, что вклиниваюсь) Вообще DDD это конечно Вернон и Эванс обе хороши, но Вернон мне больше понравился, у него есть еще вторая книга правда я до нее никак добраться не могу.

                Из приближенного к DDD очень понравилась книга Скотта Влашина Domain Modeling Made Functional, но она специфична для .NET и F# в частности
                  +1
                  Сначала DDD Distilled, потом все остальное, иначе рискуете убежать в ужасе в туман.
                    0
                    От Эванса уже убегал однажды.
                +3
                А где книги о том как надо общаться с людьми?
                А то слишком много 22-летних тявкающих лидов встречаю нынче. Их даже слушать невозможно.
                  0
                  Clean Coder как раз об этом книжка.
                    +1

                    Этому учат мама с папой, а вот программирование изучают самостоятельно.


                    Отличная подборка!

                      0
                      Soft Skills: The software developer's life manual?

                      Сам её ещё не успел прочитать, если честно.
                      +2
                      Ну вообще, считать книгу о паттернах обязательной — это перебор. Это означает, что автор считает ООП единственной парадигмой, в которой все живут — что в общем не так. Есть мир функционального программирования, где паттерны слегка так другие, есть также и такие вещи, как EIP, с которыми работают люди занимающиеся «интеграцией» — короче, есть много других паттернов, которые в оригинальных книгах GoF не рассмотрены, но конкретным людям могут быть намного более полезны.
                        +2

                        Нужно просто добавить книги по функциональщине (и заодно по соответствующему матану).

                          +1
                          Не, ну скорее я бы просто не называл это все «обязательно к прочтению». Все-таки разные специализации — разные книги. Ну кстати, автор уже убрал это слово из заголовка, так что сейчас оно вполне соответствует. Ну, такой авторский выбор, вполне ничего себе.

                          А добавить — да, конечно бы неплохо.
                            0
                            Кроме функциональщины и ООП есть и другие парадигмы
                              0
                              Я когда написал EIP — имел в виду именно другие. Ну то есть да, их больше двух.
                              +1
                              А что-нибудь достойное по функциональщине можете посоветовать?
                            0

                            Авторы книг об ООП тоже не всегда в восторге от GoF. Один, помню, подсчитал, что из 23 паттернов GoF лишь штук 6 относятся о ООП дизайну, а все остальное нужно для того, чтобы решать конкретные задачи конкретных языков. В этом смысле я бы тоже не соотносил GoF непосредственно с ООП.

                              0
                              >В этом смысле я бы тоже не соотносил GoF непосредственно с ООП.
                              Ну, все-таки большая часть паттернов oF, особенно широко известных — это про классы. То есть не то чтобы оно прямо про ООП, а скорее в другом окружении оно имеет мало смысла. Например, в Java 8 с появлением лямбд ряд паттернов или выродился в полную тривиальщину и перестал быть нужен, или сильно видоизменился.
                              +2

                              sshikov, это означает, что автор просто придерживается парадигмы ООП. Если вы работаете по другому, то кто мешает создать СВОЙ список предпочтительного чтения?

                                0
                                А я разве говорю, что придерживаться ООП это плохо? Мне вообще список нравится, во всяком случае его бОльшая часть. Его не нужно переписывать — его стоит дополнять.

                                Это было небольшое уточнение к первоначальному заголовку, который выглядел как "… книг, обязательных к прочтению". Отсюда возникал вопрос — обязательных для кого? Если для всех — то с чего бы?

                                Такого уточнения в тексте я не увидел, поэтому и написал, что некоторые книги — не для всех. А сейчас-то заголовок уже исправлен, и этих слов там нет.
                                  0
                                  Ну всё же согласитесь, что знать ООП надо бы, поэтому книга по паттернам ООП не помешает в любом случае. Это для средне-сферического программиста в вакууме, который имеет дело с моделированием «обычной» предметной области, а не чего-то специализированного типа микроконтроллера или параллельных математических алгоритмов.
                                    0
                                    Не соглашусь. Во-первых, знать ООП и знать конкретно вот эти паттерны — не одно и тоже. Во-вторых, очень многие языки, как новые, так и уже старые, на сегодня включают значительную часть ФП парадигмы, и это на самом деле делает их очень удобными. Значительная часть ранее сложных паттернов в этих языках становится настолько простой и элегантной, что просто не нуждается в толстой книге для объяснения. Когда GoF писали, такого выбора языков как сейчас, еще не было. А сегодня — есть.

                                    Я не говорю, что такой путь, про который вы говорите, исключен. В конце концов, все люди разные.

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

                                    Я конкретно про GoF, если что. Я ее читал лет 15 назад. Не сказал бы, что мой код от этого стал сильно лучше.
                                      0
                                      Книга GoF мне самому не очень нравится, она мне кажется запредельно скучной и во многом действительно привязанной к конкретным языкам. Но понятие «паттерны ООП» объективно существует, и хорошо бы тогда найти альтернативную книжку. Более современную что ли, с меньшим количеством «хакерства» и с более концептуальным взглядом. Но я вот так сходу не назову.
                                      • UFO just landed and posted this here
                                          0
                                          Собственно, мой посыл изначально был о том, что не мешало бы книжек по «паттернам» в других парадигмах — это в первую очередь. Не ограничиваясь ООП. Хотя я не могу такие назвать с ходу, те что приходят в голову — слишком сложные, они не для всех, но уже по другим причинам. Ну типа Purely functional data structures от Chris Okasaki. Впрочем, вот наверное эту стоит: Types and Programming Languages, Benjamin C. Pierce.

                                          Во вторую — что именно книга GoF не самая лучшая, хотя и самая известная, и слегка устарела, скажем прямо. Ну и скучная — да, наверное потому что ближе к справочнику, чем к учебнику.
                                +2
                                Хорошая подборка

                                Наверное можно сюда включить и «Чистая архитектура» от дядюшки Боба.
                                  +1
                                  Cracking Coding Interview великая вешь. В русском варианте называется «Карьера программиста»
                                  Уже есть 7-е издаение от этого года. www.labirint.ru/books/534569
                                  Кроме того, у Gayle Laakmann McDowell много лекций на youtube. Воспринимать её на слух сначала несколько было тяжеловато — очень высокий голос, которым она сильно эмфазирует. Но потом привыкаешь. Реально умная и красивая женщина
                                    –1

                                    Я бы всё же вместо хакинга интервью рекомендовал "The Passionate Programmer: Creating a Remarkable Career in Software Development"(русский перевод "Программист-Фанатик", ох уж эти сочинители звучных названий переводам) Чеда Фаулера.
                                    Вместо тренировки интервью она предлагает взглянуть на карьеру, на возможные пути, на саму мысль что такое быть программистом. И, на мой вкус, ничуть не устарела, разве что названия языков можно позаменять на более актуальные, благо они только для примера приводятся и больше речь об универсальных принципах.

                                      +1
                                      По паттернам недавно нескучная ссылка пробегала refactoring.guru/ru/design-patterns/factory-method
                                        +2
                                        «Зеленая книга» (Cracking the coding interview) рассчитана больше на интернов и начинающих программистов. ИМХО сильно лучший вариант — Elements of Programming Interviews (есть вариант generic, есть Java, есть Python и еще какие-то языки).

                                        Кроме того, я бы упомянул Designing Data-Intensive Applications — она стала по сути библией современного бэкендера (по крайней мере в США).
                                          +1
                                          Заходил в статью не ожидая увидеть что-то интересное, но надеялся на комментарии — и не зря. Спасибо, особенно за Designing Data-Intensive Applications.
                                            0
                                            На русском почему то называется просто «Высоконагруженные приложения» если кому будет интересно. Сам если честно «от корки до корки» «ниасилил» (не потому что плохая, а потому что извечная проблема лени нехватки времени). Что могу сказать: написана доступно (но НЕ для начинающих). В книге нет «рецептов», да и вообще кода очень немного — в основном идет рассуждение о концепциях. В конце каждой главы приводится обширный библиографический список, что не может не радовать если решите углубиться в тему.
                                          0
                                          Действительно полезны большиснтву программистов только №9 и №10.
                                          №4 и №6 можно почитать если есть свободное время, чтобы умные слова подучить.
                                          №10 — если конкретно собрались в Гумазон какой-нибудь.
                                          Остальное вообще хз о чём и в чём может помочь.

                                          PS Малоструктурированые и противоречивые приходы дяди боба в одном ряду с Корменом и ко. капец как грустно видеть.
                                            +1

                                            За что же Вы так с тем же №7? Хорошая книга. Как и другие, в правильных пропорциях применения.

                                          Only users with full accounts can post comments. Log in, please.