Книга Джульена Вехена «Безопасный 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. Основная тема книги — это проблемы, которые могут возникнуть в распределенных системах, когда нужно поддерживать согласованное состояние базы данных, сервера которых запущены на машинах, которые могут располагаться даже в разных странах, и не известно, к какому из них будет обращаться пользователь в каждый момент времени. В книге речь идет в основном про архитектурные решения, а не конкретные реализации, хотя в тексте постоянно приводятся ссылки на тот или иной инструмент и говорится, как и насколько хорошо в них решаются описываемые проблемы.

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

Книга Джо Боулер «Безграничный разум»

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

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

Читать далее ‘Книга Джо Боулер «Безграничный разум»’ »

Книга Джейсона Шрейера «Кровь, пот и пиксели»

Если вы думаете, что разработчики игр только и делают, что развлекаются, играя в игры, которые создают, и мечтаете пойти работать в какую-нибудь геймдев-компанию, то обязательно почитайте книгу Джейсона Шрейера «Кровь, пот и пиксели. Обратная сторона индустрии видеоигр». Главный вопрос, который так или иначе проходит сквозь все главы книги звучит так: возможно ли создать игру без многомесячных авралов, работы по 12-14 часов в сутки и по выходным? Может быть кому-то это и удается, но только не тем компаниям, о которых идет речь в этой книге, а этот список, между прочим, включает в себя таких монстров индустрии как Blizzard, BioWare, CD Projekt Red и уже не существующая Lucas Arts.

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

Книга «Кровь, пот и пиксели» основана на интервью, взятых автором у создателей (программистов, дизайнеров, сценаристов) игр «Pillars of Eternity», «Uncharted 4», «Stardew Valley», «Diablo III», «Halo Wars» (не путать с «Halo»), «Dragon Age: Inquisition», «Shovel Knight», «Destiny», «The Witcher 3», «Star Wars 1313» (так и не вышедшая игра). До того, как мне попала в руки эта книга, я слышал только о нескольких играх из этого списка, поэтому перед чтением очередной главы шел на Youtube и смотрел ролик-другой, чтобы понять, что это за игра, о которой идет речь. Это очень сильно помогало в понимании того, о чем идет речь в книге. Если же вы фанат каких-то из перечисленных игр, то получите еще большее удовольствие, читая, в каких муках они рождались.

Читать далее ‘Книга Джейсона Шрейера «Кровь, пот и пиксели»’ »

Про книгу Сергея Калинина «Чтение как образ жизни»

Читать я люблю, хотя, в отличие от некоторых, не могу похвастаться сотнями книг, прочитанных за год. В среднем на одну книгу у меня уходит две недели, то есть за год успеваю прочитать около 20-25 книг. Но есть одна проблема — когда в тексте попадаются интересные мысли или появляются полезные идеи, через какое-то время они выветриваются из головы. Особенно обидно, когда читаешь книгу, насыщенную полезными идеями, то поток новых мыслей вытесняют из головы то, что прочитал ранее. Или, говоря по-простому, прочитанное забывается.

Поэтому иногда я люблю читать что-нибудь про то, как правильно читать, чтобы подсмотреть у других, как они справляются с этой проблемой. Классикой темы считается М. Адлер с его трудом «Как читать книги. Руководство по чтению великих произведений». Не могу сказать, что я действую по описанному им алгоритму чтения, однако многие полезные приемы я у него позаимствовал. Например, выделение основных терминов в тексте и основных идей. Если я читаю не художественную бумажную книгу, то обычно важные места подчеркиваю карандашом (именно поэтому в электронном виде я в основном читаю только художественные книги), а термины обвожу в рамку или ставлю пометки на полях, чтобы их можно было проще найти в будущем. Эти приемы позволяют быстрее вспоминать, о чем было написано в книге, но все равно остается неудовлетворение результатом чтения. Поэтому иногда я пытаюсь найти что-нибудь еще интересное на эту тему.

Читать далее ‘Про книгу Сергея Калинина «Чтение как образ жизни»’ »

О книге «Элегантный SciPy»

Приятно, что в последнее время появляется много книг не просто о языке Python, но и о применении его в более узких областях. Меня в первую очередь интересуют инженерные расчеты, в которых практически стандартом являются библиотеки Numpy, SciPy и Matplotlib. На эту тему мне попадалось несколько книжек, но, к сожалению, все они страдают одной проблемой — после них нельзя сказать, что ты знаешь, например, Numpy.

Недавно я дочитал еще одну книгу сразу трех авторов: Хуана Нуньеса-Иглесиаса, Штефана ван дер Уолта и Харриет Дэшноу «Элегантный SciPy», которая посвящена научным расчетам на языке Python. К сожалению, и она страдает той же проблемой, что и другие известные мне книги, но хочется про нее все-таки рассказать.

Читать далее ‘О книге «Элегантный SciPy»’ »

О языке Rust и книге Дж. Блэнди и Дж. Орендорфа «Программирование на языке Rust»

К языку Rust я присматривался давно. Пару лет назад даже пытался писать на нем небольшую программку, но до серьезного использования дело не дошло. И вот в начале этого года я решил взяться за этот язык основательно.

Rust — это компилируемый язык, предназначенный в том числе и для системного программирования. Основная «фишка» языка — это исключение на уровне компиляции ошибок работы с памятью — не инициализированные указатели, висячие ссылки и т.п. — и избегание неопределенного поведения. При этом не используется сборщик мусора, а сам язык ориентирован на максимально возможную производительность. При этом стиль программирования на Rust сильно отличается от традиционного объектно-ориентированного программирования. Если говорить очень грубо, то это скорее напоминает C с интерфейсами и очень необычной работой с памятью. Разработчики Rust позиционируют язык как замена C++. Особенности языка заставляют заранее продумывать структуру взаимодействия используемых объектов, а не плодить сложную сеть из взаимосвязанных объектов в надежде, что сборщик мусора потом все уберет. У Rust очень строгий компилятор, который откажется компилировать программу, если у него не будет уверенности в том, что она корректно работает с памятью, и что не будет гонок данных в многопоточной программе.

Читать далее ‘О языке Rust и книге Дж. Блэнди и Дж. Орендорфа «Программирование на языке Rust»’ »