10 лучших книг для программиста по версии Библиотеки


Оглавление (нажмите, чтобы открыть):

5 книг для начинающих программистов

Полезная подборка, чтобы разобраться в C++, JAVA, Python и узнать про код Грея.

Часто тем, кто всерьёз занимается олимпиадной информатикой, рекомендуют прочесть трёхтомник Дональда Кнута. Кстати, недавно вышел четвёртый том. Но всё же перед тем как взяться за Кнута, советую обратить внимание на книгу Роберта Седжвика «Фундаментальные алгоритмы C++. Анализ. Структуры данных. Сортировка. Поиск».

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

Герберт Шилдт — один из самых опытных авторов книг по изучению языков программирования. Если вы планируете изучать Java, стоит начать именно с этой книги. Шилдт пишет простым языком, последовательно и структурированно.

Время от времени встречаются вставки «вопрос – ответ» — своего рода лайфхаки, чтобы глубже понять прочитанный материал.

Приятным дополнением станут главы о Swing и JavaFX.

Книга подойдёт школьникам и студентам, которые изучают язык с нуля. Материал изложен кратко, без лишних рассуждений и мелких нюансов.Автор разбирает основные структуры данных, принципы объектно-ориентированного программирования и демонстрирует возможности стандартной библиотеки языка. Каждая тема снабжена большим количеством примеров кода.

Эту книгу можно описать так: просто и интересно. Автор рассказывает о программировании на «Пайтоне» понятно даже для младшего школьника. Самоучитель содержит живые примеры и забавные картинки. В конце книги обсуждается разработка двух несложных игр.

Эта удивительная книга построена всего лишь на одной известной задаче про Ханойские башни. Несмотря на это, она содержит главы и про битовую арифметику, и про код Грея. Все примеры приводятся на языке Pascal.

Автор онлайн-курса программирования на Python в Фоксфорде, волонтёр международных workshop для ACM

Автор онлайн-курса разработки игровых приложений под Android на языке JAVA в Фоксфорде, преподаватель в IT-школе Samsung

27 книг для программиста по версии Acronis

Представители компании Acronis, ведущего поставщика решений для резервного копирования, специально для пользователей GeekBrains подготовили список книг, полезных для разработчика. Здесь каждый сможет найти что-нибудь для общего развития, пополнения базовых и специализированных знаний. Программистам, которые в дальнейшем видят себя предпринимателями, будет интересна тематическая подборка от Сергея Белоусова, сооснователя Runa Capital и компаний Parallels и Acronis.

Гайдар Магдануров, Вице-президент компании Acronis:

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

Для того, чтобы «научиться писать», рекомендую одну из книг Роберта Седжвика про алгоритмы — у него есть несколько книг для С++ и для Java. К умению писать код, важно добавить навык «писать качественный код». Про написание качественного кода существует множество книг и блогов, я рекомендую книгу «Защищенный код». Она позволяет хорошо прочувствовать, что у программного кода, помимо достижения конкретной цели, есть еще и задачи быть надежным, безопасным, тестируемым, легко поддерживаемым.

Чтобы быть успешным программистом, востребованным на рынке труда, важно понимать, для чего и как создается программный код. Конечная цель — продукт, и достигается она работой большого количества людей: разработчиков, тестировщиков, архитекторов и менеджеров продукта. Люди, умеющие создавать продукты, а не только «ставить скобки и точки с запятыми», всегда в цене. Классические книги Брукса «Мифический человеко-месяц», Купера «Психбольница в руках пациентов» и Рейнвотера «Как пасти котов» весьма полезны к прочтению.

Весьма увлекательным и полезным чтением для разработчиком будут еще и книги Кристенсена «Дилемма инноватора» и «Showstopper!» Закери — с реальными примерами того, как известные компании создают и решают сложности во время разработки программных продуктов.

Базовые знания:

  • Алгоритмы на C++, Роберт Седжвик — Современное и исчерпывающее описание важных алгоритмов и структур данных на C++;
  • Алгоритмы на Java, Роберт Седжвик, Кевин Уэйн — Необходимый объем знаний для программиста в области алгоритмов на Java;
  • Защищенный код, Майкл Ховард, Дэвид Лебланк — Практические советы и рекомендации по защите создаваемых приложений на всех этапах процесса создания ПО.

Специализация по менеджменту:

Специализация по Product management:

Антон Енакиев, вице-президент Acronis по разработке:

Базовые знания:

  • Внутреннее устройство Microsoft Windows, Марк Руссинович, Дэвид Соломон — Руководство по внутреннему устройству и алгоритмам работы основных компонентов Windows;
  • Programming Applications for Microsoft Windows, Jeffrey Richter — Руководство по написанию приложений для Windows;
  • Программирование серверных приложений для Microsoft Windows 2000, Джеффри Рихтер, Джейсон Кларк — Руководство по созданию высокопроизводительных и надежных серверные приложения для Windows 2000;
  • Язык программирования С++, Бьерн Страуструп — Основы программирования на C++ от создателя C++;
  • Искусство программирования, Дональд Эрвин Кнут — «Библия программиста» в четырех томах.

Специализация по Windows (Specific for Windows kernel developers):

  • Windows NT File System Internals, Rajeev Nagar — Руководство по файловым системам на Windows NT;
  • Справочник по базовым функциям API Windows NT/2000, Гэри Неббет — О том, как писать приложения для Windows NT/2000;
  • Windows NT Device Driver Development, Peter G. Viscarola, W. Anthony Mason — Руководство по разработке драйверов на Windows NT;
  • Использование Microsoft Windows Driver Model, Уолтер Они — Все необходимое для понимания процесса написания драйверов;
  • Undocumented Windows NT, Prasad Dabak, Sandeep Phadke — О недосказанном в Windows NT.

Кирилл Коротаев, вице-президент Acronis по инжинирингу, Acronis Backup и Системам Хранения Данных:

Книги обязательные для прочтения системными программистами:

  • Что каждый программист должен знать о памяти, Ульрих Дреппер — Что нужно знать о hardware чтобы заниматься software;
  • Алгоритмы: построение и анализ, Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Все что нужно знать об алгоритмах;
  • Теория синтаксического анализа, перевода и компиляции (в 2-х томах), Ахо А., Ульман Дж. — Если вы хотите знать как работают компиляторы и что же на самом деле скрывается за регулярными выражениями.

Для общего развития:

  • Сила мгновенных решений, Малкольм Гладуэлл — Все что нужно знать о том, как работает мозг и что такое интуиция;
  • Outliers: The Story of Success, Malcolm Gladwell — Для понимания причин успехов и неудачи;
  • Серьезный разговор об ответственности. Что делать с обманутыми ожиданиями, нарушенными обещаниями и некорректным поведением, Кэрри Паттерсон, Джозеф Гренни — Эта книга поможет вам развить навыки, необходимые для выхода из сложных ситуаций;
  • Marketing High Technology, William H. Davidow — Книга о маркетинге высокотехнологичных продуктов;
  • Эмоциональный интеллект 2.0, Тревис Бредберри, Джин Гривз — Книга о развитии эмоционального интеллекта;
  • «Квантовая психология», Артур Уилсон — Об аналогиях и параллелях между психологией и физикой. А так же как научиться говорить так, чтобы устанавливать общий контекст и избегать недопонимания.

Для всего остального есть мы: профессия «Веб-разработчик».

Представители компании Acronis, ведущего поставщика решений для резервного копирования, специально для пользователей GeekBrains подготовили список книг, полезных для разработчика. Здесь каждый сможет найти что-нибудь для общего развития, пополнения базовых и специализированных знаний. Программистам, которые в дальнейшем видят себя предпринимателями, будет интересна тематическая подборка от Сергея Белоусова, сооснователя Runa Capital и компаний Parallels и Acronis.

Гайдар Магдануров, Вице-президент компании Acronis:

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

Для того, чтобы «научиться писать», рекомендую одну из книг Роберта Седжвика про алгоритмы — у него есть несколько книг для С++ и для Java. К умению писать код, важно добавить навык «писать качественный код». Про написание качественного кода существует множество книг и блогов, я рекомендую книгу «Защищенный код». Она позволяет хорошо прочувствовать, что у программного кода, помимо достижения конкретной цели, есть еще и задачи быть надежным, безопасным, тестируемым, легко поддерживаемым.

Чтобы быть успешным программистом, востребованным на рынке труда, важно понимать, для чего и как создается программный код. Конечная цель — продукт, и достигается она работой большого количества людей: разработчиков, тестировщиков, архитекторов и менеджеров продукта. Люди, умеющие создавать продукты, а не только «ставить скобки и точки с запятыми», всегда в цене. Классические книги Брукса «Мифический человеко-месяц», Купера «Психбольница в руках пациентов» и Рейнвотера «Как пасти котов» весьма полезны к прочтению.

Весьма увлекательным и полезным чтением для разработчиком будут еще и книги Кристенсена «Дилемма инноватора» и «Showstopper!» Закери — с реальными примерами того, как известные компании создают и решают сложности во время разработки программных продуктов.

Базовые знания:

  • Алгоритмы на C++, Роберт Седжвик — Современное и исчерпывающее описание важных алгоритмов и структур данных на C++;
  • Алгоритмы на Java, Роберт Седжвик, Кевин Уэйн — Необходимый объем знаний для программиста в области алгоритмов на Java;
  • Защищенный код, Майкл Ховард, Дэвид Лебланк — Практические советы и рекомендации по защите создаваемых приложений на всех этапах процесса создания ПО.

Специализация по менеджменту:

Специализация по Product management:

Антон Енакиев, вице-президент Acronis по разработке:

Базовые знания:

  • Внутреннее устройство Microsoft Windows, Марк Руссинович, Дэвид Соломон — Руководство по внутреннему устройству и алгоритмам работы основных компонентов Windows;
  • Programming Applications for Microsoft Windows, Jeffrey Richter — Руководство по написанию приложений для Windows;
  • Программирование серверных приложений для Microsoft Windows 2000, Джеффри Рихтер, Джейсон Кларк — Руководство по созданию высокопроизводительных и надежных серверные приложения для Windows 2000;
  • Язык программирования С++, Бьерн Страуструп — Основы программирования на C++ от создателя C++;
  • Искусство программирования, Дональд Эрвин Кнут — «Библия программиста» в четырех томах.

