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

Почему спорить порой бессмысленно
Если вы когда-нибудь участвовали в обсуждении кода (как автор или рецензент), вы почти наверняка видели следующее: начинается эмоционально, появляются аргументы вроде «но если мы сделаем вот так, то…», «тогда потеряем…», «а вот у меня есть хороший шаблон…». И после кучи сообщений — либо компромисс, либо заброшенное решение. Почему так? Опытные программисты быстро приходят к инсайту: обсуждать внешние детали, стили, вкусы — часто не самое эффективное занятие. Вместо этого проще взять и переписать код так, чтобы комментарии стали бессмысленны. Это не от нежелания общаться. Это от понимания: дискуссия требует затрат — внимания, эмоций, времени. А код — это среда, где результат виден сразу, и он долговечен. Поэтому, когда вижу, как начинающий разработчик цепляется за формальные аргументы и пытается доказать «моё решение лучше», я вспоминаю: опытный коллега просто сидит, пишет, тестирует, пушит. И вопрос тихой работы становится эффективнее громкой речи.
Техническая рациональность за молчанием
Да, есть тонкое техническое измерение. Представьте код-блок на Go:
// файл handler.go
func ProcessRequest(r *Request) (*Response, error) {
if r.User == nil {
return nil, fmt.Errorf("user is nil")
}
// проверка прав доступа
if !r.User.HasPermission("execute") {
return nil, ErrPermissionDenied
}
// логика обработки
resp, err := executeTask(r.Task)
if err != nil {
return nil, err
}
return resp, nil
}
И вот кто-то в ревью спорит: «А может быть, стоит вернуть HTTP ошибку 403 вместо ErrPermissionDenied?» Начинающий разработчик отвечает: «Но тогда JSON ответ иной будет». Спор развивается. А опытный просто перепишет так:
func ProcessRequest(r *Request) (*Response, error) {
if r.User == nil {
return nil, fmt.Errorf("user is nil")
}
if err := authorize(r.User, "execute"); err != nil {
return nil, NewHTTPError(403, "forbidden")
}
resp, err := executeTask(r.Task)
if err != nil {
return nil, err
}
return resp, nil
}
И внутри репозитория появляется sendHTTPError, и все автоматом подстраиваются. Конец дискуссии. Вместо слов — изменение. Потому что код сам по себе полноценен, он виден, он проверяем. И легче устно объяснить, что «я сделал так, чтобы ответ был 403» — чем спорить о том, должна ли это быть ErrPermissionDenied. Эти механизмы — часть зрелости: выбирать не язык обсуждения, а механизм изменений. Когда код становится средством коммуникации, споры теряют смысл.
Психология и статус разработчика
Как же влияет статус? Если вы джуниор, то вас видно: вы пишете, вас читают, ваши комментарии комментируют. Вы хотите доказать, что знаете, что делаете. А матерые программисты — те, у кого есть долгий опыт — меньше хотят быть замеченными. Их цель не «показать», а «достичь». В комментариях можно выглядеть сильным, можно победить аргументом, но это пустышка. Лучше показать, чем обсудить. Также есть аспекты: хочется сохранить лицо, не ввязаться в бессмысленные баталии, не тратить время на догадки. Внутреннее спокойствие приходит с опытом: можно смириться с тем фактом, что не всё делается «идеально», но делать — лучше, чем обсуждать. И вот вопрос к вам: замечали ли вы, как в вашем команде опытные люди просто правят и пушат, а младшие задают вопросы и комментируют? То есть это не лень, это сознательный выбор поведения.
Как это выглядит в команде
В моей команде, над которой я работал последние два года, мы внедрили правило: ревью должно завершаться либо конкретным изменением либо явным решением «оставляем так». И знаете что? Споры почти исчезли. Когда приходит PR с аргументами и словами — мы тратим время. А когда приходит конкретный коммит с изменениями и краткое «вот, переписал, проверь» — всё быстрее. Вот пример на Python:
def filter_items(items, threshold):
result = []
for item in items:
if item.value > threshold and not item.deleted:
result.append(item)
return result
Представьте обсуждение: «А может быть использовать list comprehension?» Начинается спор. Вместо этого опытный разработчик просто приводит код:
def filter_items(items, threshold):
return [item for item in items if item.value > threshold and not item.deleted]
И пушит. Простой, читаемый, проверяемый. Конец обсуждения. Почему так работает? Потому что он знает – изменения проще читать, чем обсуждения. И команда быстро адаптируется к шаблону. Это не значит отсутствие дискуссий вообще — они бывают при архитектуре — но для мелких деталей — да. Подводя итог: опытные разработчики понимают, что среда — код, выводимый результат, автоматизация — сильнее, чем аргументы.
Что мы можем извлечь и применить
Итак, несколько практических советов, которые могу предложить (и сам ими пользуюсь). Во-первых: если начинается спор — задайте себе вопрос: Какой конкретный код решит этот спор? Иногда стоит просто переписать. Во-вторых: если вы новичок — не удивляйтесь, если вместо спора увидите коммит. Это не пренебрежение, это эффективность. Постарайтесь понять: код-комментарии меньше значат, чем код-изменения. В-третьих: внедрите в команду правило: «если есть спор — требуется либо прототип либо ветка “спор”». Тогда эмоции уходят, остаётся факт. И наконец: старайтесь задавать вопросы не «почему ты сделал так», а «какой результат ты видел». Таким образом меняется формат: с «из-за чего» на «что получилось». Возможно, будет полезно посмотреть на свой рабочий процесс и задать: сколько времени уходит на комментарии vs сколько на изменения? Вы будете удивлены, как сильно дискуссии тормозят.
Если вы дочитали до этого момента — спасибо. Поделитесь опытом: замечали ли вы, что зрелые разработчики предпочитают действие разговорам? Или у вас другие наблюдения? Буду рад обсудить в комментариях (или, может быть, вы просто кодите, а не спорите ?).
Комментарии (5)

Lor_Nick
14.11.2025 02:54Интересная логика:
1й говорит: а может быть сделать по другому? Бах коммит
2й говорит: не а может быть было бы неплохо вот так? Бах коммит
3й: да ну ерунда вначале было лучше: Бах коммит
1й: и чем же оно лучше? давай так: Бах коммит
Складывается, что по ту сторону не опытный программер сидит, а какой то АИшка, которому как скажут, так и сделает.
Или я не догнал мысль статьи?
EvilTeacher
Старое, давным-давно безотказно работающее правило: Хочешь, чтобы что-то было сделано хорошо? Сделай это сам!.... И это касается не только программирования.
kriptonus
В поле каждый суслик агроном...
Если все делают хорошо(потому, как делают сами), откуда неэффективные и провальные решения?
GospodinKolhoznik
Слишком высокие стали требования к решениям. И вот уже достаточно хорошие решения называются провальными.
Sobakaa
Старое, плохое решение, ведущее к тому, что один разработчик, часто даже не очень хороший, но зато с очень большим самомнением, гадит всей команде, молча делая «хорошо».