понедельник, 15 марта 2010 г.

Классические книги по программированию

Ежегодно выходит множество книг по программированию, начиная от описания определенных языков программирования, заканчивая восхвалением методологий, которые, якобы, должны изменить этот компьютерный мир к лучшему. Наиболее сложной задачей для читателя в этом случае является выбор из всего этого многообразия книги, на которую действительно будет не жалко потраченных усилий. На многих форумах довольно легко найти перечень рекомендуемых книг по С++, C#, ООП и чему угодно еще, которые люди относят к классике в своей области. Я же хочу собрать в одном месте книги, которые считаются классическими в различных областях компьютерной науки. При этом я не собираюсь основываться исключительно на собственном мнении (более того, я не готов основываться на мнении любого ОДНОГО человека), а воспользоваться для этих целей мнением компьютерного сообщества.

Хорошей практикой в подборе компьютерной литературы является рассмотрение «перекрестных ссылок» литературных источников. Например, если вы возьмете любую книгу, так или иначе связанную с объектно-ориентированным анализом и проектированием, то в перечне литературы вы несомненно найдете труды Бертрана Мейера, Гради Буча, упоминание книги Банды Четырех (GoF) и, наверняка, Рефакторинг Мартина Фаулера. Такую же картину вы можете наблюдать и пролистывая книги по С++, .Net, базам данных, управлению проектами или любой другой области. Кроме того, многие авторы в перечне литературы приводят не просто голый список, а список с небольшими комментариями, по которым легче судить, какая книга является однодневкой, а какая классической.
Теперь вернемся к самому перечню книг. Приведенный список, ни в коем случае не является окончательным, будет развиваться и дополняться, ведь главная его цель – собрать настоящую классику компьютерной литературы, но не абстрактную, а такую, которая бы помогла практикующему разработчику в заполнении брешей в той или иной области знаний.

Книги по С++

1. Бьерн Страуструп. Язык программирования С++. Специальное издание. Бином, Невский диалект, 2008

cpplanguage

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

Рецензия

2. Бьерн Страуструп. Дизайн и эволюция языка C++. ДМК Пресс, Питер, 2006

cppdesign

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

Рецензия

3. Скотт Мейерс. Эффективное использование С++

effectivecpp

3.1. Скотт Мейерс. Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ. 3-е издание. ДМК Пресс, 2006

Рецензия

moreeffectivecpp 3.2. Скотт Мейерс. Эффективное использование С++. 35 новых способов улучшить стиль программирования. Питер, 2006

Рецензия

effectivestl

3.3. Скотт Мейерс. Эффективное использование STL. Питер, 2002

Рецензия

Все три книги Скотта Мейерса относятся к категории «для продолжающих» и будут полезны людям уже знакомым с С++, но желающим поднять свои знания на следующий уровень. Книги уже давно стали классикой в своей области и являются родоначальниками серии «Effective programming», главным редактором которой является Скотт Мейерс.

4. Герб Саттер. Сложные задачи (Exceptional C++)

exceptionalcpp 4.1. Герб Саттер. Решение сложных задач на C++. Вильямс, 2008

Рецензия

exceptionalcppstyle 4.2. Герб Саттер. Новые сложные задачи на C++. Вильямс, 2005

Рецензия

