Сегодня я поведаю об очередных десяти книгах (на самом деле — девяти книгах и одном журнале), которые я прочитал за последние три месяца. Мои предыдущие обзоры литературы вы найдете тут: второй десяток , первый десяток .
Типы в языках программирования
Бенджамин Пирс
Книга повествует о теории типов. Эта теория позволяет реализовать проверку и автоматический вывод типов в языках программирования со статической типизацией. Повествование ведется сухим академическим языком. Для каждой темы сначала дается теория, а затем приводится реализация на OCaml . Книга содержит много формул и теорем. Не самое захватывающее чтиво, доложу я вам.
TAPL — это, бесспорно, настоящий кладезь знаний для разработчиков языков программирования со статической типизацией . И довольно бесполезная книга для обыкновенных программистов. Практический интерес TAPL представляет разве что для тех, кто решил стать коммиттером в GHC или написать свой маленький Haskell.
Akka Concurrency
Derek Wyatt
Akka — это библиотека для Scala и Java, позволяющая писать многопоточные приложения с использованием модели акторов. Как и следовало ожидать, очень многое в Akka нагло слизано с Erlang, включая супервизоры и FSM. Но есть и множество вещей, отсутствующих в Erlang. Например, Akka позволяет подменять отправителя сообщения и заменять реализацию очередей.
По всей видимости, применить опыт программирования на Erlang в Scala не представляется возможным. Например, насколько я понял, в Akka нельзя сделать синхронную посылку сообщений, заблокировав только текущий актор , а не целый поток, обслуживающий этот и другие акторы. В Scala у нас все еще есть изменяемые переменные (изменяемыми могут быть даже сообщения, передача которых происходит по ссылке!) и одна куча на все потоки. После Erlang код на Scala и Akka выглядит слишком уродливо. По этой причине (да и, вообще-то, ряду других) я решил пока забить на Scala. Хотя в целом Scala — хороший язык. Практически тот же Perl 6 , только лучше.
Книга написана живым языком и с юмором. Это был настоящий глоток свежего воздуха после TAPL. С другой стороны, временами язык даже слишком уж живой. После «Programming in Scala» Одерски, где расхваливается статическая типизация языка, забавно наблюдать, как автор то и дело хвалит динамическую природу сообщений в Akka, которая позволяет писать такой гибкий и простой код. В книге много внимания уделяется тестированию кода, что есть очень хорошо, но порой утомляет.
?tudes for Erlang
J. David Eisenberg
Об этой книге я узнал благодаря Erlanger.ru . Тонюсенькая книжечка, представляющая собой сборник задач для изучающих Erlang. Примерно на треть состоит из кода ответов. Обязательна к прочтению и решению абсолютно всех задач, если сейчас вы занимаетесь изучением Erlang. Пустая трата времени, если вы уже пишите на Erlang.
Исходный код книги лежит на гитхабе . На сайте O’Reilly можно прочитать онлайн-версию. Там же за 5 баксов можно купить PDF-версию книги, если лень самому собирать ее из исходников.
Programming Erlang (2nd edition)
Joe Armstrong
Благодаря этой книге я узнал об Erlang много нового. Скажем, я не знал про tuple modules. Или о том, что оператор ++ можно использовать в паттерн матчинге. К своему стыду я даже не знал, что в REPL можно использовать сочетания Ctr+A и Ctr+E для перехода в начало и конец строки соответственно. Мелочи, конечно, но знать такие вещи полезно.
Помимо прочего Джо рассказывает о том, как пользоваться rebar, как писать веб-приложения с использованием Cowboy, а также о новом типе map, который должен появиться в Erlang R17, с BIF’ами для преобразования в/из JSON. Книга интересная и читается очень легко. Мысли излагаются просто и понятно, все написанное — исключительно по делу. Осмелюсь заявить, что это лучшая книга об Erlang из всех мне известных.
Практика функционального программирования, выпуск 1
Решил прочитать все выпуски ПФП . Журналы — это не совсем книги, но тоже литература. Притом, по некоторым показателям, например, интересности и количеству страниц, журналы могут дать фору многим книгам.
В этом выпуске мне больше всего понравились подборка литературы по функциональному программированию, перевод статьи про моноиды , а также статья о том, как использовать в своей работе ФП, если тебе повезло писать на Java.
Общие впечатления от журнала самые что ни на есть положительные. Буду читать его дальше.
Гибкие методологии разработки
Борис Вольфсон
Бесплатная PDF-книга небольшого объема на русском языке. Представляет собой нечто вроде конспекта по гибким (agile) методологиям разработки — Scrum, XP и так далее.
С помощью этой книги я освежил свои представления об экстремальном программировании, структурировал знания о Scrum, а также узнал, что такое Kanban. Если вы не можете с уверенностью объяснить, что означает каждое из названных понятий, эта книга предназначена для вас.
Книга хороша. Автор, бесспорно, молодец!
RabbitMQ in Action: Distributed Messaging for Everyone
Alvaro Videla, Jason J. W. Williams
RabbitMQ — это сервер для обмена сообщениями между приложениями. На первый взгляд может показаться, что «кролик» решает задачу, которая довольно редко встречается на практике. Однако по моему опыту в том или ином виде этот шаблон встречается буквально повсеместно. RabbitMQ может существенно упростить разработку. Например, новый функционал можно добавить, просто написав независимую программу, которая подписывается на нужные события и выполняет требуемые действия.
Это — что касается RabbitMQ. Что же до самой книги, она мне не очень понравилась. Первые страниц 100 были довольно интересными, а потом началось какое-то высасывание материала из пальца. В одной книге намешано администрирование, программирование на Erlang, Python и PHP, а также настройка плагина, добавляющего к RabbitMQ веб-интерфейс . Есть подозрения, что книгу можно было сделать в 2-3 раза короче.
Purely Functional Data Structures
Chris Okasaki
Классическая книга Криса Окасаки по функциональным структурам данных. Благодаря ей теперь я понимаю, как в Erlang работает модуль queue . Книгу можно приобрести в электронном виде за 39$. Практически весь материал книги содержится в одноименной диссертации, которая свободно доступна в сети.
Материал довольно сложен для восприятия. Много матанов. Крис использует язык программирования SML (смотрите-ка, чтение Харпера окупилось!). В конце книги есть приложение, содержащие перевод кода на Haskell. Б о льшую часть книги я читал по диагонали. Есть подозрения, что функциональные структуры данных намного интереснее придумывать, чем читать о готовых решениях.
Если вам захочется прорешать все упражнения из книги, вы найдете единомышленников в списке рассылки okasaki russian study group . А в этом репозитории ведутся работы над русским переводом книги.
Искусственный интеллект: стратегии и методы решения сложных проблем
Дж. Люгер
Мой первый подход к этой книге состоялся около года назад. Тогда я прочитал первые две сотни страниц, после чего отложил книгу в сторону. Теперь вот вернулся и решил добить.
Поиск на графах , клеточные автоматы, генетические алгоритмы , нейронные сети , исчисление предикатов, машинное обучение, представление знаний, понимание естественного языка, а также программирование на Lisp и Prolog — все в одной книге. По каждой теме приводится богатый список дополнительной литературы для желающих глубже погрузиться в тему. Есть упражнения, большинство из которых весьма занятны.
Не самая легкая для восприятия книга, но очень интересная. Всячески рекомендую. Вообще, я понял, что если кому-то было не лень перевести с английского языка книгу объемом ~1000 страниц, то книга эта почти наверняка хорошая и останется актуальной на протяжении долгого времени. Нужно читать побольше таких вот толстых книжек.
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages
Bruce A. Tate
Об идее книги несложно догадаться по ее названию. Предисловие написано Джо Армстронгом, что само по себе уже многообещающе.
Подборку языков программирования, используемых в книге (Erlang, Scala, Prolog, Ruby, Io, Clojure, Haskell), я одобряю. Особенно интересно было посмотреть на Clojure . Для каждого языка приводится короткое интервью либо с создателем этого языка, либо с активным пользователем. Читать такие вещи всегда интересно.
Некоторые утверждения автора несколько сомнительны. Временами печалят затянувшиеся аналогии, что дескать Erlang похож на Агента Смита, а Clojure — на магистра Йоду. Обзоры языков довольно поверхностны. Кое-какая информация из книги уже успела устареть. Но несмотря на эти недостатки книга очень хорошая.
Я вот что думаю. После прочтения рецензий на три десятка книг, вы неплохо так осведомлены о моих вкусах/интересах. Что бы вы посоветовали мне почитать?
Дополнение: Четвертый десяток прочитанных книг и журналов