Nik в мире данных
1.16K subscribers
8 photos
1 video
1 file
46 links
Автор канала - @nikbeesti
Download Telegram
Выступил внутри компании на прошлой неделе, по факту - первый опыт монолога на 40+ минут для аудитории 30-40 человек (часть была еще в зуме) на английском языке :)

Очень сильно большая разница с обычными митингами или даже зум созвонами, где что-то рассказывается

До этого я делал интенсив обучение по sql с сессиями на полтора часа внутри компании, но все равно, совершенно разные ощущения

Примерно понял по фидбеку, что нужно улучшать в своей речи и по выступлению в целом
👍82🔥1
AI tutor

Недавно мне скинули ссылку на AI Tutor для ChatGPT-4 https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor и я решил посмотреть, как это может помочь дата инженеру.

- Задача: Я хотел изучить внутренний движок запросов Apache Spark. Сам чат можно посмотреть на этой странице Notion: https://bakanchevn.notion.site/AI-Learning-782d325ffbee44ab88467bfcd9e6bc12

- Подача материала: В целом, формат ответов выглядит довольно хорошо, хотя есть некоторые недочеты (поэтому надо прокачивать скилл prompt engineering! в том числе). Я предполагаю, что для более программистских тем задачи сами по себе будут более детализированными. Иногда мне приходилось задавать вопрос несколько раз, чтобы действительно добраться до сути.

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

- Тестирование. Я попробовал систему тестов и попробовал поделать ошибки в ответах. Кажется, что бот слишком вежливый, надо бы поиграться с параметрами 🤔 Фидбек выглядит валидным.

В целом, впечатление положительное, и думаю, что это может помочь людям, кто предпочитает формат самообучения, если конечно через пару лет AI не поработит нас окончательно 😡

P.S. В моем английском на скриншотах есть ошибки и недочеты, прошу этот момент игнорировать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Техническое решение и политические игры

Казалось бы, довольно понятная тема. Кажется, что процесс поиска технического решения довольно прямолинеен в теории

Возьмем “простой пример” - Представим что вы только пришли в компанию и вам поставлена задача поиска “плохих клиентов” aka fraud customers. Предположим, что наша абстрактная компания работает уже долго в индустрии и данных достаточно. Бизнес хочет, как обычно, чтобы это было как можно быстрее, чтобы “плохие клиенты” не успели совершить действий, которые приведут к потере денег

Как первая версия можно рассмотреть следующее решение, которое состоит из трех пунктов
---
1. В момент регистрации клиента происходит кросс чекинг по мейлу / телефону / другим признакам, и в случае нахождения совпадения осуществляется бан / ограничение функциональности / отправка на KYC / другой вариант
2. При осуществлении каких-нибудь платежей, если обнаружена совпадение по платежной информации с одним из “плохих клиентов” осуществляется отправка на доп. Проверку / бан / …
3. В целом, разрабатывается ML Fraud Detection Model (куда уж без этого в 2023!) для обнаружения “плохих клиентов”
---

А теперь представьте вы работаете в большой компании, например в отделе аналитики (со своими data / analytics инженерами конечно!), и вам была поставлена задача (ну или ваш менеджер оценил это так) выкатить все это в течении месяца.

Кажется, идеальная задача под стриминг для пункта 1 и 2, и возможно даже 3. Вы радостно разрабатываете архитектуру решения и предлагаете его внутри команды.

Но тут менеджер вашего департамента сообщает, что у вас нет доступа к streaming части инфраструктуры (в крайнем случае, даже к файлам сырого слоя) по соображениям безопасности / структуры / …

Рассмотрим, что можно сделать
---
1. Подключить команду, занимающуюся streaming инфраструктурой и совместно разработать проект
2. Сделать микробатч решение на вашей собственной инфраструктуре
3. Подключить команду backend разработки и сделать решение через синхронную / асинхронную передачу данных с разработкой сервиса на своей стороне
4. Сказать, что у вас такой возможности нет и передать задачу в другой отдел
5. ..
---

У каждого из этих решений есть вероятность применения в зависимости от взаимотношений и политических решений как внутри отдела, так и в целом, в компании.