Книги Герба Саттера по праву считаются лучшими в области «продвинутых» книг по языку С++. В них рассматриваются интересные задачи и не менее интересные решения, исследуются темные углы языка С++, включая тему безопасности исключений, которая является весьма сложной и наиболее любимой автором (не зря первые две книги автора названы “Exceptional C++” и “More Exceptional C++”). Главы этих книг доступны на сайте автора (http://gotw.ca), кроме того на сайте Герба можно найти множество статей серии Effective Concurrency, которые уже в ближайшее время выйдут в виде новой книги. 

5. Андрей Александреску. Современное проектирование на С++. Вильямс, 2004

moderncppdesign

В своей книге Александреску показывает, как можно реализовать основные шаблоны проектирования, описанные в книге «банды четырех», с помощью современного компилятора С++. Книга требует серьезной подготовки как в области шаблонов проектирования (design patterns), так и шаблонов С++ (C++ templates), поэтому я бы рекомендовал ее к прочтению после тщательного изучения книги «банды четырех» и книги Джосаттиса и Вандервурда по шаблонам С++.

Рецензия

6. Герб Саттер и Андрей Александреску. Стандарты программирования на С++. Вильямс, 2008

cppcodingstandarts

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

Рецензия

7. Дэвид Вандевурд, Николай М. Джосаттис. Шаблоны C++. Справочник разработчика. Вильямс, 2008

cpptemplates

Книга представляет собой наиболее полное руководство по шаблона С++, начиная от простых шаблонов функций и классов, заканчивая метапрограммированием и определением фундаментальных типов во время компиляции. Она прекрасно дополняет книгу Александреску «Современное проектирование», а точнее позволяет понять и реализовать самостоятельно все то, о чем пишет Андреи в своей книге.

Рецензия

Книги по Java

1. Bruce Eckel. Thinking in Java, 4th Edition. Prentice Hall Ptr, 2006

thinking_in_java

Книга Брюса Эккеля является, безусловно, лучшим учебником по языку программирования Java с введением в объектно-ориентированное программирование и шаблоны проектирования. Автор обладает отличным стилем изложения, приводит интересные примеры и не стесняется критики разработчиков языка. В 2009-м году вышла на русский язык под названием «Философия Java», отличительной особенностью русскоязычного варианта является отсутствие пяти глав: Strings, Container In Depth, Enumerated Types, Annotations и Graphic User Interface. Поэтому вопрос о том, какой вариант выбирать остается открытым.

2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.

core_java_vol1 2.1. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала. Том 1. Основы. 8-е издание. Вильямс, 2008
core_java_vol2 2.2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.Том 2. Тонкости программирования. 8-е издание. Вильямс, 2008


Наиболее фундаментальный труд по языку Java.

3. Joshua Bloch. Effective Java, 2nd Edition. Prentice Hall, 2008

effective_java Книга Джошуа Блоха занимает то же положение на полке Java программиста, что и книги Скотта Мейерса и Герба Саттера на полке С++ программиста. Эта книга содержит множество приемов и идиом и будет полезна каждому, кто всерьез занимается этим замечательным языком.

4. Brian Goetz et al. Java Concurrency in Practice. Addison-Wesley Professional, 2006

java_concurrency

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

Рецензия

Книги по .Net, C#

1. Джеффри Рихтер. CLR via C#

clr_via_csharp 1.1. Джеффри Рихтер. CLR via C#. Питер, Русская редакция, 2007

Рецензия

clr_via_csharp_third 1.2. Jeffrey Richter. CLR via C#. 3d Edition. Microsoft Press, 2010

Эта книга уже давно стала классикой в области программирования на платформе .Net. Именно она является первой книгой, на которую необходимо обратить внимание каждому разработчику, который рассчитывает использовать платформу .Net в своей профессиональной деятельности. Третье издание книги подверглось существенным переработкам, в результате чего в ней отражены новшества C# 3.0 и C# 4.0, а также содержит новую часть, полностью посвященную вопросам многопоточности.

2. Дон Бокс, Крис Селлз. Основы платформы .NET. Том 1. Общеязыковая исполняющая среда. Вильямс, 2003

essential_net

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

 
3. Krzysztof Cwalina, Brad Abrams. Framework Design Guidelines 2nd Edition. Addison-Wesley Professional, 2008

Framework_Design

Разработка качественных программных систем является весьма сложной задачей, а разработка качественных библиотек (особенно framework-ов) является поистине вершиной мастерства архитекторов и разработчиков. Сложность здесь кроется в специфике принимаемых решений, ведь акцент серьезно смещается в сторону простоты и удобства использования, расширяемости и надежности. Но хотя эта тема является центральной, книга будет также весьма полезна и простым разработчикам, ведь знание ключевых идиом языка является совершенно необходимым, когда команда смотрит хотя бы немного дальше своего носа, и заботится не только о написании кода, но и о его последующем сопровождении.

Рецензия

4. Bill Wagner. Effective C#

effective_csharp 4.1. Bill Wagner. Effective C# (Covers C# 4.0): 50 Specific Ways to Improve Your C#. 2nd Edition. Addison-Wesley Professional, 2010

more_effective_csharp 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

meyer

Книга, которую многие по своей фундаментальности в области объектно-ориентированного программирования сравнивают с творением Дональда Кнута (причем совершенно без преувеличения) в области алгоритмов и структур данных. Эта книга является наиболее фундаментальным трудом по объектной парадигме, когда-либо выходивших на русском или на английском языках. Книга охватывает широкий круг вопросов, начиная от вопросов наследование, инкапсуляция, модульности, повторного использования, заканчивая автоматическим управлением памятью, шаблонами проектирования и проектированием по контракту (который только спустя два десятилетия начинает набирать обороты в mainstream языках и технологиях).

2. Гради Буч. Объектно-ориентированный анализ и проектирование, 3-е издание. Вильямс, 2008

booch

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

Рецензия

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

GoF

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

Рецензия

4. Мартин Фаулер. Рефакторинг. Улучшение существующего кода. Символ-Плюс, 2008

refactoring

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

Рецензия

Книги по управлению проектами

1. Фредерик Брукс. Мифический человеко-месяц или Как создаются программные системы, 2-е издание. Символ-Плюс, 2006

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

Рецензия

2. Том ДеМарко и Тимоти Листер. Человеческий фактор. Успешные проекты и команды. 2-е издание. Символ-Плюс, 2009

peopleware

Книга «Человеческий фактор» является отличным доказательством того, что, несмотря на стремительное развитие технологий, человеческий фактор является одной из наиболее сложных проблем при построении программных систем. Фредерик Брукс (читая лекции своим студентам) выделил следующие фундаментальные концепции книги: 1) важность кристаллизации команд (team jelling) и понятие травли команд (teamicide); 2) важность рабочего пространства; 3) акцент на «качестве сотрудников»; 4) влияние (негативное) на переезд крупного программного проекта с одного места (географического) в другое. Этой книге уготована долгая жизнь по той же причине, «почему рассказы Гомера пережили тысячи лет: эти рассказы о людях, и они также верны сегодня, как и тысячу лет назад».

