Читать в телеге. Когда-то там были посты не только от меня.
Визуализации от Бартоша Цехановского
Крутой блог, в котором автор делает красивые и интерактивные визуализации. В основном фокус на графику (например, про цветовые пространства) и физику (например, про шестеренки), но и для разработчиков есть полезное — например, про числа с плавающей точкой или про устройство GPS.
Продуктивность: просто спросите разрабов
Неплохая мотивационная речь про измерение продуктивности разработчиков.
Вообще, никто толком не знает что это такое, “продуктивность”, а уж тем более — как это измерять. Есть метрики типа SPACE или DORA, но внедрять их в большую организацию — долго и дорого. А на дашборды никто толком может и не смотреть.
Многие популярные метрики производительности (как и подходы к организации процессов) имеют корни/аналоги в реальном производстве, однако конвеерный труд отличается от умственного труда. У последнего слишком большая вариативность, чтобы грести все под одну гребенку.
Количественные метрики не сохраняют контекст (тут можно еще вспомнить историю The Worst Programmer I Know, в которой разработчик с самыми низкими метриками больше всего повышал метрики команды), ну и самые сложные проблемы организационные, а не технические. (Да и что там говорить, когда мы качество кода померить не можем)
Предлагаемое решение — просто спросите разрабов, т.е. получите качественные метрики вместо количественных. Да, они менее объективные, но лучше отражают реальность в условиях, когда мы не можем четко определить измеряемое.
Иронично, что докладчик — CEO компании, основной фокус которой — создание инструментов для сбора и анализа этих самых метрик :) И что-то мне подсказывает, что продуктивность в некоторых компаниях может быть опасно близка к культу.
Тимлид не должен быть тупо щитом
Хорошая статья про антипаттерн “лид — это щит команды” (от всех остальных). Вкратце, подобный подход, возведенный в абсолют, может быть вреден по следующим причинам:
- Команда изолируется от других команд и организации в целом, что приводит к противопоставлению “нас” и “их”.
- Лид выступает дополнительным (иногда лишним) звеном в процессах, и работает испорченным телефоном.
- Из-за изоляции команда отрывается от реальности и обратной связи.
- На самого лида падает куча нагрузки, хотя все люди взрослые, а лид — не нянька.
- Из похожей статьи можно добавить еще что команде-то может и будет хорошо, вот только компании это будет не в плюс: никаких эмерджетных эффектов.
При этом частично щитом все-таки работать надо, вот только делать это очень в меру. А так-то лид должен налаживать процессы, межкомандное взаимодействие и т.п.
The Deadlock Empire
Прикольная обучающая игра про примитивы синхронизации. Вы управляете несколькими потоками, цель — достичь “неправильного” состояния или блокировки. Примитивы из C#, но принципиально это ничего не меняет.
Фокус модулей и связанность
Они же cohesion и coupling, тяжело подобрать перевод получше. Первый термин — про то, насколько близки элементы внутри модуля (например, все связанное с пользователем в одном модуле, а все с его заказами — в другом), второй — про количество связей между модулями (негоже сервису заказов лезь напрямик в БД пользователей). Считается, что в идеале должен быть сильный фокус и низкая связанность, однако только ситхи возводят все в абсолют и надо знать меру. Подробнее можно почитать в этой годной статье.
Очень много архитектурных паттернов, по сути, стремятся достигнуть идеала. Можно сказать, что микросервисы, акторы, чистое ядро, хексагональная архитектура, слоеная/луковая архитектура и т.д. — это все попытки решения этой проблемы.
Про все это можно еще послушать в этом докладе. Там есть еще интересный взгляд на Spring: классическое разделение на контроллер, сервис, репозиторий с интерфейсами — это по сути хексагональная архитектура, и одна из киллер-фич Spring в свое время была возможность инъекции зависимостей и тестирование с моками (а тестирование на серверах приложений было неудобным). Одна из основных идей заключается в том, что функциональная структура важнее технической, и если у вас домен фигово разделен, то архитектура не поможет. Помимо теории, в нем есть еще и практика: как разбить все по папкам (но до уровня удушения этой статьи докладчику далеко) и как IDE может помочь с пониманием проекта. Прагматизм еще выражается в том, что не так уж и важно, что там внутри модуля, и ничего криминального в том, чтобы прямо из REST-контроллера вызвать соединение к базе, если модуль очень маленький.
Запуск Linux в Linux
Без виртуализации, просто как приложение. После Linux в браузере и Linux в PDF уже не так удивительно (да и вообще каждый утюг тюринг-полный в наши дни), но статья все равно занятная. Однако практическая польза стремиться к нулю.
Как облегчить жизнь разработчиков
Годная статья про основные принципы DevEx (продуктивность разработчиков). Если кратко, то нужно:
- сокращать время циклов (например, время сборки, время ожидания ревью и т.п.);
- уменьшать количество переключений контекста (чтобы разрабы были “в потоке”, а не на митингах);
- снижение когнитивной нагрузки (чтобы не надо было думать о лишнем, принцип наименьшего удивления и т.п.).
В качестве проблем выделены:
- понимание настоящих проблем разрабов и принятие решений на основе данных, а не “я же сам разраб, я знаю как мыслят разрабы”;
- внедрение изменений;
- новые процессы/инструменты должны быть просты в использовании, а не добавлять работы;
- умение говорить нет: не все стоит оптимизации;
- команды должны быть ответственны за свои действия;
- в видео-версии еще и инженерная культура упоминается.
Два подхода к использованию ИИ
Один и тот же проект (curl), одна и та же задача (найти уязвимости).
Подход номер 1 — “сделай все за меня”. Результат — говно-отчет об несуществующей уязвимости, пустая трата времени для всех, репортера забанили (и поделом).
Подход номер 2 — использовать ИИ как один из инструментов и не забывать про собственные мозги. Результат — найдено несколько реальных проблем, автор проекта в восторге, доклад на конфе, инструменты стали лучше (потому что касается не только curl).
Имхо, отличная иллюстрация как надо и не надо делать.
Проклятые знания
Можно сказать, что одна из самых сложных (технических) вещей в разработке — “неочевидное” поведение инструментов/библиотек/ЯП. Обычно это знание вместе с релевантными сценариями отражаются в коде, иногда в коммите и/или в тикете. Но некоторые решили пойти дальше и задокументировали эти “проклятые” знания на отдельной странице.
Вообще идея иметь отдельную страничку для подобного точно не нова, я точно видел что-то подобное раньше, но найти что-то похожее для пруфа в мертвом интернете тяжело — раз, два (про языки, не совсем то) и обчелся.
Разумеется, в сборниках есть спорные примеры и все такое, но сама привычка документировать подобное знание в открытом виде довольно интересна. Хотя можно сказать, что большинство персональных блогов — это, по сути, и есть сборники таких знаний.
Как не продолбать уведомления от GitHub
Если уведомлений от GitHub слишком много, то можно:
- Слать уведомления из рабочей организации — в рабочий ящик, а остальные — в личный с помощью роутинга.
- Открыть настройки уведомлений и… настроить их!
- Читать уведомления на самом GitHub, а не из почты-помойки.
- Отслеживать статус своих PR и запрошенные ревью на странице с PR (туда же можно добавить фильтр по организации, если надо).
- Использовать кнопку отписки об уведомлениях (шок!).
- Настроить напоминалки для Slack на все действия, связанные с пулл-реквестами (либо мгновенные, либо по расписанию).
- Наконец, настроить фильтры на почте.
В следующий раз, когда ваш коллега/лид скажет что-то вроде “ой, у меня так много уведомлений, затерялся твой запрос на ревью”, покажите ему этот пост. Ни черта не поменяется, но так хотя бы отмазка посвежее будет:)