Например, вариант 2 может быть достижим в случае, если вам нужна полная изолированность от других отделов (или политическое влияние обладанием этого проекта), а переговоры о предоставлении доступа с другими отделами. закончились неудачно. При этом вам нужно еще “продать” решение бизнесу, почему нужно выбрать именно это решение.

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

Есть люди, для которых такая “несвобода” при принятии решений может быть красным флагом, и если у вас такая ситуация в отделе/департаменте, чтобы не возникло неприятных расставаний в течении работы, есть смысл устраивать role play таких ситуация на сис дизайн/behaioral интервью, если у вас есть такие практики

P.S. Пример выдуманный, все совпадения случайны и не имеют отношения к моей рабочей деятельности за последние  X лет
👍11
Mentoring

Я участвую в менторинг программе SIngularis.AI. Моя анкета находится на борде https://mathshub.notion.site/Singularis-AI-Mentoring-Program-d562243465964a94b9debfc11d2a073b#72811df65806428dadde1428e3a9786b под именем NBK. Но в целом рекомендую посмотреть различные анкеты людей и в целом слак сообщество.

Но поскольку вы в этом канале и если вам почему-то интересен менторинг от меня или просто 1-он-1 созвон, то я также вполне доступен - https://calendly.com/d/z5w-f38-3qv/1h-mentoringу (календарь пока тестовый, если вдруг не смогу в конкретное время проговорю заранее, лучше указывать ник в телеграме, если будете сет апить митинг)

В целом, формат обсуждения довольно свободный, главное, чтобы он был связан с дата тематикой, в которой я хоть как-то могу вам помочь =) (Так же могу помочь с мок интервью форматом, формата coding sql interview, easy coding python interview, и system/data design)

P.S. Я не особо опытен именно в онлайн-менторинге, но люблю формат random cofee (встречи с разными людьми) и опыт менторинга внутри компании у меня также есть.

Мой линк для референса - https://www.linkedin.com/in/bakanchevn
🔥18👍31😱1
И снова безработный

Пару дней назад был мой последний день в компании, так что можно порефлексировать, что удалось и что не удалось за 2 года.

Что удалось 👍

Когда я присоединился к компании, в ней было всего два дата инженера, и мы были частью BI команды. Однако мне 😃 (ну или не только мне :D) удалось продвинуть идею создания Data Platform или централизованной дата команды.

За полтора года мы смогли нанять и организовать Core Data команду до 8 фулл стек дата инженеров, 2 специалистов по DataOps и MLOps, менеджера (в виде меня) и дата архитектора. И есть планы по дальнейшему расширению команды. Команда получилась очень интернациональной, в ней работают люди из 9 разных стран, и это был довольно интересный вызов. Удалось организовать внутри сессию шейринга информации и внутреннего обучения.

Расширение команды стейкхолдеров - по факту на данный момент, команда стала централизацией по решению задач по дата инженерии для бизнеса, причем у нас была как прямая работа с департаментами, так и организация меж департаментовой кросс-интеграции

Мы успешно внедрили такие инструменты, как Snowflake, Hevodata и множество дата сервисов на GCP стеке. Кроме того. мы организовали Reverse-ETL и использовали различные подходы, включая batch и event-driven обработку данных.

Что осталось недостигнутым на момент ухода 👋

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

В первую очередь, процессы CI/CD были только частично организованы, но я уверен, что к концу 2023 года они будут завершены.

Мониторинг данных все еще представляет собой набор несвязанных логов 🙆, и пока только в планах организация централизованного хранения. Однако мы уже внедрили критические алерты и систему уведомлений для пользователей.

Еще одной областью, которую мы не полностью освоили, является Data Quality. Хотя мы покрыли тестами часть данных с помощью dbt и создали более 500 тестов для моделей, есть еще много работы в области интеграции данных, которую мы покрыли лишь на 10-15% 👨‍🦳.

Data Lineage - это еще одна область, где мы не продвинулись дальше общения с интересными экспертами из dwh.dev и alvin.ai. 😟

Эстония в целом 🇪🇪

