Хабрахабр

Старикам здесь не место? Программируем после тридцати пяти

Прошлым летом я получил приглашение Яндекса и перебрался работать в Москву. Привет, меня зовут Дмитрий, и я программист. Недавно мне исполнилось 35 лет.

Не ведущим архитектором, не тимлидом, не менеджером проекта, а именно программистом? В этой статье я хотел бы затронуть вопрос, который не раз обсуждался на Хабре: насколько реально быть программистом в 35–40 лет?

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

Давайте-ка их подробно рассмотрим. Я слышал несколько объяснений, почему программист — это якобы профессия для молодых.

Объяснение 1. Требует нервов и реакции

В зрелом возрасте на это уже просто не хватает сил». Нам говорят: «Программирование требует энергии, которая присуща только молодым.

Комплимент сомнительный. Программистам как бы делают комплимент, ставя их на одну доску с лётчиками-испытателями и космонавтами. Дамы и господа, посмотрите на этого человека: Кстати, я не случайно завёл речь именно о лётчиках.

image

Это — знаменитый Чесли Салленбергер, который в 58 лет стал героем США, посадив самолёт на Гудзон.

Например, игровая индустрия, где зачастую бывают кранчи: люди трудятся более 100 часов в неделю. Справедливости ради скажу: в программировании действительно есть сферы, где после сорока сложно, но не потому, что всё слишком заумно и тяжело, а в силу специфики конкретно этих сфер. Однако здесь вопрос скорее к компаниям, которые практикуют кранчи. Если в молодости такое ещё можно потянуть, то в 40 лет здоровье уже вряд ли позволит. Программист и в 40 лет может писать игры, просто не в таком изматывающем и вредном режиме.

Объяснение 2. Учиться, учиться и еще ещё раз учиться

Нам говорят: «Знания программиста постоянно устаревают, и к 30–35 годам то, что ты учил в вузе, уже может быть никому не нужно, а переучиваться поздно».

Профессия такая интеллектуальная и элитарная, что ты постоянно должен быть на острие прогресса. Опять же — вроде бы лестно звучит.

А 40-летних оттуда никто не гонит. Но есть и другие профессии, где надо непрерывно учиться.

Законодательство постоянно устаревает. Вспомним юристов. Более того, у них ситуация даже более жёсткая, чем у программистов. Это норма. А у юриста выбора нет: с выходом новой редакции Гражданского кодекса РФ он обязан её прочесть, запомнить и использовать. С выходом стандарта C++20 никто не уволит тех, кто писал на предыдущем стандарте, не потребует от них немедленно переучиваться.

Чтобы было понятно, до какого возраста должен учиться, к примеру, хирург, прочитаем мнение главного кардиохирурга страны Лео Бокерии: То же самое можно сказать о врачах: они вынуждены постоянно обновлять знания.

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

А значит, опыт здесь так же важен, как и в любой другой интеллектуальной отрасли. Обратите внимание на «людей интеллектуального труда» — программисты же к ним относятся, я надеюсь?

Я не педагог, не психолог и не нейробиолог, чтобы квалифицированно ответить на этот вопрос. Насколько человек вообще может осваивать новое в зрелом возрасте? Масса людей находится на острие прогресса и после сорока. Однако, как показывает практика, такое вполне возможно. Основные разработки он сделал после сорока пяти — вряд ли чисто на основе тех знаний, что получил до 30 лет. Если отвлечься от IT-индустрии, можно вспомнить того же Сергея Павловича Королёва.

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

Объяснение 3. Программист в 35 уже ничего стоящего не родит

Нам говорят: «Да, можно быть программистом в 35–40 лет, но ничего серьёзного такой программист уже не сделает».

Его создали Эккерт и Мокли. Тут следует начать с основ — с самого компьютера. Эккерту тогда было 25, а Мокли — как раз 35 лет.

Начнём с известного и авторитетного для программистов Дональда Кнута. Перейдём к тем, кто создал что-либо серьёзное после 35 лет. Чуть позже, в 1981-м, он создал концепцию грамотного программирования (literate programming). Первый вариант своей знаменитой системы TeX он разработал в 1978 году — когда ему было 40 лет.

Мартин Одерски родился в 1958-м и начал создавать язык Scala в 2001-м — после более чем десяти лет работы над языками Pizza и Funnel (и над GJ compiler, который стал прообразом javac). Перенесёмся в более близкие времена.

Андерс Хейлсберг написал первую версию компилятора Pascal в 1981-м, в 21 год. Вот ещё один пример программиста, который и в молодости был хорош, и в старости таким остался. А в 2012-м (в 62 года) Хейлсберг начал создавать TypeScript. C# он разрабатывал с 2000-го, когда ему было уже как раз под сорок. Я для интереса в своё время смотрел репозиторий этого языка — там от Андерса довольно много коммитов.

Более того, есть мнение, что возраст с 40 до 55 лет для специалистов инженерных профессий самый плодотворный, поскольку накопился опыт и ничто уже не отвлекает от работы: семьёй человек обзавёлся, дети успели вырасти…

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

Объяснение 4. Ты что, до сих пор не руководитель?

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

Мол, программированием можно побаловаться по молодости, но после тридцати надо заниматься чем-то серьёзным. Это самое оскорбительное объяснение.