Специализация по Windows (Specific for Windows kernel developers):

  • Windows NT File System Internals, Rajeev Nagar — Руководство по файловым системам на Windows NT;
  • Справочник по базовым функциям API Windows NT/2000, Гэри Неббет — О том, как писать приложения для Windows NT/2000;
  • Windows NT Device Driver Development, Peter G. Viscarola, W. Anthony Mason — Руководство по разработке драйверов на Windows NT;
  • Использование Microsoft Windows Driver Model, Уолтер Они — Все необходимое для понимания процесса написания драйверов;
  • Undocumented Windows NT, Prasad Dabak, Sandeep Phadke — О недосказанном в Windows NT.

Кирилл Коротаев, вице-президент Acronis по инжинирингу, Acronis Backup и Системам Хранения Данных:

Книги обязательные для прочтения системными программистами:

  • Что каждый программист должен знать о памяти, Ульрих Дреппер — Что нужно знать о hardware чтобы заниматься software;
  • Алгоритмы: построение и анализ, Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Все что нужно знать об алгоритмах;
  • Теория синтаксического анализа, перевода и компиляции (в 2-х томах), Ахо А., Ульман Дж. — Если вы хотите знать как работают компиляторы и что же на самом деле скрывается за регулярными выражениями.

Для общего развития:

  • Сила мгновенных решений, Малкольм Гладуэлл — Все что нужно знать о том, как работает мозг и что такое интуиция;
  • Outliers: The Story of Success, Malcolm Gladwell — Для понимания причин успехов и неудачи;
  • Серьезный разговор об ответственности. Что делать с обманутыми ожиданиями, нарушенными обещаниями и некорректным поведением, Кэрри Паттерсон, Джозеф Гренни — Эта книга поможет вам развить навыки, необходимые для выхода из сложных ситуаций;
  • Marketing High Technology, William H. Davidow — Книга о маркетинге высокотехнологичных продуктов;
  • Эмоциональный интеллект 2.0, Тревис Бредберри, Джин Гривз — Книга о развитии эмоционального интеллекта;
  • «Квантовая психология», Артур Уилсон — Об аналогиях и параллелях между психологией и физикой. А так же как научиться говорить так, чтобы устанавливать общий контекст и избегать недопонимания.

Для всего остального есть мы: профессия «Веб-разработчик».

Мой ТОП-9 книг для программистов

И ни одного романа.

Уверена, что это не первая статья о книгах для программистов, которые вы читаете и ждете увидеть ниже обложки увесистых томов авторства Дональда Кнута, Стивена Макконелла, Роберта Мартина, Томаса Кормена и культовой «Книги четырех» («Паттерны проектирования»).

Чтобы прочесть подборку классики, которые IT-блогеры копипастят друг у друга требуется пару лет тяжелого интеллектуального труда. Если поставить себе цель крепко усвоить полученную информацию и внедрить в работу, а не поверхностно ознакомиться с целью хвастовства на форумах.

Я не приложила достаточное количество усилий, чтобы всерьез рассуждать о том с какой главы приступать к чтению «Совершенного кода» или чем первый том «Искусства программирования» полезнее второго.

Поэтому, расскажу только о тех книгах которые читала сама и знания из которых применяла на практике. Личный ТОП-9 включает:

  • 2 книги, которые каждый день под рукой;
  • 2 книги, которые оказали сильное влияние на мировоззрение и подход к работе;
  • 3 книги для души;
  • Сборник задач;
  • Книгу с описанием комплекса упражнений для людей занятых интеллектуальным трудом.

1. Регулярные выражения. Сборник рецептов. Ян Гойвертс, Стивен Левитан

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

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

  • Удаление двойных пробелов;
  • Валидация номеров кредитных карт, емейлов и URL-адресов;
  • Удаление строк-дублей в тексте;
  • Очистка кода от комментариев;
  • Извлечение значений атрибутов из XML-файлов;
  • Нахождение дат в тексте.

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

2. SQL. Сборник рецептов. Энтони Молинаро

Знаете ли вы как с помощью SQL:

  • Извлечь из таблицы строки, которых нет в другой таблице;
  • Блокировать вставку значений в некоторые столбцы;
  • Извлечь инициалы из имени;
  • Определить количество дней между двумя датами;
  • Делать иерархические запросы.

Если нет, то книга «SQL. Сборник рецептов» подскажет как.

Чуть выше я написала — одно регулярное выражение иногда заменяет десятки строк кода. Тоже с SQL-запросами. Готовые примеры из книги помогут сократить время на разработку, увеличить скорость выполнения программ/скриптов и снизить нагрузку на сервер.

3. Продуктивный программист. Как сделать сложное простым, а невозможное – возможным. Нил Форд

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

Нил Форд писал книгу, чтобы заставить посмотреть читателей на мир под другим углом и отбросить вредные привычки:

  • Не автоматизировать то, что делается руками >10 раз;
  • Использовать мышь там, где нужна только клавиатура;
  • Избегать работы в командной строке;
  • Держать рабочие файлы в беспорядке.

И ему это удается. Тонкими шутками и железными аргументами автор прививает читателю отвращение к ручному труду и убеждает встать на путь исправления.

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

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

Если хотите, чтобы вас перестало тянуть тратить время на рутину, читайте Нила Форда:-)

4. Экстремальное программирование: разработка через тестирование. Кент Бек

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

Кент Бек написал во вступлении:

Cпасибо неизвестному автору книги, которую я прочитал в 12-лет­нем возрасте. В этой книге было предложено сравнивать две ленты: с реальными результатами и ожидаемыми результатами, и кодировать до тех пор, пока реаль­ные результаты не совпадут с ожидаемыми. Спасибо, спасибо, спасибо.

Этот гениальный своей простотой совет, за много лет вырос в голове Кена в фантастически результативную методику программирования:

  • Сначала пишем тесты;
  • На втором шаге кодируем и добиваемся четкого выполнения тестов;
  • Проводим рефакторинг.

Воплощения этих трех шагов на практике посвящено 200 страниц, которые занимают описание паттернов TDD, советы по проведению рефакторинга, и рассказы о личном опыте применения методики на примере работы над приложением xUnit.

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

5. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. Федерико Бьянкуцци, Шейн Уорден

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

В книге море любопытной технической информации и фактов из истории. Например:

  • Первые семь лет разработка языка APL проходила без использования компьютеров;
  • Создатель языка Eiffel Бертран Мейер еще в 1978 году написал книгу «Методы программирования», которую вскоре перевели на русский язык и издали в СССР. И до конца 2000-ых годов во время визитов в нашу страну ему попадались люди, которые утверждали, что изучали по ней программирование;
  • Создатель Post Script описывает первоклассного программиста следующими словами «Когда он предъявляет код и говорит, что тот готов, это значит, что код абсолютно надежен и отшлифован». Последний раз такой парень встречался им в 1972 году;
  • Когда Ларри пишет на своем Perl он вносит изменение в код и перезапускает программу примерно каждые 30 секунд;
  • Turbo Pascal создан тем же человеком, что и C#;
  • C++ используется чаще чем Objective-C потому, что его раскручивала корпорация AT&T (по мнению создателя Objective-C).

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

Джон Хьюз учит важности смирения для эффективной работы в команде, Дон Чемберден объясняет почему сегодня трудно сделать популярным новый язык программирования, а Гвидо ван Россум делиться приемами, как мгновенно включиться в написание кода, если тебя отвлекли.

Герои книги — уникальные люди. В них сочетается творческий ум, смелость и способность доводить дело до конца, не боясь потратить на него десяток другой лет своей жизни. Чтение «Пионеров программирования» мотивирует к действию не хуже журнала «Работница»


6. Дискретная математика для программистов. Рей Хаггарти

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

В книге освещаются темы:

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

Радуют пояснительные примеры на псевдокоде (который по сути Pascal).