Эстония офигенна, отличная дигитализация, Таллинн в целом супер крутой город, довольно маленький по размеру, но у меня не было проблем в получении каких-либо услуг. Также я получил опыт аренды жилья (впервые в жизни!) и проживания в советских пяти- и девяти- этажках (не самый позитивный 😡). К сожалению, с моим паспортом в странах Балтии могут быть сюрпризы, поэтому, как минимум на время, еду в другую локацию

Что дальше 🍷

Пока могу озвучить только, что я в процессе переезда и куда переезжаю - это Берлин (или его окрестности в будущем), Германия 🇩🇪

P.S. В планах по этому двухлетнему опыту сделать докладик - Modern Data Stack - стоила ли игра свеч
Please open Telegram to view this post
VIEW IN TELEGRAM
👏25🔥81
Nik в мире данных pinned «Mentoring Я участвую в менторинг программе SIngularis.AI. Моя анкета находится на борде https://mathshub.notion.site/Singularis-AI-Mentoring-Program-d562243465964a94b9debfc11d2a073b#72811df65806428dadde1428e3a9786b под именем NBK. Но в целом рекомендую посмотреть…»
Новая работа

Сегодня я вышел на новую работу и рад сообщить, что я возвращаюсь в индустрию больших корпоративных банков, а сама организация это Deutsche Bank в Берлине 🇩🇪

Позиция называется по прежнему Lead Data Engineer, но стек будет совершенно другой.

Посмотрим, как это будет работать при ограничениях (при выборе стека, ПО 👨‍🦳 и т.п.) после 2 лет практически полной свободы 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥9
EU зарплаты

https://medium.com/@mikldd/europe-data-salary-benchmark-2023-b68cea57923d

Некий EU бенчмарк для DE/AE/DS/DA, говорящий о том, что лучше всего денег дают Амстердам 🇳🇱, Дублин 🇮🇪 и Лондон 🏴󠁧󠁢󠁥󠁮󠁧󠁿 , при этом:

If you want to earn more than $200k in an IC data role in Europe, you’re most likely to do so if you work at a larger tech company such as Meta, Amazon and Booking.com 🤔

Про Мету, кажется, что для 200k TC для Senior Data Engineer нужно еще иметь контр оффер на руках для торговоли, базовый пакет E5 чуть меньше, для Букинга - не знаю в виду реджекта на фите 👨‍🦳, но вроде сеньоры там 130-180+ TC

Сам пост подсмотрел в Singularis.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔61👍1
Будни SQLщика в Clickhouse

1. Рассмотрим базовый запрос

select a1, a2, a3 from (
select a1, a2, a3 from
(
select 1 as a1
) a1
any left join
(
select 1 as a2
) a2
on a1.a1 = a2.a2
any left join
(
select 1 as a3
) a3
on a1.a1 = a3.a3
)


Запрос прекрасно работает

2. Добавим полное именование во внутренний запрос


select a1, a2, a3 from (
select a1.a1, a2.a2, a3.a3 from
(
select 1 as a1
) a1
any left join
(
select 1 as a2
) a2
on a1.a1 = a2.a2
any left join
(
select 1 as a3
) a3
on a1.a1 = a3.a3
)


Запрос перестает работать с ошибкой missing columns a1, a2, a3

3. Добавив alias во внутренний подзапрос все снова работает



select a1, a2, a3 from (
select a1.a1 as a1, a2.a2 as a2, a3.a3 as a3 from
(
select 1 as a1
) a1
any left join
(
select 1 as a2
) a2
on a1.a1 = a2.a2
any left join
(
select 1 as a3
) a3
on a1.a1 = a3.a3
)



Ну, кажется, логика плюс-минус понятна, полный алиасинг не прокидывается во внешний запрос


4. Однако!


select a1, a2 from (
select a1.a1, a2.a2 from
(
select 1 as a1
) a1
any left join
(
select 1 as a2
) a2
on a1.a1 = a2.a2
)


Работает!

(На этом месте автор ушел пить мяту и думать о вечном)

P.S. Автор понимает, что покопавшись в планах и коде самого КХ логическое объяснение может быть получено довольно просто, однако страдания обычного SQLщика от этого меньше не становятся
😁6🤔3😱3
Буду рассказывать про modern data stack 😅на одном митапе с такими легендами dbt комьюнити как Артемий Козырь 💪 и Станислав Лысиков👉

