Восьмой десяток прочитанных книг и журналов
9 июля 2014
На днях я дочитал очередной десяток книг, поэтому спешу поделиться с вами краткими рецензиями на них. В этот раз будет много рецензий на книги, как-то связанные с Java и JVM. Почему я вдруг так заинтересовался этой платформой, можно прочитать в заметке Быстрая настройка окружения для программирования на Java (теми, кто недолюбливает этот язык, но иногда вынужден иметь с ним дело). С другими моими рецензиями можно ознакомиться здесь: седьмой десяток, шестой десяток, пятый десяток, четвертый десяток.
PostgreSQL 9.0 High Performance
Gregory Smith
С этой книгой советовал ознакомиться Андрей Фролов в комментариях к своей статье «Базы данных в онлайн играх. От Аллодов Онлайн до Skyforge». И неспроста, ведь книга действительно отличная.
Помимо прочего, тут можно прочитать про железки или, например, отличия EXT3 от XFS, а также про pgpool, pgBouncer, pgmemcache (не путать с pgmemcached!), PL/Proxy и GridSQL. Книга чем-то напомнила мне Systems Performance: Enterprise and the Cloud, я даже начал думать, что их писал один и тот же человек. Но оказалось, что нет.
В общем и целом, годнота. Если работаете с РСУБД, притом, не обязательно именно с PostgreSQL, читать обязательно.
Snap for Beginners
Chris Biscardi
Snap — это один из популярных веб-фреймворков для Haskell. Про Yesod и Scotty я уже кое-что знаю, про Happstack книжку читал, вот решил теперь почитать про Snap. В электронном виде книгу можно приобрести на сайте snapforbeginners.com.
Но не спешите этого делать, потому что книга оказалась на редкость скверной. Она тонюсенькая, можно сказать, даже не книга, а брошюрка. Темы CSS, JavaScript, интенационализации или хотя бы миграции схем баз данных в ней не раскрыты. Мне кажется, «Snap for Beginners» стоило бы раздавать бесплатно, ну или баксов за 5-10, но никак не за 35. Такие деньги за содержание уровня пары постов из блога — это просто кидалово! В общем, Snap я что-то не проникся.
См также рецензию Романа Чепляки на эту книгу.
RabbitMQ Cookbook
Sigismondo Boschi, Gabriele Santomaggio
На удивление хорошая книжка о RabbitMQ. Если книга RabbitMQ in Action представляет собой такое лайтовое введение в RabbitMQ, разбавленное ведром воды, то RabbitMQ Cookbook — это такой хордкорный туториал, из которого вы реально узнаете много интересного, например, о репликации между кластерами, плагинах shovel и federation, а также разработке своих плагинов для RabbitMQ и ковырянии AMQP при помощи WireShark. Алсо в книге была обнаружена замечательная глава, посвященная работе с Amazon Web Services. И довольно занудная глава про разработку под iPhone. Хотя, возможно, кому-то это будет и интересно.
Мой вердикт — если у вас кролик в продакте, обязательно держите эту книгу под рукой. Она годная. И пусть вас не пугают примеры кода на Java, они вполне ОК.
TCP/IP — архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Сидни Фейт
Хотите верьте, хотите нет, но это еще одна книженция, печатной копией которой я обладаю, но прочитать которую все никак не находилось времени.
Здесь довольно подробно описаны протоколы Ethernet, IP, TCP, UDP, ICMP, DNS, FTP, IMAP, POP3, SMTP, NFS (!), HTTP, SNMP, NNTP, Gopher, Wais и SNMP, а также протоколы маршрутизации RIP, OSPF и BGP. IMAP и LDAP, впрочем, описаны довольно поверхностно. Зато все остальные прямо вплоть до того, какой битик в IP заголовке где находится и что означает. Плюс традиционные вещи в стиле «как работает traceroute», «как определить максимальный MTU между двумя хостами» и так далее. В конце есть про IPv6 и сокеты.
Книга не новая, но все равно актуальная и очень интересная. Рекомендую. Еще на эту тему, если интересуетесь, можно порекомендовать учебник Олиферов.
Java. Библиотека профессионала. Том 1. Основы
Кей Хорстманн, Гари Корнелл
В народе эта книга более известна как «Core Java». В данном издании речь идет о Java SE 7. Книжка, как утверждают сами авторы, для тех, кто уже какое-то время программирует, и хочет освоить Java.
Подкупает честность авторов. Дескать, да, Java в определенных аспектах кривоватый язык, но зато у него есть такие-то и такие-то преимущества, и что самое главное, с помощью Java вы сделаете свою чертову работу. Советы в стиле «давайте сначала научимся компилировать и запускать программы из консоли, а уже потом будем ставить IDE» или «попишем на Swing самостоятельно, а потом, может быть, дойдем и до WYSIWYG редакторов» также внушают доверие.
Книга содержит множество интереснейших врезок с описанием недостатков C/C++, которые были устранены в Java. Например, в С/C++ оператор >>
может заполнить старшие биты либо нулями, либо битом знака. В зависимости от реализации и платформы может случаться и то и то. В Java есть два отдельных оператора. Оператор >>
всегда заполняет старшие биты битом знака, а >>>
— всегда нулями.
В первом томе рассмотрены: история языка, установка JDK, выбор IDE (то, о чем часто забывают авторы книг о языках программирования), основы Java, включая рефлексию, вложенные классы и прокси, Java 2D, Swing (авторы вообще уделяют написанию UI много внимания), апплеты, структура jar-пакетов, отладка, а также многопоточность, в том числе атомарные переменные, RW-локи, copy on write, TLS, футуры, пулы потоков, fork-join framework, различные виды очередей и других коллекций.
Примеры можно скачать на http://www.horstmann.com/corejava.html.
Java. Библиотека профессионала. Том 2. Расширенные средства программирования
Кей Хорстманн, Гари Корнелл
Во втором томе рассмотрены: работа с файлами и стримами (кстати, стримы чем-то похожи на кондуиты в Haskell), сериализация (включая подробное описание, в какие байтики на диске превращаются объекты), сетевое программирование, NIO.2, JDBC, XML (DOM, SAX, StAX, XSLT, Xpath, DTX, XML Schema), регулярные выражения, больше Swing и Java 2D, аннотации, класслоадеры, JavaBeans, компиляция кода на Java кодом на Java, криптография, скриптинг под JVM на JavaScript, Groovy и Scheme, а также RMI, JMI и другие трехбуквенные аббревиатуры.
Оба тома я читал в оригинале, имея при этом дома печатные версии на русском языке. Последние имеют твердый переплет, но бумага такая серая, тонкая, и картинки все черно-белые. Воспринимается уже совсем не так, как электронная версия на английском языке. В качестве настольных справочников держать можно, для чего я их, собственно, и приобрел, но читать лучше на английском.
Вообще, двухтомник отличный. То, что нужно, если вы хотите в кратчайшие сроки познакомиться с Java и JVM. В свете выхода Java 8 он ничуть не потерял своей актуальности, ибо (1) на Java 7 еще долго и много где будут писать, а кто-то до сих пор пишет и на более ранних версиях, (2) не так уж много в Java 8 радикальных изменений, с ними вполне можно ознакомиться, прочитав пару-тройку туториалов из интернетов. Короче, рекомендую.
DSLs in Action
Debasish Ghosh
В книге мне понравилось все, кроме содержания. Какой-то салат из Java, Scala версии 2.8, Clojure, Groovy, Ruby и периодического упоминания Haskell, разбавленный ведром майонеза, пытающегося все это как-то систематизировать и объясняющего, как круто domain specific languages облегчают жизнь. С не имеющими абсолютно никакого отношения к реальности фантазиями автора на тему того, что трейдер или там бухгалтер якобы будет писать код на как бы «понятном» ему языке программирования в стиле TradeDSL.newTrade( 100.stocks.of("IBM"), ... )
, и что от этого всем будет счастье, ведь трейдеры знают свою предметную область. Особенно шокировал парсинг DSL на Ruby при помощи регулярных выражений.
Единственная реальная ценность «DSLs in Action» заключается в том, что в ней объясняются ANTLR и немного Xtext. Бред, в общем. Вместо этой книги лучше прочтите нормальный туториал по JavaCC или там Jikes. Ну или раскурите макросы в Scala и Clojure.
Java. Новое поколение разработки
Бенджамин Эванс, Мартин Вербург
Она же The Well-Grounded Java Developer. Здесь вы найдете хороший обзор нововведений в Java 7-й версии, объяснение внедрения зависимостей и инверсии управления (Guice, JSR-330), NIO.2, современного многопоточного/параллельного программирования в Java (java.util.concurrent.*, футуры, ThreadPoolExecuter, ForkJoinPool), класслоадеров, формата файлов классов и даже JVM-ассемблера. Также освещен вопрос повышения производительности кода и имеются отдельные главы с обзорами языков программирования Scala, Groovy и Clojure.
Здесь же можно почитать про разработку через тестирование с использованием JUnit, Mockito и ScalaTest (я вот лично до этого не знал, что в Java можно удобно создавать mock-объекты и даже mock’ать static методы), а также веб-разработка при помощи Grails и уже знакомого нам с вами по книге Seven Web Frameworks in Seven Weeks Clojure-фреймворка Compojure. Надо признать, последний — няша.
Все просто и по делу, без воды. Перевод хороший, бумага не газетная, обложка мягкая. Если в свое время вы читали «Философию Java», то книга «Java. Новое поколение разработки» будет прекрасным дополнением к ней.
Scala для нетерпеливых
Кей Хорстман
Совершенно замечательная книжка по Scala от того же Кея Хорстмана, который один из соавторов Core Java. Представляет собой своего рода краткую (388 страниц) выдержку из книжки Одерски. Предназначена для программистов, желающих быстро разобраться, что это за Scala такая. То есть, тут нет долгих и мучительных объяснений, что такое переменные и циклы. Только краткое описание синтаксиса и семантики. Книга разбита на небольшие главы, в конце которых предлагаются небольшие упражнения для усвоения материала.
Повествование ведется от простого к сложному — сначала рассматриваются более простые темы, затем более сложные. В последней главе объясняются продолжения (continuations) в Scala, про которые я вообще почти ничего не понял. В лучших традициях книжек про Scala глава про акторы уже успела устареть (ибо не Akka), потому я ее даже не читал.
Больше всего в Scala меня пугает сложная система типов на которую к тому же накладываются всякие там неявные преобразования. Большинство программистов не в состоянии Haskell осилить, а вы им предлагаете такое! С другой стороны, тут, к примеру, пишут, что все не так уж плохо. В общем, я пока не могу до конца понять, нравится мне Scala или нет.
Возвращаясь к книге. Как уже отмечалось, она для тех, у кого нет времени читать 800 страниц «Programming in Scala». Или, как в моем случае, для тех, кто хочет быстро освежить свои знания языка. Также книга представляет собой отличный настольный справочник. Перевод не жжот, бумага качественная, переплет тоже — книга не разваливается, как это иногда бывает у ДМК-Пресс. Отличный подарок знакомым джавникам :)
Seven Concurrency Models in Seven Weeks
Paul Butcher
Как отмечается в начале книги, ее стоило бы назвать «Seven Cuncurrency and/or Parallelism Models in Seven Weeks», но это было бы слишком длинным названием. Другими словами, эта книга о многопоточности и параллелизме, а не только многопоточности.
Здесь рассматриваются традиционные подходы в Java, такие примитивы в Clojure, как pmap, futures, promises (которые, кстати, чем-то напоминают MVars в Haskell), а также atoms, agents (эдакие асинхронные атомы или упрощенные акторы), core.async (что-то вроде труб из мира Go) и STM, а также модель акторов на примере языка Elixir, OpenCL, в том числе его совместное использование с OpenGL, и новое, пока что не сильно разлетевшаяся по рунету, понятие, под названием Lambda Architecture (в соответствующем разделе книги объясняются Hadoop и Storm).
Читается легко и приятно. Аналогия на этот раз проводилась с автомобилями. Порадовали хорошие ссылки в сносках. Например, я узнал, что в Clojure есть биндинки для Akka и что в GCC есть транзакционная память — STM и HTM. А еще мне просто жутко доставило пасхальное яйцо в книге — бонусная онлайн-глава, посвященная Scala и Akka [PDF].
Книга очень хорошая, как, по всей видимости, и все книги серии Seven in Seven.
Предвидя массу традиционных вопросов «а как же художественные книги», «были ли прорешаны задачки в конце глав», «сколько материала реально усвоилось» и так далее, хочу сразу дать ссылку на этот FAQ.
А что интересного вы прочли в последнее время?
Дополнение: Девятый десяток прочитанных книг и журналов
Метки: Литература.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.