Ознакомление с этим учебником (в первую очередь с главой 7 и приложением к ней) теоретически и морально готовит к чтению третьего тома книги Дональда Кнута «Искусство программирования». Как настроить себя на чтение остальных томов, мне неизвестно:-(

Но главное, что эта книга развернуто и доступно отвечает на волнующий кодеров-любителей вопрос: «Зачем программисту когда-либо может понадобиться математика?».

7. Just for fun. Рассказ нечаянного революционера. Даймонд Дэвид. Торвальдс Линус

Биография Линуса Торвальдса с раннего детства до начала 2000-ых годов. Записана журналистом Даймонд Дэвидом под диктовку главного героя книги. Эта удивительная история о судьбе гика. Думаю многие, кого с детства тянет к программированию, найдут в себе нечто схожее с Линусом:

Иногда я вообще не выходил. Мама говорила своим друзьям-журналистам, что я настолько неприхотливый ребенок, что мне для счастья достаточно чулана с компьютером, куда время от времени закидывают пачку макарон. Она была недалека от истины. Никто не боялся, что этого ребенка похитят. (А интересно, кто-нибудь бы это заметил?)

Линус с открытой банкой кока-колы в руках появился из недр Transmeta,
расположившейся в безымянном офисном комплексе Санта-Клары. На нем была
программистская униформа: джинсы, футболка с конференции и неизменный набор
носки плюс сандалии, который он полюбил, по его словам, еще до встречи с
первым программистом. “Должно быть, это просто врожденный программистский
инстинкт”, — объяснил он мне свой выбор.

Когда мы уселись на заднее сиденье, я для разминки спросил, настраивая
диктофон: “Вы из семьи технарей?”
“Нет, большинство моих родственников — журналисты, — ответил он и
добавил: — Поэтому я в курсе, какие вы все козлы”.

Я крутился как белка в колесе: программирование — сон —
программирование — еда (соленые сухарики) — программирование — сон —
программирование — душ (на скорую руку) — программирование. К концу работы
стало ясно, что моя программа превращается в операционную систему.

Помимо биографии Линуса в книге много информации о технических особенностях Linux и философии свободного ПО:

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

Цитировать «Just for Fun» можно бесконечно, настолько она классная. Читается за один вечер, поднимает настроение и помогает отвлечься от мирской суеты.

8. Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию. Монган Д., Гижере Э., Киндлер Н.

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

Мастер Йода рекомендует:  Go создание веб-приложения с помощью Beego

Задания заставляют задуматься, но не требуют много времени для решения (если под рукой Google/тема знакома).

Книга стремительно устаревает(2012 год) и содержит психологические советы, которые кажутся мне не стопроцентно подходящими для российских реалий. Но она помогает найти пробелы в знаниях и определить направление движения в самообразовании.

9. Путь в магию. Первые шаги. Fiery

Эта книга представляет собой сборник упражнений для развития умения себя контролировать с развернутыми авторскими комментариями. Выполнение этих упражнений помогает справиться со следующими проблемами:

  • Неспособность сосредоточиться на текущем занятии;
  • Невозможность заснуть из-за навязчивых мыслей;
  • Чрезмерная утомляемость при достаточном времени сна из-за невозможности расслабиться.

Я делала эти упражнения в 16-17 лет во время подготовки к ЕГЭ, чтобы преодолеть трудности со сосредоточением на учебе. В тот момент они мне ощутимо помогли. Теперь только возвращаюсь к ним пару раз в год по мере необходимости.

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

P.S. Если у вас начнутся выходы из тела по ночам, срочно завязывайте с упражнениями и никому об этом не рассказывайте.

Классных книг для программистов много. И ТОП-10 каждого разработчика индивидуален .

Не знаете какие книги читать? Обратитесь к опытному кодеру, который:

  • Использует те же технологии, что и вы;
  • Решает похожие задачи;
  • Похож на вас характером.

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

(5.00 из 5, оценили: 1)

Эти книги должен прочитать каждый, кто считает себя программистом!

Содержание статьи

Польза не во многих, но в хороших книгах.

Сенека

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

С. Макконнелл «Совершенный код»

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

Сложно найти гуру программирования, который не читал «Совершенный код» Стива Макконнелла. Действительно, одна книга, хоть и немаленькая (чуть менее 900 страниц), покрывает практически все аспекты разработки ПО: от рецептов написания высококачественного кода, механизмов тестирования и отладки до стратегий оптимизации кода и психологических факторов, влияющих на разработку. Представь себе: библиография книги занимает 20 страниц и содержит более 500 источников! Книга «Совершенный код» — одно из самых полезных и, как следствие, популярных изданий по разработке ПО. Она неоднократно доказала это, возглавляя рейтинги книг по программированию (goo.gl/3q0kx). Благодаря простой манере изложения, особому стилю и чувству юмора Стива книга читается очень легко.

Говоря о проектировании и конструировании программных систем, Макконнелл выделает Главный Технический Императив Разработки ПО — управление сложностью. Простота и ясность исходного кода и архитектуры системы определяют ее качество. Большая часть книги посвящена написанию высококачественного кода. Макконнелл, как никто другой осознавая значимость мелочей, детально описывает все правила, которыми необходимо руководствоваться при написании хорошего кода. Необходимый уровень абстракции, разработка качественных интерфейсов классов и пакетов, написание высококачественных методов, выбор удачных имен переменных, упрощение управляющих структур, комментирование кода — ничто не ускользает от внимания автора. Например, общим принципам использования переменных отведен целый раздел книги более чем на 100 страниц. Только вопросу выбора имен переменных посвящена целая глава на 30 страниц. При этом все правила и советы даются исключительно с практической точки зрения.

В части, в которой говорится о качестве ПО в целом, Макконнелл формулирует Главный Закон Качества ПО: повышение качества системы снижает расходы на ее разработку. Причина ясна — большую часть времени программисты занимаются чтением и отладкой написанного кода, тогда как на собственно написание уходит около 10% рабочего времени. Поэтому поддержание качества кода системы на высоком уровне экономит много времени и тем самым повышает КПД программиста.

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

Говоря о повышении производительности ПО, автор приводит убедительные доводы против преждевременной оптимизации, когда программист в процессе разработки интуитивно распознает «узкие» места в программе и незамедлительно принимает меры по оптимизации в ущерб качеству кода. Приводимая статистика показывает, что в 9 из 10 своих предположений программист ошибается.

Подвести итоги можно словами Джона Роббинса: «Это просто самая лучшая книга по конструированию ПО из всех, что когда-либо попадались мне в руки. Каждый разработчик должен иметь ее и перечитывать от корки до корки каждый год. Я ежегодно перечитываю ее на протяжении вот уже девяти лет и все еще узнаю много нового!»

М. Фаулер «Рефакторинг»

Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям.

М. Фаулер

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

При немалом объеме (400 страниц) книга читается буквально за пару вечеров, от нее просто невозможно оторваться. Главная причина головокружительного успеха книги — ее практическая направленность. Все мы знаем, что самая сложная задача при подаче материала — привести хороший показательный пример. В этом Фаулеру нет равных. Книга начинается с примера улучшения программы, который сразу с головой затягивает читателя в мир рефакторинга. Всего 40 страниц примера дают нам вполне конкретное представление о рефакторинге, его целях, принципах и основных методах реализации. Мартин определяет рефакторинг как «изменение во внутренней структуре ПО, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения». Но когда необходимо проводить данное изменение? Какой код должен подвергаться переработке? Автор дает исчерпывающие ответы на эти вопросы. Он вводит правило «трех ударов»: «После трех ударов начинайте рефакторинг». То есть когда вы делаете что-то аналогичное в третий раз, это сигнал для начала рефакторинга. Раздел «Код с душком» дает нам четкое представление о том, какой же код требует улучшения. К признакам такого кода относятся: длинный метод, большой класс, длинный список параметров метода, дублирование кода, операторы типа switch, временные поля, отказ от наследства, неуместная близость классов и многое другое.

Фаулер, как сторонник TDD (Test-driven development), посвящает главу книги созданию автоматических тестов и описанию среды JUnit. Если обнаружена ошибка, сначала необходимо написать автоматический тест, выявляющий ее, и лишь затем проводить исправление. Это позволит в будущем не наступать на одни и те же грабли. Аналогично перед проведением рефакторинга следует написать тест для улучшаемого кода, чтобы обеспечить неизменность его поведения.

Бо́льшую часть книги занимает каталог методов рефакторинга. Он содержит разделы, посвященные составлению методов, перемещению функций между объектами, организации данных, упрощению условных выражений и вызовов методов, решению задач обобщения и крупным архитектурным рефакторингам. Многие из методов рефакторинга автоматизированы в популярных IDE. Например, Visual Studio предоставляет возможности по автоматическому выделению метода (ExtractMethod), удалению параметра (RemoveParameter), выделению интерфейса (ExtractInterface) и пр. В качестве крупных рефакторингов уровня системы Фаулер приводит следующие: разделение иерархии наследования, выполняющей более одной задачи, преобразование процедурного подхода к проектированию в объектно-ориентированный подход, отделение предметной области от уровня представления, а также выделение иерархии, подразумевающее разбиение большого класса на целую иерархию значительно меньших по размеру и более специализированных подклассов.

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

Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес «Паттерны проектирования»

Проектирование объектно-ориентированных программ — нелегкое дело, а если их нужно использовать повторно, то все становится еще сложнее.

Э. Гамма

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

Очень часто начинающий разработчик самостоятельно берется за решение уже более тысячи раз решенной до него задачи проектирования и изобретает очередную разновидность пятиколесного велосипеда, истинно гордясь своим «новшеством». Владение языком паттернов позволяет решить множество задач проектирования наиболее оптимальным способом, затрачивая при этом минимум усилий. Всего двадцать описанных в книге паттернов предоставляют инструментарий для решения огромного спектра задач проектирования ПО. Материал книги довольно сложен и требует от читателя определенных знаний в области объектно-ориентированного проектировании. Для освоения паттернов недостаточно просто прочитать книгу, необходимо основательно над ней «попотеть». Впрочем, твои усилия не пройдут даром. Книга содержит 350 страниц и состоит из двух частей. В первой части дается общее понятие паттернов проектирования, описывается их практическое применение на примере создания визуального редактора документов Lexi. Вторая часть книги содержит каталог паттернов с подробным описанием назначения, структуры, особенностей реализации и примерами применения каждого паттерна.

Коллектив авторов известен как Gang of Four («Банда четырех»), поэтому представленные в книге паттерны называют GoF. Авторы разбивают все множество представленных паттернов на три группы: порождающие паттерны, структурные паттерны и паттерны поведения. Порождающие паттерны решают задачу инстанцирования (создание экземпляров) классов. К самым популярным паттернам в данной группе можно отнести AbstractFactory (абстрактная фабрика), FactoryMethod (фабричный метод) и Singleton (одиночка).

Структурные паттерны предназначены для решения вопросов компоновки системы на основе классов и объектов. К ним относятся такие важнейшие паттерны, как Adapter (адаптер), Bridge (мост), Composite (компоновщик), Proxy (заместитель) и Façade (фасад). Паттерны поведения связаны с алгоритмами и вопросами распределения обязанностей между классами. Здесь необходимо упомянуть Strategy (стратегия), TemplateMethod (шаблонный метод), Observer (наблюдатель), Command (команда) и Iterator (итератор).

Единственное, что может смутить читателя, — некоторые примеры в книге написаны на малоизвестном на сегодняшний день языке программирования Smalltalk, а для изображения диаграмм классов вместо привычного UML используется OMT (Object Modeling Technique).

Гуру ООАиП Мартин Фаулер пишет: «Паттерны GoF — это лучшая из когда-либо изданных книг по объектно-ориентированному проектированию. Эта книга чрезвычайно влиятельна в индустрии программного обеспечения — только посмотрите на библиотеки Java и .NET, которые буквально кишат паттернами GoF». Не существует специалиста в области объектно-ориентированного проектирования, незнакомого с паттернами GoF, а если такой и есть, то в этом случае его, скорее всего, нельзя назвать специалистом.

Р. Мартин «Чистый код»

Умение писать код — тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть.

Р. Мартин

«Чистый код» — одна из наиболее удачных книг, посвященных написанию высококачественного кода. Размер книги — 360 страниц, не считая приложений. При этом она настолько увлекательна и доступна, что за два-три вечера запросто прочитаешь ее от корки до корки. В дружеской манере «дядюшка» Боб рассказывает нам, какими же принципами нужно руководствоваться, чтобы писать хороший код. Книга изобилует примерами из реальных приложений, с которыми автор сталкивался в своей практике. Среди них такие известные продукты, как JUnit, FitNesse, JDepend, Ant и TomCat.

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

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

Необходимо поддерживать его чистоту с течением времени, чтобы предотвратить «загнивание». Поэтому он вводит «правило бойскаута»: «Оставь место стоянки чище, чем оно было до твоего прихода». То есть с каким бы участком кода мы ни работали, нужно пытаться в итоге сделать его качественнее, чем он был. В таком случае, код не будет загнивать и останется чистым.

При создании функций во главу угла ставятся компактность, правило одной операции и одного уровня абстракции — очевидные на первый взгляд принципы, которые так часто нарушаются программистами. Будучи ярым адептом TDD, Мартин указывает на важность «чистоты» не только кода конечного продукта, но и кода модульных тестов. Он иронически замечает: «Какими отличительными признаками характеризуется чистый тест? Тремя: удобочитаемостью, удобочитаемостью и удобочитаемостью».

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

В начале книги Роберт приводит ответы мэтров программирования на вопрос, что же такое «чистый код». Грэди Буч отвечает: «Чистый код прост и прямолинеен. Чистый код читается, как хорошо написанная проза. Чистый код никогда не затемняет намерения проектировщика; он полон четких абстракций и простых линий передачи управления». Программисты, которые стремятся писать «чистый код», просто обязаны прочитать эту книгу.

Д. Кнут «Искусство программирования»

Лучший способ в чем-то разобраться до конца — это попробовать научить этому компьютер.

Д. Кнут

Программист, у которого нет книги «Искусство программирования», как священнослужитель, у которого нет Библии. Монографию Дональда Кнута часто называют «Библией программиста». Она содержит подробное описание и анализ важнейших фундаментальных алгоритмов, используемых в информатике, а также множество практических задач для усвоения и закрепления представленного материала. Журнал American Scientist включил работу Кнута в список двенадцати лучших физико-математических монографий XX века наряду с работой Эйнштейна по теории относительности. Успех книги определило качество изложения и глубина анализа общих вопросов программирования.

Кнут начал работу над «Искусством программирования» еще в 1962 году. По замыслу автора монография должна состоять из семи томов. Пока было издано три первых тома, а также первая половина четвертого. Все изданные на сегодняшний день материалы составляют почти 3000 страниц. Читать книгу совсем не просто (как, впрочем, и Библию), главным образом потому, что все примеры рассматриваются на низкоуровневом языке программирования — ассемблере для гипотетического выдуманного автором компьютера MIX. Поэтому у программиста вряд ли получится использовать книгу в качестве набора готовых рецептов для решения конкретных задач. Эта книга дает программисту не рыбу, а скорее хорошую удочку, с помощью которой он сможет не без определенных усилий самостоятельно наловить рыбы.

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

Второй том включает в себя третью и четвертую главы. Третья глава посвящена работе со случайными числами и последовательностями. В четвертой главе описываются вопросы арифметики, а именно различные виды систем счисления, арифметика чисел с плавающей точкой и рациональных чисел, полиномиальная арифметика и другое. Третий том посвящен алгоритмам сортировки и поиска (соответственно, главы 5 и 6). Из четвертого тома опубликованы материалы седьмой главы, описывающей вопросы комбинаторного поиска.

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

В своем отзыве о работе Кнута Билл Гейтс сказал: «Если вы считаете себя действительно хорошим программистом… прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определенно следует отправить мне резюме». Цитата лишний раз подчеркивает, что, несмотря на сложность материала, настоящий профессионал обязательно должен осилить труд Дональда Эрвина Кнута «Искусство программирования».

Э. Хант, Д. Томас «Программист-прагматик»

Программисты-прагматики не уклоняются от ответственности. Вместо этого они испытывают радость, принимая вызовы и распространяя свой опыт.

Эндрю Хант

Книга «Программист-прагматик» полностью оправдывает свое название. Викисловарь говорит, что прагматик — это тот, «кто ставит практическую полезность, выгоду выше всего». Программисты-прагматики ориентируются в первую очередь на практическую успешность реализуемых проектов. Авторы на основании своего богатейшего опыта программирования создали структурированный набор практических советов для программистов. Небольшой размер книги (270 страниц) говорит о высокой концентрации важной для программиста информации.

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

Одним из самых замечательных принципов программирования, которым мы обязаны авторам, является принцип DRY (Don’t Repeat Yourself), что в переводе на русский означает: «Не повторяй самого себя». Это значит, что каждый фрагмент знания должен иметь единственное и однозначное представление в системе. Следование данному принципу позволяет повысить надежность, доступность и простоту сопровождения программного продукта.

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

Единственное, что может подпортить впечатление о книге, так это недостаточно качественный перевод на русский язык и наличие множества опечаток. Книгу лучше всего читать в оригинале на английском языке. Нельзя не согласиться с отзывом Кента Бека: «Главное в этой книге то, что она поддерживает процесс создания программ в хорошей форме. [Книга] способствует вашему постоянному росту и явно написана людьми, знающими толк в программировании». Если вы стремитесь к постоянному росту как программист, эта книга обязательна к прочтению.

Заключение

Значение хороших книг по программированию сложно переоценить. Каждая из описанных книг позволяет совершить огромный скачок в развитии. «Искусство программирования» закладывает прочный фундамент, обучая нас фундаментальным алгоритмам и приемам программирования. «Совершенный код» позволяет выйти на новый качественный уровень конструирования ПО. «Чистый код» и «Рефакторинг» учат нас внимательнее относиться к качеству кода и поддерживать его в идеальном состоянии. «Программист-прагматик» подсказывает, как же реально добиться практического успеха при разработке ПО. «Паттерны проектирования» вооружают тяжелой артиллерией паттернов для решения множества задач проектирования.

Подборка хороших книг для программистов

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

Карьера программиста

Автором этого пособия является Г. Макдоуэлл, основатель CareerCup и бывший сотрудник таких компаний, как Apple, Google и Microsoft. Книга предназначена для качественной подготовки к предстоящему собеседованию на позицию разработчика программного обеспечения.

Она сделана в формате «задача-решение»: почти 200 вопросов и ответов, большинство из которых автор взял из собственного опыта, покрывают всевозможные темы, в том числе алгоритмы, шаблоны проектирования и многое другое. В целом прочтение «Cracking the Coding Interview» точно не будет лишним, и это подтверждает его статус бестселлера.

Многие задачи из этой книги есть в нашем переводе в соответствующей рубрике сайта.

24 Deadly Sins of Software Security

В книге «24 смертных греха компьютерной безопасности» Майкл Ховард и Дэвид Лебланк, эксперты безопасности Microsoft, рассказывают о наиболее распространенных и серьезных ошибках при создании разнообразного ПО, а также соответствующих «дырах».

Рассмотрено большинство языков и платформ программирования, каждая глава посвящена отдельному типу уязвимости — «смертному греху».

Artificial Intelligence for Games

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

В этом пособии Ян Миллингтон, известный в игровой индустрии программист и автор серии книг, делится своим опытом создания и улучшения ИИ в самых разнообразных играх. Книга содержит множество реальных примеров, а также исходные коды популярных коммерческих реализаций алгоритмов ИИ. Большое внимание уделено разработке геймплея с упором на искусственный интеллект, реализации поведения персонажей и особенностям разработки игр-головоломок.

Mathematics for 3D Game Programming and Computer Graphics

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


Третье издание раскрывает такие темы, как проекции, тени, физика, отрисовка ткани и числовые методы, а весь код полностью соответствует последним спецификациям языка шейдеров.

Game Programming Patterns

Самая большая проблема, стоящая перед многими разработчиками игр — завершение разработки их продукта. Часто проекты «выдыхаются», оказываясь перегруженными сложностью и запутанностью их собственного кода. Эта книга призвана решить эту проблему раз и навсегда.

«Game Programming Patterns» — это коллекция шаблонов, делающих код (не только игр) чище, проще для понимания и быстрее. Из нее вы узнаете, как создать надежный цикл игры, как организовывать объекты и их компоненты, как использовать кэш процессора для улучшения производительности и многое другое. Вы погрузитесь в изучение не только того, как работают скриптовые движки и как их оптимизировать, но и того, как классические шаблоны проектирования могут быть использованы в разработке игр.

Jump Start MySQL

MySQL — супер-популярная свободная реляционная система управления базами данных, которую использует большинство интернет-сайтов.

С помощью этой книги всего за 7 дней вы сможете освоить MySQL, научиться использовать её скорость и гибкость. Вы научитесь сохранять, модифицировать и обрабатывать данные, подключать к БД свои программы, работать с таблицами, делать бекапы и многое другое.

Head First. Программирование для Android

Если у вас есть идея для «взрывного» Android-приложения, но вы не знаете, как её реализовать, то эта книга — то, что вам нужно. Вы узнаете, как правильно задать структуру своего приложения, создать к нему интерфейс и базу данных, а также как сделать, чтобы оно работало на самых разных смартфонах и планшетах, и многое другое.

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

97 Things Every Programmer Should Know

«97 вещей, которые должен знать каждый программист» — сборник коротких практических советов от ведущих специалистов в области IT, который поможет избежать многих проблем, стоящих на пути программиста.

Эффективная работа с унаследованным кодом

В этой книге Майкл Физерс предлагает стратегии по эффективной работе с legacy-кодом. Автор долгое время занимался наставничеством и решил поместить в книгу весь свой опыт. Прочитав её, вы узнаете, как читать, исправлять и улучшать такой код. Помимо примеров на Java, C++, C и C# в книге есть 24 способа избавления от зависимостей.

Приёмы объектно-ориентированного проектирования

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

Чистый код: создание, анализ и рефакторинг

Роберт Мартин в своём творении, опираясь на личный опыт и, что даже важнее, конкретные примеры из своей практики, рассказывает о том, как нужно кодить. Принципиальное отличие от книги Макконелла заключается в том, что здесь очень мало статистических обоснований правильности тех или иных действий, только код (занимающий почти треть книги) и рекомендации автора.

Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем

Эта книга отлично подойдёт тем, кто сталкивался или ещё только столкнётся с проблемно-ориентированным программированием.

Мастер Йода рекомендует:  Кто такой 1x-программист — несерьёзный разбор на Tproger

Совершенный код

Если вы планируете построить успешную карьеру программиста, то это та книга, которую прочитать вы просто обязаны. Абсолютно неважно, в какой среде вы планируете работать, какой ваш уровень подготовки, новичок вы или уже руководитель — здесь найдётся полезная информация для каждого, кто хоть как-то связан с процессом создания кода. Совершенного кода.

Язык программирования Си

«Язык программирования Си» (также известна как K&R) — книга Брайана Кернигана и Денниса Ритчи, причём последний — один из непосредственных авторов и разработчиков языка Си. Книга стала основой для разработки и популяризации Си, до сих пор имеет спрос и широко используется в качестве «классического» учебника по языку. Она долгое время была единственным справочным руководством и де-факто — стандартом языка.

Кстати, у нас есть неплохая подборка бесплатных книг по Си, советуем взглянуть, если этот язык вам интересен.

The Pragmatic Programmer: From Journeyman to Master

Ещё один представитель программистской литературы, где на трёхстах страницах методично описываются основные принципы создания качественного кода и условия, при которых вы будете получать удовольствие от работы, а клиент от результатов. Написана книга приятным языком, поэтому много времени на её освоение не уйдёт.

Путь программиста

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

Структура и Интерпретация Компьютерных Программ

Эта книга рассматривает создание кода на уровне общих принципов, то есть описываются алгоритмы, объясняется взаимодействие программной среды и машины и, как следствие, предлагаются методы оптимизации будущего кода. Несмотря на довольно общую тематику, в профессиональных кругах эта книга считается учебником, как для новичков, так и для настоящих зубров IT-цеха.

Алгоритмы. Построение и анализ

Ещё одна увесистая книга по алгоритмам, впервые изданная в 1990 году в Массачусетском технологическом институте с авторством местных преподавателей. Несмотря на то, что написана она простым и понятным языком, из-за объёма и подачи материала (каждая глава имеет законченный вид) использовать лучше в качестве справочника, периодически обращаясь к нужной информации.

Искусство программирования

Искусство программирования — монументальный труд Дональда Кнута. Серия книг состоит из 4 томов, каждый из которых охватывает определенные виды алгоритмов. Это классика, которую до сих пор в обязательном порядке проходят в ВУЗах. Материал подан в достаточно сложном формате, но и цель у книг особенная — рассказать наиболее полно о существующих алгоритмах.

Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию

Не обращайте внимание на российское название — в оригинале это «Cracking the Coding Interview: 189 Programming Interview Questions and Solution», то есть просто 189 наиболее часто задаваемых вопросов на собеседованиях в крупных IT-компаниях. Ответы, разумеется, прилагаются. Помогает не только потренировать собственный мозг, но и получить представление об образе мышления в Amazon, Apple, Facebook, Google и Microsoft.

Кстати, мы часто даем разборы задач из этой книги в рубрике «Задачки» на нашем сайте.

Жемчужины программирования

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

Release it! Проектирование и дизайн ПО для тех, кому не все равно

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

Кодеры за работой. Размышления о ремесле программиста

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

Мифический человеко-месяц

Эта книга в США входит в список must-read любого разработчика ПО. Написана она была в далёком 1975 году, но описанные этапы, проблемы и советы по разработке ПО актуальны и по сей день. Вряд ли она будет полезна для человека, который уже несколько лет варится в профессии и на личном опыте знает об этом процессе, а вот студентам и новичкам в IT — прочитать действительно следует.

Не заставляйте меня думать

Если «Мифический человеко-месяц» — книга для разработчиков, то это своего рода библия для работников веб-индустрии. Как повысить производительность и привлекательность веб-сайта, советы для новичков, ветеранов и руководителей – всё это можно подчеркнуть из немного ироничной и крайне полезной книги Стива Круга.

Программистам обязательно к прочтению — 10 книг

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

ISBN: 5-272-00355-1, 0-201-63361-2, 5-469-01136-4
Год издания: 2007
Издательство: Питер
Серия: Библиотека программиста
Язык: Русский

В предлагаемой книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Авторы излагают принципы использования паттернов проектирования и приводят их каталог. Таким образом, книга одновременно решает две задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения.

Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.

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

ISBN: 5-7502-0064-7, 5-469-00822-3, 0-7356-1967-0
Год издания: 2005
Издательство: Питер, Русская Редакция
Язык: Русский

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

Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и…

ISBN: 5-93286-005-7
Год издания: 2006
Издательство: Символ-Плюс
Серия: Профессионально
Язык: Русский

Эта книга — юбилейное (дополненное и исправленное) издание своего рода библии для разработчиков программного обеспечения во всем мире, написанное Бруксом еще в 1975 году. Тогда же книга была издана на русском языке и давно уже стала библиографической редкостью. В США полагают, что без прочтения книги Брукса не может состояться ни один крупный руководитель программного проекта.

Эта книга — юбилейное (дополненное и исправленное) издание своего рода библии для разработчиков программного обеспечения во всем мире, написанное Бруксом еще в 1975 году. Тогда же…

ISBN: 5-85582-213-3, 0-201-61622-X
Год издания: 2007
Издательство: Захаров
Язык: Русский
ISBN: 5-469-01217-4, 0-201-54330-3
Год издания: 2006
Издательство: Питер, ДМК пресс
Серия: Классика Computer Science
Язык: Русский

В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++.

Здесь изложены цели, принципы и практические ограничения, наложившие отпечаток на структуру и облик C++, обсужден дизайн недавно добавленных в язык средств: шаблонов, исключений, идентификации типа во время исполнения и пространств имен. Автор анализирует решения, принятые в ходе работы над языком, и демонстрирует, как правильно применять «реальный объектно-ориентированный язык программирования».

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

В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++.

Каждому программисту. Лучшие книги по программированию. Обзор

Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ (2-е издание). М.: Издательский дом «Вильямс», 2020. Пер. с англ. – 1328 стр. Тираж 300 экз.

Bjarne Stroustrup. Programming: Principles and Practice Using C++. Second edition.

Программирование – это искусство выражать решения задач так, чтобы компьютер мог их осуществить. Основные усилия программиста направлены на то, чтобы найти и уточнить решение, причем довольно часто полное понимание задачи приходит лишь в ходе программирования ее решения.
Эта книга предназначена для тех, кто еще никогда не программировал, но готов учиться этому ценой тяжелого и упорного труда. Она поможет овладеть главными принципами и приобрести практический опыт программирования на языке C++. Моя цель заключается в том, чтобы изложить достаточный объем сведений и научить вас решать простые и полезные задачи по программированию с помощью самых лучших и современных методов. Если вы учитесь на первом курсе университета, то можете изучать эту книгу на протяжении семестра (в предположении, что у вас имеется еще четыре курса средней сложности). Если вы изучаете программирование самостоятельно, то не ждите, что сможете освоить этот курс за меньшее время (ну, при условии, что вы будете работать по 15 часов в неделю, возможно, вам хватит 14 недель).
Три месяца могут показаться долгими, но объем курса довольно велик, и первые простые программы вы сможете написать, проработав над книгой около часа. Кроме того, сложность материала постепенно возрастает: в каждой главе вводятся новые полезные понятия, которые иллюстрируются реальными примерами.

* * *
Станете ли вы профессиональным программистом или экспертом по языку C++, прочитав эту книгу? Конечно, нет! Настоящее программирование – это тонкое, глубокое и очень сложное искусство, требующее знаний и технических навыков. Рассчитывать на то, что за четыре месяца вы станете экспертом по программированию, можно с таким же успехом, как и на то, что за полгода или даже год вы полностью изучите биологию, математику или иностранный язык (например, китайский, английский или датский) или научитесь играть на виолончели. Если подходить к изучению книги серьезно, то можно ожидать, что вы сможете писать простые полезные программы, читать более сложные программы и получите хорошие теоретическую и практическую основы для дальнейшей работы.
Прослушав этот курс, лучше всего поработать над реальным проектом.

* * *
Когда – начиная с 1949 года – в мире появились первые электронные компьютеры с хранимыми программами, каждый из них имел собственный язык программирования. Существовало взаимно однозначное соответствие между выражением алгоритма (например, вычисления орбиты планеты) и командами конкретной машины. Очевидно, что ученый (пользователями чаще всего были ученые) писал математические формулы, но программа представляла собой список машинных инструкций. Первые примитивные списки состояли из десятичных или восьмеричных цифр, точно соответствовавших их представлению в машинной памяти. Позднее появились ассемблер и «автокоды»; иначе говоря, люди разработали языки, в которых машинные команды и машинное оборудование (например, регистры) имели символические имена. Так, программист мог написать «LD R0 123», чтобы загрузить содержимое ячейки памяти, расположенной по адресу 123, в нулевой регистр. Однако каждая машина по-прежнему имела собственный набор команд и собственный язык программирования. (С. 893)

Стив Макконнелл. Совершенный код. Мастер-класс (Практическое руководство по разработке программного обеспечения). М.: Русская редакция, Спб: Питер, 2005. Пер. с англ. – 896 стр.

© Steven C. McConnell, 2004

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

«Великолепное руководство по стилю программирования и конструированию ПО».
Мартин Фаулер, автор книги «Refactoring»

«Книга Стива Макконнелла… это быстрый путь к мудрому программированию… Его книги увлекательны, и вы никогда не забудете то, что он рассказывает, опираясь на свой с трудом полученный опыт».
Джон Бентли, автор книги «Programming Pearls, 2d ed»

«Современное ПО должно быть надежным и гибким, а создание защищенного кода начинается с дисциплинированного конструирования программы. За десять лет так и не появилось лучшего руководства по этой теме, чем эта книга».
Майкл Ховард, специалист по защите ПО, корпорация Microsoft; один из авторов книги «Writing Secure Code»

Если вы не имеете специального образования, вы не одиноки. Ежегодно программистами становятся около 50 000 человек (BLS, 2004, Heскеr, 2004), однако число дипломов, вручаемых ежегодно в нашей отрасли, составляет лишь около 35 000 (NCES, 2002). Легко прийти к выводу, что многие программисты изучают разработку ПО самостоятельно. Программисты-самоучки встречаются среди инженеров, бухгалтеров, ученых, преподавателей, владельцев малого бизнеса и представителей других профессий, которые занимаются программированием в рамках своей работы, но не всегда считают себя программистами. Каким бы ни было ваше программистское образование, в этом руководстве вы найдете информацию об эффективных методиках программирования.

* * *
Методики, описанные в этой книге, заполняют пустоту, остающуюся в знаниях программистов после прочтения вводных и более серьезных учебников по программированию. Что читать человеку, изучившему книги типа «Introduction to Java», «Advanced Java» и «Advanced Advanced Java» и желающему узнать о программировании больше? Вы можете читать книги о процессорах Intel или Motorola, функциях ОС Microsoft Windows или Linux или о другом языке программирования – невозможно эффективно программировать, не имея хорошего представления о таких деталях. Но эта книга относится к числу тех немногих, в которых обсуждается программирование как таковое. Наибольшую пользу приносят те методики, которые можно использовать независимо от среды или языка. В других источниках такие методики обычно игнорируются, и именно поэтому я сосредоточился на них.
Как показано ниже, информация, представленная в этой книге, выжата из многих источников. Единственным другим способом получения этой информации является изучение горы книг и нескольких сотен технических журналов, дополненное значительным реальным опытом. Если вы уже проделали всё это, данная книга всё равно окажется вам полезной как удобный справочник.

* * *
За доказательствами влияния, оказываемого языками программирования на мышление программистов, далеко ходить не надо. Типичная история такова: «Мы писали новую систему на C++, но большинство наших программистов не имели особого опыта работы на C++. Раньше они использовали Fortran. Они писали код, который компилировался на C++, но на самом деле это был замаскированный Fortran. В итоге они заставили C++ эмулировать недостатки языка Fortran (такие как операторы goto и глобальные данные) и проигнорировали богатый набор объектно-ориентированных возможностей C++». Данный феномен наблюдается в отрасли уже много лет (Hanson, 1984; Yourdon, 1986a). (С. 60)

Питер Гудлиф. Ремесло программиста. Практика написания хорошего кода. Спб.: Символ-Плюс, 2009. Пер. с англ. – 704 стр.

Pete Goodliffe. Code Craft: The Practice of Writing Excellent Code.

Аннотация. Ничто не сравнится по ценности с советами настоящего программиста-профессионала. Книга Питера Гудлифа «Ремесло программиста» написана ясно, практично и занимательно. Она поможет вам перейти на более высокий уровень мастерства программирования и покажет, как писать код, который больше чем «просто работает». Да, вы умеете писать работающий код, но как написать понятный код? Как добиться его надежности и отсутствия ошибок? Смогут ли другие программисты выяснить логику и цель вашего кода? Выдающиеся программисты не просто обладают техническими знаниями – у них есть правильный подход и отношение к программированию.
Перед вами руководство по выживанию в условиях промышленного производства ПО. Эта книга посвящена тому, чему вас никто не учил: как правильно программировать в реальной жизни. Здесь вы найдете не связанные с конкретными языками рекомендации, полезные всем разработчикам и касающиеся таких проблем, как стиль представления, выбор имен переменных, обработка ошибок, безопасность, эффективность групповой работы, технологии разработки и составление документации.
Читатель должен обладать опытом программирования, ибо книга не учит программированию – она учит правильно программировать. Издание будет полезно и студентам старших курсов, знакомым с принципами программирования.

«Легко читается, занимательно, даже забавно… Книга полна мудрости, накопленной за годы реальной работы, мучений и побед в сфере программных разработок… Жаль, что у меня не было такой книги, когда я начинал работать программистом».
Стив Лав (Steve Love), старший разработчик

«Именно та книга, которая нужна необстрелянным новобранцам. Рассказывает всю правду, легко читается и охватывает широкий круг тем, которые должен знать новичок».
Джон Джеггер (Jon Jagger), преподаватель, программист

Программирование – ваша страсть. Печально, но это так. И как закоренелый технарь вы программируете чуть ли не во время ночного сна. И вот вы попали в центр реального мира, в саму эту отрасль, и занимаетесь тем, о чем и не мечтали: забавляетесь с компьютером, а вам за это еще и деньги платят. Ведь вы сами готовы были заплатить за то, чтобы иметь такую возможность!
Но всё не так просто и не похоже на то, чего вы ожидали. Огорошенные назначением вам нереальных сроков выполнения задач и неумелым руководством (если его можно назвать этим словом), непрерывным изменением технического задания и необходимостью разбираться в дрянном коде, доставшемся вам от предшественников, вы начинаете сомневаться в том, что выбрали для себя правильный путь. Всё вокруг мешает вам писать тот код, о котором вы мечтали. Что ж, таковы условия существования в организациях, где пишут программы. Вы попали на передний край упорной битвы за создание шедевров художественного мастерства и научного гения. Удачи вам!

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

Сбой при компиляции
Крайне досадно, когда код, на который вы потратили столько времени, отказывается компилироваться. Это значит, что вам придется вернуться и исправить противную маленькую опечатку или несоответствие типов параметров, а затем снова компилировать и только потом приниматься по-настоящему тестировать свой труд. Как ни странно, это лучший тип ошибок, с которым вы можете столкнуться. Почему? Просто потому, что их проще всего обнаружить и исправить. Они проявляются сразу и наиболее очевидны.
Чем дольше поиск ошибок, тем дороже их исправление; это проиллюстрировано в разделе «Экономика ошибок» на стр. 216. Чем раньше вы сможете найти и исправить каждую ошибку, тем скорее вы сможете продолжить работу и тем меньшим объемом неприятностей и затрат обойдетесь. Ошибки компиляции очень легко заметить (на них просто трудно не обратить внимания) и обычно легко исправить. Вы не сможете запустить программу, пока не устраните их.
Чаще всего сбой при компиляции бывает вызван глупой синтаксической ошибкой или обычной невнимательностью, например при вызове функции с параметром неверного типа. Сбой может быть вызван ошибкой в make-файле, ошибкой этапа сборки (например, отсутствием реализации функции) или даже нехваткой дискового пространства на машине, где осуществляется сборка. (С. 214)

Роберт Мартин. Чистый код: Создание, анализ и рефакторинг. (Библиотека программиста). Спб.: Питер, 2010. – 464 стр.

Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship.

Аннотация. Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение».
Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший.
Книга состоит из трех частей. В первой части излагаются принципы, паттерны и приемы написания чистого кода; приводится большой объем примеров кода. Вторая часть состоит из практических сценариев нарастающей сложности. Каждый сценарий представляет собой упражнение по чистке кода или преобразованию проблемного кода в код с меньшим количеством проблем. Третья часть книги – концентрированное выражение ее сути. Она состоит из одной главы с перечнем эвристических правил и «запахов кода», собранных во время анализа. Эта часть представляет собой базу знаний, описывающую наш путь мышления в процессе чтения, написания и чистки кода.

* * *
…И предоставлю всю необходимую для этого информацию. Но когда вы впервые заберетесь на велосипед, вы всё равно неизбежно упадете.
С программированием дело обстоит точно так же. Конечно, мы могли бы записать все «хорошие» принципы чистого кода, а потом доверить вам всю практическую работу (другими словами, позволить вам упасть, забравшись на велосипед), но какие бы из нас тогда были учителя?
Нет. В этой книге мы пойдем по другому пути.
Умение писать чистый код – тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть. Необходимо пытаться и терпеть неудачи. Необходимо наблюдать за тем, как другие пытаются и терпят неудачи. Необходимо видеть, как они спотыкаются и возвращаются к началу; как мучительно принимаются решения и какую цену приходится платить за неверный выбор.
Приготовьтесь основательно потрудиться во время чтения книги. Перед вами не «легкое чтиво», которое можно проглотить в самолете и перевернуть последнюю страницу перед посадкой. Книга заставит вас потрудиться, и потрудиться усердно. Какая работа вам предстоит? Вы будете читать код – много кода. И нам придется как следует подумать, что в этом коде правильно, а что нет. Вы будете наблюдать за тем, как мы разбираем эти модули, а потом собираем заново. Это потребует немало времени и усилий; но мы считаем, что результат того стоит.
Книга разделена на три части. В первых нескольких главах излагаются принципы, паттерны и приемы написания чистого кода. В них приводится довольно солидный объем кода, и читать их будет непросто. Весь этот материал подготовит вас ко второй части. Если вы отложите книгу после первой части – всего хорошего!
Во второй части книги трудиться придется еще больше. Она состоит из нескольких практических сценариев нарастающей сложности. Каждый сценарий представляет собой упражнение по чистке кода – или преобразовании проблемного кода в код с меньшим количеством проблем. Чтобы усвоить материал этой части,

* * *
Правило № 1: выполнение всех тестов
Прежде всего система должна делать то, что задумано ее проектировщиком. Система может быть отлично спланирована «на бумаге», но если не существует простого способа убедиться в том, что она действительно решает свои задачи, то результат выглядит сомнительно.
Система, тщательно протестированная и прошедшая все тесты, контролируема. На первый взгляд утверждение кажется очевидным, но это весьма важно. Невозможно проверить работу системы, которая не является контролируемой, а непроверенные системы не должны запускаться в эксплуатацию.
К счастью, стремление к контролируемости системы ведет к архитектуре с компактными узкоспециализированными классами. Всё просто: классы, соответствующие принципу SRP, проще тестировать. Чем больше тестов мы напишем, тем дальше продвинемся к простоте тестирования. Таким образом, обеспечение полной контролируемости системы помогает повысить качество проектирования.
Жесткая привязка усложняет написание тестов. Таким образом, чем больше тестов мы пишем, тем интенсивнее используем такие принципы, как DIP, и такие инструменты, как внедрение зависимостей, интерфейсы и абстракции, для минимизации привязок.
Как ни удивительно, выполнение простого и очевидного правила, гласящего, что для системы необходимо написать тесты и постоянно выполнять их, влияет на соответствие системы важнейшим критериям объектно-ориентированного программирования: устранению жестких привязок и повышению связности. Написание тестов улучшает архитектуру системы. (С. 201)

Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений (3-е издание). Издательский дом «Вильямс», 2008. Пер. с англ. – 720 стр.

Grady Booch and oth. Object-oriented Analysis and Design with Application. Third edition.

Аннотация. Книга представляет собой новое издание бестселлера Гради Буча по объектно-ориентированному анализу и проектированию. Авторы описывают объектные методы решения сложных проблем, связанные с разработкой систем и программного обеспечения. Используя многочисленные примеры, они иллюстрируют основные концепции объектно-ориентированного подхода на примере разработки систем управления, сбора данных и искусственного интеллекта. Читатели найдут в книге практичные советы, касающиеся важных вопросов анализа, проектирования, реализации и оптимального управления проектами.
Книга будет полезна системным аналитикам и архитекторам, программистам, преподавателям и студентам высших учебных заведений, а также всем специалистам по информационным технологиям.

Мастер Йода рекомендует:  Баннеры, как достичь высокого CTR

Гради Буч получил всемирное признание за его новаторскую работу в области архитектуры, проектирования и моделирования программных систем. С момента создания компании IBM Rational в 1981 году, он работал ее ведущим научным сотрудником. В марте 2003 года Гради получил звание почетного сотрудника IBM (IBM Fellow).
Гради – один из основоположников языка Unified Modeling Language (UML), а также автор нескольких оригинальных разработок компании Rational. Работая над многочисленными проектами, связанными с интенсивным программированием, Гради был не только архитектором программных систем, но и учил сотрудников принципам проектирования.

«Чем сложнее система, тем она уязвимее». Трудно себе представить строителя, размышляющего, а не вырыть ли еще один подвальный этаж под уже построенным стоэтажным зданием. Такое мероприятие было бы слишком дорогим и опасным. Как ни странно, пользователи программного обеспечения, не задумываясь, просят делать аналогичные изменения в программах. Более того, они считают, что для программиста эта задача не представляет никаких трудностей.
Наша неспособность справиться со сложностью, характерной для программного обеспечения, приводит к задержкам, дополнительным расходам и нарушениям технического задания. Такую ситуацию часто называют кризисом программного обеспечения, но, откровенно говоря, болезнь, длящуюся столь долго, следует называть нормальным состоянием. К сожалению, этот кризис уже привел в расточительному расходованию трудовых ресурсов – самого дорогого товара, – и многие возможности оказались упущенными. Для того чтобы создать новое программное обеспечение, необходимое пользователям, совершенно не достаточно просто собрать команду хороших программистов. Кроме того, во многих организациях большое количество персонала вынуждено отвлекаться на поддержку морально устаревших программ. Учитывая прямой и косвенный вклад, который вносит программное обеспечение в экономику наиболее развитых стран, а также огромные возможности, появляющиеся благодаря информатизации, следует признать, что мириться с такой ситуацией больше нельзя.
Как изменить эту мрачную картину? Поскольку источником всех проблем является сложность, присущая программному обеспечению, следует начать с изучения сложных систем, существующих в других научных дисциплинах. Действительно, если оглянуться вокруг, то можно обнаружить весьма успешно функционирующие системы, обладающие значительной сложностью. Некоторые из этих систем созданы человеком, например, космический корабль «Space Shuttle», туннель, соединяющий Англию и Францию, а также крупные корпорации. В природе существуют еще более сложные системы, такие как система циркуляции крови у человека (С. 34)

* * *
Дилетанты постоянно ищут некий волшебный метод или инструмент, который мог бы сделать процесс разработки программ тривиальным. В отличие от них, профессионалы знают, что такой панацеи не существует. Дилетанты хотят иметь готовые рецепты; профессионалы знают, что такой подход ведет к негодным проектным решениям и нагромождению лжи, за которой разработчики скрываются от ответственности за ранее принятые неверные решения. Дилетанты либо игнорируют документацию вообще, либо делают из нее фетиш, заботясь больше о том, как их бумажный продукт выглядит в глазах заказчика, чем о его сути. Профессионал признает важность документации, но всегда отдает предпочтение разумным архитектурными новшествам.
Процесс объектно-ориентированного анализа и проектирования невозможно описать с помощью рецептов, однако он определен достаточно хорошо, чтобы стать основой прогнозируемого и воспроизводимого процесса разработки программного обеспечения. В главе изучаются процессы анализа и проектирования (его цели, результаты, этапы и критерии успеха), а также приведен обзор процесса разработки программного обеспечения в целом. (С. 281)

Лучшие книги для начинающих программистов

У меня есть книга, которую я уже пытаюсь раза с третьего осилить, но всё никак не дойду до последней страницы. Называется она «Человеческий фактор. Успешные проекты и компании«, в простонародье «Peopleware» и является хрестоматией по разработке программного обеспечения наряду с классическим трудом под названием «Мифический человеко-месяц» от Фредерика Брукса. Так вот, там есть интересное выражение, которое гласит следующее:

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

Мой опыт работы с программистами лишь доказывает слова ДеМарко и Листера. Современная разработка ПО сводится к постоянному «гуглению» и чтению ответов на StackOverflow. В этом нет ничего плохого, все мы ежедневно сталкиваемся с проблемами решения которых не знаем, и порой «прогуглить» ответ получается куда быстрее нежели самостоятельно разбираться почему наш код не работает. Но серьёзная проблема кроется в ситуациях, когда у человека отсутствуют фундаментальные знания о предмете своей работы.

Софтостроение специфическая отрасль, где специалисту необходимо обладать рядом навыков и знаний. Возьмём самый простой пример: веб-разработка. Современному веб-разработчику нужно иметь представление о множестве тем: веб-программирование, веб-дизайн, основы безопасности веб-приложений, навыки системного администрирования (чаще всего unix-подобных систем), навыки работы с СУБД, паттерны проектирования веб-приложений, хотя бы поверхностно понимать методологии разработки ПО, их плюсы и минусы, не говоря уже о множестве инструментов, используемых ежедневно (VCS, IDE, ОС, пакетные менеджеры и так далее). Веб-разработчик, не знающий основ безопасности веб-приложений, может ненамеренно оставить серьёзную брешь в системе, которая в будущем обернётся серьёзными финансовыми потерями, а может и вовсе иметь катастрофические последствия. Порой «гугля» очередное решение проблемы, мы не задумываясь копируем код или используем сомнительную библиотеку, даже не заглянув внутрь. Главное работает 🙂 А ведь за всем этим могут скрываться серьёзные проблемы.

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

  • Программист-прагматик. Путь от подмастерья к мастеру
  • Чистый код
  • Джоэл о программировании (Joel on Software)
  • Джоэл. И снова о программировании (More Joel on Software)
  • Программист-фанатик (Passionate Programmer)
  • Человеческий фактор. Успешные проекты и команды (Peopleware)
  • Язык программирования C
  • Код. Тайный язык информатики


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

Программист-прагматик

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

Чистый код

Книга «Чистый код» это своего рода облегченная версия книги «Совершенный код». Последнюю читать куда тяжелее. Одна из основных проблем начинающих программистов это их код. Его невозможно читать 🙂 Он плохо структурирован, перегружен, а переменные и функции чаще всего имеют непонятные названия. Как придать человеческий вид вашему коду и повествует эта книга. Автором является известный «дядюшка Боб», личность категоричная, поэтому читать книгу советую со здравой долей скептицизма и не принимать каждое слово на веру. Но категоричность автора нисколько не уменьшает пользу от книги.

Джоэл о программировании

Если вы ни разу не слышали о Джоэле Спольски, то стоит задуматься, а тем ли делом вы занимаетесь 🙂 Мистер Спольски автор популярного блога «Joel on Software», а также. один из создателей StackOverflow 🙂 Книга является сборником эссе, опубликованных на личном блоге автора. В ней собраны самые популярные темы о программировании. Вот лишь малая часть из них:

  • Какой язык программирования стоит изучать первым
  • Что необходимо знать про UTF-8
  • Зачем программисту понимать алгоритмы и структуры данных
  • Как проводить собеседование с кандидатами на работу

Продолжением «Джоэл о программировании» является «Джоэл. И снова о программировании». Однозначный must read!

P.S. Перевод его блога (к сожалению, не все статьи) на русский язык можно посмотреть тут.

Программист-фанатик

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

2009 год). Написана программистом для программистов и затрагивает щепетильные для разработчиков темы:

  • Кто такой настоящий программист
  • Что необходимо знать программисту, чтобы всегда быть «на плаву»
  • Почему не стоит бояться конкуренции со стороны программистов-индусов 🙂
  • Как «не перегореть» на работе

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

Человеческий фактор

Эту книгу я рекомендовал на прошедшем Python митапе в Алматы в прошлом году. Она из тех книг, которые перечитывая — узнаёшь новое. С опытом начинаешь по-другому смотреть на, может быть, привычные для себя вещи. «Человеческий фактор» основан на эмпирических исследованиях, проводимых авторами. Цель заключалась в том, чтобы понять почему одни проекты (как и люди) успешны, а другие нет, само собой в нашем с вами общем деле. Читать в первую очередь рекомендую руководителям и менеджерам в сфере IT, разработчикам она тоже будет очень полезна.

Язык программирования C

Свой путь в мир программирования я, можно сказать, начинал с этого легендарного языка. Си является родителем для многих современных высокоуровневых языков, например того же Python. На нём написано множество софта, начиная от встроенного (привет прошивкам микроконтроллеров) заканчивая сложными вычислительными системами, работающими на Земле и в Космосе (ядро Linux, современный Интернет, ПО в медицине и военной промышленности и многое-многое другое). В рейтинге самых популярных языков он до сих пор занимает лидирующие позиции. Книга «Язык программирования C» является бессмертной классикой, а среди её авторов есть создатель Unix (Dennis Ritchie). Прелесть Си в том, что программист полностью контролирует ход выполнения программы: ручной доступ к памяти и работа с указателями, строгая типизация, контроль за размером входных данных и многое другое. За счёт низкого уровня при работе с «железом» компьютера, а следовательно отсутствия дополнительных абстракций (в простонародье «свистелок и перделок»), код выполняется очень быстро. Но за скорость нужно платить. В неумелых руках системы, написанные на Си, подвержены известным уязвимостям: переполнение стэка, переполнение кучи, ошибки форматирования строки и многие другие. Изучив Си, вы начнёте лучше понимать как работает компьютер, а следовательно станете лучшим программистом.

