Книга Скотта Оукса «Эффективный Java»

Всем привет! Я продолжаю прокачивать свои знания про Java, и чем больше я читаю про внутреннее устройство его виртуальной машины (JVM), тем больше проникаюсь уважением к этой технологии. Сегодня хочу рассказать про книжку Скотта Оукса «Эффективный Java. Тюнинг кода на Java 8, 11 и дальше», которую дочитал на днях. Это уже второе издание книги, которая на русском языке вышла в 2021 году, а английская версия была написана в 2020 году, поэтому несмотря на то, что на обложке упоминается лишь Java 11 (с не очень убедительной припиской «и дальше»), книга достаточно актуальна. Просто на момент ее издания, долгоподдерживаемой версией (LTS) была Java 11, вышедшая в 2018 году.

Это очень подробная книга о том, что происходит «под капотом» среды выполнения Java, и как это можно использовать для написания более продуктивного кода. Или даже скорее о том, каких ситуаций лучше избегать. Это не учебник про язык Java, и кода там не так уж и много. В основном код здесь — это небольшие тестовые примеры, по которым измеряется производительность виртуальной машины в различных ситуациях и с различными настройками. Поскольку сейчас Java во многих случаях используется для написания серверных приложений, то и примеры часто делают упор на такое применение. Ничего про Java на Android в этой книге не сказано — там своя виртуальная машина Java, для которой надо писать свою отдельную книгу. В этой книге речь идет про виртуальную машину от Oracle и OpenJDK. Также надо сказать, что эта книга не про байт-код, который создается компилятором Java (хотя про него изредка речь заходила), а про то, как виртуальная машина и сборщики мусора работают в процессе выполнения приложения.

Коротко пробегусь по основным темам, которые затрагиваются в этой книге.

Читать далее ‘Книга Скотта Оукса «Эффективный Java»’ »

Книга Криса Ричардсона «Микросервисы»

Недавно прочитал книгу Криса Ричардсона «Микросервисы», о которой и хотел рассказать в этом посте. Это довольно объемная книга, в ней больше 500 страниц, и в оригинале она называется «Microservices Patterns with examples in Java», что более точно описывает содержание книги. В этой книге действительно упор сделан на типичные шаблоны проектирования при использовании микросервисной архитектуры. Основное содержание книги крутится вокруг выдуманной компании, которая разрабатывает сервис по доставки еды из ресторанов. У них уже есть написанное на Java монолитное приложение, и разработчики решили его разбить на микросервисы. В книге описываются, какие сложности при это могут возникнуть, как спроектировать взаимодействующую систему монолитов, и какие приемы для решения различных типичных проблем можно использовать.

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

Читать далее ‘Книга Криса Ричардсона «Микросервисы»’ »

Книга Дэвида Вуттона «Изобретение науки»

Наука — это изобретенное нами занятие, в котором действуют согласованные правила

Есть две категории книг, от которых меня надо держать подальше, потому что книжные полки дома внезапно оказываются не резиновыми — это книги про IT и про историю науки. Этим летом мне попалась монументальная книга Дэвида Вуттона «Изобретение науки», проигнорировать которую я не мог. И вот на днях я ее, наконец, дочитал. Это увесистая книга на 650 страниц, 130 из которых это только перечисление использованных источников.

Несмотря на свой значительный объем, она охватывает не такой большой по историческим меркам временной интервал. Если не считать множества отсылок к более древним философам и натурфилософам, то основной фокус сосредоточен на XVI — XVIII веках, когда по мнению автора сформировалась та наука, которую мы имеем до сих пор. Именно в это время были заложены и приняты научным сообществом основные исследовательские принципы, такие как проверка экспериментом, а не только доверие авторитетам и древним философам, доказательство теорий, в это же время формируется научный язык и научная этика. Здесь, правда, надо сделать уточнение, что в книге речь идет только о Европейской науке.

Читать далее ‘Книга Дэвида Вуттона «Изобретение науки»’ »

Про книгу «Kubernetes для DevOps»

В последнее время я решил разобраться с Kubernetes. Как правило, когда нужно изучить что-то новое, я предпочитаю это изучать по книгам, а не по разрозненным статьям в интернете. Чтобы понять, что такое Kubernetes и с чем его едят, купил книгу Джона Арундела и Джастина Домингуса «Kubernetes для DevOps». Когда заказывал эту книгу, то меня немного смущало это самое «для DevOps», я боялся, что там упор будет именно на практики DevOps с использованием Kubernetes, а не на сам Kubernetes (в оригинале книга называется «Cloud Native DevOps with Kubernetes. Building, Deploying, and Scaling Modern Applications in the Cloud»). К счастью, мои опасения не оправдались, и книга посвящена в первую очередь Kubernetes, а DevOps-у отведено место только в последней четверти книги.