Рецензия

3. Эдвард Йордон. Путь камикадзе. 2-е издание. Лори, 2008

death_march

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

Рецензия

Книги по WinAPI/WinSocks

1. Джеффри Рихтер, Кристоф Назарр. Windows via C/C++. 5-е издание. Питер, Русская Редакция, 2009

windows_via_c

Это классическая и однозначно самая лучшая книга по программированию в Microsoft Windows. Если вам нужно понять что такое объекты ядра, потоки, принципы синхронизации потоков, таймера, асинхронный ввод-вывод, архитектура памяти, структурная обработка исключений, DLL и все что с ними связано и многое другое, то эта книга именно то, что нужно.

Рецензия

2. Джеффри Рихтер, Джейсон Кларк. Программирование серверных приложений для Microsoft Windows 2000. Питер, Русская Редакция, 2001

programming_server_side

Прекрасное дополнение к предыдущей книги Джеффри Рихтера для разработчиков серверных приложений. Хотя эта книга и не является столь популярной, как предыдущая (в связи со своей более узкой направленностью), она также отличается глубиной изложения, которую весьма сложно найти в каком-либо другом источнике. Поэтому если вам интересна тема разработки серверных приложений – книга будет очень полезной.

Рецензия

3. Энтони Джонс, Джим Оланд. Программирование в сетях Microsoft Windows. Питер, Русская Редакция, 2002

network

Наиболее полное руководство по разработке сетевых приложений с использованием WinAPI. Если вдруг понадобиться поработать с NetBIOS, именованными каналами, реализовать асинхронный ввод-вывод с помощью портов завершения, настроить качество обслуживания или воспользоваться простыми (Raw) сокетами, эта книга будет как нельзя кстати.

Книги по COM/ATL

1. Дон Бокс. Сущность технологии COM, Питер

essential_com

Если вы все же каким-то образом связаны с этой замечательной технологией, «с маршалингом, моникерами, распределенными потоками, агрегатами и миллионом других вещей, которые понимал только Дон Бокс, и даже Дон Бокс больше не может на это смотреть», то эта книга должна быть первой в вашем списке. А если серьезно, то это лучшая и единственная книга по технологии COM, которая поможет вам понять эту технологию.

Рецензия

2. Кристофер Таваре, Кирк Фертитта, Брент Ректор, Крис Селлз. ATL 8. Внутренняя структура и применение. 2-е издание. Вильямс, 2007

atl

Лучшая и единственная (ну, не совсем единственная, но остальные книги выходили не позднее 2000 года) книга по библиотеке ATL.

Алгоритмы

1. Дональд Э. Кнут. Искусство программирования

knuth1

1.1. Дональд Э. Кнут. Искусство программирования. Том 1. Основные алгоритмы. 3-е издание. Вильямс, 2008

knuth2 1.2. Дональд Э. Кнут. Искусство программирования. Том 2. Получисленные алгоритмы. 3-е издание. Вильямс, 2005
knuth3 1.3. Дональд Э. Кнут. Искусство программирования. Том 3. Сортировка и поиск. 2-е издание. Вильямс, 2008

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

2. Генри C. Уоррен, мл. Алгоритмические трюки для программистов. Вильямс, 2007

hackers_delight

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

Рецензия

Общие вопросы программирования

1. Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру. Лори, 2009

pragmatic

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

Рецензия

2. Джон Бентли. Жемчужины программирования, 2-е издание. Питер, 2007

perls

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

Рецензия

3. Стив Макконнел. Совершенный код. 2-е издание. Питер, 2007

code_complete

