Хороший ли я программист? Если коротко — я не знаю, что это значит.

Вот я программирую уже 52 года, с 1973 года, спасибо урокам в государственной средней школе — тогда это было редкостью и не все школы давали подобную возможность. Я работал в 15 разных компаниях в самых разных отраслях. Болше скажу, я основал две небольшие софтверные компании — одну в 1985 году и вторую в 1987-м, и руководил ими до 1994 года. А потом я вышел на пенсию в 2021-м году.

Так что же, я хороший ��рограммист потому, что я в целом 52 года в отрасли и всё это время программирую?

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

Долговечность — это преимущество лишь в том смысле, что ты всё это время сумел оставаться ценным и востребованным, но это не обязательно значит, что ты хорош.

«Хорошесть» вообще трудно определить. Если сравнивать программистов друг с другом, как решить, кто из них лучше? Попросить их создать проекты одного типа в одной отрасли? Сравнить уровень опыта? Оценить знание одних и тех же технологий? А что по должностям и рабочим обязанностям?

Можно вообще сузить сравнение настолько, что оно потеряет всякий смысл.

Скажем, я создаю приложения для мобилок, а вы, например, вообще Линус и создаёте операционную систему — как мне с вами тут (и чем) сравниваться?

А может, вы разрабатываете сверхинтеллектуальную ИИ-систему и получаете 200 миллионов в год, это значит, что вы — хороший программист, а я — нет? Мы вообще можем использовать размер зарплаты как критерий для того, чтобы отличать хорошего программиста от плохого?

Может, вы работали в Google, а я — в нетехнологичной компании, где платят меньше. И вообще, у меня команда была из двух человек, которая делала продукт на 100 миллионов в год, а у вашей команды — бюджет 100 миллионов в год и тысяча программистов под вашим руководством. Кто из нас теперь хороший программист?

Может, мы оба хороши, а может, нет.

А вот качество — это критерий? Вдруг я выпустил работающий продукт в плохой компании с ужасным QA, а вы работали в огромной компании с громадными вложениями в процессы и доставку. Может, моего качества хватило для моей плохой компании, а от вашего качества зато зависит цена акций. Кто лучше? Это вообще честное сравнение?

Допустим, у меня маленькая команда, у вас большая, но мы оба выпустили продукт примерно одинаковой сложности. И продукт-то работающий. И что, при этом я точно лучше, а вы хуже, потому что у вас было больше помощи, а я справился тем, чем смог? Да даже если у меня был блестящий член команды, настоящий гений, который сделал почти всё, а вся ваша раздутая команда была в основном бесполезна — всё равно сравнение не очень удачное.

Кто знает, вдруг вообще только вы сами можете решить, хороший вы программист или нет, только потому, что уверены в себе.

Но есть нюанс.

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

Попробуем быть чуть более объективными.

Могут ли другие решить, хороший вы программист или не особо?

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

Или вы в ситуации, когда они боятся вашего высокого положения, и просто вынуждены вести себя так, будто вы намного лучше их. Они могут даже следовать за вами, потому что видят, что вы стараетесь, что вы реально тащите, что всё, за что вы берётесь, становится чем-то работающим и вообще отлично продаётся — ведь людям нравится работать на лидеров, которые кажутся успешными.

Сюрприз — ничто из этого ни разу не значит, что вы хороши. Вам просто могло повезти. В том числе — и со связями.

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

Может, вы потрясно выступаете на соревнованиях по программированию, у вас дома обои отваливаются от развешенных на них сертификатов или PhD по Computer Science.

Или же каждый реальный проект, который вы выпускаете, ужасный. Что тогда получается, что как спец по технологиям вы восхитительны, а в плане доставки — откровенно слабы? А ведь это может быть ситуация, в которой вас просто из рук вон плохо поддерживают в компании, и её процессы не дадут вам выпустить хороший продукт, даже если вы спать перестанете.

Кто решает, хороший вы программист или нет?

Отрасль, комментаторы на Хабре, реакция на ваш профиль на Гитхабе? Начальник, коллеги, спикеры на конфах, ваша мама? Кажется, мы в ситуации, когда сложно придумать не просто критерии «хорошести», а даже просто понять, кто будет это решать.

Когда вы становитесь хорошим программистом? Можно ли вообще лет 10 быть просто отвратительным программистом, а потом рррраз — и внезапно стать хорошим? Это всё та же проблема: определить, что такое «хороший», кто решает и по каким критериям или сравнению.

В конечном итоге определение хорошего программиста крайне субъективно и его очень трудно зафиксировать.

Считаю ли я, что был хорошим программистом? Да, считаю, но считаю ли я, что мог бы быть лучше? Всё хорошее, что я выпустил, можно было бы сделать лучше, с меньшим количеством людей или просто быстрее. Всё, что я выпустил, мог бы улучшить кто-то «лучше» меня в каком-то смысле.

Но я был там, а вот «лучшего» человека тогда не было.

Им пришлось быть мне.

Иногда компания не могла себе позволить этого «лучшего» человека, или не хотела его нанимать, или не хотела искать и платить кому-то другому. Причин может быть куча.

Но именно я был там, и в целом я выпускал софт, который работал. Может, я был просто достаточно хорош для ситуации, но кто угодно мог бы сделать лучше.

Сравнивать себя или других с какими-то теоретическими альтернативами в вакууме — то ещё занятие. Я видел в жизни много софта, какие-то вещи были потрясающими, и я был уверен, что сам бы такое не смог написать никогда.

А ещё я видел поистине ужасающие проекты, в которых (я точно знаю) многое бы сделал гораздо лучше. Само собой, порой мне приходилось чинить кривые проекты других людей. При этом мало кто брал на себя проекты, написанные лично мной, так что я без понятия, чувствовали бы эти люди то же самое по отношению к моему коду.

Так хороший я программист или нет?

Я думаю, что был таковым, но что это на самом деле значит, если даже определить хорошего программиста так сложно?

Я знаю, что меня пару раз нанимали чисто за какие-то прошлые заслуги, и у меня были члены команды, уважающие мой код и какие-то из моих старых программ. Может, они думали, что я хороший программист, а может, у них была какая-то другая причина.

В конце концов быть хорошим программистом — это то, чего вы хотите, даже если не знаете точно, что это значит. Никогда не довольствуйтесь тем, что вы уже хороши — всегда учите что-то новое. И слушайте тех, кто может знать что-то, о чём вы вообще не слышали.


Когда выходите на пенсию или перестаёте быть программистом, можно просто оглянуться назад и решить, была ли это хорошая жизнь.

В конечном итоге этого достаточно.