avva: (Default)
avva ([personal profile] avva) wrote2011-03-01 02:25 pm

обязательные книги для программистов

Популярная тема на StackOverflow: What is the single most influential book every programmer should read?

Вот список книг, набравших на данный момент больше 100 голосов, в порядка убывания голосов:

1-5: Code Complete, The Pragmatic Programmer, SICP, Kernighan/Ritchie, Cormen.

6-10: Fowler's Refactoring, The Mythical Man-Month, Design Patterns, Knuth vol.1, the Dragon Book.

11-15: Head-First Design Patterns, GEB, [More] Effective C++, Programming Pearls, Zen and the Art...

16-20: Petzold's Code, Working Effectively w/ Legacy Code, Peopleware, Coders at Work, Martin's Clean Code.

21-26: Surely You're Joking, Effective Java, Fowler's Patterns of Enterprise Application Architecture, The Little/Seasoned Schemer, The Inmates Are Running the Asylum, Why's Poignant Guide to Ruby.

Из этих 26 книг я читал (понимая под этим - прочел не меньше половины книги) тринадцать: те, что выделены курсивом.

Из этих тринадцати книг три не имеют отношения к программированию, из этих трех одну все равно следует прочитать всем программистам (а также всем остальным людям). Это "Surely You're Joking, Mr. Feynman!".

Из оставшихся десяти три мне почти ничего не дали, и я с тем же успехом мог бы их и не читать: Code Complete, The Pragmatic Programmer, Design Patterns (о первых двух из них я думал по-другому, когда их прочитал, но потом понял, что мне просто льстило то, что они в основном повторяли то, чему я сам давно научился). Возможно, другим они помогли больше. Я бы не советовал их в качестве обязательного чтения.

Оставшиеся семь книг - они выделены курсивом и жирным шрифтом - я бы посоветовал всем программистам, с тем только замечанием, что Effective C++/Java нужны только тем, кто пишет на этих языках (а вот к Kernighan/Ritchie это не относится).

Я подумал о том, какие книги из тех, что на меня повлияли и что я могу порекомендовать всем. В первую очередь на ум приходит The Practice of Programming Кернигана и Пайка; она, на мой взгляд, важнее примерно 20 из 26 книг этого списка.

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

Это мое мнение; если хотите добавить свое, пожалуйста, буду рад комментариям на эту тему.

[identity profile] lair.livejournal.com 2011-03-01 12:36 pm (UTC)(link)
Просто Code Complete и Design Patterns надо читать в начале карьеры. Тогда от них существенно больше пользы.

[identity profile] dimrub.livejournal.com 2011-03-01 01:38 pm (UTC)(link)
Я знаком с некоторыми программистами, прочитавшими the gang of four в нежном возрасте, в начале карьеры. Их код производит удручающее впечатление.

(no subject)

[identity profile] lair.livejournal.com - 2011-03-01 13:40 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 13:48 (UTC) - Expand

(no subject)

[identity profile] dimrub.livejournal.com - 2011-03-01 15:10 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 15:19 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2011-03-01 19:41 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 19:46 (UTC) - Expand

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-01 16:17 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2011-03-01 19:16 (UTC) - Expand

(no subject)

[identity profile] dimrub.livejournal.com - 2011-03-01 19:27 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2011-03-01 19:34 (UTC) - Expand

[identity profile] freiksenet.livejournal.com 2011-03-01 12:41 pm (UTC)(link)
Странно, что нет Introduction to Algorithms, по-моему намного более интересная и полезная книга, чем Dragon Book.

Странно что вы не читали SICP - по-моему отличная книга и must-read для любой программиста.