Детали тут - https://cutt.ly/bwi8covj

Залетайте!

Вторая неделя выглядит тоже супер интересной!
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥2
Вторая неделя dbt meetup - https://space307.team/dbt-meetup

Расскажут про dbt и DataVault, как мигрировать 40+ DS/PA на dbt и не грустить и что такое экпозиция в dbt!
👍5
Любой дата проект в одной картинке
😁27🤣3
Data System Design Interview

Что это за зверь 🤔

Data system design - это подмножество сисдиз интервью, но с упором на data-driven задачу, где кандидат показывает способность построения систем в области хранения, управления и обработки данных.

Пример задачи 💁‍♂️
(Пример подробный, часто кандидат сам формулирует требования через диалог)

Мы компания Х, новая платформа для авторов. У каждого автора есть свое пространство и люди могут подписываться или отписываться от них. Запрос отписки может приходит либо от пользователя из UI интерфейса, отдельного запроса от департамента Customer Success или Legal (может содержать в себе большое число пользователей за один раз)

Нам необходимо разработать решение, у которого будет:
1. Возможность отправлять near real-time событие в уже разработанный UnsubMe сервис для отписки
2. Финальный отчет для сеньор менеджмента для анализа воронки отписок (с возможностью работы на разных уровнях агрегаций и времени)
3. Возможность для аналитиков осуществлять ad-hoc аналитику

Как проходит интервью 😅

Формат интервью обычно соответствует тем же временным рамкам, что и сис дизайн интервью (пример для интервью в 90 минут):

1. Интро (5 минут)
• Вы представляетесь друг другу и пара слов о бекграунде каждого. Для больших компаний обычно присутствуют 2 интервьюера.
2. Понимание проблемы и сбор требований (10-15 минут)
• Интервьюер описывает вам проблему и предлагает задавать вопросы
• Ваша задача проговорить функциональные и нефункциональные требования и те ограничения, которые будут приняты в виду ограничения по времени (например, если у вас задача по имплементации GDPR, то вы обсуждаете только часть удаления пользовательских данных)
• Также вы обсуждаете текущую нагрузку на систему и как это изменится в краткосрочной и среднесрочной перспективе
• В какой среде будет задача (клауд/гибрид/on-prem)? Есть ли доп ограничения вида Cloud Agnostic?
3. Высокоуровневый дизайн (15-20 минут)
• Вы совместно рисуете и обсуждает общую схему решения на уровне компонетов / сервисов / технологий. Тут часто бывают общие обсуждения уровня нужен ли нам дополнительной слой DWH, выбора синхронного или асинхронного метода передачи сообщения, необходимости какой-то шины данных и т.п.
4. Детальное обсуждения какого-то компонента (20-35 минут)
• Идет углубленное обсуждение какого-то компонента. В виду дата ориентированности, обычно это завязано на какой-то компонент стриминга, етл, дата модели и т.п.
5. (Опционально) Обсуждение оптимизаций, масштабирования или каких-то адаптаций для решения (10-15 минут)
• Такие обсуждения часто бывают в процессе предыдущих этапов или кандидат инициирует их
• Интервьюер может предложить изменение требований и спросить, какие адаптации надо сделать под них (например, подключение 3rd party vendor в примере компании X, который может работать с отписками)
6. Q&A и Вопросы Кандидата
• Обычная Q&A сессия, которая позволяет кандидату спросить про работу в компании

Примеры детальных обсуждений 👨‍🦳

Неполный список тем, который может быть в детальном обсуждении

• CDC. Как организовать, зачем, какой тип выбрать
• Message Broker, какой выбрать, какой критерий выбор, формат сообщений, какая модель обработки
• DWH. Нужен? Какая модель данных? Какие основные сущности будут?
• Качество данных. на каком этапе, какие тулзы, что покрыть
• Мониторинг. Что мониторить, как мониторить?
• Batch Processing. Как будет организована загрузка? Как выглядит инициализирующая / инкрементальная загрузка? Как ускорить загрузку?
• Оркестрация, как организовать, на каком этапе?