Эта книга предназначена для тех, кто никогда до этого не запускал Kubernetes и не знает, с какой стороны к нему подступиться. В книге очень аккуратно описываются разные аспекты работы с Kubernetes на примере развертывания очень маленького веб-приложения на Go (буквально, Hello World, поэтому Go знать не обязательно). При этом желательно иметь представление, что такое Docker и как с ним работать, что такое Dockerfile, но и это все кратко, буквально самый минимум, рассказывается в начале книги.

Читать далее ‘Про книгу «Kubernetes для DevOps»’ »

Про цикл книг Дэна Симмонса «Песни Гипериона»

Я редко пишу про художественные книги, но тут не удержался. В моем списке для чтения книги Дэна Симмонса про Гиперион (этот цикл часто называют «Песни Гипериона») висели с давних времен. Несколько раз мне попадались упоминания этого цикла на просторах интернета при обсуждении фантастических книг. И вот, наконец-то, я это все прочитал. На неспешное чтение всех четырех книг: «Гиперион», «Падение Гипериона», «Эндимион», «Восход Эндимиона» у меня ушло три месяца. Если сравнивать этот цикл с другими произведениями, то в первую очередь на ум приходит «Дюна» Френка Герберта, хотя по сюжету и общему антуражу эти книги мало похожи. Общее у них — масштаб происходящих событий и политическая борьба на разных уровнях.

Твердой научной фантастикой серию про Гиперион я бы не назвал, в основном ее называют космооперой. Наверное это неплохое определение, хотя лично у меня со словом «космоопера» ассоциируется всякие низкокачественные произведения, к чему серия про Гиперион точно не относится.

В первых двух книгах описывается будущее XXIX-го века (по нашему летоисчислению), сюжет третьей и четвертой книг начинается примерно через 300 лет (через 274 года, если быть точным) после событий, описанных в первых двух томах. Тут вам и множество рас: люди и так называемые Бродяги (по сути люди, но которые стали модифицировать себя для жизни в космосе вместо того, чтобы терраформировать планеты), искусственный интеллект (ИскИны), андроиды. И главное — самый загадочный персонаж всех книг — Шрайк (кто-то его считает богом и ему поклоняется, кто-то считает его машиной-убийцей a la Терминатор и пытается его уничтожить). У людей и ИскИнов внутри своего сообщества есть отдельные кланы, которые конкурируют за влияние и проталкивают свои интересы. Отношения людей с ИскИнами тоже сложные: благодаря ИскИнам были созданы порталы, которые позволяли людям перемещаться в пространстве мгновенно, но при этом люди не понимали, как эти порталы работают, а у ИскИнов на порталы были свои планы. Но это я уже чуть не начал спойлерить.

Читать далее ‘Про цикл книг Дэна Симмонса «Песни Гипериона»’ »

Книга Джульена Вехена «Безопасный DevOps»

В последнее время я больше стал заниматься разработкой для серверной части веб-приложений, короче говоря, бэкендом. И хотя я не особо люблю заниматься админскими делами (самый страшный сон для меня — это искать проблему, почему что-то не работает в сети), но иногда приходится заниматься настройкой серверов, планированием структуры микросервисов и тому подобными делами. Ну и куда ж сегодня без DevOps-а? Грань между программистами и админами размывается, и по крайней мере нужно разбираться, как аккуратно должно развертываться приложение на серверах, каким образом взаимодействуют микросервисы и т.п. И в этом деле меня всегда беспокоит безопасность. Как делать это правильно? На какие грабли наступали другие разработчики, чтобы не повторять хотя бы элементарные ошибки? Держа в голове эту цель я начинал читать книгу Джульена Вехена «Безопасный DevOps».

Автор этой книги c 2013 года работает в Mozilla и занимается безопасностью облачных сервисов. Собственно безопасности и облакам посвящена книга. Конкретно про DevOps в ней сказано не так много (в основном в первой половине книги), зато рассматривается безопасность на различных уровнях, начиная с того, какие типичные ошибки допускают разработчики приложений, что позволяет злоумышленнику провести атаку, и до безопасности на уровне предприятия.

Читать далее ‘Книга Джульена Вехена «Безопасный DevOps»’ »

Про книгу «Современный язык Java»

Обложка "Современный язык Java"В последнее время помимо языка Python (которому, кстати, на днях исполнилось 30 лет) я активно стал использовать Java, поэтому решил углубить свои знания в этом языке и почитать более специализированные книги, которые поподробнее рассказывают об отдельных элементах языка или библиотек. Этот пост будет посвящен одной из таких книг, которую в целом можно охарактеризовать словами «как нам из Java сделать функциональный язык программирования». Речь пойдет о книге трех авторов Рауля-Габриэля Урма, Марио Фуско и Алана Майкрофта «Современный язык Java», в оригинале она называется «Modern Java in Action». Англоязычная версия книги была издана в 2018 году, и на тот момент были актуальные версии Java 8 и 9, а Java 10, который только-только вышел.

Большая часть книги основана на использовании лямбда-выражений (они же анонимные функции), о которых очень подробно рассказывается в первых главах книги. На мой взгляд даже чересчур подробно, так что возникает ощущение, что авторы повторяют одно и то же чуть под разными углами зрения. В Java 8 помимо анонимных функций появилась возможность создавать ссылки на методы классов, о том, как это работает, и как ссылки на методы связаны с лямбда-выражениями и функциональными интерфейсами (интерфейсами, у которых есть только один абстрактный метод) и рассказывается в первых главах на множестве небольших примеров. А для самых любопытных и продвинутых в приложении даже приводится анализ байт-кода, который создается компилятором для создания анонимных функций.

Читать далее ‘Про книгу «Современный язык Java»’ »

Книга Брайана Кернигана «Время Unix. A History and a Memoir»

Большой секрет успешных исследований заключается в том,
чтобы нанять хороших специалистов, убедиться,
что у них есть интересные темы для разработки,
понаблюдать за ними, а потом отойти.

Пару месяцев назад, просматривая книжные новинки, я обратил внимание на книгу под названием «Время Unix. A History and a Memoir». Одно то, что это книга по истории софтостроения, было бы достаточно, чтобы я ее купил, а тут еще и автор книги — Брайан Керниган. У нас в России он известен как один из авторов учебника по языку Си, написанного в соавторстве с Деннисом Ритчи — автором языка языка Си. Но помимо этого достижения Керниган является одним из программистов, работавших в Bell Labs в том числе и над операционной системой Unix в 1970-х годах. Правда, не над ядром этой операционной системы, но, например, он был соавтором языка AWK, предназначенного для обработки текста (AWK — это сокращение из первых букв фамилий авторов, «K» обозначает «Kernighan»). Разумеется, проигнорировать книгу, в которой рассказывается о легендарной операционной системе от лица непосредственного участника тех событий, я не мог. Кстати, на тему истории Unix-подобных операционных систем я когда-то давно писал пост История UNIX-систем.

Читать далее ‘Книга Брайана Кернигана «Время Unix. A History and a Memoir»’ »

Книга Дэвида Кушнера «Повелители DOOM»

Всем привет! IDDQD! Когда-то я писал о книге Кровь, пот и пиксели, в которой рассказывается про историю создания некоторых видеоигр, а недавно дочитал еще одну книгу из той же серии. В книге Дэвида Кушнера «Повелители DOOM» очень подробно рассказывается история двух Джонов — Кармака и Ромеро, а также некоторых других разработчиков, которые создали такие игры как Wolfenstein 3D, Doom, Quake и другие может быть чуть менее известные игры.

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

Читать далее ‘Книга Дэвида Кушнера «Повелители DOOM»’ »

Книга Мартина Клеппмана «Высоконагруженные приложения»

Недавно дочитал книгу Мартина Клеппмана «Высоконагруженные приложения. Программирование, масштабирование, поддержка». В оригинале книга называется «Designing Data-Intensive Applications», а при переводе на русский язык название стало менее конкретным, потому что под высоконагруженными приложениями можно понимать разные виды нагрузки: вычислительную нагрузку на процессор и «высоконагруженные» в том плане, что нужно обрабатывать большой объем данных. Во втором случае основная нагрузка ляжет не на плечи процессора, а узким местом будет сеть или система ввода-вывода. В книге рассматриваются высоконагруженные системы, относящиеся ко второму случаю.

Книга посвящена в основном системам хранения и обработки данных, т.е. базам данных различного типа (SQL и noSQL) и системам, которые анализируют большой поток данных, например, Hadoop. Основная тема книги — это проблемы, которые могут возникнуть в распределенных системах, когда нужно поддерживать согласованное состояние базы данных, сервера которых запущены на машинах, которые могут располагаться даже в разных странах, и не известно, к какому из них будет обращаться пользователь в каждый момент времени. В книге речь идет в основном про архитектурные решения, а не конкретные реализации, хотя в тексте постоянно приводятся ссылки на тот или иной инструмент и говорится, как и насколько хорошо в них решаются описываемые проблемы.

Читать далее ‘Книга Мартина Клеппмана «Высоконагруженные приложения»’ »