Кроме SICP в списке нет ни одной книге про не-мейнстрим программированию, что очень печально, но в принципе объяснимо. :(

Еще печально, что так много книг, которые пропагандируют cargo-cult programming, типа design patterns.

[identity profile] shadow-ru.livejournal.com 2011-03-01 12:48 pm (UTC)(link)
Кормен там есть.

(no subject)

[identity profile] avva.livejournal.com - 2011-03-01 12:48 (UTC) - Expand

(no subject)

[identity profile] freiksenet.livejournal.com - 2011-03-01 12:54 (UTC) - Expand

[identity profile] bacek.livejournal.com 2011-03-01 12:47 pm (UTC)(link)
Ну Mythical Man-Month почитать наверно стоит.

[identity profile] avva.livejournal.com 2011-03-01 12:49 pm (UTC)(link)
Да, я собираюсь.

(no subject)

[identity profile] bydl0coder.livejournal.com - 2011-03-01 18:54 (UTC) - Expand

EoPL

[identity profile] triampurum.livejournal.com 2011-03-01 12:47 pm (UTC)(link)
Essentials of Programming Languages, D. Friedman, M. Wand. Изложение основ, с которыми должен быть знаком, если по-хорошему, каждый программист. Примечательна методом изложения. Метод - последовательное, совместное с читателем написание интерпретаторов (где интерпретаторы исполняют роль однозначных исполняемых спецификаций), иллюстрирующих концепции, о которых идет речь. Человек, сам реализовавший call-by-value, call-by-reference и call-by-need, путать их, скорее всего, не будет. Стратегиями вычисления материал книги не ограничивается, хотя материал по большей части и слишком прост для работающего программиста, потому что знаком ему по другим источникам. Поэтому читать её имеет смысл, видимо, лишь начинающему.

Re: EoPL

[identity profile] bydl0coder.livejournal.com 2011-03-01 10:01 pm (UTC)(link)
Ни фига себе! Это, по-моему, самая тяжелая книга из перечисленных в посте и комментах.

[identity profile] shadow-ru.livejournal.com 2011-03-01 12:51 pm (UTC)(link)
А есть ли смысл читать в XXI веке этот привет из 80-х - драгонбук?

Да-да, я в курсе про второе издание, но тем не менее?

[identity profile] avva.livejournal.com 2011-03-01 12:53 pm (UTC)(link)
Мне кажется, что нужна книга, которая показывает, как оно работает, и де-мистифицирует то, что происходит между написанием программы и выполнением кода процессором. Конкретные техники, например, парсинга не так важны, как это базисное понимание.

(no subject)

[identity profile] freiksenet.livejournal.com - 2011-03-01 12:55 (UTC) - Expand

(no subject)

[identity profile] freiksenet.livejournal.com - 2011-03-01 12:58 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 13:40 (UTC) - Expand

[identity profile] nokachi.livejournal.com 2011-03-01 12:51 pm (UTC)(link)
Что скажете насчёт обязательности третьего тома Кнута? Кормен уже давно прочитан.

[identity profile] avva.livejournal.com 2011-03-01 12:56 pm (UTC)(link)
На мой взгляд, ни один том Кнута не обязателен. Я не прочитал целиком ни один из них, и не собираюсь; использовать их в качестве reference подглядеть сложную тему - да, приходилось.

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

(точнее, я до сих пор считаю, что надо стараться сильнее, просто необязательно в сторону чтения TAOCP).

(no subject)

[identity profile] nokachi.livejournal.com - 2011-03-01 13:05 (UTC) - Expand

(no subject)

[identity profile] mtyukanov.livejournal.com - 2011-03-01 13:34 (UTC) - Expand

(no subject)

[identity profile] ygam.livejournal.com - 2011-03-02 02:06 (UTC) - Expand

[identity profile] freiksenet.livejournal.com 2011-03-01 01:04 pm (UTC)(link)
Хорошие, но не мейнстримовые книги.

Pierce - Types and Programming Languages
Okasaki - Purely Functional Data Structures
Книги про хаскель, хоть одну стоит прочитать - Real-World Haskell, Introduction to Functional Programming Using Haskell, Haskell road to Logic, Maths and Programming.
Хорошо бы еще книгу обзорную книгу по ИИ программированию, типа Norvig.

[identity profile] alexott.livejournal.com 2011-03-01 03:35 pm (UTC)(link)
первые две - да, желательно прочитать. BTW, Пирс через некоторое время выйдет на русском языке

(no subject)

[personal profile] alexeybobkov - 2011-03-01 19:47 (UTC) - Expand

(no subject)

[identity profile] alexott.livejournal.com - 2011-03-01 20:28 (UTC) - Expand

[identity profile] pin-dragon.livejournal.com 2011-03-01 01:09 pm (UTC)(link)
«Практику программирования», на мой взгляд, следует использовать для обучения программированию вместо того, что используется сейчас, например, в России.
Начинающим поможет быстрее понять важные вещи. А вот тем, кто самые важные уже понял, читать её довольно скучно. Да со многим в ней можно поспорить (всякие частности, в основном).

[identity profile] freiksenet.livejournal.com 2011-03-01 01:10 pm (UTC)(link)
А что в России используется? Поймут ли студенты при обучении о чем говорят в "Практике"?

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-01 13:18 (UTC) - Expand

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-01 13:23 (UTC) - Expand

(no subject)

[identity profile] freiksenet.livejournal.com - 2011-03-01 13:26 (UTC) - Expand

(no subject)

[identity profile] freiksenet.livejournal.com - 2011-03-01 13:27 (UTC) - Expand

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-01 13:32 (UTC) - Expand

[identity profile] vasily-nosikov.livejournal.com 2011-03-01 01:20 pm (UTC)(link)
Мне "Паттерны проектирования" одназначно помогли. Еще "Codecraft" сколько-то пригодился, хотя его наверное тоже имеет смысл читать разве что в начале карьеры. "Pragmatic Programmer" не впечатлил
alexeybobkov: (Default)

[personal profile] alexeybobkov 2011-03-01 06:49 pm (UTC)(link)
Есть ещё такая книга: A.Shalloway, J.R.Trott, "Design Patterns Explained: A New Perspective on Object-Oriented Design".
Очень полезная для в плане практического понимания, что такое эти паттерны и для чего они вообще нужны.

[identity profile] mtyukanov.livejournal.com 2011-03-01 01:31 pm (UTC)(link)
Полностью согласен насчет Кернигана-Пайка, на мой взгляд, это в десятке наиболее нужных книг.
Я бы назвал еще Design and Evolution of C++, причем не только для углубления понимания языка программистами C++ (хотя им эти книга, безусловно, полезна еще и этим), но и как развернутый case study развития большого проекта с анализом решений и их дальних последствий -- для всех программистов.

[identity profile] dimrub.livejournal.com 2011-03-01 01:40 pm (UTC)(link)
Да, D&E - очень хорошая книга, мне немного удивительно, что она не была названа.

(no subject)

[personal profile] alexeybobkov - 2011-03-01 18:55 (UTC) - Expand

(no subject)

[identity profile] a-bronx.livejournal.com - 2011-03-02 10:50 (UTC) - Expand

[identity profile] chessplayer.livejournal.com 2011-03-01 02:12 pm (UTC)(link)
все же самую полезную для программиста книгу почему-то никто не назвал. это "Programming Interviews Exposed" :)