По статистике над одним проектом в среднем работает 10 поколений разработчиков, а это значит, что большая часть жизненного цикла ПО составляет его поддержка и сопровождение. Из чего можно сделать простой вывод, что за _чтением_ программы проводится гораздо больше временем, чем за ее _написанием_, а это, в свою очередь значит, что качество кода играет очень важную роль. В этом вопросе книга Стива Макконнелла (как и многие книги в этом списке) является лучшей в своей области. В книге рассматривается широкий спектр вопросов, так или иначе связанных с кодированием, начиная от правил именования переменных (которым выделены 52 (!) страницы), заканчивая рефакторингом и рекомендациям по оптимизации.

Рецензия

4. Джеффри Фриддл. Регулярные выражения. 3-е издание. Символ-Плюс, 2008

regex

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

Базы данных

1. К. Дж. Дейт. Введение в системы баз данных. 8-е издание. Вильямс, 2006

introduction_to_database

Книга прекрасно отражает, насколько обширной является тема систем управления базами данных, она отличается немалым объемом (более 1300 страниц), а перечень литературы к каждой из глав дает понять, что это только верхушка айсберга. Книга не описывает ни одну из существующих СУБД, а сосредоточена прежде всего на реляционной модели (хотя довольно часто проскакивает критика о несоответствии реляционной модели в существующих реализациях) и является наиболее фундаментальным трудом в своей области.

2. Джеффри Ульман и др. Системы баз данных полный курс, Вильямс, 2004

data_base__complete_book

Еще одна классическая книга из области систем управления базами данных. Книга также обладает немалым объемом (1088 страниц), покрывает большинство наиболее актуальных тем этой области, но является более практичной, нежели книга Криса Дейта. Книга также не привязывается к конкретной СУБД и будет полезна всем читателям, которые интересуются этой тематикой.


