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

в 7:04, , рубрики: Блог компании Яндекс, возраст программиста, Карьера в IT-индустрии, обучение, Программирование, Разработка веб-сайтов, разработка мобильных приложений

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

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

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

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

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

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

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

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

image

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Шевченко Дмитрий

Источник


* - обязательные к заполнению поля