Код. Тайный язык информатики

Почему люди используют десятичную систему исчисления? Как работают триггеры и почему транзистор совершил революцию? В конце концов, как работает современный компьютер? Ответы на все эти вопросы вы найдёте в книге Чарльза Петцгольда «Код. Тайный язык информатики». Текст книги написан в увлекательной манере, с юмором и точно не заставит своего читателя скучать. Но материал по мере чтения становится всё сложнее и сложнее 🙂

Это не весь список книг, которые нужно прочитать. В первую очередь я постарался собрать книги именно для начинающих программистов, чтобы им легче было ориентироваться в столь хаотичной профессии, где постоянное обучение — залог будущего успеха, а застой — прямая дорогая к посредственности. Будьте жадными до знаний, читайте книги!

Если у вас есть идеи или замечания по моему списку книг, добро пожаловать в комментарии 🙂

Лучшие книги по программированию: список литературы и краткий обзор книг

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

«Совершенный код»

Автор одной из лучших книг по программированию — С. Макконнелл. Сам создатель утверждает: «Пишите код так, будто сопровождать его будет психопат-насильник, знающий, где вы живете».

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

  • «Рецепты» написания кодов высокого качества.
  • Механизмы отладки и тестирования.
  • Стратегии оптимизации кода.
  • Человеческие факторы, влияющие на разработку, и проч.

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

