Какую самую влиятельную книгу должен прочитать каждый программист? [закрыто]


1439

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

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

Для поиска: воспользуйтесь окном поиска в правом верхнем углу. Для поиска ответов на текущий вопрос используйте inquestion:this. Например:

inquestion:this "Code Complete"

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

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

19
Если бы я мог вернуться в прошлое и попросить себя что-нибудь прочитать, то это была бы газета или спортивная книга фактов, которую я взял с собой. Все остальное - пустая трата хорошего путешествия во времени. :-)
jmucchiello

32
Знаете, если бы я не беспокоился о том, что я буду голосовать за ВСЕ, я бы с радостью пошел и предложил Сумерки. "ТАКЖЕ о людях, которые бледны и избегают солнца!"
Джейкоб Беллами

3
Может кто-то очистить ответы, удалив повторяющиеся записи в книгах? Большинство из них уже проголосовали.
Рао

Ответы:


1746
  • Код завершен (2-е издание) Стивом Макконнеллом
  • Прагматичный программист
  • Структура и интерпретация компьютерных программ
  • Язык программирования Си Кернигана и Ричи
  • Введение в алгоритмы от Cormen, Leiserson, Rivest & Stein
  • Шаблоны дизайна от банды четырех
  • Рефакторинг: улучшение дизайна существующего кода
  • Мифический Человек Месяц
  • Искусство компьютерного программирования Дональда Кнута
  • Компиляторы: принципы, методы и инструменты Альфреда В. Ахо, Рави Сетхи и Джеффри Д. Уллмана
  • Гедель, Эшер, Бах , Дуглас Хофштадтер
  • Чистый код: руководство по гибкому программному обеспечению Роберта Мартина
  • Эффективный C ++
  • Более эффективный C ++
  • КОДЕКС Чарльза Петцольда
  • Программирование жемчуга Джон Бентли
  • Эффективная работа с устаревшим кодом от Michael C. Feathers
  • Peopleware от Демарко и Листера
  • Кодеры за работой Питер Сейбел
  • Конечно, вы шутите, мистер Фейнман!
  • Эффективное Java, 2-е издание
  • Шаблоны корпоративной архитектуры приложений от Мартина Фаулера
  • Маленький интриган
  • Опытный интриган
  • Почему (Пикантный) Справочник по Руби
  • Заключенные управляют убежищем: почему высокотехнологичные продукты сводят нас с ума и как восстановить здравомыслие
  • Искусство программирования Unix
  • Разработка через тестирование: на примере Кента Бека
  • Практики проворного разработчика
  • Не заставляй меня думать
  • Гибкая разработка программного обеспечения, принципы, шаблоны и практики Роберта К. Мартина
  • Проекты, управляемые доменом , Эрик Эванс
  • Дизайн повседневных вещей Дональда Нормана
  • Современный C ++ дизайн Андрея Александреску
  • Лучший софт для написания I от Joel Spolsky
  • Практика программирования Керниганом и Пайком
  • Прагматичное мышление и обучение: реорганизация ваших продуктов от Энди Ханта
  • Оценка программного обеспечения: демистификация черного искусства Стивом Макконнелом
  • Страстный программист (моя работа отправилась в Индию) Чед Фаулер
  • Хакеры: герои компьютерной революции
  • Алгоритмы + структуры данных = программы
  • Написание твердого кода
  • JavaScript - хорошие части
  • Реализуясь 37 сигналами
  • Основы программирования Карла Сегуина
  • Компьютерная графика: принципы и практика в Си (2-е издание)
  • Мышление на Яве , Брюс Экель
  • Элементы вычислительных систем
  • Рефакторинг на Узоры Джошуа Кериевского
  • Современные операционные системы Эндрю С. Таненбаум
  • Аннотированная Тьюринг
  • Вещи, которые делают нас умными Дональд Норман
  • Вечный путь строительства Кристофер Александр
  • Последний срок: роман об управлении проектами Тома Демарко
  • Язык программирования C ++ (3-е издание) от Страуструпа
  • Шаблоны корпоративной архитектуры приложений
  • Компьютерные системы - перспектива программиста
  • Гибкие принципы, шаблоны и практики в C # Роберта Мартина
  • Растущее объектно-ориентированное программное обеспечение, ориентированное на тесты
  • Руководство по проектированию рамок от Брэда Абрамса
  • Мышление объектов доктором Дэвидом Уэстом
  • Расширенное программирование в среде UNIX У. Ричарда Стивенса
  • Хакеры и художники: большие идеи компьютерного века
  • Душа новой машины Трейси Киддер
  • CLR via C # от Джеффри Рихтера
  • Вечный путь строительства Кристофер Александр
  • Шаблоны проектирования в C # Стивом Мецкером
  • Алиса в стране чудес Льюис Кэрол
  • Дзен и искусство ухода за мотоциклом Роберт М. Пирсиг
  • About Face - Основы дизайна взаимодействия
  • Сюда приходит каждый: сила организации без организаций Клэй Ширки
  • Дао программирования
  • Вычислительная красота природы
  • Написание твердого кода от Стива Магуайра
  • Руководство Филиппа и Алекса по веб-публикации
  • Объектно-ориентированный анализ и проектирование с использованием приложений от Grady Booch
  • Эффективная Java от Джошуа Блоха
  • Вычислимость Н. Дж. Катленда
  • Вдохновители программирования
  • Тао Те Чинг
  • Продуктивный Программист
  • Искусство обмана Кевина Митника
  • Программист карьеры: партизанская тактика для несовершенного мира Кристофер Дункан
  • Парадигмы программирования искусственного интеллекта: тематические исследования в Common Lisp
  • Мастера Судьбы
  • Прагматическое модульное тестирование в C # с NUnit Энди Хантом и Дейвом Томасом с Мэттом Харгеттом
  • Как решить это Джордж Поля
  • Алхимик Пауло Коэльо
  • Smalltalk-80: язык и его реализация
  • Написание безопасного кода (2-е издание) Майкл Ховард
  • Введение в функциональное программирование Филиппа Уодлера и Ричарда Берда
  • Нет ошибок! Дэвид Тилен
  • Переработка Джейсона Фрейда и DHH
  • JUnit в действии