59 комментариев:

  1. странно, что нет в списке по C# Троелсена, можно ещё вот эту книгу. А в алгоритмы ещё бы и Кормена

    ОтветитьУдалить
  2. Кормена добавлю, а вот Троелсена - вряд ли. Слишком уж много вопросов она покрывает.
    Если говорить о дополнительных материалах по C#/.Net я бы скорее добавил книгу Хейлсберга или Джона Скита (Jon Skeet).
    Но я специально не хочу перенасыщать никакую из тематик. Если человеку понадобится дополнительная литература, то найти ее труда не составит.
    Если идти по такому пути, то это будет перечень не из двух десятков книг, а из двух сотен.

    ОтветитьУдалить
  3. список по C# какой-то левый имхо
    п. 2 и 3 абсолютно мимо кассы, при этом нету Нейгела и Троелсена

    ОтветитьУдалить
  4. @Аноним: видимо у нас с вами очень разные понимания серьезных книг. Книга 2 - это одна из самых сильных книг по платформе .Net, которые когда либо выходили в свет. А 3 - это отличная книга, которая очень здорово помогает структурировать ваши знание об этой платформе.
    Поймите меня правильно, я ничего не имею против книг, которые пытаются описать все аспекты языка C# и платформы .net, начиная от основ ООП и синтаксиса языка, заканчивая Windows Forms, ASP.NET, ADO.NET, Multithreading, Distributed Computing (a.k.a. .Net Remoting или WCF), COM Interop, Native-Managed interop и еще чего-нибудь, но я не никак не могу отнести такую книгу к "классической", которую я бы рекомендовал каждому.
    Еще раз повторюсь, если уж в списке по C# чего и не хватает, так это книг Хейлсберга (Hejlsberg), Скита (Skeet), Албахари (Albahari). Есть отличные книги по Windows Forms (книга Криса Селлза), по привязке данных, по WCF, по ADO.NET и т.д.
    Но повторюсь, что не ставилась целью указать полный перечень книг по каждому языку или технологии, а всего-лишь лучшие из них.
    З.Ы. Интересно, что на rsdn.ru, который славится своей .net-направленностью, ни у кого перечень книг по .net не вызвал подобных эмоций.

    ОтветитьУдалить
  5. вот еще пару строк в пользу "Джеффри Рихтер. CLR via C#" http://dtimofeev.blogspot.com/2010/02/blog-post.html

    ОтветитьУдалить
  6. @general: спасибо, весьма любопытно:)
    Хотя думаю, что только весьма слабоадекватный разработчик может сомневаться в "классичности" книг Рихтер (как для платформы .Net, так и для программирования под Windows) :)

    ОтветитьУдалить
  7. Список про C# абсолютно неправильный, сразу видно что составлял недотнетчик.

    ОтветитьУдалить
  8. Моё мнение- если список по С# и составил "недотнетчик", но по крайней мере он - программист.
    В этих книгах популярно описаны основы, а всю информацию обо всех библиотеках, входящих в платформу, можно взять из MSDN - всё равно в "толстых книгах" большего не напишут, разбавят только водой.
    Да и использовать эти книги как справочники неудобно - электронный MSDN всегда удобнее...

    ОтветитьУдалить
  9. Уважаемый @Аноним предлагаю привести 5 книг по .net, которые вы считаете "классическими". Я в предыдущих комментариях попытался обосновать выбор этих книг и привел еще пяток ссылок на другие источники, которые по моему мнению стоило бы внести в этот список, но я этого не сделал именно по причине того, чтобы этих книг не было слишком много.

    З.Ы. Речь не шла о "самых популярных книгах по .net обо всем на свете". Цель - наиболее фундаментальные книги в этой области. В приведенном списке именно такие книги.

    ОтветитьУдалить
  10. Естественно, соглашусь с анонимами что список по сишарпу совсем не тот. Вы предлагали написать свои 5 книг. Пожалуйста:
    1. Рихтер;
    2. Нейгел и сотоварищи;
    3. Троелсен;
    4. Нэш;
    5. Албахари
    Ну и еще пожалуй:
    6. Roy Osherov: the art of unit testing in .Net

    ОтветитьУдалить
  11. И по паттернам на первом месте конечно же должна быть книга: http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&s=books&qid=1268754786&sr=1-1

    ОтветитьУдалить
  12. 2 Анонимный:

    Абсолютно непонятно, что должна делать книга First-Design-Patterns-Elisabeth-Freeman на первом месте.
    Теоретически книги должны быть в этом списке упорядочены по их известности в кругу программистского сообщества, влиянию на умы, фундаментальности и т.д.

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

    ОтветитьУдалить
  13. 2Тимур:
    Тимур, эта книга считается лучшей по паттернам. Не понимаю как этого можно не знать.

    ОтветитьУдалить
  14. 2Аноним: я правильно понимаю, что если я сейчас открою любую книгу по ООП или паттернам (а также практически любую книгу по ОО языку программирования) то я там обязательно найду упоминание книги Head First Design Patterns, а не книгу Банды Четырех? Я очень сомневаюсь.
    Конечно же это не значит, что в приведенной вами книге этот вопрос описан хуже, но классикой (и первой в списке) по паттернам является именно GoF Book.

    ОтветитьУдалить
  15. Oleg, спасибо за ваш перечень книг, но хотелось бы еще и обоснование.
    Я, со своей стороны, попробую обосновать свой выбор здесь (а подробнее сделать это в отдельном сообщении) и немного покритиковать ваш:)

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

    Мне интересно, что вы найдете новое после Рихтера в приведенных вами книгах?

    Конечно, у Рихтера ничего нет по Windows Forms, XML, SQL Server, ADO, ASP.NET и т.д. Но по каждой из этих тем есть замечательные книги и именно их бы я и рекомендовал, а не книгу обо всем на свете понемногу.

    Я сейчас посмотрел содержание книги Нейгела и ужаснулся, это же книга обо всем...

    Вы вообще, когда нибудь встречали фразу (в живую или на форуме).
    "Я сегодня третий раз перечитал Троелсена (Найгела, Нэша). Просто супер, опять нашел так много нового для себя!". Я подобного не встречал никогда. А вот про Рихтера, Бокса, Абрамса я такое слышал неоднократно. Или вы видели, чтобы на эти книги ссылались в статьях или других книгах? Или вы бы лично читали Нейгела после Троелсена?
    Это книги однодневки. Сейчас нет смысла читать первые издания любой из этих книг, а вот почитать первое издание Рихтера можно даже сейчас (ибо _фундаментально_), не говоря уже о камраде "коробкине" (а.к.а Don Box), в книге, вышедшей почти десять лет назад, уверен, вы и сегодня найдете кучу нового:)
    Албахари более серьезен в этом вопросе, у него отличные главы по многопоточности, но не думаю, что они превосходят последнюю часть третьего издания Рихтера.
    Книги по модульному тестированию я бы не включал, т.к. скорее более полезна будет какая-нибудь более фундаментальная книга по тестированию, т.к. отличий между xUnit фреймворками не такая и большая.

    З.Ы. Если вы хотите альтернативный (полный, по моему мнению) перечень книг (с кратким обоснованием), то я сделаю это в отдельном сообщении и именно там его и стоит обсудить.

    ОтветитьУдалить
  16. GoF это эдакий призрак. Все о ней знают, но никто не читал :-) Поставили бы на первое место книгу Александера если уж на то пошло. Ее тоже все упоминают, но никто никогда даже не видел. Я поставил упомянутую книгу на первое место именно потому, что я бы именно по ней рекомендовал бы разбираться с паттернами. Именно по ней рекомендуют изучать паттерны все кого я знаю. Поэтому для меня эта книга безусловно на первом месте.

    ОтветитьУдалить
  17. 2Анонимный: у вас нет желания отписаться с каким-нибудь логином? Ничего не имею против аннимов, но с конкретными людьми всегда интересно общаться, а здесь, как мне кажется, есть о чем:)

    Я с вами согласен, что GoF - это не лучшая книга по шаблонам. Написана она достаточно жестко. Лично я бы предпочел книгу Шаллоуейа и Тротта. Но мне просто совесть не позволит поставить что-либо другое на первое место. В любом случае GoF - первая книга, ну а дальше можно что-то другое.

    ОтветитьУдалить
  18. По алгоритмам действительно нехватает Кормена "Алгоритмы:построение и анализ", ну и Кернигана и Риччи "Язык Си" :)

    ОтветитьУдалить
  19. стандартный список, даже скучно как-то. Вот только сразу вопрос - сам-то читал Дональда Кнута?

    ОтветитьУдалить
  20. Дж. Ханк Рейнвотер
    Как пасти котов. Наставление для программистов, руководящих другими программистами.

    Я бы поставил эту книжку в один ряд с программистами-прагматиками.

    ОтветитьУдалить
  21. @Nikolay Sergeev: лично мне книга Стива Макконнелла "Остаться в живых" понравилась больше. В книге "Как пасти котов", вроде бы и дельные вещи пишутся и почеркана она прилично, но, почему-то не зацепила (но я слышал немало очень лестных отзывов на ее счет, поэтому, думаю, что я в этом плане не прав).

    З.Ы. Все же "Как пасти котов" - не философия, а управление проектами, поэтому ее следует ставить рядом с "Мифическим человеко-месяцем" и "Человеческим фактором".

    ОтветитьУдалить
  22. Спасибо за список.

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

    ОтветитьУдалить
  23. @NightmareZ: Да, в здравом уме Кнута одолеть очень сложно:) Теоретически, его можно осилить за 3-4 университетских семестра, но не уверен, что во время учебы у студента будет достаточно мотивации, чтобы все это осилить.

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

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

    ОтветитьУдалить
  25. Думаю что действительно стоит обратить внимание на Албахари. Я когда хочу разобраться в каком-то языке или технологии, то качаю ВСЕ книги которые только могу найти в сети и все их листаю сначала, чтобы выбрать наиболее хорошие книги. В случае с C# в моем списке на первых местах оказались Рихтер и Албахари, правда, признаюсь, Скита и More Effective C# я не читал.

    И еще по поводу Head First Design Patters - имхо действительно очень хорошая книга. Возможно классикой ее не называют из-за несерьезного стиля изложения и из-за того что вышла она намного позже GoF. Но это не умоляет ее достоинств. Кстати, вот в этом ТОПе книг: http://knol.google.com/k/top-100-best-software-engineering-books-ever# она находится на втором месте.

    ОтветитьУдалить
  26. 2nightcoder: Да, согласен, что Албахари весьма неплох (я с его деятельностью пока сильно не знаком, но на днях взялся переводить его 5-ю часть по многопоточности), но книга Скита ИМХО мне понравилась больше.

    И я полностью согласен о Head First Design Patterns. Несмотря на такое название (я всегда к таким сериям относился с осторожностью), судя по отзывам на stackoverflow - это очень хорошая книга. (Хотя, если признаться честно, то Банда четырех - это не самая удачная книга с точки зрения знакомства с паттернами, особенно для новичков. Как по мне, уж сильно там все сухо и малоинтересно).

    Так что, как дойдут руки, обязательно поправлю этот список!

    ОтветитьУдалить
  27. Не вижу в списке моей любимой классической книги:
    "Структура и интерпретация компьютерных программ"

    ОтветитьУдалить
  28. @zyknsev: Добавлю, обязательно добавлю. Там много чего добавить нужно:)), но вот эту нужно добавить обязательно.

    ОтветитьУдалить
  29. Было бы замечательно увидеть в данном списке следующую книгу "Introduction to Algorithms, Third Edition", Thomas H. Cormen, так же она переведена на русский, замечательная книга

    ОтветитьУдалить
  30. Сергей, а какие книги вы прочитали?

    ОтветитьУдалить
  31. @Слава:
    Практически все;) за исключением книг по Java (читал только Брюса Эккеля), алгоритмов (ни знаю никого, кто бы осилил Кнута от корки до корки), а также я читал только одну из двух книг по базам данных. Остальное, вроде бы, все читал.

    ОтветитьУдалить
  32. Сергей, по Windows и WinAPI вы забыли упомянуть действительно классику: "Windows Internals: Including Windows Server 2008 and Windows Vista" 5th edition by Mark Russinovich and David Solomon.

    ОтветитьУдалить
  33. @Алексей: Да, книга Руссиновича действительно одна из лучших в своем классе, но меня смутило, что она, все же, не является книгой именно по Win API и программированию.

    ОтветитьУдалить
  34. А как же классический SICP? Мне кажется, хороший программист должен прочитать пару книг по функциональному и другим парадигмам программирования, чтобы "сломать" мозг и знать, что некоторые задачки лучше решаются другими способами. В том же c# Linq во многом основон на функциональшине (лямбды, замыкания, функции высшего порядка и все такое). Async в c# 5.0 тоже прижел из F#. По работе пишу на C# и после знакомства с функциональшиной многие вещи стал делать по-другому, более просто и эффективно.

    ОтветитьУдалить
  35. NiQ: в следующей редакции обязательно добавлю. Либо уже в отдельной заметке именно о классике CS.

    ОтветитьУдалить
  36. Сергей,
    - у Кнута уже есть еще одна часть
    - у Фаулера кроме Рефакторинга есть еще несколько книг, которые я бы отнес к классчическим: EAA, Analysis Patterns, UML (последняя возможно не в тему)
    - возможно еще стоит рассмотреть DDD: Tackling Complexity in the Heart of Software. Эрика Эванса.

    ОтветитьУдалить
  37. @Maksym: да, книг подходящих действительно много. Основная проблема подобного списка заключается в том, чтобы он не был сверх большим.

    Вот за Эванса, спасибо, это неплохая идея, поскольку книга сделала очень многое. А вот EAP от Фаулера - не уверен, книга и правда многое сделала, но я за нее не уверен.

    ОтветитьУдалить
  38. Интересно, на чем основывается игнорирование книг Чарльза Петцольда по программированию для Windows. Как по мне, то эти книги самые классические из всех остальных приведенных в теме.

    ОтветитьУдалить
  39. @BrailyM M: там лишь одна книга прямой конкурент книг Петцольда - это Windows via C/C++ Рихтера, но ИМХО, книга Рихтера более актуальна: она вышла на 11 лет позднее последней редакции книги Петцольда.

    Или есть более позднее издание?

    ОтветитьУдалить
  40. Последние издание Петцольда, которые есть у меня - Программирование с использованием MS Windows Forms 2006 года и Microsoft Windows Presentation Foundation 2008 года, но причем здесь дата выхода книг к их "классичности"? Как я понял, основным критерием "классичности" является количество ссылок на книги. Кроме того, у Рихтера тематика книг немного другая, насколько я знаю по пользовательскому API у него книг нет, поэтому его книги не являются конкурентами книгам Петцольда.

    ОтветитьУдалить
  41. @BrailyM M: упс! Экстрасенсорика подвела;)
    Дело все в том, что у Петцольда есть много книг. Во-первых, это Код, во-вторых, книга по винде, в третьих - книги windows 8 & xaml, ну а еще, упомянутые вами книги по Windows Forms и WPF.

    В моем понимании лишь Код и программирование под Win API Петцольда достаточно цитируемы и популярны, чтобы отнести к классичности. Я понимаю, что у вас на полке несколько иные книги, но Windows Forms и WPF - это узкие технологии, которые я не собирался включать в этот список, ибо этот список будет бесконечным.

    Да и по цитируемости, чего-то я слышу чаще "вот у Рихтера написано", чем "вот у Пецольда про формы такое клевое написано". Так что с точки зрения актуальности, цитируемости и полезности для общества ИМО книги петцольда (кроме Кода) не сильно актуальны, поэтому в этом списке и отсутствуют.

    ОтветитьУдалить
  42. Что-то я запутался. Если Вы пишете, что "В моем понимании лишь Код и программирование под Win API Петцольда достаточно цитируемы и популярны, чтобы отнести к классичности" и "с точки зрения актуальности, цитируемости и полезности для общества ИМХО книги Петцольда (кроме Кода) не сильно актуальны, поэтому в этом списке и отсутствуют", то отсюда следует, что по крайней мере Код должен быть в списке, а его там нет.

    ОтветитьУдалить
  43. К алгоритмам предлагаю добавить Роберта Седжвика "Алгоритмы на С++".

    ОтветитьУдалить
  44. @BrailyM M: в моем понимании лишь код выполняет необходимое условие для попадания в этот список, но это не значит, что в него следует добавлять все такие книги. На момент написания статьи я не посчитал это нужным, да и сейчас все еще не уверен.

    По поводу Седжвика. Тут такая же картина, что и с другими книгами. Если есть кнут и Колман, нужна ли она? И почему с примерами на С++, а не на Java? Идея была в том, чтобы сделать список максимально самодостаточным, с разумным (минимальным) дублированием.

    ОтветитьУдалить
  45. Ув. Сергей, если я изучаю C++ по книге №1 Вашего списка, имеет ли смысл покупать еще книгу Страуструпа "Программирование: принципы и практика использования C++, исправленное издание" ( http://goo.gl/VrBf0 ).
    Я только недавно начал изучать программирование, будет ли полезно использовать такую книгу в качестве доп. источника?

    ОтветитьУдалить
  46. @Андрей: я вообще не уверен, что первая книга в этом списке по языку С++ (т.е. Язык программирования С++ Страуструпа) подходит для обучения и изучения С++. Вторая же книга Страуструпа является именно учебником, поэтому именно ее я бы и рекомендовал для изучения языка С++ и программирования в частности.

    ОтветитьУдалить
  47. Спасибо за быстрый ответ! То есть Вы хотите сказать, что в последующих главах будет такая "невероятная концентрация мысли на одну строку текста", что это будет понятно только профессионалу?

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

    btw, сзади на обложке написано: "В данном издании Бьерн Страуструп излагает C++ в форме, еще более доступной для начинающих..."

    ОтветитьУдалить
  48. @Андрей: Да, я думаю, что "Программирование. Принципы и практика использования C++" больше подойдет именно в качестве учебника, нежели "Язык программирования С++".

    Если в "btw" речь шла о второй книге, то это не очень правда:) Если о первой - то вполне возможно.

    ОтветитьУдалить
  49. Да, цитата в "btw" именно с обложки "Язык программирования С++".
    Спасибо! Буду покупать первую книгу.


    Не сочтите за наглость, но пользуясь случаем хочу спросить: пока буду ждать появления заветной книги у себя на полке, можно ли начать изучать другой язык? Чтобы в последствии его параллельно с C++ учить, отдавая приоритет во времени, конечно, C++.
    Есть ли преимущества в таком способе освоения - возможно, аналитическое мышление поможет при изучении, сравнивая, анализируя оба потока информации?

    ОтветитьУдалить
  50. Учить лучше не язык, а учиться программированию. Можно попробовать книгу "Структура и интерпретация компьюитерных программ" или "Почувствуй класс" Мейера.
    Первая книга основана на функциональном подходе к программированию, а вторая - на объектно-ориентированном подходе.

    Обе эти книги являются известными учебниками: первая использовалась долгое время в MIT, а вторая - в известном универе в Цюрихе.

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

    В этом плане книги Страуструпа тоже очень ничего, поскольку они не столько по языку, сколько по программированию в целом.

    ОтветитьУдалить
  51. Спасибо большое.

    Приятно, конечно, когда специалист такого высокого класса, на которого сам Страуструп дает ссылку, отвечает новичкам.

    Мир Вам. :)

    ОтветитьУдалить
  52. Интересно, а существуют ли в природе люди, которые реально прочли Дональда Э. Кнута "Искусство программирования"?

    ОтветитьУдалить
  53. На мой взгляд Вы просто скупили книги на балке те что были.

    ОтветитьУдалить
  54. Приветствую, спасибо вам за такой хороший список.
    Скажите, можно ли читать Бертрана Мейера и Гради Буча в переводе? Они большие, и хочется сосредоточиться на понимании сути, т.е. не тратить усилия ещё и на понимание английского.

    Я сейчас читаю "Программист-прагматик", и мне всё нравилось в первой половине книги, но внезапно начал замечать такие ужасы: "Now may be a good time to ask yourself why you need a global variable in the first place" переведена как "Теперь можно задать самому себе вопрос, зачем нужна глобальная переменная на первом месте", мьютекс как "взаимоисключение", неизвестно чего ещё ждать, и мне теперь страшно упустить суть, читая в переводе.

    ОтветитьУдалить
  55. Этот комментарий был удален автором.

    ОтветитьУдалить
  56. Список конечно интересный но не полный
    я например когда начал изучать программирование то брался за многие языки и даже немного получалось усваивать , но только в начале, дальше как тема становилась сложней я становился в ступор.
    Считаю что разным людям подходят разные книги.
    Мне например помог вот этот сайт (надеюсь автор не сочтёт за рекламу) http://codernet.ru там не приходилось качать книги и делать вывод подходит книга или нет, а просто полистав немного понимаешь что стиль письма тебя устраивает и тогда уже качаешь. Да и разнообразие там не плохое.
    Всем удачи в 2018-ом году

    ОтветитьУдалить
  57. Прекрасный список! Спасибо Вам, Сергей!

    P.S. Очень весело было читать комментарии из ряда "Рихтер - не классика... Другое дело Троелсен... Писал точно не .NET-щик", адресованные квалифицированному .NET-разработчику из Microsoft. Против такого и не попрешь))).

    ОтветитьУдалить