Уверен, что прав, но объяснить не можешь

Поймал себя на мысли: иногда мне кажется, что я прав, но аргументировать не могу. Споришь с кем-то, говоришь «мне кажется, должно быть так» — и всё, аргументов нет, есть только уверенность. А через время находишь их, и оказывается — решение было верное. Я долго считал это интуицией. Чуйкой.

А потом полез разбираться, и выяснилось, что никакая это не интуиция. Штука давно изученная — этим занимались и философы, и психологи. Есть формула, которая мне понравилась: мы знаем больше, чем можем сказать. Знания в тебе есть и работают, просто в слова не складываются. Это называют неявными знаниями. Классический пример — шахматисты: гроссмейстер не перебирает варианты, он видел похожую позицию тысячу раз и просто узнаёт её.

Но больше всего меня зацепила история про пожарных из исследований Гэри Кляйна. Командир вывел людей из здания за секунды до обрушения, а объяснить не смог — просто «что-то не так». Потом поняли: он бессознательно считывал температуру, звук, поведение огня. Опыт сработал раньше, чем он успел его осознать.

Немного обидно, да? Никакой магии и никакого шестого чувства.

В работе я тоже это вижу. Как-то выносил всю работу с картой в папку lib/map, коллега спросил зачем — а я в моменте не смог объяснить. Просто знал, что так лучше. Аргументы нашёл позже: весь остальной проект не трогает библиотеку напрямую — он работает с моей папкой. Там живёт инициализация, конфиг и те операции с картой, которые проекту реально нужны. Захочешь сменить Yandex на Mapbox — работы всё равно хватит, но вся основная логика останется внутри lib/map, а не расползётся по сорока файлам. И сделал я так не потому, что я супер умный и сам это придумал. Просто когда-то смотрел, как организуют код опенсорс-проекты на гитхабе. Когда понадобилась карта, рука сама потянулась к lib/map.

А чаще всего теперь ловлю это чувство в работе с нейронкой. Просишь сделать «по лучшим архитектурным практикам» — она делает, всё вроде аккуратно, а смотришь на структуру и чувствуешь: что-то не так. А объяснить не могу. И проверить с ней же не получится: скажи ей «мне кажется, надо иначе» — и она тут же «вы абсолютно правы, это действительно важный аспект». Соглашается она с чем угодно, так что разбираться, настоящее это «не так» или показалось, приходится самому.

Поэтому когда опытный разработчик на ревью говорит «не могу объяснить, но так делать не надо» — я не считаю это вкусовщиной. За этим «чувствую» стоит свёрнутый опыт, который в коде проверялся сотни раз: почувствовал, сделал, через месяц узнал, прав или нет. Такое чувство откалибровано, и оно часто дороже красиво обоснованной, но неверной позиции. Хотя чуйка опытного — не истина: ошибиться он может так же, как все. «Чувствую, что так нельзя» — повод остановиться и разобраться, а не способ закончить спор.

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

Первый — наблюдательность. Насмотренность не приходит от количества прочитанного кода сама по себе. Смотреть чужие решения и задаваться вопросами «почему здесь так» и «зачем это вообще» — вот тогда паттерн откладывается.

Второй — умение аргументировать. Когда чувствуешь «так нельзя», не лезть сразу гуглить, а сначала самому сформулировать: что именно меня смущает, что может сломаться, если сделать так. Даже если выйдет коряво — само усилие достать знание из головы в слова и есть тренировка. Потом загуглишь — и поиск либо подтвердит, либо поправит. Так это чувство и калибруется.