| Eugene Kirpichov ( @ 2008-11-24 22:58:00 |
Мы вернулись из Италии. Про это - позже (на этот раз вероятность того, что я все-таки расскажу, больше, чем в случае Греции - т.к. мой отпуск будет продолжаться еще неделю).
А теперь, по просьбе
zabivator - список книг по программированию, которые я считаю прекрасными.
- SICP - без комментариев.
- Кормен - тоже.
- R.Bird - Introduction to functional programming using Haskell - ценна тем, что а)уделяет очень много внимания алгебраическим свойствам функций, в т.ч. (!) и их поведению на недоопределенных входах и б)содержит несколько примеров восхитительно элегантного решения задач на Хаскелле. Мой любимый пример - когда наивное решение задачи о максимальной сумме подотрезка за O(n^3) сводится несколькими переписываниями по простым теоремам к решению за O(n).
- Воеводин,Воеводин - Параллельные вычисления. Не осилил целиком, но это фундаментальный труд о сложных проблемах распараллеливания программ. Содержит в себе массу описаний практических реализаций систем и фреймворков, их достоинств и недостатков.
- Танненбаум - Распределенные системы. Ее почему-то часто ругают, но мне она открыла глаза на ряд важных алгоритмов и т.п.
- Столлингс - Операционные системы. Увидел ее только вчера, но уже понял, что надо прочитать обязательно.
- Programming collective intelligence. Очень просто и понятно объясняет ряд основных алгоритмов information retrieval.
- Д.Ш.Матрос, Г.Б.Поднебесова - Теория алгоритмов. Купил ее в последний день перед отпуском и удивился тому, как такая тоненькая книжица в формате методички может быть настолько классной. Посвящена вопросам вычислимости и сложности; они освещаются очень понятно и красиво, я весьма многого раньше не знал.
- Tom Kyte - Oracle for Experts. Я, признаться, не читал книг о реализации СУБД, поэтому свет на эти вопросы мне пролила именно эта книга, хоть и в контексте именно Оракла. Но поскольку Оракл, в общем-то, и является последним словом в этих вопросах...
- Cleveland - Visualizing data, Elements of graphing data. Мне кажется, способность анализировать поведение своих (или чужих) программ, и вообще анализировать данные - довольно критична для программиста; эти две книжки представляют любопытнейшие и крайне эффективные способы визуализировать разные типы наборов данных - многомерные, дискретные, временные ряды, и т.п.
- По тем же причинам - Большаков,Каримов - Методы обработки многомерных данных и временных рядов. Восхитительный сборник методов анализа данных с массой практических примеров. Он не прост (как и сами задачи), но и не чрезмерно сложен. В самый раз для серьезного, практического применения к реальным задачам. Мне кажется, это тоже must-read для программиста.
- Bertot, Castellan - Coq'Art - хотя большинству программистов и не придется никогда столкнуться с Coq, эта книжка проливает свет на связь конструктивной логики и программирования и на то, как вообще программы могут быть верифицированы. В результате, узрев столько новых концепций и связей между ними и привычными вещами, вполне можно и изменить свой взгляд на повседневное программирование, и уж в любом случае книжка просто очень интересная.
Вместо "Паттернов" GoF рекомендую "Рефакторинг с использованием шаблонов" - по сути, шаблоны перечислены те же, но в более практичном контексте, и с помощью этой книги уже можно кое-чему научиться. Что не отменяет пальмы первенства GoF в плане введения терминологии.
Ну и отдельно про С и С++:
- Искусство программирования на Си. Забыл, кто автор.
- [More]Effective C++, [More]Effective STL
- Как не надо программировать на С++. Это типа Java Puzzlers - так же интересно, но более полезно, т.к. в паззлерах рассматриваются довольно эзотерические вещи, а тут - реальные, часто встречающиеся баги, на которые очень легко наступить.
А теперь, по просьбе
- SICP - без комментариев.
- Кормен - тоже.
- R.Bird - Introduction to functional programming using Haskell - ценна тем, что а)уделяет очень много внимания алгебраическим свойствам функций, в т.ч. (!) и их поведению на недоопределенных входах и б)содержит несколько примеров восхитительно элегантного решения задач на Хаскелле. Мой любимый пример - когда наивное решение задачи о максимальной сумме подотрезка за O(n^3) сводится несколькими переписываниями по простым теоремам к решению за O(n).
- Воеводин,Воеводин - Параллельные вычисления. Не осилил целиком, но это фундаментальный труд о сложных проблемах распараллеливания программ. Содержит в себе массу описаний практических реализаций систем и фреймворков, их достоинств и недостатков.
- Танненбаум - Распределенные системы. Ее почему-то часто ругают, но мне она открыла глаза на ряд важных алгоритмов и т.п.
- Столлингс - Операционные системы. Увидел ее только вчера, но уже понял, что надо прочитать обязательно.
- Programming collective intelligence. Очень просто и понятно объясняет ряд основных алгоритмов information retrieval.
- Д.Ш.Матрос, Г.Б.Поднебесова - Теория алгоритмов. Купил ее в последний день перед отпуском и удивился тому, как такая тоненькая книжица в формате методички может быть настолько классной. Посвящена вопросам вычислимости и сложности; они освещаются очень понятно и красиво, я весьма многого раньше не знал.
- Tom Kyte - Oracle for Experts. Я, признаться, не читал книг о реализации СУБД, поэтому свет на эти вопросы мне пролила именно эта книга, хоть и в контексте именно Оракла. Но поскольку Оракл, в общем-то, и является последним словом в этих вопросах...
- Cleveland - Visualizing data, Elements of graphing data. Мне кажется, способность анализировать поведение своих (или чужих) программ, и вообще анализировать данные - довольно критична для программиста; эти две книжки представляют любопытнейшие и крайне эффективные способы визуализировать разные типы наборов данных - многомерные, дискретные, временные ряды, и т.п.
- По тем же причинам - Большаков,Каримов - Методы обработки многомерных данных и временных рядов. Восхитительный сборник методов анализа данных с массой практических примеров. Он не прост (как и сами задачи), но и не чрезмерно сложен. В самый раз для серьезного, практического применения к реальным задачам. Мне кажется, это тоже must-read для программиста.
- Bertot, Castellan - Coq'Art - хотя большинству программистов и не придется никогда столкнуться с Coq, эта книжка проливает свет на связь конструктивной логики и программирования и на то, как вообще программы могут быть верифицированы. В результате, узрев столько новых концепций и связей между ними и привычными вещами, вполне можно и изменить свой взгляд на повседневное программирование, и уж в любом случае книжка просто очень интересная.
Вместо "Паттернов" GoF рекомендую "Рефакторинг с использованием шаблонов" - по сути, шаблоны перечислены те же, но в более практичном контексте, и с помощью этой книги уже можно кое-чему научиться. Что не отменяет пальмы первенства GoF в плане введения терминологии.
Ну и отдельно про С и С++:
- Искусство программирования на Си. Забыл, кто автор.
- [More]Effective C++, [More]Effective STL
- Как не надо программировать на С++. Это типа Java Puzzlers - так же интересно, но более полезно, т.к. в паззлерах рассматриваются довольно эзотерические вещи, а тут - реальные, часто встречающиеся баги, на которые очень легко наступить.