Как готовиться 😺
Курс/книги по системному дизайну (educative / карпов / System Design Interview от Alex Xu), общие книги по дата инженерии (Fundamentals of Data Engineering / DDIA) и более глубокое погружение в конкретные темы, которые могут всплыть.

Если времени не много, попробовать поделать мок интервью и по фидбеку пытаться что-то доизучить, но мок-интервьюеры смотрят на то, что интересно им, и могут упустить часть вещей. Я также провожу их в рамках моих менторинг сессий =)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍5
Channel photo updated
Опыт собеседования на позицию Senior Staff Data Engineer 🤔

Недавно я принял участие в собеседовании на должность Senior Staff Data Engineer (Data Architecture) в компанию из сферы foodtech. Хотя я и не ищу совсем работу, мне было интересно пощупать немецкий рынок и попробовать себя в интервью на позицию Staff DE и роль была связана с дата моделированием.

Первоначальный контакт с рекрутером ☎️

Рекрутер нашёл меня в LinkedIn был краткий 10-15 минутный звонок. Обсуждали вакансию, мои ожидания, текущее состояние компании, мои интересы к роли и следующие шаги.

Собеседование с hiring manager 😃

Следующим этапом было интервью с непосредственным менеджером, которое было смесью проектного и подходящего интервью. Обсуждали весь скоуп по дата инженерии, особое внимание уделили end-to-end и CI/CD процессам, где у меня меньше опыта и я часто работаю с нестандартными решениями. На Q&A довольно откровенно отвечали о текущих болячках и что нужно улучшать.

Coding 👩‍💻

Техническое интервью по программированию было нестандартным и ориентированным на Data Engineering. За 90 минут предполагалось решить 2-3 задачи (batch, SQL, streaming). Собесил Staff DE.
Batch-задача - написать ETL на псевдо-Spark, включая базовые вопросы о partition pruning, partitioning и обработке dataframe.
SQL-задача - классика около-FAANG – создание модели данных и написание инкрементного заполнения. Как SQL-гик я постоянно докидывал corner case :D.
Streaming решили не делать поскольку оставалось 25 минут, и была расширенная Q&A сессия, где я поспрашивал про работу стаффом, организацию внутри команды, компании, и процессам.

СисДиз 😵

Интервью по системному дизайну было довольно стандартным. Было 2 интервьюера - Senior Staff DE и Staff SWE (или наоборот :D). Задача была связана с данными, но не требовала серьёзного масштабирования после анализа входных параметров.
На детальной части обсуждали Kafka, топики и схемы. А затем мы похоливарили с интервьюерам, так как они вели к одному решению, но оно мне не нравилось :D. Q&A было 5 минутным, так что просто спросил про работу стаффом в компании.

Обратная связь №1 👍

Рекрутер сделал фидбек по интервью.
По кодингу был strong go 😂, но был сделан акцент на то, что я усложнил SQL-часть, постоянно увеличивая сложность задачи.
По системному дизайну дали фидбек как улучшить процесс в целом.
По менеджерскому интервью было отмечено отсутствие глубины знаний CI/CD, частично из-за использования DBT Cloud, а не DBT Core.

Поведенческое интервью 👋

Финальный этап - интервью с VP of Data. Сначала он 20 минут рассказывал о компании, затем задавал поведенческие вопросы и обсуждал мои вопросы о работе в компании, практиках и сочетании data vault и data mesh. Почти не было bullshit, а были довольно четкие ответы с неплохой глубиной, но послевкусие было как будто бы не случилось фита.

Обратная связь №2 🚩

Перед второй сессией обратной связи мне уже сообщили об отказе, так что я был готов 👨‍🦳

В качестве фидбека  сказали, что решение принято уже на совместном обсуждении
Как плюсы - сильная ориентация на данные и аналитический подход, ориентация на клиента, предпочтение долгосрочного и стратегического подхода.
Отказ был обусловлен рядом факторов: неясные цели в отношении роли IC, не показал Learning never stops принцип, сомнения в том что буду адаптировн к быстроизменчивым средам.

Выводы ⚡️

