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

14 апреля 2014

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

Изучаем редакторы vi и Vim, 7-е изданиеИзучаем редакторы vi и Vim, 7-е издание
Арнольд Роббинс, Элберт Ханна, Линда Лэмб

Я пишу код в Vim уже лет пять и до сих пор время от времени узнаю о нем что-то новое. Vim я изучал самостоятельно, методом проб и ошибок и почитывая справку. И вот, решил попробовать заполнить пробелы в знаниях, прочитав книжку.

Из книги я узнал, как сделать с нуля подсветку синтаксиса к новому языку. Узнал про :mksession и :source, что макросы для Vim можно писать на Perl, про quickfix list и команду :make. Про скрипты написано, увы, маловато.

Еще в книге написано про редакторы nvi (используется в *BSD по дэфолту), elvis (интересен тем, что есть WYSIWYG режим) и vile (Vi Like Emacs). Примерно сто страниц в конце занимают приложения, что с одной стороны удобно, но читать не очень интересно.

В целом, я ожидал от книги большего. Она очень хороша, если вы только начали изучать Vim, но если вы уже работаете с ним какое-то время, лучше полистайте блоги типа http://dailyvim.blogspot.com/ или http://dailyvim.tumblr.com/.

Introduction to Reliable and Secure Distributed ProgrammingIntroduction to Reliable and Secure Distributed Programming
Christian Cachin, Rachid Guerraoui, Luis Rodrigues

Кто-то из знакомых скинул черновик этой книги в PDF. Книга посвящена распределенным алгоритмам — Gossip, поиск консенсуса, векторные часы, разделяемая память, выбор лидера, распределенные транзакции, и так далее. Для меня оказалось сюрпризом, что эти алгоритмы можно выносить в отдельные подпрограммы, а затем повторно использовать в других подпрограммах. Например, имея готовые реализации линков, бродкаста и консенсуса, можно сравнительно просто получить распределенные транзакции.

В книге есть примеры (на Java), вопросы с ответами и интересные исторические справки. Матанов практически нет. Книга читается легко, с интересом, и вообще просветляет. Например, благодаря этой книге у меня наконец-то сложилась картинка в голове, как примерно можно сделать менеджер очередей типа RabbitMQ, только с правильно распределенной записью и репликацией между ДЦ.

После прочтения черновика, я выяснил, что полная версия этой книги уже есть на Амазоне. Я ее полистал, вроде от черновика не сильно отличается. Но в качестве компенсации за как бы не совсем прочитанную книгу закинулся еще и пейпером по Raft’у. Пейпер, кстати, тоже просветляет.

И еще. Как выяснилось, у этих авторов есть много других книжек на Амазоне.

Beginning Haskell: A Project-Based ApproachBeginning Haskell: A Project-Based Approach
Alejandro Serrano Mena

Очень крутая, просто гениальная книга о языке Haskell. Напоминает смесь Learn You a Haskell for Great Good и Real World Haskell, только более актуальную и с примесью хорошей подборки статей из интернетов. Вот прямо даешь ее прочитать программисту, который не знает Haskell, ждешь, и потом этот программист может начать писать довольно сносный боевой код. Мне лично было особенно интересно прочитать про Esqueleto. Это как Persistent, но заточенный специально под РСУБД, с джоинами и тд.

С другой стороны, складывается впечатление, что автор так хотел впихнуть в книгу всего, да побольше, что в итоге были упущены некоторые важные детали. Например, о Cloud Haskell, как мне кажется, в книге написано слишком уж поверхностно. С объяснением монад автор тоже перемудрил. Зашел слишком издалека, новичок скорее всего потеряет ход мысли где-то посередине. А под конец начинается какая-то жесть про DSL, Idris, катаморфизмы и анаморфизмы. Мне лично концовка разорвала мозг, так что, видимо, не повредит когда-нибудь ее перечитать.

Но в целом, книга очень годная. Категорически рекомендую к прочтению.

Graphite DocumentationGraphite Documentation
Chris Davis

Ни одной книги, посвященной Graphite, не наблюдается, поэтому я решил закинуться официальной документацией. Ее можно скачать как в формате pdf, так и epub.

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

Если никогда не работали с Graphite, имеет смысл ознакомиться. Если он уже у вас в бою и вы успешно пишите в него метрики, то читать, пожалуй, не стоит.

The Architecture of Open Source Applications, Volume IIThe Architecture of Open Source Applications, Volume II
Amy Brown, Greg Wilson

