Напишу отзыв о том, что успел прочитать)
"Structure and Interpretation of Computer Programs"
Когда смотришь на обложку данной книги, то не понимаешь для чего она и что дает ее прочтение. Именно этот факт заставил меня отказаться от покупки данной книги пару лет назад. Но благодаря
@thekiba, и пари с ним, я решил попробовать. И так, начнем по порядку:
1 глава: В этой главе мы начнем знакомиться с базовыми кирпичиками любого языка - процедурами. Будут рассмотрены такие понятия как рекурсия, и варианты ее реализации: рекурсивная и итеративная(или хвостовая рекурсия), процедуры высшего порядка и лямбда выражения(а так же синтаксический сахар let). Книга будет знакомить с этими понятиями постепенно, на примере решения простых задач, вроде нахождения факториала или поиска n-го числа фибоначчи. Помимо объяснения синтаксиса языка, будут затронуты вопросы эффективности алгоритма того или иного решения(O нотация), и приведены различные варианты решений, начиная с более медленного алгоритма, и заканчивая оптимальным. Также в главе приводится объяснение и принцип работы вероятностных алгоритмов на примере проверки числа на простоту, с помощью реализации теоремы Ферма.
2 глава: Так как в первой главе речь идет лишь о функциях, а любые манипуляции над данными сводятся лишь к числам, то после ее прочтения, мы сможем работать только с ними. Вторая глава переводит нас на следующий уровень - работа со структурами данных. В этой главе мы познакомимся с таким простым понятием как пара(pair). И то, как механизм абстракций позволяет, из такой простой структуры, строить сложные: списки, деревья, вложенные списки. В целом, вторая часть главы строится из задач обработки списков. Мы познакомимся с левой и правой сверткой, с обработкой символьной информации. Основная цель главы - показать, как механизм абстракций позволяет легко свести практически любую задачу к решению более мелких подзадач.
Думаю, книга подойдет всем тем, кто уже имеет опыт в разработке, но хотел бы глубже понять основы. А так-же тем, кто хотел бы познакомиться с ФП, или просто изучить Lisp.