Минутка просвещения

Читать в телеге. Когда-то там были посты не только от меня.

Визуализации от Бартоша Цехановского

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

СсылкаКомментировать

Продуктивность: просто спросите разрабов

Неплохая мотивационная речь про измерение продуктивности разработчиков.

Вообще, никто толком не знает что это такое, “продуктивность”, а уж тем более — как это измерять. Есть метрики типа SPACE или DORA, но внедрять их в большую организацию — долго и дорого. А на дашборды никто толком может и не смотреть.

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

Количественные метрики не сохраняют контекст (тут можно еще вспомнить историю The Worst Programmer I Know, в которой разработчик с самыми низкими метриками больше всего повышал метрики команды), ну и самые сложные проблемы организационные, а не технические. (Да и что там говорить, когда мы качество кода померить не можем)

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

Иронично, что докладчик — CEO компании, основной фокус которой — создание инструментов для сбора и анализа этих самых метрик :) И что-то мне подсказывает, что продуктивность в некоторых компаниях может быть опасно близка к культу.

СсылкаКомментировать

Тимлид не должен быть тупо щитом

Хорошая статья про антипаттерн “лид — это щит команды” (от всех остальных). Вкратце, подобный подход, возведенный в абсолют, может быть вреден по следующим причинам:

  • Команда изолируется от других команд и организации в целом, что приводит к противопоставлению “нас” и “их”.
  • Лид выступает дополнительным (иногда лишним) звеном в процессах, и работает испорченным телефоном.
  • Из-за изоляции команда отрывается от реальности и обратной связи.
  • На самого лида падает куча нагрузки, хотя все люди взрослые, а лид — не нянька.
  • Из похожей статьи можно добавить еще что команде-то может и будет хорошо, вот только компании это будет не в плюс: никаких эмерджетных эффектов.

При этом частично щитом все-таки работать надо, вот только делать это очень в меру. А так-то лид должен налаживать процессы, межкомандное взаимодействие и т.п.

СсылкаКомментировать

Фокус модулей и связанность

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

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

Про все это можно еще послушать в этом докладе. Там есть еще интересный взгляд на Spring: классическое разделение на контроллер, сервис, репозиторий с интерфейсами — это по сути хексагональная архитектура, и одна из киллер-фич Spring в свое время была возможность инъекции зависимостей и тестирование с моками (а тестирование на серверах приложений было неудобным). Одна из основных идей заключается в том, что функциональная структура важнее технической, и если у вас домен фигово разделен, то архитектура не поможет. Помимо теории, в нем есть еще и практика: как разбить все по папкам (но до уровня удушения этой статьи докладчику далеко) и как IDE может помочь с пониманием проекта. Прагматизм еще выражается в том, что не так уж и важно, что там внутри модуля, и ничего криминального в том, чтобы прямо из REST-контроллера вызвать соединение к базе, если модуль очень маленький.

СсылкаКомментировать

Как облегчить жизнь разработчиков

Годная статья про основные принципы DevEx (продуктивность разработчиков). Если кратко, то нужно:

  • сокращать время циклов (например, время сборки, время ожидания ревью и т.п.);
  • уменьшать количество переключений контекста (чтобы разрабы были “в потоке”, а не на митингах);
  • снижение когнитивной нагрузки (чтобы не надо было думать о лишнем, принцип наименьшего удивления и т.п.).

В качестве проблем выделены:

  • понимание настоящих проблем разрабов и принятие решений на основе данных, а не “я же сам разраб, я знаю как мыслят разрабы”;
  • внедрение изменений;
  • новые процессы/инструменты должны быть просты в использовании, а не добавлять работы;
  • умение говорить нет: не все стоит оптимизации;
  • команды должны быть ответственны за свои действия;
  • в видео-версии еще и инженерная культура упоминается.
СсылкаКомментировать

Два подхода к использованию ИИ

Один и тот же проект (curl), одна и та же задача (найти уязвимости).

Подход номер 1 — “сделай все за меня”. Результат — говно-отчет об несуществующей уязвимости, пустая трата времени для всех, репортера забанили (и поделом).

Подход номер 2 — использовать ИИ как один из инструментов и не забывать про собственные мозги. Результат — найдено несколько реальных проблем, автор проекта в восторге, доклад на конфе, инструменты стали лучше (потому что касается не только curl).

Имхо, отличная иллюстрация как надо и не надо делать.

СсылкаКомментировать

Проклятые знания

Можно сказать, что одна из самых сложных (технических) вещей в разработке — “неочевидное” поведение инструментов/библиотек/ЯП. Обычно это знание вместе с релевантными сценариями отражаются в коде, иногда в коммите и/или в тикете. Но некоторые решили пойти дальше и задокументировали эти “проклятые” знания на отдельной странице.

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

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

СсылкаКомментировать

Как не продолбать уведомления от GitHub

Если уведомлений от GitHub слишком много, то можно:

  1. Слать уведомления из рабочей организации — в рабочий ящик, а остальные — в личный с помощью роутинга.
  2. Открыть настройки уведомлений и… настроить их!
  3. Читать уведомления на самом GitHub, а не из почты-помойки.
  4. Отслеживать статус своих PR и запрошенные ревью на странице с PR (туда же можно добавить фильтр по организации, если надо).
  5. Использовать кнопку отписки об уведомлениях (шок!).
  6. Настроить напоминалки для Slack на все действия, связанные с пулл-реквестами (либо мгновенные, либо по расписанию).
  7. Наконец, настроить фильтры на почте.

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

СсылкаКомментировать