Как правильно изучать новые технологии на примере Prometheus

Illustration of a child carrying a large teddy bear past a box labeled 'MEMOS' overflowing with toys, towards an empty box labeled 'TRASH'. Illustration of a child carrying a large teddy bear past a box labeled 'MEMOS' overflowing with toys, towards an empty box labeled 'TRASH'.

Новички в программировании не знают, на чём фокусировать своё внимание при изучении новых технологий. И поэтому тратят время на запоминание ненужных вещей. Это пост для них.

За последние десять лет мне довелось использовать десятки различных инструментов: языков программирования, баз данных, систем мониторинга, облачных сервисов и чего угодно ещё. Методом проб и ошибок я вывел для себя простое правило, позволяющее мне разобраться в любой новой технологии за кратчайший срок:

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

Возьмём для примера модную систему для мониторинга Prometheus. Вот что действительно важно знать про неё (впрочем, часть списка можно опустить):

  1. Promethus собирает и хранит метрики с серверов и приложений. Метрики могут быть чем угодно: количество свободного места на жёстком диске или число запросов в минуту в веб-приложении.

  2. Prometheus работает по pull-модели. Места, откуда вытягивать метрики, могут быть как статичным списком адресов так и вытягиваться динамически при помощи доступных в Prometheus плагинов для Service Discovery;

  3. PromQL - язык запросов, позволяет выполнять разной сложности запросы для поиска метрик и их анализа;

  4. Prometheus не масштабируется горизонтально;

  5. Метрики должны быть доступы в определённом формате и задача объекта мониторинга предоставить эти метрики на каком-нибудь HTTP(S) эднпойнте;

  6. Prometheus написан на языке программирования Go и распространяется как один бинарник;

  7. При помощи PromQL запросов можно определять правила для оповещений;

  8. Отдельный инструмент Alertmanager умеет рассылать эти оповещения, сам Prometheus этим не занимается;

  9. Существуют десятки интеграций с Prometheus как для экспорта метрик, так и для визуализации данных;

  10. Очень легко написать свой экспортер метрик для мониторинга своих приложений;

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

А вот что совершенно не обязательно зубрить и держать в памяти бесконечное число времени:

  1. Формат конфигурационного файла Prometheus;

  2. Конкретный синтаксис определения правил relabeling;

  3. Встроенные в PromQL функции и связанные с ними сложные запросы;

  4. Аргументы для запуска бинарника Prometheus;

  5. Детали настройки плагинов для Service Discovery;

  6. Названия отдельных метрик для популярных экспортеров;

  7. Как именно писать экспортер для своего приложения;

Всё, что входит во второй список, совершенно не нужно запоминать. Вся эта информация находится в пределах одного-двух поисковых запросов, которые не составит труда составить человеку, который уже понял и знает, как работает Prometheus. То есть, если ты понимаешь, что Prometheus умеет получать список объектов для мониторинга при помощи API Kubernetes, то конкретную строчку конфига certificate path можно не запоминать, а просто каждый раз гуглить "Prometheus Kubernetes Discovery certificate path". Пусть эта информация хранится в интернете, а не захламляет тебе мозг.

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

Если на собеседовании вам задают вопросы, связанные с зазубриванием свободно доступной в любой момент информации, то собеседующий дурак и, возможно, работать в этой компании не стоит.

Любой старший разработчик знает, что важнее всего понимать принципы работы всего вокруг и уметь решать задачи. Поэтому услышав вопрос "назови мне 6 функций для запросов в PromQL" от интервьюера, нужно помнить, что это просто плохой интервьюер, и проблема в нём, а не в тебе. И если не возьмут на работу из-за неспособности отвечать на такие вопросы, то ничего страшного — твоей вины в этом, скорее всего, нет.

Как выявить принципы работы технологии

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

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

Нюансы

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

Выбор технологии для важного проекта

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

Принципы сами по себе не заменяют опыта

Даже если ты применишь правило и действительно поймёшь, как технология работает, и как её использовать, то не спеши добавлять в резюме строчку "эксперт по X". Способность быстро и правильно изучать технологии (которая обеспечивается следованием правилу выше) не заменяет глубокого знания всех её нюансов. Подобное знание можно получить только в боевых условиях. Только когда ты будешь вовлечён в проект, в котором Prometheus стоит в центре всего мониторинга, ты сможешь отдельной строчкой упоминать, как ты им хорошо владеешь. Иначе место этой технологии в твоём резюме в списке "Навыки", где ты просто перечисляешь через запятую то, с чем знаком, но необязательно являешься экспертом в этом.

Нет ничего плохого в том, чтобы запомнить мелкие детали

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


Суммируя и повторяя сказанное: старайся разобраться, как что-то работает. Строй в голове систему, которая лишит тебя необходимости что-либо запоминать наизусть.