Содержание «Совершенного кода»

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

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

Макконнелл приводит в «Совершенном коде» несколько методов разработки: ревизии кода, парное программирование, неформальные и формальные инспекции, разработки на базе тестирования — темы широко раскрываются в материале.

Лучшей книгой по программированию это издание считает Джон Роббинс. Он говорит, что «Совершенный код» от корки до корки должен перечитвапть каждый программист ежегодно. Сам Д. Роббинс делает это на протяжении девяти лет.

«Рефакторинг»

Еще одна лучшая книга по программированию авторства Мартина Фаулера. Начнем знакомство со слов самого автора: «Каждый может написать код, понятный компьютеру. И лишь хорошие программисты пишут код, понятный человеку».

В нашем рейтинге это издание оказалось не случайно. Огромное число авторов пособий по программированию ссылаются в своих работах именно на творение М. Фаулера. В первую очередь, книге гарантировала успех ее практическая направленность. Фаулеру нет равных в демонстрации удачных показательных примеров.

Важные разделы «Рефакторинга»

Многие утверждают, что издание с первых слов буквально затягивает в мир рефакторинга. Самому примеру посвящено тут 40 страниц. Однако этого достаточно даже новичку, чтобы понять, что такое рефакторинг, каковы его цели и принципы, методы реализации. Автор подробно рассказывает, когда он необходим, какой код требует улучшения. Фаулер вводит собственное правило «трех ударов»: если программист делает аналогичную операцию в третий раз, это достаточный сигнал для начала рефакторинга.

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

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