Попробуйте сказать 50-летнему юристу: «У тебя всё ещё нет собственной юридической конторы?» Попробуйте сказать 50-летнему хирургу: «Ты всё ещё не заведующий хирургическим отделением?» Попробуйте, наконец, сказать Салленбергеру: «Посадил самолёт на Гудзон в 58 лет? Легко понять всю абсурдность этой точки зрения, если попробовать приложить её к другим профессиям. Нормальные люди в твоём возрасте давно уже собственными авиакомпаниями владеют».

Программист и менеджер IT-проекта — это разные профессии, хотя менеджеры зачастую и вырастают из программистов.

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

Откуда же взялся миф «Программист — профессия для молодых»?

В своё время я пытался это выяснить и выделил два источника:

  1. Ранняя эпоха программирования. Те самые романтические годы написания программ даже не на ассемблере, а на машинных кодах, причём не в нормальной IDE, а на перфокартах. Тогда разработка ПО была гораздо более трудоёмкой, нежели сейчас. И я охотно допускаю, что конкретно такой процесс проще всего выдерживали именно молодые.
    Однако сейчас ситуация изменилась. На дворе уже давно не пятидесятые, разработка не настолько тяжела.
  2. Сугубо российская специфика. В нулевые наступил золотой век Рунета: IT-сфера бурно росла, всё и вся автоматизировалось, каждое предприятие обзавелось собственной системой автоматизации документооборота, в страну пришли зарубежные конторы… Кроме того, это был славный период побед на конкурсах типа ACM. Тогда отрасль реально быстро развивалась. Можно было поработать программистом максимум пять лет после диплома, а затем дорасти и до руководителя проекта. Возможно, тогда-то и сложилось убеждение, что программист — это переходный этап в карьере.

Этому есть много причин, но самая важная, на мой взгляд, — демографический провал. Однако сейчас ситуация изменилась. Могу засвидетельствовать лично: в регионах уже в 2010-м дефицит кадров был очень острый. До Москвы мне довелось и преподавать в провинциальном вузе, и работать в провинциальных IT-конторах. Может быть, в Москве и Петербурге это не ощущается, но в остальных городах всё обстоит именно так. Молодёжи стало гораздо меньше, и вузы банально не могли поставить нужное количество программистов. Очевидно, что они не могут уйти на другие должности — кто программировать-то будет? Всех 30-летних программистов заменять некем.

Происходит ли это в столице — вопрос открытый. Демографический провал привёл к тому, что предельный возраст программиста в регионах начал незаметно, но неуклонно увеличиваться.

Советы студентам IT-специальностей

Чему учиться, чтобы в тридцать пять не оказаться за бортом и не жалеть о потерянном в вузе времени? Как относиться к своей профессии? Вот мои соображения.

  1. Не воспринимайте свою профессию как временную — иначе вам придётся несладко. Программисту надо тяжело учиться, а нельзя тяжело учиться тому, что ты не считаешь делом своей жизни: когда планируешь отдать ему лет пять максимум, а вот потом уже заниматься реально интересными вещами типа руководства проектами. Определитесь, собираетесь ли вы действительно всю свою жизнь быть программистом. Учтите, что если вы воспринимаете свою профессию как сугубо временную, то резко возрастает вероятность того, что вы освоите её поверхностно.
  2. Не пренебрегайте низкоуровневым программированием типа ассемблера и таким языком, как С/С++, особенно указателями. Если вы этого не освоили, то вы автоматически отсекаете себя от ряда областей разработки. Самый яркий пример — разработка ОС. Если вам кажется, что это очень нишевая область, то вспомните о компьютерной графике для игр: там это тоже есть. Или о драйверах для современных устройств. Да и вещи вроде nginx писать будет проблематично. В плане работы не забывайте, что практически на каждом предприятии — что у нас, что за рубежом — есть масса микроконтроллеров, а их вряд ли будут в ближайшем будущем программировать на Питоне.
  3. Не пренебрегайте функциональным программированием. Долгое время, особенно в девяностых, в эпоху расцвета ООП, этот стиль выглядел чем-то академическим, что на практике в работе обычного программиста не встречается. Всё изменилось примерно с середины нулевых, и Твиттер авторитетно подтвердит, что на Scala можно разрабатывать и высоконагруженные системы. Вообще концепции функционального программирования используются куда шире, чем думают многие студенты. Практически все языки программирования, появившиеся в мейнстриме в последние 10 лет, содержат элементы функционального программирования. Его концепции ещё долго будут проникать в разные сферы. От себя рекомендую курс Абельсона и Сассмана. Это классический курс MIT восьмидесятых, после которого современные языки осваиваются куда лучше.
  4. Попробуйте силы в спортивном программировании. Скажу честно: это самый неоднозначный совет. Спортивное программирование в силу своих особенностей (программа проходит набор автоматизированных тестов с ограничением по времени, но никто не проверяет стиль и продуманность архитектуры) поощряет небрежное написание кода. Однако с другой стороны — более интенсивное знакомство с алгоритмами вряд ли возможно придумать. Припомните, сколько лекций про графы и алгоритмы поиска на них было у вас в вузе? Две-три? Сколько раз вам приходилось применять эти знания? Тоже два-три раза? Не сравнить с опытом, полученным при решении пары сотен задач. Как и в любой работе, экспертом становишься в результате практики.

Вместо заключения

Главное — развиваться, не бояться нового и любить своё дело. После тридцати пяти вполне реально быть программистом и устроиться на работу — и не только на какой-нибудь завод на поддержку старой системы, но в современные IT-компании.

Согласны или нет? А что думаете вы? Какой опыт у вас?

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»