Ну раз уж я ознакомился с первым томом, то не могу не прочитать и второй. Во втором томе AOSA мне лично интереснее всего было ознакомиться с главами о Glasgow Haskell Compiler, Git, PyPy, Nginx и Yesod. Самая первая глава в книге посвящена разработке высоконагруженных веб-проектов. В принципе, глава довольно хорошо написана, но ничего нового для себя я из нее не узнал.

В общем и целом, впечатления от второго тома точно такие же, как и от первого. Книга местами слишком уж скучновата. Тем не менее, я скорее рекомендую ее к прочтению, чем нет.

Flex and BisonFlex and Bison
John R. Levine

Книга, посвященная генератору лексических анализаторов Flex и генератору синтаксических анализаторов Bison. Эту книгу я нашел в высшей мере исчерпывающей. Она определенно должна быть на полке у каждого, кто использует Flex и Bison в своей повседневной работе.

Однако если вам просто хочется разобраться, на что в первом приближении похожа работа с Flex и Bison, то эта книга, скорее всего, будет для вас слишком занудной. Если вы поставили перед собой такую задачу, лучше просто попробуйте нагуглить хороший туториал. Сэкономите время.

Implementing a JIT Compiled Language with Haskell and LLVMImplementing a JIT Compiled Language with Haskell and LLVM
Stephen Diehl

Классический туториал по созданию языка Kaleidoscope, адаптированный под Haskell. Можно бесплатно скачать отсюда. Туториал годный, рекомендую.

Аналогичный туториал для программистов на OCaml доступен здесь. Также на Хабре можно найти частичный перевод на русский язык этого же туториала для программистов на C++. Чисто на случай, если вы не понимаете всей красоты и изящности Haskell :)

Перед прочтением туториала не повредит прочитать небольшое введение в LLVM. Если вас интересует, насколько вообще полезен и актуален этот ваш LLVM, посмотрите, например, бенчмарки языка программирования Julia.

Нейронные сети. Полный курс, 2-е изданиеНейронные сети. Полный курс, 2-е издание
Саймон Хайкин

Как вы, конечно же, поняли, на каждый десяток книг я стараюсь брать одну толстую книжку на 1000+ страниц. Обычно, одну из тех, что давно стоит у меня на книжной полке, но прочитать которую я все никак не могу найти времени. И вот, очередь дошла до «Нейронные сети. Полный курс».

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

Книга бесспорно имеет большую ценность в качестве справочника. Для каждого вида/топологии НС приводится врезка с кратким описанием алгоритма ее обучения, а также примеры задач, для решения которых следует использовать такие НС. То есть, теоретические выкладки можно пропускать. Не уверен, что обычным программистам имеет смысл пытаться вдумчиво читать эту книгу от корки до корки, как это сделал я.

Увы, в книге нет ни слова об обучении нейронных сетей при помощи генетичеких алгоритмов. Вот гадаю теперь, то ли это просто не работает, то ли эта область недостаточно хорошо исследована.

Дополнение: Я тут попытался реализовать по этой книжке алгоритм обратного распространения и нашел просто кучу ошибок, опечаток, перепутанных индексов и так далее. И это еще так называемое «исправленное издание»! В итоге плюнул, нагуглил готовую, работающую реализацию на Си и разбирался по ней. Это оказалось намного проще. Ужас, в общем.

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

В седьмом выпуске ПФП я нашел довольно занятными статьи про ASN.1 и написание LDAP-сервера на Erlang и Си. Также мне очень понравилась статья про continuations. Это которые call/cc в Scheme, setjmp/longjmp в Си и монада Cont в Haskell. Оказалось, что continuations — это очень просто, и прекрасно эмулируется без специальных инструкций, используя одни только замыкания и лямбды.

Итак, теперь я добил ПФП. Как-то грустно. Какие журналы теперь читать — прямо не знаю. Возможно, возьмусь за какие-нибудь пейперы по Haskell и распределенным системам.

Nginx HTTP Server, 2nd EditionNginx HTTP Server, 2nd Edition
Clement Nedelcu

Книжка про веб-сервер Nginx. Благодаря ей я внезапно выяснил, что Nginx — не только веб-сервер. Оказывается, Nginx также умеет работать с SMTP и многими другими протоколами. Кто бы мог подумать!

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

Еще есть книга Mastering Nginx и у нее даже есть издание на русском языке под названием Администрирование сервера NGINX. Но судя по оглавлению, эта книга примерно о том же самом, так что, видимо, ее я читать не стану.

А какие интересные книги, журналы, пейперы или статьи доводилось читать вам в последнее время?

Дополнение: Восьмой десяток прочитанных книг и журналов

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.