16
Code Complete - хорошая книга, если вы учитесь в колледже. Если у вас есть опыт программирования не менее 1 года, это просто занятие.
Богдан Гаврил MSFT

19
В Code Complete содержится много полезной информации, но он скрыт в гиперболе, вафле и повторениях, что делает его трудным для чтения.
Джефф Йейтс

76
Я прочитал Code Complete 3 года в моей карьере. Я не учился на курсах по разработке программного обеспечения и на курсах по языку программирования, но прошел некоторые вводные курсы по CS. На сегодняшний день это лучшая книга, которую я когда-либо читал, чтобы стать лучшим программистом. Это не сделает вас специалистом, но сделает вас гораздо больше, чем тинкер.
Shea

119
Проблема этой книги в том, что для новичка это не имеет смысла, так как понятия немного продвинуты. К тому времени, когда вы будете готовы прочитать его, вы уже должны знать и практиковать 99% концепций в книге.
Esac

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

9

К & Р

@Juan: я знаю Хуана, я знаю - но есть некоторые вещи, которые могут быть изучены, только фактически приступая к выполнению задачи. Говорить в абстрактных идеалах весь день просто делает вас академиком. Именно в применении абстрактного мы действительно уловили причину их существования. :П

@Keith: Большое упоминание Алана Купера «Заключенные бегут в убежище» - наверняка откровение, любой разработчик, который работал со мной с тех пор, как я прочитал эту книгу, слышал, как я упоминал идеи, которые она поддерживает. +1


9

Дискретная математика для учёных-компьютерщиков

Дискретная математика для компьютерных ученых Дж. К. Трусса.

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

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


9

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

Красота книги - год авторского права.

Вероятно, самый глубокий «закон» на вынос представлен в книге:

Основная теорема о режиме отказа (FFT): сложные системы обычно работают в режиме отказа.

Идея состоит в том, что в любом конкретном программном обеспечении есть неисправные части, которые маскируются сбоями в других частях или проверками в других частях. Посмотрите на реальный пример на радиационной машине Therac-25 , недостатки программного обеспечения которой были скрыты аппаратными сбоями. Когда аппаратные отказы были удалены, из-за гонки программного обеспечения, которая оставалась незамеченной все эти годы, машина убила 3 ​​человек.


1
Также посмотрите Библию Систем того же автора (Джон Галл). Это третье издание Systemantics, он просто сменил название. Это книга, которую ты украл из школы. Это книга, которую взрослые читают под одеялом с фонариком.
Крис Уэнам

9

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

Надеюсь, второе издание скоро выйдет!


+1 за «Восторг хакера» Генри С. Уоррена-младшего - речь идет не о хакерстве в общепринятом смысле, а о хакерстве, как при низкоуровневом переключении битов и других «хаки» в истинном и оригинальном смысле этого слова. Не для всех, но если вы занимаетесь оптимизацией кода, компиляторами и т. Д., Или просто являетесь общим ботаником, который интересуется вещами низкого уровня, тогда это отличная книга.
Пол Р

9

На обложке книги Brillant изображена большая римско-католическая базилика La Sagrada Família, строящаяся в Барселоне, Каталония, Испания. Будет завершено в 2026 году (осталось только 17 лет). Как и большинство программ, даже с лучшими книгами, они никогда не заканчивали ...
PeterMmm

9

Объясненное экстремальное программирование: Embrace Change от Kent Beck. Хотя я не сторонник жесткой XP-or-the-Highway разработки программного обеспечения, мне бы хотелось познакомиться с принципами, изложенными в этой книге, гораздо раньше в моей карьере. Модульное тестирование, рефакторинг, простота, постоянная интеграция, затраты / время / качество / область применения - все это изменило мой взгляд на разработку. До Agile речь шла об отладчике и страхе перед запросами на изменение. После Agile эти демоны не выглядели такими большими.





9

Практика программирования. Брайан У. Керниган, Роб Пайк.

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




9

Парадигмы программирования искусственного интеллекта : практические примеры в Common Lisp Питера Норвиг

введите описание изображения здесь

Я начал читать это, потому что я хотел изучить Common Lisp. Когда я был на полпути, я понял, что это самая лучшая книга о программировании, которую я когда-либо читал.


9

Окончательно Мастерство Программного Обеспечения

альтернативный текст http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Эта книга многое объясняет о разработке программного обеспечения, разработке систем. Также очень полезно понимать разницу между разными видами разработки продукта: web VS shrinkwrap против IBM framework. Что имели в виду люди, когда задумывали модель водопада? Прочтите это, и все станет ясно (надеюсь)


Эту книгу нужно переписать с нуля. Тема очень интересная, но книга довольно безумная.
Крис Маунтфорд,

Крис, мне трудно понять твой комментарий ... Можешь объяснить больше? Почему «безумный»?
Дарио Минонна

Во-первых, он полон опечаток. Обычно первоклассная редакционная рука Эддисона Уэсли странным образом отсутствует в этом томе.
Крис Маунтфорд

... продолжается, и здесь недостаточно места, но: 2. в тексте никогда не ясно, где автор переключается между фактом и мнением, анекдотом и фундаментальным принципом и т. д. 3. мастерство программного обеспечения - это метафора и стратегия для решения нескольких сложные аспекты разработки программного обеспечения. Это имеет определенные преимущества по сравнению с альтернативами и предположительно недостатки. Я считаю, что это нормальный подход. Бессмысленно говорить, что программное обеспечение по своей сути ремесло. Очень раздражает чтение, но, если честно, это было давно, и многие подробности я забыл. Однако мое отвращение остается.
Крис Маунтфорд

8

@ Питер Коултон - ты не читаешь Кнута, ты его изучаешь.

Для меня и моей работы ... Чисто функциональные структуры данных отлично подходят для мышления и разработки с учетом функциональных языков.


8

«Мир плоский» Томаса Фридмана.

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

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

Если вы живете в Северной Америке или Европе, молоды и умны, программирование не является рациональным выбором карьеры. Компании, которые занимаются программированием, абсолютно. Изучай бизнес, знай достаточно о программировании, чтобы усовершенствовать свой детектор BS: блестяще. Но посвятите львиную долю вашей умственной энергии мастерству библиотек, структур данных и алгоритмов? Это имеет смысл, только если программирование для вас нечто большее, чем экономический выбор.

Если вы любите программирование и по этой причине намереваетесь сделать это своей карьерой, тогда вам следует выработать хладнокровное понимание тех сил, которые будут и будут делать эту профессию все труднее и труднее зарабатывать на жизнь. , «Мир плоский» не будет учить вас , что назвать ваши переменные, но это будет погружать вас в течение 6 или 8 часов в экономических реалиях , которые уже прибыли. Если вы можете прочитать его и не испугаться, тогда выходите и покупайте «Code Complete».


Это чертовски хороший ответ!
Ави

8

альтернативный текст

В прошлом году я прошел ряд занятий. Я читаю

Дилемма инноватора (прорывная технология)
Мифический человеко-месяц (управление программным обеспечением)
Преодолевая пропасть (запуск)
Системы управления базами данных, Книга COW,
Программирование C #, Книга OSTRICH
Начинающие разработчики iPhone, Книга GRAPEFRUIT

