четверг, 31 января 2019 г.

[prog.flame] Возраст и умение программировать. Или становятся ли программисты с возрастом лучше?

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

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

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

Это так же означает, что человек писал код хотя бы на двух-трех разноплановых языках программирования. Представляет себе, что такое рекурсия, умеет ее применять где нужно и умеет заменять ее циклами где не нужно. Более-менее в курсе основных структур данных, знает как работает бинарный поиск, имеет представление хотя бы о трех-четырех методах сортировки. Еще лучше, если все это он делал сам, своими руками в рамках лабораторных работ. Еще лучше, если проделывал это все на разных языках.

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

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

Конечно же нет. Потому, что кроме навыка писать код нужно еще освоить профессию.

А вот на то, чтобы войти в профессию нужно где-то от 5 до 10 лет по моему нескромному мнению. Со мной можно в этом пункте не соглашаться, но мне фиолетово.

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

Это так же означает, что требуется приобрести некоторый опыт дабы избавится от некоторых присущих молодости максим. Например, нужно перестать думать, что только ты пишешь хороший код, а все вокруг исключительно говнокодеры. Нужно избавиться от желания "взять и все переписать". Нужно избавиться от веры в то, что вот этот вот новый, модный и молодежный инструмент (технология, подход) возьмет и все кардинально улучшить. Да и от NIH-синдрома желательно избавиться так же (хотя у меня некоторых он в ДНК, таким приходится страдать).

Это так же означает, что нужно будет развить в себе навыки изучения и освоения целой кучи чужих, но готовых библиотек, фреймворков, инструментов и пр. Поскольку в подавляющем большинстве случаев никто не пишет свой алгоритм сортировки, а использует готовый из стандартной библиотеки. Нужно научиться читать чужую документацию и выжимать из нее максимум, тем более, что хорошая документация -- это исчезающая редкость, особенно на внутренних проектах. Так что еще важнее научиться собирать информацию по крупицам: из кусков устаревшей документации, примеров кода, обсуждений в Интернетах, прямо из кода чужого инструмента.

Грубо говоря, если нормальный, вменяемый, толковый и обучаемый человек занялся программированием в профильном ВУЗе, то где-то к 27-30 годам он должен стать вполне себе крепким профессионалом. Уровня middle developer, как минимум.

Это так же означает, что где-то к 27-30 годам человек выйдет на пик своей "программерской формы". В это время он будет писать код максимально хорошо. И улучшить этот навык он с годами уже не сможет принципиально. Конечно же, с опытом появится больше наработок, больше готовых решений будет в голове, больше шаблонов и каких-то наиболее распространенных приемов. Но суть в том, что когда в 30 лет человек будет смотреть на свой код 5-летней давности, то он легко найдет места в коде, которые можно было бы улучшить. А вот в 35, глядя на свой код 5-летней давности, улучшить что-то будет уже сложно. Может быть даже, наоборот, возникнет сожаление, что настолько хорошо, просто и понятно писать уже не получается.

Что будет дальше?

Дальше вы какое-то время пробудете на пике формы. А потом, неизбежно, начнете сдавать.

Происходить это будет по целой совокупности причин.

У вас наверняка семья, дети, квартира, машина, дача. Ставшие немолодыми родители, которым теперь требуется ваше участие. Куча забот вне работы. У вас уже не будет возможности что-то поизучать в свободное время. В связи с отсутствием оного.

Вы переживете ряд возрастных кризисов, в процессе которых произойдет переоценка ценностей. И с высокой долей вероятности, совершенствование в профессии перестанет привлекать вас вообще. Ну или уйдет куда-то на задний план. Кроме того, вы уже много лет как должны будете обнаружить, что по сути занимаетесь одним и тем же, снова и снова. Это сперва кажется, что меняются задачи, языки и фреймворки. Но на самом деле вы занимаетесь одним и тем же: пишете код. Снова и снова.

Вы столкнетесь с тем, что в 40 лет у вас здоровье уже совсем не 20-летнего. И что за здоровьем нужно следить. И что даже если вы за ним следите, то все равно марафоны с неделями работы по 12-14 часов в сутки -- это уже слишком тяжело. И вряд ли стоит того.

Вы обнаружите, что почему-то осваивать новое вам стало труднее. Вроде мозги те же, а новое запоминается все хуже и хуже.

В общем, если вы думаете, что в 45 вы будете писать код так же лихо, быстро, непринужденно и с удовольствием, как это было в 25 или 30 лет, то у меня для вас плохие новости.

Ну и на опыт не следует слишком рассчитывать. Потому, что если вы не меняли кардинально проекты раз в год, то у вас неизбежно будут периоды, когда вы N лет делали одно и то же. И накопленный за это время "опыт" легко может оказаться бесполезным в другой предметной области.

Хотя, конечно, опыт будет помогать в том смысле, что вы окончательно избавитесь от иллюзий и юношеских максим.


Выше речь шла именно о карьере разработчика. Когда человек занимается тем, что пишет код и растет как технический специалист. Не переходя в менеджмент или какие-то другие направления (вроде ролей архитектора, солюшен архитектора, внедренца и пр.). Причем, имхо, чем больше людей приходит в ИТ, тем больше будет становится тех, кто всю свою трудовую жизнь просто писал код.

3 комментария:

ysden123 комментирует...

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

Я думаю, что, как и всегда, все очень индивидуально. У одних так, у других по-другому.

eao197 комментирует...

@Yuriy Stul

Ну это просто здорово! Откровенно завидую.

Осталось только понять, какой случай ближе к норме: ваш или мой (на самом не деле не только мой).

Maxim Shulga (aka MaxBeard12) комментирует...

У меня скорее ближе к Евгению, но я уже около 5 лет код вообще не трогаю. Вся активность ушла в менеджмент.