[identity profile] freiksenet.livejournal.com 2011-03-01 02:35 pm (UTC)(link)
Как вам GEB кстати? Я думаю приобрести, тк многие знакомые советовали.

[identity profile] ztarlitz.livejournal.com 2011-03-01 02:35 pm (UTC)(link)
Вы не читали SICP? Или курсива на аббревиатурах не видно?

Насчет Фейнмана поддерживаю, так же у него есть вторая книга типа продолжения, «Какое ТЕБЕ дело до того, что думают другие?» Тоже весьма интересная.

[identity profile] avva.livejournal.com 2011-03-01 02:40 pm (UTC)(link)
Не читал, да. Давно уже собираюсь, но руки не дошли.

[identity profile] squadette.livejournal.com 2011-03-01 02:50 pm (UTC)(link)
книжка Why'я — полный мусор.
она мне сначала понравилась, ну реально же мозг взрывает
но сейчас я понимаю, что в основном это детрит.

кроме того, обнаружен журнал человека, не читавшего мифического человекомотылька! ИНФА 100%!

[identity profile] photo-viewer.livejournal.com 2011-03-01 03:08 pm (UTC)(link)
больше всего повлиял древний справочник по вычислениям с программируемым калькулятором - куча численных методов, адаптированных к ограниченным ресурсам.

[identity profile] gaus.livejournal.com 2011-03-01 03:31 pm (UTC)(link)
Всем, кто пишет на С++, на мой взгляд, небесполезно читать книжку Саттера и Александреску "C++ Сoding Standards" и "Effective STL" Мейерса.

[identity profile] pin-dragon.livejournal.com 2011-03-01 04:20 pm (UTC)(link)
+1

И [More] Exceptional С++ того же Саттера.

(no subject)

[personal profile] alexeybobkov - 2011-03-01 16:50 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 16:56 (UTC) - Expand

(no subject)

[personal profile] alexeybobkov - 2011-03-01 17:07 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 17:15 (UTC) - Expand

(no subject)

[personal profile] alexeybobkov - 2011-03-01 17:54 (UTC) - Expand

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-01 21:07 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 21:11 (UTC) - Expand

(no subject)

[identity profile] ztarlitz.livejournal.com - 2011-03-01 18:26 (UTC) - Expand

(no subject)

[identity profile] ztarlitz.livejournal.com - 2011-03-01 18:28 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 18:29 (UTC) - Expand

(no subject)

[identity profile] ztarlitz.livejournal.com - 2011-03-01 18:45 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 18:55 (UTC) - Expand

(no subject)

[identity profile] ztarlitz.livejournal.com - 2011-03-02 05:31 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-02 05:38 (UTC) - Expand

(no subject)

[identity profile] nomshar.livejournal.com - 2011-03-01 19:51 (UTC) - Expand

(no subject)

[identity profile] gaus.livejournal.com - 2011-03-01 20:02 (UTC) - Expand

(no subject)

[identity profile] nomshar.livejournal.com - 2011-03-01 21:47 (UTC) - Expand

(no subject)

[identity profile] pin-dragon.livejournal.com - 2011-03-02 12:33 (UTC) - Expand

(no subject)

