Четвертый десяток прочитанных книг и журналов

19 августа 2013

Недавно я прочитал очередной десяткок книг, а значит настало время для написания рецензий. На сей раз десять книг я осилил всего лишь месяца за полтора. Должно быть, книжки были тоньше, чем обычно. Предыдущие обзоры литературы вы найдете здесь: третий десяток, второй десяток, первый десяток.

Real World HaskellReal 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 RunningPostgreSQL: Up and Running
Regina Obe, Leo Hsu

Очень хорошая книга для тех, кто хочет начать использовать PostgreSQL, но при этом не имеет времени на чтение тысяч страниц официальной документации. Книга повествует о свежем PostgreSQL 9.2, чем может похвастаться немного книг об этой СУБД.

Все четко и исключительно по теме, без нудных введений и идиотских заключений в конце каждой главы типа «только что вы прочитали о …». Я и сам прекрасно знаю, о чем я только что прочитал, блин! Помимо всего прочего, раскрыты темы оптимизации запросов и репликации. Временами встречаются забавные шутки, например, «Once the slave has tasted freedom, there’s no go going back» или «Resistance is futile, FDW assimilates».

Практика функционального программирования, выпуск 2Практика функционального программирования, выпуск 2

Продолжаю потихоньку почитывать Практику функционального программирования. В этом номере мне больше всего понравилась статья История разработки одного компилятора Дмитрия Зуйкова. Помимо прочего, в этой статье прекрасно описаны сильные стороны языков программирования со строгой статической типизацией. Остальные статьи в данном выпуске ПФП, само собой разумеется, также очень хороши.

Seven Databases in Seven WeeksSeven 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 HaskellParallel 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 BookA 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Практика функционального программирования, выпуск 3

В третьем выпуске ПФП мне понравилась статья Льва Валкина Проектирование Erlang-клиента к memcached. Немного удивило, что примерно половину номера занимает огромная статья Евгения Кирпичева Элементы функциональных языков. В этой статье рассказывается, что из себя представляет это ваше функциональное программирование и что оно дает, чего не могут дать все остальные программирования. Статья очень, очень хорошая и всячески рекомендуются к прочтению.

Кстати, вот вопрос, который не дает мне покоя. Зачем в журнале на русском языке писать аннотации к каждой статье как на русском, так и на английском языке? Если кто-нибудь знает ответ, пожалуйста, дайте его в комментариях, ибо я теряюсь в догадках.

Программирование на ClojureПрограммирование на Clojure
Чаз Эмерик, Брайан Карпер, Кристоф Гранд

Перевод очень хороший, переводчик (Александр Киселев) постарался на славу. Книга показалось несколько затянутой, но в целом хорошей. Все особенности языка, а также такие прикладные моменты, как хождение в базы данных, разработка GUI-, веб-приложений и так далее, раскрыты в полном объеме. А вот 800 страниц в традиционном для издательства ДМК-Пресс мелком формате 60×90/16 — это полный идиотизм я считаю.

Что касается самого Clojure, вроде нормальный, не быдлокодерский, язык. Функциональный, под JVM, с динамической типизацией, Lisp’овыми макросами, ленивыми вычислениями, транзакционной памятью и даже горячим обновлением кода. Особенно мне понравилось, что STM в Clojure позволяет помечать ассоциативные операции, тем самым минимизируя число конфликтов, а также поддерживает что-то вроде триггеров. Однако неистового желания писать на Clojure у меня не возникло. Haskell лучше.

Erlang and OTP in ActionErlang 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 CrashcourseHappstack Crashcourse

Я тут недавно научился собирать PDF из сайтиков, благодаря чему теперь я могу читать в дороге все эти длинны туториалы, на чтение которых обычно нет времени. Happstack заинтересовал меня после прочтения опубликованного на Хабре перевода туториала по Happstack Lite. В качестве источника дополнительной информации там предлагается Happstack Crashcourse, из которого я и собрал PDF. Получилось 145 страниц, что, как по мне, вполне тянет на небольшую книжку.

Туториал оказался довольно годным. Читается легко, преимущественно все просто и понятно. Помимо информации по Happstack, приводятся ссылки на дополнительные материалы по различным темам, объясняются линзы, acid-state (это NoSQL база данных, написанная на Haskell, что-то вроде аналога Mnesia из мира Erlang), а также основы Template Haskell. Сам фреймворк весьма занятен и, кажется, использовать его довольно просто. Благодаря этому туториалу вы быстро научитесь писать несложные сайтики на Haskell с шаблонами, кукаким и так далее.

На этом у меня все. Читать круто. Читайте как можно больше!

Дополнение: Полсотни прочитанных книг и журналов

Метки: .

Подпишись через RSS, E-Mail, Google+, Facebook, Vk или Twitter!

Понравился пост? Поделись с другими: