Прочитал очередные десять книг и спешу поделиться с вами рецензиями на них. К сожалению, моя грандиозная цель дочитать шестой десяток к концу года не была достигнута. Но и так получилось примерно по одной технической книге среднего размера в неделю, что совсем неплохо и в разы больше, чем читает большинство программистов. Если вдруг вы будете искать предыдущие мои рецензии на прочитанные книги, то вот же они: пятый десяток , четвертый десяток , третий десяток , второй десяток .
Жемчужины проектирования алгоритмов. Функциональный подход
Ричард Берд
В книге описываются некоторые нетривиальные (то есть, посложнее, чем «сходить в базу, сгенерить JSON») задачи и их решение с применением функционального подхода. В качестве языка программирования, понятное дело, используется Haskell , поскольку все остальные языки по сравнению с ним и не языки вовсе.
Многие задачи решаются путем применения одних и тех же паттернов — разделяй и влавсвтвуй, обобщенным подходом к поиску решения методом перебора и других. Из интересных задачек запомнились поиск в ширину и глубину , решение судоку, арифметическое кодирование и алгоритм BWT . В книге приводятся хорошие примеры реальной пользы от ленивых вычислений и каррирования.
Порадовали «диалоги» в стиле, Мария: «да, но легко видеть (куча матанов) таким образом, задачу можно решить за O(N*log N)», Федор: «да, но если принять во внимание … Вот картинка: … В итоге решение может быть найдено за O(log N)».
Книга читается довольно тяжело, в оригинале на английском я бы ее ни за что не осилил. Но, несмотря на сложность, я все равно настоятельно рекомендую эту книгу к прочтению. В любом случае, она небольшая, так что много времени вы не потеряете. И вообще, держать на всякий случай под рукой такую литературу не повредит.
Systems Performance: Enterprise and the Cloud
Brendan Gregg
Если в двух словах, книга рассказывает о том, как понять, почему ваша программа тормозит. Приводится описание методики поиска узких мест (USE — Utilization Saturation and Errors), устройства операционных систем (Linux и Solaris/SmartOS), инструментов типа DTrace , SystemTap, tcpdump, strace/truss и так далее.
Автор часто указывает на разные тонкие моменты, например, что некоторые данные в каком-нибудь vmstat собираются немного иначе, чем все остальные, приводит примеры ошибок в man pages, и не только. Довольно занятно.
В целом, книга очень-очень хорошая. В высшей мере пригодится системным администраторам, программистам (не только на C/C++), и просто продвинутым пользователям Linux.
Введение в OpenGL
Рахул Верма
Приятный такой конспектик по OpenGL . Дается тема, например, управление камерой или рисование примитивов, затем приводится описание функций и пример кода. Все просто и понятно. Жаль только, что без скриншотов. Это то, что касается первой трети книги. Еще примерно две трети перечисляют все функции OpenGL с описанием всех возможных значений параметров и возвращаемых значений. Как понимаете, такое чиать не очень интересно. В общем, это скорее настольный справочник для людей, изучающих OpenGL, чем книга для чтения.
Во время чтения книги меня не покидало чувство дежавю. И, как выяснилось, неспроста. Ведь в свое время мне доводилось читать книжку «Справочник по функциям Win32 API» того же автора, написанную в похожем конспектном стиле.
The Architecture Of Open Source Applications, Volume I
Amy Brown, Greg Wilson
Книга повествует о внутреннем устройстве open source приложений. Лично мне было особенно интересно ознакомиться с главами, посвященными LLVM, Audacity и Graphite . Плюс было занятно почитать про то, как народ выбирает библиотеки. Например, выяснилось, что для кроссплатформеной работы с аудио во многих проектах, даже на Java, используется библиотека PortAudio.
Не могу сказать, что книга прямо таки захватывающая. Но, тем не менее, достаточно интересная, чтобы мне захотелось прочитать второй том.
21st Century C: C Tips from the New School
Ben Klemens
Несмотря на название, в книге не так уж много кода на Си. Она больше о библиотеках и полезных инструментах, чем о самом Си. Из инструментов в книге описывается работа с gprof , Doxygen , autotools , git и другими. Среди библиотек особое внимание уделяется glib, но также приводятся примеры использования gsl, sqlite, libxml и libcurl .
Главное, что я понял благодаря этой книге, это то, что за 40 лет существования Си программистами было создано множество полезных наработок, благодаря которым в Си достаточно удобно, например, работать с юникодом и различными контейнерами типа хэш-таблиц . И вообще, в третьем тысячелетии при программировании на Си прострелить себе ногу становится не так-то уж просто.
Компиляторы. Принципы, технологии и инструментарий, 2-е издание
Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман
Когда-то я прочитал первые страниц 100 «драконьей книги» и на этом остановился. Потом я время от времени полистовал ее, но полностью прочитать все так и не удавалось. До недавнего времени.
В данной книге вы найдете алгоритмы лексического, синтаксического и семантического анализа, а также описание алгоритмов генерации и оптимизации кода, автоматического вывода типов, сборки мусора (включая алгоритм поезда, о котором мне ранее почему-то не доводилось слышать), и даже автоматического распараллеливания циклов. Интересно, кто-нибудь слышал о существовании последнего в каких-нибудь промышленных компиляторах?
Книга немного сложновата для восприятия, но вообще просветляет. Например, становится понятно, насколько проще оптимизировать языки с неизменяемыми переменными и отсутствующими побочными эффектами. Или, опять таки, насколько ленивые вычисления могут упростить и оптимизировать различные этапы компиляции.
Удивило отсутствие в книге упоминания каких-либо алгоритмов искусственного интеллекта. Ведь когда речь заходит, например, об оптимизации кода, руки так и чешутся применить поиск на графах или генетические алгоритмы . А может быть, алгоритмы ИИ применимы и к другим вещам, например, автоматическому выводу типов. Кстати, эти алгоритмы отлично распараллеливаются. Неужели в третьем тысячелетии никто до такого не догадался?
Introducing Elixir. Getting Started in Functional Programming
Simon St. Laurent, J. David Eisenberg
Можно, конечно, долго посмеиваться над Elixir, что дескать это тот же Erlang, только с синтаксисом Ruby. Но при более детальном рассмотрении выясняется, что в этом языке действительно исправлены многие родовые травмы Erlang’а. Недаром даже сам Армстронг одобряет Elixir . Из улучшений Elixir по сравнению с Erlang особенно хочется отметить существенно более приятный синтаксис, нормальное метапрограммирование, человеческие строки, map’ы и record’ы, просмотр документации и типов в REPL, а также интерполяцию строк.
Создается несколько двоякие впечатление от языка. С одной стороны, бывалые эрлангисты уже знают обо всех шероховатостях Erlang’а и наверняка не захотят переучиваться. С другой, Elixir имеет очень хорошие шансы привлечь к себе внимание программистов, еще не знакомых с Erlang. Хорошо это или плохо? Я лично считаю, что скорее хорошо — все-таки функциональщина, модель акторов и все такое. По крайней мере, это точно лучше, чем Python .
Ждет ли Elixir успех? Поживем — увидим.
Практика функционального программирования, выпуск 6
В шестом выпуске журнала «Практика функционального программирования» наибольший интерес, бесспорно, представляют интервью с одним из основателей языка Haskell и человеком, внесшим огромный вклад в развитие компилятора GHC, Саймоном Пейтоном Джонсом , а также создателем Erlang’а Джо Армстронгом . Что ни говори, а читать интервью, особенно с известными в узких кругах людьми, всегда интересно.
Также из этого номера вы узнаете, какая связь между трилогией «Матрица», сериалом «Star Trek», регулярными выражениями и функциональным программированием. Думаете, что никакой? А вот как бы не так! Читайте и убедитесь сами.
Distributed systems: for fun and profit
Mikito Takada
В книге приводится вводный материал по распределенным системам. Ее мне посоветовал прочитать @sum3rman перед тем, как браться за Линча или Теля.
Благодаря этой книге я освежил старые знания и заодно набрался новых умных слов типа Raft, ZAB, CRDT, CALM, FLP и подобных. Книга довольно занятная. Особенно понравился консерватизм автора в отношении CAP теоремы и eventual consistency. Пара иллюстраций оказались исключительно просветляющими, например, о связи Gossip, 2PC и Paxos с CAP теоремой. Еще книга ценна за счет большого количества ссылок на дополнительные источники информации.
Книга, если что, бесплатная . На странице генерации PDF-версии обязательно укажите максимальный размер шрифта, иначе глаза сломаете.
Seven Web Frameworks in Seven Weeks: Adventures in Better Web Apps
Jack Moffitt, Frederic Daoud
Казалось бы, что интересного можно рассказать об этой вашей веб-разработке в третьем тысячелетии? Однако, вопреки моим ожиданиям, книга оказалась довольно занятной. Например, я, как человек, далекий от разработки пользовательских интерфейсов, не знал, что в мире JavaScript есть средства для написания модульных и интеграционных тестов , а также фреймворки, которые при определенных действиях пользователя одновременно ходят в REST API и обновляют интерфейс. Также на меня произвел впечатление своими возможностями Immutant . Это такой фреймворк для Clojure , умеющий шедулинг, распределенные транзакции , очереди сообщений, кэши, и не только.
В книге речь идет о Ruby ( Sinatra , DataMapper, RSpec), JavaScript ( CanJS , AngularJS , Jasmine), Clojure ( Ring , Immutant , Hiccup, Korma, Compojure, Valip, Enlive, Kerodon), Erlang ( Webmachine , mustache.erl), Haskell ( Yesod , Hamlet, Lucius). Прилагается интервью с авторами всех фреймворков, кроме Sinatra. Аналогии на этот раз проводились с играми. В общем, как и предыдущие книги серии «Seven in Seven», «Seven Web Frameworks in Seven Weeks» меня не разочаровала.
А каким количеством книг, прочитанных в прошлом году, можете похвастаться вы?
Дополнение: Седьмой десяток прочитанных книг и журналов