Каждая книга была удивительной, но Дилемма Инноватора от Клейтона Кристенсена (1997 !!!) действительно фантастическая книга, и она заставила меня задуматься о современном мире программного обеспечения. Решаемая проблема - это прорывные технологии и то, как компании, работающие с дисководами, и нетехнические компании всегда нарушаются новыми технологиями, меняющими игру. Это дает новую перспективу, когда вы думаете о Google, возможно, самой крупной «веб-компании». Почему у них руки во ВСЕМ? Это потому, что они не хотят, чтобы их позиция нарушалась чем-то новым. Предварительный просмотр на Google достаточно, чтобы получить идею. Прочитайте это!


Я думаю, что эта книга довольно повторяющаяся. Я рекомендую прочитать первую 1/4.
Бен Хейли,

8

хакеры, Стивен Леви.

Личность и образ жизни должны быть на первом месте. Все остальное можно узнать.



8

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

альтернативный текст альтернативный текст


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

6
Я думаю, что запуск новых программистов на Python уменьшит количество других языков.
Марко Мариани

2
Это совпадения?
Келли С. Френч

8

Новый тьюринговский омнибус http://ecx.images-amazon.com/images/I/51HlYd-%2BRwL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg

Действительно хорошая книга. Имеет высокий уровень вкуса самых важных областей информатики. Да, CS! = Программирование, но это все еще полезно для каждого программиста.




7

Я думаю, что «Искусство программирования в Unix» - это отличная книга, написанная Эриком Рэймондом, превосходным хакером / блестящим умом, который пытается помочь нам понять несколько принципов разработки программного обеспечения (главным образом, простоты). Эта книга обязательна для каждого программиста, который собирается начать проект на платформе Unix.


6
это дубликат.
Кристофер Махан

7

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


7

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

7

Рефакторинг Мартина Фаулера : Улучшение дизайна существующего кода уже было перечислено. Но я подробно опишу, почему это повлияло на меня.

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


7

альтернативный текст http://ecx.images-amazon.com/images/I/61dECNkdnTL._SL500_AA240_.jpg

Как программировать на C ++ Это хорошо для новичка. Это отличная книга, полная в комплекте с 1500 страницами.


Я абсолютно согласен. Подход Deitel к изучению языка программирования поразителен. Я считаю Java как программировать моей библией программирования!
HH

7

Вот отличная книга, которая не так широко приветствуется, но полна глубокого понимания: Agile Software Development: The Cooperative Game , автор Alistair Cockburn.

Что такого особенного в этом? Ну, ясно, что все слышали термин «Agile», и, похоже, в наши дни большинство верующих. Верите ли вы в это или нет, но за гибким движением стоят некоторые глубокие принципы. Эта книга раскрывает и формулирует эти принципы точным, научным способом. Вот некоторые из принципов (кстати, это мои слова, а не слова Алистера):

  1. Самое сложное в разработке командного программного обеспечения - заставить всех мозгов иметь одинаковое понимание. Мы строим огромные, сложные, сложные системы, которые невидимы в материальном мире. Чем лучше вы научите больше людей делиться глубоким пониманием, тем эффективнее будет ваша команда в разработке программного обеспечения.Это основная причина, по которой парное программирование имеет смысл. Большинство людей отрицают это (и я сделал это изначально), но с учетом этого принципа я настоятельно рекомендую вам дать ему еще один шанс. Вы попадаете с ДВУМ людьми, которые глубоко понимают подсистему, которую вы только что создали ... не так много других способов получить такую ​​глубокую передачу информации так быстро. Это как слияние вулканцев.
  2. Вам не всегда нужны слова, чтобы быстро передать глубокое понимание. И следствие: слишком много слов, и вы превышаете возможности слушателя / читателя, что означает, что передача понимания, которую вы пытаетесь, не происходит. Учтите, что дети учатся говорить на языке, будучи «погруженными» и «поглощающими». Не только язык ... он приводит пример детей, играющих с поездами на полу. Вместе с ним появляется еще один ребенок, который никогда даже не видел поезд ... но, наблюдая за другими детьми, он улавливает суть игры и постоянно играет. Это происходит все время между людьми. Это вместе с выводом о слишком большом количестве слов помогает понять, насколько ошибочно было в старые «водопадные» дни пытаться написать подробные спецификации требований на 700 страницах.

Там тоже много чего еще. Я замолчу сейчас, но я НАСТОЯТЕЛЬНО рекомендую эту книгу!


2
Уникальный вклад, и вы нашли время, чтобы четко объяснить, почему это стоит прочитать. +1 за оригинальность и усилия! Я буду с нетерпением ждать чтения этого скоро ...
Эйвери Пэйн

Хорошо. Я не думаю, что вы будете разочарованы.
Чарли Флауэрс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.