Я долго размышлял на данную тему и наконец решил изложить.
Вся эта история с оценкой кода по количеству написанных строк или другие попытки оценить объем работы мне всегда не давали покоя.
Сейчас я не пишу код в промышленных масштабах, разве что для себя какой-то мелкий инструмент. Но когда-то я писал много и занимался этим больше 15 лет.
Придешь утром в офис и начинаешь что-то писать, сохраняясь в промежутках, конечно же. А вечером мне нравилось иногда нажать ctrl+z и смотреть в ускоренном темпе, пусть и в обратном порядке, как бегал курсор, как выделялись, появлялись и исчезали какие-то блоки кода. Сначала условие и цикл появились в одном месте, потом кусок кода из цикла перешел в процедуру, цикл вообще исчез и т.д. Это завораживающий танец курсора и текста под ним.

К концу дня новая лаконичная процедура, пара вставок в существующие блоки. В общей сложности 50-80 строк кода. Часто приходилось дорабатывать легаси, где нужно аккуратно внедрить свои вставки в разных местах, ничего не сломав.
И я задавал себе вопрос: а кто видел все эти мои поиски и скитания? Для внешнего наблюдателя видно только сколько строк было утром и сколько их стало вечером. Но это вообще не то. Эти 80 строк даже не намекают на то, чем я занимался целый день. Уверен, вы понимаете, о чем речь.
Сейчас, в эпоху тотальной увлеченности ИИ, меня не покидает мысль, что неплохо бы весь этот когнитивный процесс легализовать.
Здесь не будет инструкций как я это сделал. Здесь будет просто рассуждение вокруг да около.
Телеметрия
На сайтах давно применяются механизмы отслеживания поведения пользователя. Куда он нажал, сколько был на странице, насколько глубоко скролил и т.д.
Почему в разработке такого нет? Переходы между модулями, наведение курсора на какие-то методы для просмотра подсказок, переход по зависимостям, поиск и прочее. Набрать текст, выделить, удалить, переместить, подключить библиотеку, поправить конфиг, запустить.
Внесение изменений, компиляция, тестовый запуск, повторное изменение с последующей компиляцией. Пошаговая отладка с заходом. Это же масса времени и когнитивной работы.
Или отладка SQL запроса. Вы же знаете, как это бывает, когда можно неделю отлаживать тяжелый запрос. Смотреть планы, замерять I/O-статистику, добавлять индексы. Выдергивать куски вложенных запросов и отлаживать их отдельно, а затем вставлять в общий запрос. Кто это видит? Никто. Только вы.
В конце недели ваш комит выглядит как 3 короткие, но идеальные правки в запросе. Чем ты занимался всю неделю? Добавил эти три строки? Иногда самому становится не по себе от осознания того, как результат твоей работы выглядит для стороннего наблюдателя.
Все привыкли оценивать результат, но в разработке, как и в науке, 90% времени — это постановка эксперимента и поиск ошибки. Инструменты оценки за это не заточены. Они заточены на результат, будто вы копаете яму отсюда и до обеда.
Никто не оценит все ваши страдания, пробы и ошибки, но именно в них рождается результат.
А вот если бы телеметрия собирала все ваши действия в лог, а потом построить на этом граф или этот ваш ИИ бы оценил, насколько это непросто. Для бизнеса ваша работа стала бы прозрачной и доказуемой.
Парадокс мастерства
Есть байка про Пикассо, когда его попросили нарисовать на салфетке набросок. Он сделал это за пару минут. А на вопрос, сколько ему за это должны, назвал огромную сумму. Это возмутило заказчика, ведь как можно требовать такую сумму всего 2 минуты. На что художник ответил, что потратил на это не 2 минуты, а всю жизнь.
Разве эта байка не перекликается с разработчиками, которые тратят массу времени на невидимую работу, а затем пытаются доказать заказчику, что это не просто 2 строчки кода?
А что, если попробовать?
Можно собрать тысячи честных логов процесса разработки и процесса имитации, а затем обучить на этом модель, чтобы выделить паттерны. Такие сырые логи, конечно же, не годятся для обучения модели, но из них можно построить тепловую карту и/или граф активности. На графе будет видно "пульс" процесса. Кто-то делает это быстрее, а кто-то медленнее, но процесс будет примерно одинаковый. Ваша работа станет доказуемой. Разумеется, собирать нужно всё — не только IDE, но и окружение.
Это должна быть внешняя утилита, которая просто ведет лог работы. В настройках пользователь сам задает что именно собирать и из каких приложений. Фильтры заголовков с регулярками, типы объектов и вот это вот все. Тогда будет видно, что вы после отладчика перешли в какой-то SQL редактор (SSMS/PLSQL) или postman, долго его мучили, а оттуда на stackoverflow и крутили там десятки страниц.
В итоге получится инкрементальная запись действий с учетом контекста, а не дельта результата. Не для слежки, а для анализа того, как именно мы (люди) это делаем, ведь это самое интересное.
Законная лень или как мы на самом деле ищем решения
Всем известно, что человек не может писать код с 9 до 18, особенно, если требуется поиск решения, а не просто набор текста стандартных алгоритмов. Бывает, что мысль не идет. Можно сколько угодно себя заставлять писать — толку не будет. Либо такого понапишешь, что потом не разобрать. Решение крутится где-то на языке. Вы чувствуете, что оно есть и оно достаточно простое, но ясная картинка не складывается. Вы уже перепробовали десятки вариантов, а каменный цветок не выходит. Нужно отвлечься — почитать анекдоты/новости, посмотреть котиков, чтобы произошла дефрагментация мысли. Это инкубация, которая может длиться от нескольких часов до нескольких дней. В какой-то момент происходит вспышка — решение сложилось. Вы открываете свой код, смотрите, что вы там понаписали, и думаете: боже, что это?! Удалить! И пишете за 5 минут сразу работающий блок, который раньше не взлетал несколько дней. И это чувство неловкости перед самим собой: я потратил столько времени, а если спросят, то и показать как бы нечего. Это когнитивный диссонанс. Мы привыкли измерять объемами. Если это что-то стоящее, то его должно быть много, не так ли?
Как объяснить бизнесу, почему вы одну из двух недель потратили на видосики?
Такой период, как инкубация-инсайт, будет виден на тепловой карте, потому что ему предшествовал процесс интенсивного перебора вариантов, когда вы переписывали один и тот же кусок еще и еще, затем пауза в IDE, котики в браузере и короткое финальное решение.
Может возникнуть вопрос приватности. Но ведь человек сам может выбирать, что логировать, а что нет, и это в его интересах, а главное — логи не обязательно должны содержать тексты, они могут содержать только маркеры, на основе которых можно строить тепловые карты. Здесь не имеет значения, что именно написано и какого качества это было на этапе поиска решения, намного важнее число попыток и количество вариантов, ибо именно сюда и ушло все время.
Эффективные менеджеры могут попытаться использовать это против вас. Ведь Петя продолжал жрать кактус и таки выдал какое-то чудовище, в то время, как Вася пошел смотреть котиков и вернулся с тремя строчками идеального кода. Но здесь как раз и нужна статистика по таким картам и беспристрастность ИИ. Подобно тому, как нейросеть анализирует снимки флюорограммы, когда даже опытный специалист не видит там ничего особенного, а нейронка видит маркеры.
Почему этого до сих пор нет? Ну ладно, если кто-то недобросовестный занимается очковтирательством, но большинство ведь честно выполняют свою работу и любят ее. Когда вы увлечены, вы не замечаете, как летит время. Целый день честно чем-то занимался, никаких котиков. Но вот уже коллеги начали собираться домой. Смотришь на часы, там 18:00. А где результат? Самому не понятно, куда ушло время. Такие тепловые карты вам самим помогут понять, где были моменты максимального напряжения и какой реальный интеллектуальный вклад был сделан, несмотря на то, что пощупать нечего.
Приведу простую аналогию.
Школьная задача по математике, где нужно найти площадь поля, например.
Формулировка задачи: дано А,Б,В, какая площадь поля?
Можно ответить коротко: 1км2
Однако учитель требует показать решение, как ты получил этот ответ. Он хочет видеть формулу. Но даже эта формула слишком поверхностный уровень. Интереснее узнать ещё более глубокий срез, который покажет цепь логических рассуждений, приведших к решению. Где будет видно, почему именно эта формула или теорема были применены и что этой теореме предшествовало. Добыта она была в памяти, как готовый рецепт, или ты до этого дошел. Пример с математикой здесь близок, когда нужно вывести формулу, но формула это уже результат, а сам процесс остался за кадром. В школе нас учат именно процессу (способу) нахождения решения, а формулы — лишь инструменты.
В школе рассказывают как применять теорему Пифагора. Начинают гонять десятки задач, чтобы человек с разных сторон приходил к одной и той же теореме. Когда материал усвоен, начинается новая тема. Но в школе учат готовому процессу, который за сотни лет уже превратился в методичку.
А на работе человек часто вынужден выстраивать свой процесс самостоятельно. Да, на основе школьного, но самостоятельно.
У кого-то он более эффективный, а у кого-то менее и, скорее всего, разница в способности и скорости решения тех или иных задач на работе заключается в разных процессах, которые люди выстроили в своей голове. Вероятно, тепловая карта позволит понять, в чем разница в этом смысле между Петей и Васей. Почему Вася решает типовые задачи быстрее, чем Петя, но при этом Петя способен на решение нетривиальных задач, а Вася на них буксует.
Возможно, этим тепловым картам найдется применение и в науке, а может быть они могут стать заменой тестов на собесах (вместо решения задачек и IQ можно показать "паспорт" способа своего мышления, ведь именно за этим, а не за знанием алгоритмов, все охотятся в найме)...
Что скажете?