«Паттерны проектирования»

Ищете отличные книги по программированию для начинающих? Тогда обратите внимание на это издание союза авторов:

Если вы попросите любого из профессионалов посоветовать вам издание по объектно-ориентированному программированию, то в 9 из 10 случаев вам посоветуют именно эту книгу! Издание давно перешло через статус «бестселлер». Смотрите сами, ведь книга была опубликована более чем на 30 языках и распространена 500 тысячами экземпляров.

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

Безусловно, это одна из лучших книг для изучения программирования. Но отметим, что перед ее прочтением у читателя уже должны быть накоплены знания по объектно-ориентированному проектированию. Издание недостаточно просто прочесть. Книгу нужно буквально пропустить через себя.

Содержание «Паттернов проектирования»

Издание состоит из 350 страниц. Книга поделена на две части:

  • Общее понятие паттернов в проектировании, описание их практического применения.
  • Каталог с паттернами с описанием структуры, назначения, особенностей реализации.

Все паттерны авторы разделяют на три основные категории:

  • Порождающие. Решают задачи инстанцирования классов.
  • Структурные. Решение вопросов компоновки системы на базе классов и объектов.
  • Паттерны поведения. Связаны с распределением обязанностей между классами, алгоритмами.

Единственный минус книги: примеры написаны на малоизвестном сегодня языке Smalltalk.

