IT-классика: Пять книг, которые стоит прочесть программисту
Несмотря на то, что в IT все меняется очень быстро, в отрасли есть литература, которая считается обязательной к прочтению. Мы опросили экспертов Газпромбанка, какие книги, по их мнению, входят в «классический набор» программиста.
Дональд Кнут — «Искусство программирования»
Про эту книгу Билл Гейтс сказал: «Если вы думаете, что вы хороший программист... прочтите книгу «Искусство программирования». И, пожалуйста, пришлите свое резюме если вы сумете дочитать ее до конца». Глобальный труд по теме computer science, состоящий в настоящее время из четырех томов (4 том делится на части A и B), к публикации готовится часть 4C. Книга была признана одной из 12 лучших физико-математических монографий столетия.
Первый том является введением в основные алгоритмы и структуры данных, описывает базовые понятия и методы программирования. Вторая книга посвящена введению в получисленные алгоритмы. В книге даны основы теории получисленных алгоритмов, а также примеры этих алгоритмов. В третьем томе автор предлагает обзор классических алгоритмов сортировки и поиска. Этот материал дополняет изложенную в первой части информацию о структурах данных. Четвертый том — комбинаторный, включает около 1500 упражнений с ответами для самостоятельной работы.
Чем будет полезна: Дает хорошую базу по алгоритмам и программированию, но понадобится хорошая математическая подготовка, без этого осилить труд вряд ли удастся. Поможет приблизиться к совершенству и признать программирование творчеством, а себя – творцом.
«Процесс подготовки программ для цифрового компьютера – это очень увлекательное занятие. И дело не только в том, что оно оправдывает себя с экономической и научной точек зрения; оно может вызвать также эстетические переживания, подобные тем, которые испытывают творческие личности при написании музыки или стихов».
Роберт С. Мартин — «Чистый код: Создание, анализ и рефакторинг»
Эта книга есть в каждом списке рекомендуемых книг для разработчиков ПО. Можно назвать ее священной книгой для программистов. Автор объясняет, как отличить чистый код от плохого, и учит, как преобразовать его в хороший. Роберт Мартин, известный в сообществе как «дядюшка Боб», занимается разработкой ПО с 1970 года, а в начале девяностых стал международным консультантом в этой области. Один из создателей гибкой методологии разработки на базе экстремального программирования.
Книга состоит из трех частей. Первая знакомит с принципами, паттернами и приемами написания чистого кода. Следующий этап — практические сценарии с нарастающей сложностью: упражнения по чистке кода или преобразованию проблемного кода в менее проблемный. Третья часть — набор эвристических правил и «запахов кода», собранных во время анализа после выпуска программы.
Для чего читать: в самой первой главе говорится: «Единственная надежная метрика качества кода — количество «чертей» в минуту», это означает, что качество определяется тем, сколько ошибок в нем обнаружилось после запуска. Книга поможет понять принципы написания действительно качественного кода и сделать и х привычками.
Умение писать чистый код – тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть. Необходимо пытаться и терпеть неудачи. Необходимо наблюдать за тем, как другие пытаются и терпят неудачи. Необходимо видеть, как они спотыкаются и возвращаются к началу; как мучительно принимают решения и какую цену приходится платить за неверный выбор.
Нельзя не порекомендовать еще две книги этого же автора: «Идеальный программист» и «Чистая архитектура. Искусство разработки программного обеспечения». Первая содержит практические советы в отношении всех аспектов программирования, начиная от того, как выстраивать рабочий процесс и общаться с заказчиками. Во второй разбираются принципы, ключевые вопросы архитектуры и дизайна. Ее стоит прочесть не только архитекторам, но и разработчикам всех уровней.
Г. Лакман Макдауэлл — «Карьера программиста»
Cracking the Coding Interview, это практическое пособие для подготовки к техническому интервью. В настоящий момент доступно уже 6-е издание книги, которая занимает пятое место в списке бестселлеров Amazon в разделе Computer Technologies и первое место в разделе Software Development.
Основную часть книги составляют технические вопросы и задания, которые обычно получают соискатели на собеседовании в таких компаниях, как Google, Microsoft, Apple, Amazon. В 6-м издании содержится 189 вопросов, начиная от основ и заканчивая сложнейшими задачами по алгоритмам. Здесь также приводятся пять стратегий, которые позволят решить задачи, с которыми до этого не приходилось сталкиваться.
Для чего читать: поможет подготовиться к собеседованию и в качестве кандидата, и в качестве интервьюера. Будет полезна, когда нужно быстро освежить в памяти определенные темы.
И помните: собеседование будет сложным! В свое время (в период моей работы в Google) я видела многих интервьюеров, одни из них задавали «легкие» вопросы, а другие — «сложные». И знаете что? Простые вопросы вовсе не означали, что кандидату будет проще получить работу. Главное — не безупречные ответы на вопросы (такое бывает очень редко!). Главное, чтобы ваш ответ был лучше, чем у других кандидатов. И не паникуйте, если вам достался сложный вопрос, — те, кто его задают, знают, что вопрос сложен и не ждут от вас идеального ответа.
Стив Макконнелл — «Совершенный код»
Одна из основополагающих книг по разработке программного обеспечения. На более чем 900 страницах автор охватывает множество тем и дает отличный обзор методов разработки программного обеспечения. Некоторые инженеры, говорят, что выбрали эту книгу если бы им пришлось назвать ту, которая оказала на них наибольшее влияние.
Для чего читать: в книге простым и понятным языком рассказывается о полном процессе разработки ПО, с учетом всех нюансов, которые можно узнать, только посвятив программированию десятилетия. Будет полезна для начинающих программистов, так как материал изложен максимально подробно и доступно. Опытным разработчикам пригодится в качестве справочника. Книга поможет писать более качественный софт за меньшее время. Примеры написаны на нескольких языках.
Моей главной целью при написании этой книги было сокращение разрыва между знаниями гуру и лучших специалистов отрасли, с одной стороны, и общепринятыми методиками разработки коммерческого ПО – с другой. Многие эффективные методики программирования годами скрываются в журналах и научных работах, прежде чем становятся доступными программистской общественности.
Мартин Фаулер — «Рефакторинг кода на JavaScript: улучшение проекта существующего кода»
Еще одна классическая книга, которая научит улучшать код с помощью незначительных изменений — рефакторинга. Книга имеет практическую ценность, в ней есть каталог признаков «кода с душком», каталог рефакторингов (более 70 методов), и описание принципа работы системы модульного тестирования JUnit. Рассмотренные в книге методы позволяют поэтапно модифицировать код, внося каждый раз небольшие изменения, благодаря чему снижаются риски при работе с проектом.
Зачем читать: очень подробно разложена технология рефакторинга, которая поможет найти возможности для оптимизации и превратить плохой проект в хороший. Изложенные в книге принципы применимы к любому объектно-ориентированному языку программирования.
«Улучшение кода после его написания» — непривычная фигура речи. В нашем сегодняшнем понимании разработки программного обеспечения мы сначала создаем дизайн системы, а потом пишем код. Сначала создается хороший дизайн, а потом происходит кодирование. Со временем код модифицируется, а целостность системы, соответствие ее структуры изначально созданному дизайну постепенно ухудшаются. Код медленно сползает от проектирования к хакерству. Рефакторинг представляет собой противоположную практику. С ее помощью можно взять плохой проект, даже хаотический и переделать его в хорошо спроектированный код.
А какие книги, на ваш взгляд, должны быть в must read в списке программиста? На какие новинки стоит обратить внимание?