Ежегодно выходит множество книг по программированию, начиная от описания определенных языков программирования, заканчивая восхвалением методологий, которые, якобы, должны изменить этот компьютерный мир к лучшему. Наиболее сложной задачей для читателя в этом случае является выбор из всего этого многообразия книги, на которую действительно будет не жалко потраченных усилий. На многих форумах довольно легко найти перечень рекомендуемых книг по С++, C#, ООП и чему угодно еще, которые люди относят к классике в своей области. Я же хочу собрать в одном месте книги, которые считаются классическими в различных областях компьютерной науки. При этом я не собираюсь основываться исключительно на собственном мнении (более того, я не готов основываться на мнении любого ОДНОГО человека), а воспользоваться для этих целей мнением компьютерного сообщества.
Хорошей практикой в подборе компьютерной литературы является рассмотрение «перекрестных ссылок» литературных источников. Например, если вы возьмете любую книгу, так или иначе связанную с объектно-ориентированным анализом и проектированием, то в перечне литературы вы несомненно найдете труды Бертрана Мейера, Гради Буча, упоминание книги Банды Четырех (GoF) и, наверняка, Рефакторинг Мартина Фаулера. Такую же картину вы можете наблюдать и пролистывая книги по С++, .Net, базам данных, управлению проектами или любой другой области. Кроме того, многие авторы в перечне литературы приводят не просто голый список, а список с небольшими комментариями, по которым легче судить, какая книга является однодневкой, а какая классической.
Теперь вернемся к самому перечню книг. Приведенный список, ни в коем случае не является окончательным, будет развиваться и дополняться, ведь главная его цель – собрать настоящую классику компьютерной литературы, но не абстрактную, а такую, которая бы помогла практикующему разработчику в заполнении брешей в той или иной области знаний.
Книги по С++
1. Бьерн Страуструп. Язык программирования С++. Специальное издание. Бином, Невский диалект, 2008
| Эта книга стоит первой не потому, что ее автор является по совместительству также и автором языка программирования С++, а потому что она содержит невероятную концентрацию мысли на одну строку текста. К этой книге стоит возвращаться снова и снова, и с высоты своего опыта вы будете находить все новые и новые сведения о программировании вообще и о С++ в частности. Рецензия |
2. Бьерн Страуструп. Дизайн и эволюция языка C++. ДМК Пресс, Питер, 2006
| Язык С++ является таким, каким он есть со всеми его достоинствами и недостатками. Но прежде чем говорить о тех или иных архитектурных вопросах, стоит посмотреть на то, в каких условиях находились его авторы и почему они принимали те или иные решения. В этой книге рассказывается именно об этом: для чего были введены ссылки, какие силы двигали командой разработчиков языка при реализации первых шаблонов, почему библиотека ввода/вывода такая, какая она есть и так далее. Все эти сведения помогают несколько мягче относиться к недостаткам языка и с еще большим уважениям относиться к его достоинствам. Рецензия |
3. Скотт Мейерс. Эффективное использование С++
| 3.1. Скотт Мейерс. Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ. 3-е издание. ДМК Пресс, 2006 Рецензия |
| 3.2. Скотт Мейерс. Эффективное использование С++. 35 новых способов улучшить стиль программирования. Питер, 2006 Рецензия |
| 3.3. Скотт Мейерс. Эффективное использование STL. Питер, 2002 Рецензия |
Все три книги Скотта Мейерса относятся к категории «для продолжающих» и будут полезны людям уже знакомым с С++, но желающим поднять свои знания на следующий уровень. Книги уже давно стали классикой в своей области и являются родоначальниками серии «Effective programming», главным редактором которой является Скотт Мейерс.
4. Герб Саттер. Сложные задачи (Exceptional C++)
| 4.1. Герб Саттер. Решение сложных задач на C++. Вильямс, 2008 Рецензия |
| 4.2. Герб Саттер. Новые сложные задачи на C++. Вильямс, 2005 Рецензия |
Книги Герба Саттера по праву считаются лучшими в области «продвинутых» книг по языку С++. В них рассматриваются интересные задачи и не менее интересные решения, исследуются темные углы языка С++, включая тему безопасности исключений, которая является весьма сложной и наиболее любимой автором (не зря первые две книги автора названы “Exceptional C++” и “More Exceptional C++”). Главы этих книг доступны на сайте автора (http://gotw.ca), кроме того на сайте Герба можно найти множество статей серии Effective Concurrency, которые уже в ближайшее время выйдут в виде новой книги.
5. Андрей Александреску. Современное проектирование на С++. Вильямс, 2004
| В своей книге Александреску показывает, как можно реализовать основные шаблоны проектирования, описанные в книге «банды четырех», с помощью современного компилятора С++. Книга требует серьезной подготовки как в области шаблонов проектирования (design patterns), так и шаблонов С++ (C++ templates), поэтому я бы рекомендовал ее к прочтению после тщательного изучения книги «банды четырех» и книги Джосаттиса и Вандервурда по шаблонам С++. Рецензия |
6. Герб Саттер и Андрей Александреску. Стандарты программирования на С++. Вильямс, 2008
| Книга представляет собой концентрацию опыта, накопленного авторами и компьютерным сообществом в области программирования на С++. Ее можно рассматривать как краткую версию «продвинутых» книг по языку программирования С++, ставших такими популярными в последнее время. Рецензия |
7. Дэвид Вандевурд, Николай М. Джосаттис. Шаблоны C++. Справочник разработчика. Вильямс, 2008
| Книга представляет собой наиболее полное руководство по шаблона С++, начиная от простых шаблонов функций и классов, заканчивая метапрограммированием и определением фундаментальных типов во время компиляции. Она прекрасно дополняет книгу Александреску «Современное проектирование», а точнее позволяет понять и реализовать самостоятельно все то, о чем пишет Андреи в своей книге. Рецензия |
Книги по Java
1. Bruce Eckel. Thinking in Java, 4th Edition. Prentice Hall Ptr, 2006
| Книга Брюса Эккеля является, безусловно, лучшим учебником по языку программирования Java с введением в объектно-ориентированное программирование и шаблоны проектирования. Автор обладает отличным стилем изложения, приводит интересные примеры и не стесняется критики разработчиков языка. В 2009-м году вышла на русский язык под названием «Философия Java», отличительной особенностью русскоязычного варианта является отсутствие пяти глав: Strings, Container In Depth, Enumerated Types, Annotations и Graphic User Interface. Поэтому вопрос о том, какой вариант выбирать остается открытым. |
2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.
| 2.1. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала. Том 1. Основы. 8-е издание. Вильямс, 2008 |
| 2.2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.Том 2. Тонкости программирования. 8-е издание. Вильямс, 2008
|
Наиболее фундаментальный труд по языку Java.
3. Joshua Bloch. Effective Java, 2nd Edition. Prentice Hall, 2008
| Книга Джошуа Блоха занимает то же положение на полке Java программиста, что и книги Скотта Мейерса и Герба Саттера на полке С++ программиста. Эта книга содержит множество приемов и идиом и будет полезна каждому, кто всерьез занимается этим замечательным языком.
|
4. Brian Goetz et al. Java Concurrency in Practice. Addison-Wesley Professional, 2006
| Хотя язык программирования Java значительно упрощает разработку многопоточных приложений, многопоточность все еще остается одной из наиболее сложных задач, с которыми сталкивается современный разработчик. Эта книга как раз и призвана помочь в решении подобных задач на языке Java. Рецензия |
Книги по .Net, C#
1. Джеффри Рихтер. CLR via C#
| 1.1. Джеффри Рихтер. CLR via C#. Питер, Русская редакция, 2007 Рецензия |
| 1.2. Jeffrey Richter. CLR via C#. 3d Edition. Microsoft Press, 2010 |
Эта книга уже давно стала классикой в области программирования на платформе .Net. Именно она является первой книгой, на которую необходимо обратить внимание каждому разработчику, который рассчитывает использовать платформу .Net в своей профессиональной деятельности. Третье издание книги подверглось существенным переработкам, в результате чего в ней отражены новшества C# 3.0 и C# 4.0, а также содержит новую часть, полностью посвященную вопросам многопоточности.
2. Дон Бокс, Крис Селлз. Основы платформы .NET. Том 1. Общеязыковая исполняющая среда. Вильямс, 2003
| При своем небольшом объеме (всего 288 страниц) и почтенном возрасте (оригинал вышел в 2002 году) книга остается ценным экспонатом в библиотеке .Net программиста. Поскольку авторы описывают исключительно фундаментальные концепции платформы, причем делают это с невероятным талантом, совмещая доступность изложения и глубину, поэтому эта книга остается, и будет оставаться актуальной на протяжении всего времени жизни платформы .Net. |
3. Krzysztof Cwalina, Brad Abrams. Framework Design Guidelines 2nd Edition. Addison-Wesley Professional, 2008
| Разработка качественных программных систем является весьма сложной задачей, а разработка качественных библиотек (особенно framework-ов) является поистине вершиной мастерства архитекторов и разработчиков. Сложность здесь кроется в специфике принимаемых решений, ведь акцент серьезно смещается в сторону простоты и удобства использования, расширяемости и надежности. Но хотя эта тема является центральной, книга будет также весьма полезна и простым разработчикам, ведь знание ключевых идиом языка является совершенно необходимым, когда команда смотрит хотя бы немного дальше своего носа, и заботится не только о написании кода, но и о его последующем сопровождении. Рецензия |
4. Bill Wagner. Effective C#
| 4.1. Bill Wagner. Effective C# (Covers C# 4.0): 50 Specific Ways to Improve Your C#. 2nd Edition. Addison-Wesley Professional, 2010 |
| 4.2. Bill Wagner. More Effective C#: 50 Specific Ways to Improve Your C#. Addison-Wesley Professional, 2008 |
Тема эффективности использования стала настолько популярной, что подобная литература появляется по большинству языков программирования и многим технологиям. Язык программирования C# не является исключением. Представителем серии «эффективного программирования» на языке C# являются эти две книги Била Вагнера. Первая книга вышла еще в 2004-м году и посвящена C# 1.0 и рассматриваются самые разные вопросы, начиная от различий между классами и структурами, заканчивая важностью строгой гарантией исключений и проблемами взаимодействия управляемого и неуправляемого кода. Вторая книга хотя и вышла незадолго до официального выхода C# 3.0, но уже отражает всю специфику этой версии языка и платформы. В книге рассматриваются особенности работы с обобщениями (generics), многопоточностью (в том числе и при работе с пользовательским интерфейсом), новые возможности языка C# 3.0 и отдельно рассматриваются вопросы, связанные с LINQ. В марте 2010 года вышло второе, переработанное издание первой книги, в которой отражены изменения C# 4.0, включая такие новшества как PLINQ и тип Dynamic (которому посвящена целая глава).
Книги по ООП, шаблонам проектирования
1. Бертран Мейер. Объектно-ориентированное конструирование программных систем, 2-е издание. Русская редакция, 2005
| Книга, которую многие по своей фундаментальности в области объектно-ориентированного программирования сравнивают с творением Дональда Кнута (причем совершенно без преувеличения) в области алгоритмов и структур данных. Эта книга является наиболее фундаментальным трудом по объектной парадигме, когда-либо выходивших на русском или на английском языках. Книга охватывает широкий круг вопросов, начиная от вопросов наследование, инкапсуляция, модульности, повторного использования, заканчивая автоматическим управлением памятью, шаблонами проектирования и проектированием по контракту (который только спустя два десятилетия начинает набирать обороты в mainstream языках и технологиях).
|
2. Гради Буч. Объектно-ориентированный анализ и проектирование, 3-е издание. Вильямс, 2008
| Еще одна классическая книга по объектно-ориентированному программированию, но в отличие от книги Бертрана Мейера имеет менее формальный и более описательный характер. В книге потрясающе описана проблема сложности ПО, описаны роли абстракции и иерархии, изложено сравнение наиболее популярные на сегодняшний день методологии разработки и многое другое. Рецензия |
3. Эрик Гамма, Ральф Джонсон, Ричард Хелм, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Питер, 2007
| Это та самая, знаменитая книга «банды четырех», после выхода которой началось стремительное развитие идеи шаблонов проектирования в мире разработки ПО. После ее выхода идея шаблонов начала распространяться и развиваться, и сегодня идеи шаблонов применяется не только в контексте проектирования, а и практически в каждой области разработки программного обеспечения. Рецензия |
4. Мартин Фаулер. Рефакторинг. Улучшение существующего кода. Символ-Плюс, 2008
| Книга стала родоначальником столь популярного ныне принципа постепенного улучшения кода без изменения функциональности, что сделало ее уже давно классической. Помимо перечня рефакторингов в книге много говорится о качестве кода, о его влиянии на производительность программы и стоимость ее сопровождения; содержится множество примеров некачественного кода, что помогает понять, когда стоит применять рефакторинг, а когда нет.
Рецензия |
Книги по управлению проектами
1. Фредерик Брукс. Мифический человеко-месяц или Как создаются программные системы, 2-е издание. Символ-Плюс, 2006
| Эта книга (как и многие другие в этом перечне) не нуждается в представлении. Такие понятия, как «мифический человеко-месяц», «смоляная яма», «серебряная пуля» и многие другие уже давно стали классическими, фрагменты из книги постоянно появляются на форумах, в статьях, их цитируют известные современные авторы. Первое издание книги вышло более трех десятилетий лет назад, но она продолжает будоражить умы все новых и новых читателей, и продолжает оставаться такой же актуальной, как и много лет назад. Рецензия |
2. Том ДеМарко и Тимоти Листер. Человеческий фактор. Успешные проекты и команды. 2-е издание. Символ-Плюс, 2009
| Книга «Человеческий фактор» является отличным доказательством того, что, несмотря на стремительное развитие технологий, человеческий фактор является одной из наиболее сложных проблем при построении программных систем. Фредерик Брукс (читая лекции своим студентам) выделил следующие фундаментальные концепции книги: 1) важность кристаллизации команд (team jelling) и понятие травли команд (teamicide); 2) важность рабочего пространства; 3) акцент на «качестве сотрудников»; 4) влияние (негативное) на переезд крупного программного проекта с одного места (географического) в другое. Этой книге уготована долгая жизнь по той же причине, «почему рассказы Гомера пережили тысячи лет: эти рассказы о людях, и они также верны сегодня, как и тысячу лет назад». Рецензия |
3. Эдвард Йордон. Путь камикадзе. 2-е издание. Лори, 2008
| Еще одна классическая книга по управлению проектами, но в отличие от предыдущих книг, посвящена работе над безнадежными проектами (риск провала которых превышает 50%). В книге рассматривается широкий спектр проблем, начиная от политики и принципов ведения переговоров, заканчивая ролью человеческого фактора и важностью инструментальных средств.
Рецензия |
Книги по WinAPI/WinSocks
1. Джеффри Рихтер, Кристоф Назарр. Windows via C/C++. 5-е издание. Питер, Русская Редакция, 2009
| Это классическая и однозначно самая лучшая книга по программированию в Microsoft Windows. Если вам нужно понять что такое объекты ядра, потоки, принципы синхронизации потоков, таймера, асинхронный ввод-вывод, архитектура памяти, структурная обработка исключений, DLL и все что с ними связано и многое другое, то эта книга именно то, что нужно. Рецензия |
2. Джеффри Рихтер, Джейсон Кларк. Программирование серверных приложений для Microsoft Windows 2000. Питер, Русская Редакция, 2001
| Прекрасное дополнение к предыдущей книги Джеффри Рихтера для разработчиков серверных приложений. Хотя эта книга и не является столь популярной, как предыдущая (в связи со своей более узкой направленностью), она также отличается глубиной изложения, которую весьма сложно найти в каком-либо другом источнике. Поэтому если вам интересна тема разработки серверных приложений – книга будет очень полезной. Рецензия |
3. Энтони Джонс, Джим Оланд. Программирование в сетях Microsoft Windows. Питер, Русская Редакция, 2002
| Наиболее полное руководство по разработке сетевых приложений с использованием WinAPI. Если вдруг понадобиться поработать с NetBIOS, именованными каналами, реализовать асинхронный ввод-вывод с помощью портов завершения, настроить качество обслуживания или воспользоваться простыми (Raw) сокетами, эта книга будет как нельзя кстати. |
Книги по COM/ATL
1. Дон Бокс. Сущность технологии COM, Питер
| Если вы все же каким-то образом связаны с этой замечательной технологией, «с маршалингом, моникерами, распределенными потоками, агрегатами и миллионом других вещей, которые понимал только Дон Бокс, и даже Дон Бокс больше не может на это смотреть», то эта книга должна быть первой в вашем списке. А если серьезно, то это лучшая и единственная книга по технологии COM, которая поможет вам понять эту технологию. Рецензия |
2. Кристофер Таваре, Кирк Фертитта, Брент Ректор, Крис Селлз. ATL 8. Внутренняя структура и применение. 2-е издание. Вильямс, 2007
| Лучшая и единственная (ну, не совсем единственная, но остальные книги выходили не позднее 2000 года) книга по библиотеке ATL. |
Алгоритмы
1. Дональд Э. Кнут. Искусство программирования
Одна из наиболее известных в мире книг по программированию, Фундаментальный Труд, которому автор посвятил всю свою жизнь. И хотя сегодня современный прикладной программист не каждый день сталкивается с проблемами, решение которых он мог бы найти на страницах этой книги, это ни сколько не умаляет ее достоинств. Несмотря на стремительное развитие языков, инструментов, библиотек, каждый хороший программист периодически возвращается к ключевым темам, без знания которых невозможно стать Настоящим Программистом.
2. Генри C. Уоррен, мл. Алгоритмические трюки для программистов. Вильямс, 2007
| Эта книга не содержит сведения о структурах данных, сложных алгоритмах сортировки и поиска, принципах хеширования или двоичных деревьях, основное содержание книги посвящено всего лишь битам, массивам бит и операциям над ними, а также тем, какое множество задач можно решить с помощью таких операций. Книга будет полезна любителям оптимизации (ведь, даже сегодня далеко не все работают на процессорах с тактовой частотой в несколько гигагерц), разработчикам компиляторов и всем любителям алгоритмических трюков и этюдов.
Рецензия |
Общие вопросы программирования
1. Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру. Лори, 2009
| Это одна из тех книг, которые учит постоянно двигаться вперед в своем профессиональном плане, не зацикливаться на определенных языках или платформах, на методологиях и парадигмах программирования, на инструментах и идиомах. В книге рассматривается широкий ряд вопросов, здесь вам и проблемы «добычи» требований, и особенности написания спецификаций, и сложность оценки сроков, и важность тестирования, и закон Деметера, и выбор между сложностью разработки и сопровождения и многое другое. Книга представляет собой такой себе программистско-философский труд, который просто заставляет задуматься над многими (хотя может быть и очевидными для многих) вопросами разработки ПО.
Рецензия |
2. Джон Бентли. Жемчужины программирования, 2-е издание. Питер, 2007
| Нельзя назвать эту книгу простой, поскольку темы, рассматриваемые в книге, таковыми не являются, но стиль изложения материала и перечень лирических отступлений существенно упрощает восприятие (книга больше напоминают рубрику «Занимательное программирование», и является одной из самых известных книг в своей области). Несмотря на это, темы, затронутые в книги, являются исключительно серьезными. Здесь и общие вопросы программирования, и алгоритмы, и структуры данных, и вопросы оптимизации и отладки, и умение делать предварительные оценки, и много чего еще. Только при чтении книги нужно следовать совету автора и не спешить, а тщательно продумывать и прорабатывать весь материал, вот тогда от книги будет максимальная отдача.
Рецензия |
3. Стив Макконнел. Совершенный код. 2-е издание. Питер, 2007
| По статистике над одним проектом в среднем работает 10 поколений разработчиков, а это значит, что большая часть жизненного цикла ПО составляет его поддержка и сопровождение. Из чего можно сделать простой вывод, что за _чтением_ программы проводится гораздо больше временем, чем за ее _написанием_, а это, в свою очередь значит, что качество кода играет очень важную роль. В этом вопросе книга Стива Макконнелла (как и многие книги в этом списке) является лучшей в своей области. В книге рассматривается широкий спектр вопросов, так или иначе связанных с кодированием, начиная от правил именования переменных (которым выделены 52 (!) страницы), заканчивая рефакторингом и рекомендациям по оптимизации.
Рецензия |
4. Джеффри Фриддл. Регулярные выражения. 3-е издание. Символ-Плюс, 2008
| Наиболее фундаментальный труд по теме регулярных выражений, который когда-либо выходил в свет (все же книга посвящена только этой теме и содержит 608 страниц). Книга содержит описание работы трех типов механизмов регулярных выражений, содержит примеры оптимизации и особенности применения в различных языках программирования и средах. |
Базы данных
1. К. Дж. Дейт. Введение в системы баз данных. 8-е издание. Вильямс, 2006
| Книга прекрасно отражает, насколько обширной является тема систем управления базами данных, она отличается немалым объемом (более 1300 страниц), а перечень литературы к каждой из глав дает понять, что это только верхушка айсберга. Книга не описывает ни одну из существующих СУБД, а сосредоточена прежде всего на реляционной модели (хотя довольно часто проскакивает критика о несоответствии реляционной модели в существующих реализациях) и является наиболее фундаментальным трудом в своей области. |
2. Джеффри Ульман и др. Системы баз данных полный курс, Вильямс, 2004
| Еще одна классическая книга из области систем управления базами данных. Книга также обладает немалым объемом (1088 страниц), покрывает большинство наиболее актуальных тем этой области, но является более практичной, нежели книга Криса Дейта. Книга также не привязывается к конкретной СУБД и будет полезна всем читателям, которые интересуются этой тематикой. |