«Чистый код»

Творение Робина Мартина нельзя не причислить к лучшим книгам про программирование. Сам автор предупреждает читателя: «Написание кода — тяжелая задача. Тут точно придется попотеть».

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

Три части «Чистого кода»

Свое издание Р. Мартин разделил на три части:

  • Теоретический раздел. Это именно теория написания «чистого» кода: приемы, паттерны и принципы, которые должен знать каждый разработчик.
  • Практический раздел. Автор рассказывает, как следует «чистить» коды существующих на сегодня приложений.
  • Итог. Здесь располагается перечень «запахов кода», а также инструкции по их устранению.

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

Робин Мартин вводит основное правило: с каким бы участком кода вы не работали, ваша задача — сделать его чище, качественнее, чем он был. Только в таком случае код не будет «загнивать».

Безусловно, это одна из лучших книг по программированию для начинающих. Читатели отмечают только один ее минус: Java-ориентированность.

«Искусство программирования»

Продолжаем знакомить вас с лучшими книгами по основам программирования. Создатель данной, Дональд Кнут, метко подмечает: «Лучший способ в чем-то разобраться — попробовать научить этому компьютер». Почитатели книги говорят, что программист, не имеющий «Искусство программирования» в своей библиотеке, похож на священнослужителя без Библии.

Чем же хороша монография Д. Кнута? Автор подробно описывает и анализирует фундаментальные алгоритмы информатики, приводит практические задачи для усвоения материала. Работа была начата еще в 1962 году. В полном варианте издание будет включать в себя 7 томов. Пока что издано три — это уже 3000 страниц. Книга не является готовым «рецептом» к решению задач. Читать ее нелегко — примеры рассматриваются на низкоуровневом языке программирования, созданного автором для гипотетического компьютера.

Тома «Искусства программирования»

Рассмотрим части научно-практического произведения:

  • Первый том. Посвящен основным алгоритмам и в целом подготавливает читателя к работе над книгой. Рассматриваются математические теоремы, термины, язык программирования, созданный автором, — все то, на чем будет базироваться повествование. Также здесь упомянуты информационные системы и алгоритмы взаимодействия с ними.
  • Второй том. Рассматриваются упражнения со случайными числами и их последовательностями. Описываются важные вопросы арифметики: системы счисления, арифметика чисел, имеющих плавающую точку, полиноминальная арифметика и проч.
  • Третий том. Алгоритмы поиска и сортировки.
  • Четвертый том. Написан не полностью, готовится к выпуску. Здесь будут разбираться вопросы комбинаторного поиска.

«Искусство программирования» было высоко оценено Биллом Гейтсом. В своем отзыве о издании он сказал, что каждый, кто смог осилить творение Кнута, определенно может отправить резюме в его корпорацию.

«Программист-прогматик»

Вам нужны лучшие книги для изучения программирования с нуля? В вашей библиотеке обязательно должно быть это творение Э. Ханта и Д. Томаса. Кто такие программисты-прагматики? Те специалисты, которые прежде всего смотрят на практическую успешность собственных проектов.

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

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

Главы «Программиста-прагматика»

Давайте кратко рассмотрим содержание книги:

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

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

Библиотека программиста

Представим список из нескольких культовых произведений, признанных самыми лучшими книгами по программированию с нуля:

  • «Эффективная работа с унаследованным кодом». Создатель — М. К. Физерс.
  • «JavaScript: сильные стороны». Создатель — Д. Крокфорд.
  • «Шаблоны корпоративных приложений». Создатель — М. Фаулер.
  • «Язык программирования С». Создатели — Б. У. Керниган, Д. М. Ритчи.
  • «Эффективное использование С+++». Создатель — С. Майерс.
  • «Экспериментальное программирование». Создатель — К. Бек.
  • «Алгоритмы. Построение и анализ». Создатели — Т. Кормен и др.
  • «Регулярные выражения». Создатель — Д. Фридл.
  • «Современное проектирование на С++». Создатель — А. Александреску.

Издания для юных программистов

Представим также лучшие книги по программированию для детей:

  • «Scratch для детей». Автор — М. Марджи.
  • «JavaScript для детей». Автор — Н. Морган.
  • «Python для детей». Автор — Д. Бриггс.

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

5 обязательных к прочтению книг для программиста

Опубликовано shwan в 19.12.2020

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

Стив Макконнелл — Совершенный код

Это действительно самая важная книга в карьере любого программиста, так как до ее прочтения он просто не имеет права себя таковым называть. По своей сути это «библия программиста», в которой очень доходчиво и просто изложены «заповеди программирования». И читать ее нужно систематически, чтобы освежать в памяти, осознавать и применять на практике изложенный в ней материал. Данная книга рассматривает вопросы проектирования, написания программного кода, тестирование, отладку и поддержку программного обеспечения. И каждый из этапов автор рассматривает очень подробно, приводя примеры. Основная идея книги заключается в том, что для написания качественного программного продукта необходимо контролировать его ложность на каждом этапе разработки, и на всех его уровнях.

Джеффри Рихтер — CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#

Очень подробное и грамотное руководство по языку разработке на языке C#. Книга подробно описывает внутреннее устройство и функционирование общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 4.5. Материал книги направлена на обучение созданию по-настоящему надежных приложений любого вида, в том числе с использованием Microsoft Silverlight, ASP.NET, Windows Presentation Foundation и т.д. Материал излагается грамотным техническим языком. Данная книга является обязательной для изучения всем разработчикам на платформе .NET Framework и использующих язык программирования C#.

Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес — Приемы объектно-ориентированного проектирования. Паттерны проектирования

Данная книга подробно и понятно описывают простые решения типичных задач, возникающих в объектно-ориентированном проектировании, рассматривает наиболее популярные и часто используемые паттерны. Материал содержит множество красивых, а главное работающих на практике решений, улучшающих надежность и качество кода, позволяя повысить продуктивность разработки. Учитывая, что большинство проектов сейчас разрабатываются в объектно-ориентированном стиле, данная книга обязательна для чтения для любого разработчика.

Мартин Фаулер, Кент Бек, Джон Брант, Дон Робертс — Рефакторинг. Улучшение проекта существующего кода

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

Эндрю Хант, Дэвид Томас, А. Алексашин — Программист-прагматик. Путь от подмастерья к мастеру

Данная книга содержит невероятное число полезных и правильных советов программистам. Авторы исследуют суть процесса разработки программного обеспечения, рассматривают требования к работоспособности программы, ее гибкости и адаптивности к изменениям. В книге очень подробно описаны подходы и технологии обеспечивающие надежность работы программы, например программирование по контрактам, а также юнит-тестирование. Материал будет полезен всем разработчикам, которые хотят добиваться высокого качества меньшими силами и за более короткий промежуток времени.

Добавить комментарий