[personal profile] alexeybobkov - 2011-03-01 22:17 (UTC) - Expand

[identity profile] alexott.livejournal.com 2011-03-01 03:36 pm (UTC)(link)
clean code - вообще очень странная книга, странно что ее хвалят...

[identity profile] efix.livejournal.com 2011-03-01 08:37 pm (UTC)(link)
в смысле странная?

[identity profile] yuridichesky.livejournal.com 2011-03-01 03:37 pm (UTC)(link)
Даже странно, что "A discipline of programming" by Dijkstra никем не упомянута, а эта книга неплохо вправляет мозги, испорченные ранним чтением Гради Буча. Про SICP уже написали выше, присоединяюсь.

(Anonymous) 2011-03-01 06:13 pm (UTC)(link)
Плюс бесконечно много и еще чуточку.

Этюды!

[identity profile] failhigh.livejournal.com 2011-03-01 04:29 pm (UTC)(link)
Да, "Этюды" Уэзерелла!
alexeybobkov: (Default)

Re: Этюды!

[personal profile] alexeybobkov 2011-03-01 04:53 pm (UTC)(link)
Замечательная книга... особенно была таковой для своего времени. Сейчас всё-таки несколько устарела. Особенно всё, касающееся реализации проектов - ведь тогда даже языка C не было!

Re: Этюды!

[personal profile] spamsink - 2011-03-01 16:57 (UTC) - Expand
alexeybobkov: (Default)

[personal profile] alexeybobkov 2011-03-01 05:02 pm (UTC)(link)
Н.Вирта уже никто не читает?! Странно...

Ещё я всё время хочу прочитать две книги, которые у меня стоят на полке, и про которые есть подозрение, что они хорошие - это "Elements of Programming" Stepanov, McJones и "The structure of Typed Programming Languages" David A.Schmidt, и всё никак время не находится.

[identity profile] ztarlitz.livejournal.com 2011-03-01 06:35 pm (UTC)(link)
Алгоритмы + структуры данных - одна из лучших книг что я читал в юности по программированию. На мой взгляд важнее то о чем она важнее любых паттернов.

[identity profile] chebureque.livejournal.com 2011-03-01 05:38 pm (UTC)(link)
Что я совершенно не могу понять — так это почему почти во всех рейтингах книг для программистов фигурирует Zen and the Art of Motorcycle Maintenance. Что в ней такого?

(Anonymous) 2011-03-02 02:12 am (UTC)(link)
"Философские" тексты, написанные психически больными людьми или под влиянием наркотиков кажутся многим "глубокими" именно в силу своей загадочности. Разумеется, их никто не понимает, ибо понимать там нечего, но многие делают вид или стараются вникнуть. Zen просто кажется доступнее, чем Хайдеггер, но принципиально никакой разницы нет.

(no subject)

[identity profile] ztarlitz.livejournal.com - 2011-03-02 05:40 (UTC) - Expand

(no subject)

(Anonymous) - 2011-03-02 13:24 (UTC) - Expand

(no subject)

[identity profile] plotnik.livejournal.com - 2011-03-02 15:35 (UTC) - Expand

(Anonymous) 2011-03-01 06:07 pm (UTC)(link)
Кто-нибудь читал Object Oriented Software Construction Майера?

[identity profile] squadette.livejournal.com 2011-03-03 10:11 am (UTC)(link)
да, я прочитал лет десять назад её процентов на 60.

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

(Anonymous) 2011-03-02 02:29 am (UTC)(link)
Слово "прочитать" можно понимать по-разному. Многие (боюсь, большинство) считают, что все книги надо пропахивать, как трактор поле, не оставляя непонятым ни одного слова. Книг, достойных такого чтения, очень мало. Люди тратят свое время на углубленный анализ книг, такого анализа недостойных. В результате чтение воспринимается как тяжелый труд и знакомство с действительно полезными книгами откладывается "на потом". Хотя уже сейчас можно было бы бегло их прочитать с большой пользой.

И еще. Для изучения определенной темы выбирается "лучшая книга" и дооолго изучается, с застыванием на опечатках и ошибках автора. А лучше было бы бегло прочитать 5-6 книг по теме. Но не все знают, насколько это эффективнее...

[identity profile] olegs.livejournal.com 2011-03-02 06:35 am (UTC)(link)
мне показалось, или в вашем списке нет книг по структурам данных?

[identity profile] avva.livejournal.com 2011-03-02 08:08 am (UTC)(link)
Это не мой список - это список пользователей StackOverflow. Есть одна, Кормена - она называется Introduction to Algorithms, но в той же мере она и про структуры данных.

(Anonymous) 2011-03-02 09:03 am (UTC)(link)
Code Optimization: Effective Memory Usage

Page 1 of 2