От редакции: в рубрике DOU Booksучастники сообщества рассказывают о пяти любимых книгах — тех, которые меняют мировоззрение и могут быть полезны читателям-коллегам.
[Руслан Шевченко — более 20 лет опыта в сфере разработки, работал научным сотрудником в Институте Программных Систем НАНУ, потом был техническим директором интернет-провайдера [NBI], занимался разработкой программного обеспечения в GradSoft, далее работал в разных проектах в телекоме, рекламной индустрии и финтехе, сейчас — системный архитектор в IOV42. Активный колумнист ДОУ, автор ежегодного рейтинга языков, более десятка статей в реферируемых журналах]
На самом деле сложно выделить именно пять, но если выбрать те, что повлияли в профессиональном плане, то вот более или менее хронологический список.
Д. Пойя «Как решать задачу»
Оригинал: George Polya. How to solve it, Stanford University. 1944
Если бы мне нужно было выбрать одну книгу, которую надо прочитать каждому программисту, я бы назвал именно эту. Это рассказ об эвристиках решения задач: рефлексия процесса поиска решений, изложенная математически четким языком. Кажется, что после обработки этой книги, практически невозможно мыслить неясно. Справедливости ради, следует сказать, что я прочел ее еще школьником, возможно тогда трава была зеленее, а все хорошие книги — лучше.
Цитата из предисловия:
Крупное научное открытие дает решение крупной проблемы, но и в решении любой задачи присутствует крупица открытия. Задача, которую вы решаете, может быть скромной, но если она бросает вызов вашей любознательности и заставляет вас быть изобретательными и если вы решаете ее собственными силами, то вы сможете испытать ведущее к открытию напряжение ума и насладиться радостью победы.
Б. Керниган, Д. Ритчи «Язык программирования С»
Оригинал: Brian Kernighan and Dennis Ritchie. The C Programming Language. Prentice-Hall. 1988
Классическое введение в язык. K&R не зря называют золотым стандартом технического писательства. Эта была первая техническая книга, слог которой позволял читать ее как прочетную.
Цитата:
#include <stdio.h>
int main() {
println(“Hello, world\n”)
}
Э. Мендельсон «Введение в математическую логику»
Оригинал: Elliott Mendelson. Introduction to Mathematical Logic, Six Edition: CRC Press, 2015
Еще один легкочитающийся учебник, на этот раз логики. Он перевел для меня категорию «книжка с формулами» из разряда «грызть гранит» в «можно почитать для развлечения».
Цитата:
Теорема Сколема-Левенгейма [1919, 1915]. Если теория K первого порядка имеет какую-то модель, то она имеет и счетную модель...
Говоря о Дональде Кнуте, также надо вспомнить гораздо более известную его книгу «Искусство программирования для ЭВМ» (Donald E. Knuth. The art of Computer Programming), получившую в русскоязычной среде неофициальное название «библия программиста» и задающую стандарт для описания алгоритмов. Однако сейчас можно сказать, что TAoCP сейчас интересна для чтения больше в историческом контексте, для введения в область алгоритмов есть более современные и легкие учебники (кстати, его же совместная с Рональдом Грехемом и Ореном Патишником «Конкретная математика»).
А вот идеи, изложенные в Literate Programming, интересны сами по себе и сейчас. В свое время они почему-то не были подхвачены индустрией, хотя оказали колоссальное влияние на академическую среду.
Цитата:
My hope is that the ability to make explanations more natural will cause more programmers to discover the joys of literate programming, because I believe it’s quite a pleasure to combine verbal and mathematical skills; but perhaps I’m hoping for too much.
А. Коберн «Современные методы описания функциональных требований к системам»
Оригинал: Alistair Cockburn. Writing Effective Use-Cases. 2001
Книга о том, как писать Use-Cas-ы от автора этих самых Use-Cas-ов. Казалось бы, ничего особенного — просто много примеров и структурированное изложение. Одна из немногих техник в организации процесса разработки ПО, которая более или менее работает. Коберн также известен как автор семейства методологий Crystal.
Цитата:
Каждому проекту — своя методология.
Заметил, что в перечне книг нет современных. Наверное, это потому что наибольшее влияние книги оказывают на человека в юном возрасте. Поэтому немного нарушу формат и приведу здесь лог из текущего списка чтения, который могу порекомендовать:
- Ian Goodfellow, Yoshua Bengio, Aaron Courville «Deep Learning Book» (доступна online). Если вам нужно легкое введение в тему — самое то.
- Roland Kuhn with Brian Hanafee and Jamie Allen «Reactive Desing Patterns» (страница книги). Тоже хорошо написанное введение.
- Martin Kleppmann «Designing Data-Intensive Applications» (страница книги). Читая ее, становится понятнее, как можно написать свою базу данных.