Недавно я прочитал очередной десяткок книг, а значит настало время для написания рецензий. На сей раз десять книг я осилил всего лишь месяца за полтора. Должно быть, книжки были тоньше, чем обычно. Предыдущие обзоры литературы вы найдете здесь: третий десяток , второй десяток , первый десяток .
Real World Haskell
Bryan O’Sullivan, Don Stewart, John Goerzen
Есть подозрение, что я начал изучение Haskell не с той книги. Learn You a Haskell for Great Good рассказывает лишь об основах языка и примерно наполовину состоит изо всяких там приколов и дурацких цветных картинок. Тем временем, в Real World Haskell все просто, понятно и исключительно по теме. К тому же, в книге много внимания уделяется практическим вопросам программирования на Haskell. Например, в RWH освещены такие вопросы, как работа с файлами, многопоточное программирование ( нити и STM ), тестирование, работа с базами данных , написание GUI , а также создание domain-specific languages и парсеров .
Несмотря на то, что книга немного устарела, она очень, очень хороша. Если вы прочитали LYH и не прочитали RWH, можно с большой степенью уверенности сказать, что вы еще многого не знаете о Haskell. Бесплатная онлайн-версия книги доступна здесь .
PostgreSQL: Up and Running
Regina Obe, Leo Hsu
Очень хорошая книга для тех, кто хочет начать использовать PostgreSQL , но при этом не имеет времени на чтение тысяч страниц официальной документации. Книга повествует о свежем PostgreSQL 9.2, чем может похвастаться немного книг об этой СУБД.
Все четко и исключительно по теме, без нудных введений и идиотских заключений в конце каждой главы типа «только что вы прочитали о …». Я и сам прекрасно знаю, о чем я только что прочитал! Помимо всего прочего, раскрыты темы оптимизации запросов и репликации.
Практика функционального программирования, выпуск 2
Продолжаю потихоньку почитывать Практику функционального программирования . В этом номере мне больше всего понравилась статья История разработки одного компилятора Дмитрия Зуйкова. Помимо прочего, в этой статье прекрасно описаны сильные стороны языков программирования со строгой статической типизацией . Остальные статьи в данном выпуске ПФП, само собой разумеется, также очень хороши.
Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement
Eric Redmond, Jim R. Wilson
Книга, аналогичная «Seven Languages in Seven Weeks», только о базах данных — PostgreSQL, Riak , MongoDB , HBase, CouchDB , Redis и Neo4j. Мне лично особенно интересно было почитать про Riak. Каких-либо интервью, в отличие от «семи языков программирования», не было, но этот недостаток компенсируется наличием забавных комиксов. Как и в «языках программирования», авторы проводят аналогии, только не с персонажами кино, а со строительными инструментами.
Как по мне, обзоры СУБД получились довольно поверхностными. Например, из книги нельзя понять, происходит ли каким-то образом перераспределение данных при добавлении узлов в Riak и если да, то каким образом. Кроме того, больш а я часть книги почему-то повествует вовсе не о СУБД, а о написании программок на богопротивных Ruby и Node.js.
Тем не менее, книга годная. Моя оценка — 4 из 5.
Parallel and Concurrent Programming in Haskell
Simon Marlow
Как и следовало ожидать, принимая во внимание имя автора, книга просто великолепная. Благодаря ей вы познакомитесь с монадами Eval и Par, нитями и STM, пакетами repa, accelerate, async и distributed-process (тот самый Cloud Haskell ). Также вы узнаете, как пользоваться ThreadScope и бороться с ленивыми вычислениями . Все это в контексте распараллеливания разных интересных алгоритмов, например, составляющих расписание докладов на конференции или производящих вывод типов. При этом книга читается легко и приятно, неперевариваемых матанов не содержит.
Во время чтения я сделал для себя массу открытий. Например, я и подумать не мог, что на Haskell можно писать под GPU. Вот представьте, тормозит у вас сайтик. Вы просто вставляете видюху помощнее и проблемы как ни бывало. How cool is that! 🙂
В книге приводится реализация Chan и TQueue, а также в общих словах описывается внутреннее устройство STM. Вот вы знали, что сложность retry есть O(n) от числа прочитанных TVar’ов? Или, что лог транзакций в STM на данный момент хранится в виде списка? Соответственно, сложность readTVar составляет O(n) от длины лога, а чтение n TVar’ов имеет сложность O(n ** 2).
В общем, моя оценка — 5 с огромным жирным плюсом. А вот тут опубликовал свой отзыв о книге Роман Чепляка.
A Little Riak Book
Eric Redmond
Очень хорошая, няшненькая книжка о Riak. В отличие от «семи баз данных» здесь не приводится код на Ruby или Node.js, зато есть куда больше технических подробностей о самом Riak. В частности, рассказывается, как настраивать кластер, как добавлять/удалять ноды и что при этом на самом деле происходит. Книга распространяется бесплатно , исходный код лежит в открытом репозитории на GitHub . Судя по последнему, «A Little Riak Book» время от времени обновляется.
Интересно, что книгу написал тот же Eric Redmond , что числится среди авторов «Seven Databases in Seven Weeks». Если верить профилю в Twitter, сейчас Эрик работает в Basho Technologies , занимающейся разработкой Riak. Страница Эрика на about.me содержит ссылки на его доклады, статьи и тд.
Практика функционального программирования, выпуск 3
В третьем выпуске ПФП мне понравилась статья Льва Валкина Проектирование Erlang-клиента к memcached . Немного удивило, что примерно половину номера занимает огромная статья Евгения Кирпичева Элементы функциональных языков . В этой статье рассказывается, что из себя представляет это ваше функциональное программирование и что оно дает, чего не могут дать все остальные программирования. Статья очень, очень хорошая и всячески рекомендуются к прочтению.
Кстати, вот вопрос, который не дает мне покоя. Зачем в журнале на русском языке писать аннотации к каждой статье как на русском, так и на английском языке ? Если кто-нибудь знает ответ, пожалуйста, дайте его в комментариях, ибо я теряюсь в догадках.
Программирование на Clojure
Чаз Эмерик, Брайан Карпер, Кристоф Гранд
Перевод очень хороший, переводчик (Александр Киселев) постарался на славу. Книга показалось несколько затянутой, но в целом хорошей. Все особенности языка, а также такие прикладные моменты, как хождение в базы данных, разработка GUI-, веб-приложений и так далее, раскрыты в полном объеме. А вот 800 страниц в традиционном для издательства ДМК-Пресс мелком формате 60×90/16 — это полный идиотизм я считаю.
Что касается самого Clojure, вроде нормальный, не быдлокодерский, язык. Функциональный, под JVM, с динамической типизацией , Lisp’овыми макросами, ленивыми вычислениями, транзакционной памятью и даже горячим обновлением кода . Особенно мне понравилось, что STM в Clojure позволяет помечать ассоциативные операции, тем самым минимизируя число конфликтов, а также поддерживает что-то вроде триггеров. Однако неистового желания писать на Clojure у меня не возникло. Haskell лучше.
Erlang and OTP in Action
Martin Logan, Eric Merritt, Richard Carlsson
Книга шикарная. Помимо прочего, содержит описание разных тонких моментов. Например, в разделе 2.13.4 «Delivery of messages and signals» говорится, что посылка сообщений и запросов на создание link’ов в Erlang — это все частные случай сигналов. Из этого, в частности, следует, что сигнал о смерти процесса никогда не обгонит посланные этим процессом сообщения, а также, что сообщение не может обогнать запрос на создание link’а. В том же разделе говориться, что если вы послали два сообщения процессу, работающему на другой ноде, и в этот момент мигнула сеть, то возможно, что первое сообщение будет потеряно, а второе успешно дойдет до получателя.
Также благодаря этой книге вы узнаете, чем spawn_link отличается от proc_lib:spawn_link, как работать с Mnesia, использовать релизы и Jinterface, писать порты, linked-in драйверы и NIF’ы . В конце книги вы найдете отдельную главу об оптимизации кода на Erlang, которую я нашел весьма интересной.
В целом, «Erlang and OTP in Action» представляет собой замечательное дополнение ко второму изданию Армстронга. Если вы зарабатываете на жизнь программированием на Erlang, то обязаны прочитать эту книгу.
Happstack Crashcourse
Я тут недавно научился собирать PDF из сайтиков , благодаря чему теперь я могу читать в дороге все эти длинны туториалы, на чтение которых обычно нет времени. Happstack заинтересовал меня после прочтения опубликованного на Хабре перевода туториала по Happstack Lite . В качестве источника дополнительной информации там предлагается Happstack Crashcourse , из которого я и собрал PDF . Получилось 145 страниц, что, как по мне, вполне тянет на небольшую книжку.
Туториал оказался довольно годным. Читается легко, преимущественно все просто и понятно. Помимо информации по Happstack, приводятся ссылки на дополнительные материалы по различным темам, объясняются линзы, acid-state (это NoSQL база данных, написанная на Haskell, что-то вроде аналога Mnesia из мира Erlang), а также основы Template Haskell . Сам фреймворк весьма занятен и, кажется, использовать его довольно просто. Благодаря этому туториалу вы быстро научитесь писать несложные сайтики на Haskell с шаблонами, кукаким и так далее.
На этом у меня все. Читать круто. Читайте как можно больше!
Дополнение: Полсотни прочитанных книг и журналов