Это вопрос, который я часто получаю, особенно от коллег или друзей, которые только начинают свой путь в качестве мастера по разработке программного обеспечения.
Какую книгу мне следует прочитать, чтобы стать лучшим разработчиком? Нужно ли мне читать книги?
Я думаю, что это отличный вопрос, и я задавал его многим своим наставникам, когда становился инженером-программистом. Проблема заключалась в том, что многие люди предлагали разные книги на разные темы. Все книги, которые они предложили, были хороши сами по себе, но никто не смог дать мне список, который был бы ОСНОВНЫМИ книгами, ДОЛЖЕН ПРОЧИТАТЬ, который обязательно должен прочитать любой инженер, надеющийся стать отличным.
Что ж, я многому научился у своих наставников и понял, что мне еще предстоит многому научиться с помощью множества разных книг, которые мне предложили. Я решил разработать программу чтения одной книги в месяц по моей специальности (разработка программного обеспечения). За прошедшие годы я составил список, который, как мне кажется, ДОЛЖЕН ПРОЧИТАТЬ для всех, кто хочет стать разработчиком высшего уровня.
Теперь позвольте мне заявить об очевидном - простое чтение всех этих книг в списке не сделает вас отличным разработчиком. Это потребует многолетнего опыта и применения принципов, изложенных в этих книгах, на практике и развития ваших навыков решения проблем в реальном мире.
Однако чтение этих книг поможет вам избежать основных ошибок и ошибок, которые многие разработчики допускают в начале своей карьеры. Я хотел бы, чтобы кто-нибудь рассказал мне об этих книгах, которые только начинаются, но мне посчастливилось найти и прочитать их за эти годы. Возможно, вы читали некоторые из этих книг в колледже на уроках информатики или инженерии. Может быть, в то время вы не думали, что они важны, но я могу сказать из первых рук, что я использовал и применял многие принципы из каждой из этих книг.
Позвольте мне также отметить, что это не исчерпывающий список. Каждый год выходит много хороших книг. Это как раз те, которые оказали наибольшее влияние на меня и мою карьеру. Кроме того, они в основном не зависят от языка и могут применяться с использованием любого из множества языков программного обеспечения. (Я сделаю еще один пост с лучшими книгами, ориентированными на определенные технологические платформы и стеки)
Что ж, тогда перейдем к делу! (барабанная дробь, пожалуйста)
СПИСОК
(Все это очень важно, но я расположил их в порядке убывания того, какие из них оказали на меня наибольшее влияние. Я также предоставил ссылку (нажмите на название книги), где вы можете купить книгу на Amazon, если заинтересованы. Прочтите обзоры и решайте сами!)
12. ЭФФЕКТИВНАЯ РАБОТА С УСТАРЕВШИМ КОДОМ
Мне нравится эта книга, потому что почти каждый разработчик программного обеспечения на каком-то этапе своей карьеры должен поддерживать устаревшую систему и работать с ней. В этой книге Майкл Фезерс предлагает комплексные стратегии для более эффективной работы с большими непроверенными базами устаревшего кода. В этой книге использован материал, созданный Майклом для его знаменитых семинаров Object Mentor: методы, которые Майкл использовал в наставничестве, чтобы помочь сотням разработчиков, технических менеджеров и тестировщиков взять под контроль свои унаследованные системы.
Эта книга - классическая, но недавно отредактированная и исправленная. Удивительно, насколько актуальна эта книга для разработки программных продуктов. Если вы занимаетесь программным обеспечением, эту книгу просто необходимо прочитать. Я считаю, что самая ценная часть книги - это глава о прототипе, которую нужно выбросить. Хотя цель всегда состоит в том, чтобы сделать что-то большее, лучшее и быстрое, это почти аксиома, что вы БУДЕТЕ построить что-то, что нужно отбросить и переработать. Такое происходит каждый раз, могу сказать по собственному опыту. Следовательно, жизненно важно спланировать выброс, чтобы вы могли перенести своих пользователей на все, что последует. Если вам снится, что первым продуктом является ЕДИНЫЙ, вы рискуете отказаться от них в пользу продукта, который неизбежно будет развиваться. Планирование выбрасывания также помогает достичь поставленных целей, устанавливая разумные ориентиры, которые могут быть достигнуты.
Если вы планируете стать архитектором или проектировщиком системы, вам, скорее всего, потребуется прочитать эту книгу. Эта книга, названная одной из величайших когда-либо написанных книг по разработке программного обеспечения, детально описывает множество различных шаблонов проектирования, которые были разработаны на протяжении многих лет, чтобы помочь разработчикам программного обеспечения избегать и решать общие проблемы, с которыми сталкивается отрасль. Следование стратегиям, описанным в этой книге, позволит вам создавать более качественное, гибкое и удобное в обслуживании программное обеспечение. Эта книга также носит название «Банда четырех» в группах разработчиков программного обеспечения из-за ее знаменитых четырех авторов, которые составили эту книгу.
9. ПРОГРАММИРОВАНИЕ ЖЕМЧУЖИНЫ (2-е ИЗДАНИЕ)
Эта книга немного отличается от других книг в списке. Я бы сказал, что эта книга помогает человеку «мыслить как программист». Programming Pearls - это сборник из 15 колонок, ранее опубликованных в Коммуникациях ACM. Столбцы охватывают широкий спектр тем, связанных с программированием: от сбора требований до настройки производительности. Основное внимание уделяется методам и алгоритмам кодирования.
Каждая колонка преобразована в главу. Главы обычно начинаются с изложения практической проблемы. Затем представлены различные решения, которые используются как уроки, которые необходимо извлечь. Стиль письма ясный и веселый.
Programming Pearls - это не обычная книга, обучающая новым концепциям программирования. Несмотря на то, что в ней содержатся хорошие, а иногда и совершенно новые идеи, цель книги не в том, чтобы научить чему-то новому, а в том, чтобы помочь вам лучше решать проблемы.
8. КОД: СКРЫТЫЙ ЯЗЫК КОМПЬЮТЕРНОГО ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Эта книга прояснила многое из «Магии», связанной с созданием и разработкой сложных систем. В наши дни существует так много абстракций, что подробности низкого уровня иногда неизвестны разработчику. Хотя вы, возможно, не обнаружите, что используете эту книгу 24/7 на практике ... Я считаю, что неплохо иметь представление о том, на чем вы строите и как работает вся оркестровка. Это может пригодиться, когда вам нужно открыть этот «черный ящик» и глубоко погрузиться в программное или аппаратное обеспечение, чтобы исправить досадную ошибку. «КОД: скрытый язык компьютерного оборудования и программного обеспечения» Чарльза Петцольда рассматривает ряд концепций программирования, начиная с систем счисления - десятичных, восьмеричных, двоичных и заканчивая языками высокого уровня. В книге объясняются протоколы пакетной связи и TCP. Многие главы посвящены концепциям оборудования, а пять глав посвящены программному обеспечению и рассказывают об операционной системе, арифметике с плавающей запятой и графическом интерфейсе пользователя.
7. ИСКУССТВО КОМПЬЮТЕРНОГО ПРОГРАММИРОВАНИЯ
Это еще одна классика. Это было написано известным компьютерным ученым профессором Дональдом Кнутом и высоко оценено многими ведущими программистами отрасли. Цитируется даже Билл Гейтс, говорящий
«Если вы думаете, что вы действительно хороший программист… прочтите [Knuth's] Art of Computer Programming… Вам непременно следует прислать мне резюме, если вы можете прочитать все».
Книга начинается с основных концепций и методов программирования, а затем уделяется особое внимание информационным структурам - представлению информации внутри компьютера, структурным отношениям между элементами данных и способам эффективного обращения с ними. Элементарные приложения относятся к моделированию, численным методам, символьным вычислениям, программному обеспечению и проектированию систем.
«Рефакторинг» Мартина Фаулера направлен на улучшение дизайна существующего кода. Это процесс изменения программной системы таким образом, чтобы он не изменял внешнее поведение кода, но улучшал его внутреннюю структуру. С помощью рефакторинга вы даже можете превратить плохой дизайн в хороший. В этой книге подробно обсуждаются принципы рефакторинга, в том числе где искать возможности для рефакторинга и как настроить необходимые тесты. Также имеется каталог из более чем 40 проверенных рефакторингов с подробностями о том, когда и зачем использовать рефакторинг, пошаговыми инструкциями по его реализации и примером, показывающим, как он работает. Книга написана с использованием Java в качестве основного языка, но идеи применимы к любому объектно-ориентированному языку.
«Чистый код», написанный Робертом Мартином, разделен на три части. Первый описывает принципы, шаблоны и методы написания чистого кода. Вторая часть состоит из нескольких тематических исследований возрастающей сложности. Каждый пример представляет собой упражнение по очистке кода - по преобразованию кодовой базы, в которой есть некоторые проблемы, в надежную и эффективную. Третья часть - результат: одна глава, содержащая список эвристик и «запахов», собранных при создании тематических исследований. Результатом является база знаний, описывающая то, как мы думаем, когда пишем, читаем и очищаем код.
Это должна быть единственная лучшая книга для понимания и использования алгоритмов (которыми вы будете много заниматься при разработке программного обеспечения). Некоторые книги по алгоритмам строгие, но неполные; другие покрывают массу материала, но не имеют строгости. Введение в алгоритмы уникальным образом сочетает в себе строгость и полноту. Книга подробно описывает широкий спектр алгоритмов, но делает их разработку и анализ доступными для всех уровней читателей. Каждая глава относительно автономна и может использоваться как единица изучения. Алгоритмы описаны на английском языке в псевдокоде, предназначенном для чтения любым, кто хоть немного программировал. Объяснения оставлены элементарными, без ущерба для глубины охвата или математической строгости. Первое издание стало широко используемым текстом в университетах по всему миру, а также стандартным справочником для профессионалов. Во второе издание вошли новые главы, посвященные роли алгоритмов, вероятностному анализу и рандомизированным алгоритмам, а также линейному программированию.
3. СТРУКТУРА И ИНТЕРПРЕТАЦИЯ КОМПЬЮТЕРНЫХ ПРОГРАММ
Благодаря аналитическому и строгому подходу к решению проблем и методам программирования, эта книга ориентирована на инженерное дело. Структура и интерпретация компьютерных программ подчеркивает центральную роль, которую играют различные подходы к работе со временем в вычислительных моделях. Его уникальный подход делает его подходящим для введения в курсы информатики, а также языков программирования и разработки программ. В книге также объясняются четыре наиболее известные парадигмы языков программирования - императивное, объектно-ориентированное, логическое и прикладное программирование.
2. ПРАГМАТИЧЕСКИЙ ПРОГРАММАТОР
Это была одна из первых книг по программированию, которые я прочитал. Мой друг порекомендовал мне его на моей первой профессиональной работе. Я рада, что он это сделал. Хотя книга была написана в 1999 году (я полагаю), концепции являются основой того, как мы разрабатываем сложную систему на практике. Программисты - это люди, обученные использованию определенного набора инструментов (редакторы, менеджеры объектов, трекеры версий) для создания определенного вида продукта (программ), который будет работать в некоторой среде (операционные системы на сборках оборудования). Как и любое другое ремесло, компьютерное программирование породило массу мудрых знаний, большую часть которой не преподают в университетах или в сертификационных классах. Большинство программистов со временем приходят к так называемым уловкам торговли путем независимых экспериментов. В книге Прагматичный программист Эндрю Хант и Дэвид Томас систематизируют многие истины, которые они открыли во время своей карьеры в качестве разработчиков программного обеспечения и авторов кода.
Некоторые авторские самородки прагматизма конкретны, и путь к их реализации ясен. Они советуют читателям выучить, например, один текстовый редактор и использовать его для всего. Они также рекомендуют использовать программное обеспечение для отслеживания версий даже для самых маленьких проектов и продвигают преимущества изучения синтаксиса регулярных выражений и языка обработки текста. Другой (возможно, более ценный) совет в книге более беззаботный. В разделе отладки отмечается, что «если вы видите отпечатки копыт, думайте о лошадях, а не о зебрах». То есть подозревать все, но начинать искать проблемы на самых видных местах. Есть рекомендации по оценке времени и затрат, а также по интеграции тестирования в процесс разработки. Вам понадобится копия Прагматичного программиста по двум причинам: он отображает вашу собственную накопленную мудрость более четко, чем вы когда-либо удосуживались изложить, и он знакомит вас с методами работы, которые вы еще не можете считали.
И вот оно! Книга номер один (ИМХО), которую стоит прочитать, если вы собираетесь стать отличным инженером-программистом. Оригинальная книга Стива МакКоннелла CODE COMPLETE, широко считающаяся одним из лучших практических руководств по программированию, уже более десяти лет помогает разработчикам писать более качественное программное обеспечение. Теперь эта классическая книга была полностью обновлена и отредактирована с учетом передовых методов и сотен новых примеров кода, иллюстрирующих искусство и науку конструирования программного обеспечения. Обладая совокупностью знаний, полученных в результате исследований, академических кругов и повседневной коммерческой практики, МакКоннелл синтезирует наиболее эффективные методы и принципы, которые необходимо знать, в четкое и прагматичное руководство. Независимо от вашего уровня опыта, среды разработки или размера проекта, эта книга будет информировать и стимулировать ваше мышление - и поможет вам создать код высочайшего качества.
Откройте для себя вечные техники и стратегии, которые помогут вам:
- Дизайн для минимальной сложности и максимального творчества
- Воспользуйтесь преимуществами совместной разработки
- Применяйте защитные методы программирования, чтобы уменьшить количество ошибок и избавиться от них.
- Используйте возможности для рефакторинга или развития кода и делайте это безопасно
- Используйте методы строительства, которые подходят для вашего проекта
- Отлаживайте проблемы быстро и эффективно
- Своевременное и правильное решение критических проблем строительства
- Обеспечьте качество в начале, середине и конце вашего проекта
Ну вот и все!
Сообщите мне в комментариях, читали ли вы что-либо из этого или имеете какие-либо другие материалы, которые необходимо прочитать разработчикам программного обеспечения!
Если вам понравился этот пост, самый большой комплимент, который вы могли бы сделать, - это поделиться им с тем, кому, по вашему мнению, он понравится!
Кроме того, если вы никогда не хотите пропустить сообщение, подпишитесь на этот блог, нажав кнопку подписки в правом нижнем углу! Спасибо за чтение, удачного дня и никогда не переставай учиться!