Оценка рекрутеру - 5, компании и процессу интервью - 4, себе - 3+.
Что надо улучшить: начать уже готовиться к behaivoral interview, улучшить знания по сис дизу и английский с точки зрения коммуникации

А что по деньгам 💰
Компания была тир2 и была ожидаемой для вилки стаффа. Сам вилка, по моим ощущениям, это 105-130k  EUR base + 10-50k EUR bonus/RSU.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍8
SQL  и CASE WHEN

CASE - знакомое многим выражение SQL для условий. Я хотел бы показать варианты использования CASE WHEN, о которых может быть не известно

Все примеры из public datasets в Bigquery. В основном будем использовать таблицу заказов для примеров. То, что можно так сделать с точки зрения синтаксиса не значит, что так стоит делать, всегда думайте о поддерживаемости и читабельности

CASE в агрегатной функции
Нужно вывести для каждого пользователя последние даты отмененного, возвращенного и завершенного заказов.




SELECT user_id,
MAX(case when status = 'Cancelled' THEN created_at END)
AS last_cancelled_dt,
MAX(case when status = 'Returned' THEN returned_at END)
AS last_returned_dt,
MAX(case when status = 'Complete' THEN delivered_at END)
AS last_complted_at
FROM bigquery-public-data.thelook_ecommerce.orders
GROUP BY user_id


CASE в Order by оконной функции

Для каждого пользователя вывести последнюю дату отменненого заказа, а если у него не было отменненых заказов, последнюю дату возвращенного заказа





SELECT distinct user_id,
LAST_VALUE(CASE WHEN status = 'Cancelled' THEN created_at
WHEN Status = 'Returned' THEN returned_at END)
OVER
(PARTITION BY user_id
ORDER BY
CASE WHEN status = 'Cancelled' THEN 2
WHEN status = 'Returned' THEN 1
ELSE 0 END,
CASE WHEN status = 'Cancelled' THEN created_at
WHEN Status = 'Returned' THEN returned_at
END
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING )
FROM bigquery-public-data.thelook_ecommerce.orders


CASE в джоинах

Убедиться что дата активности заказа не произошла на выходной день



SELECT ord.user_id, count(distinct ord.order_id)
FROM `bigquery-public-data.thelook_ecommerce.orders` ord
LEFT JOIN `bigquery-public-data.ml_datasets.holidays_and_events_for_forecasting` h
ON h.region = 'DE'
AND CASE WHEN status = 'Cancelled' THEN DATE(created_at)
WHEN status = 'Returned' THEN DATE(returned_at)
WHEN status = 'Complete' THEN DATE(delivered_at)
END = h.primary_date
WHERE h.primary_date IS NOT NULL
GROUP by ord.user_i



CASE в QUALIFY
Последний пример более искусственный, но показывает пример применения в QUALIFY










SELECT distinct user_id
FROM `bigquery-public-data.thelook_ecommerce.orders`
QUALIFY
CASE WHEN user_id > 100
THEN
SUM(num_of_item *
CASE WHEN status = 'Complete' THEN 1
WHEN status = 'Returned' THEN -1
ELSE 0
END)
OVER (PARTITION BY user_id
ORDER BY created_at
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING)
ELSE
SUM(num_of_item *
CASE WHEN status = 'Complete' THEN 2
WHEN status = 'Returned' THEN -0.5
ELSE 0
END)
OVER (PARTITION BY user_id
ORDER BY created_at
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING)
END > 2
👍16🤯2
Вышла книга Grokking Concurrency.
Автор книги - Senior Data Engineer в Spotify и ведет https://luminousmen.com (думаю, многие видели этот блог)

Я просмотрел содержание книги (благо есть manning подписочка) и однозначно добавлю ее в reading list на этот год, так как планирую подтянуть свой теорикрафт по concurrency и distributed системам.

Книга кажется неплохим введением для этого, чтобы потом вернуться к зубодробительным томам по CS. Примеры на питоне, и покрываются такие темы как процессы, треды, тред пулы, multitasking, semaphores, non-blocking i/o, coroutines, ...
Для суровых дата инженеров может быть повторением того, что знают, а нам, склщикам головного мозга, будет введением в тематику.
👍20