«Every great developer you know got there by solving problems they were unqualified to solve until they actually did it.» - Patrick McKenzie

В апреле этого года исполнилось 10 лет, как я стал профессиональным программистом.

Отметить это событие я решил двумя постами:

  • ретроспективным: о моём становлении как программиста,
  • рекомендательным: какие советы я хотел бы дать тем, кто уже работает в отрасли, чтобы нам всем стало жить в эпоху бурного развития ИТ чуточку лучше.

В этом посте я расскажу:

  • С чего начался мой путь в программировании, и как я чуть всё не забросил в самом начале.
  • Через что я прошёл при обучении.
  • Какие выводы я сделал о работе в разных компаниях.

Первые шаги в программировании

Школьные годы

Я начал интересоваться программированием в старших классах школы. Одной из первых программ была программа на QBasic, которая рисовала простейшие геометрические фигуры на экране. После этого мне купили книжку по Turbo Pascal и я начал писать программы на нём. Немного игрался с Delphi. В 11 классе я уже второй раз участвовал в муниципальном этапе ВСОШа по информатике и занял первое место в Великом Устюге. Для подготовки к областному этапу преподаватель дал мне книгу Федора Меньшикова «Олимпиадные задачи по программированию». Посмотрев на задачи прошлых лет, которые разбирались в этой книге, я был просто в шоке от их сложности. Несмотря на подготовку, поездка на областной этап была для меня сильнейшим стрессом – я не смог решить ничего. После возвращения домой депрессия была настолько сильной, что я решил больше и не пытаться заниматься программированием и пойти учиться просто на системного администратора в тогдашний ВоГТУ. Но внезапно подвернулся удачный случай и я попал на «Прикладную математику» ВГПУ по специализации «Защита информации» – это направление казалось мне тоже интересным с хорошими перспективами трудоустройства.

«Choose Your Destiny!»

В момент поступления я наивно полагал, что учиться буду технологиям и мало знал о реальной специфике «ПриМата» – огромное количество сложного матана для неподготовленного школьника. Учёба стала для меня настоящим испытанием. На фоне подавляющего большинства сокурсников, которые закончили приличные физмат школы или просто имели явную предрасположенность к математике, я выглядел откровенно жалко. Там, где для других всё было «очевидно» (это слово я начал дико ненавидеть именно в студенческие годы) и обучение шло чуть ли не играючи, я еле поспевал за программой обучения. Отдушиной для меня стали занятия по программированию, где у меня получалось хоть как-то не чувствовать себя человеком «второго сорта». Поняв, что в математике мне преуспеть не судьба, я сконцентрировал всю свою энергию именно на них. В конце первого курса преподаватель, видимо оценив моё рвение, посоветовал мне записаться на курсы олимпиадных задач к Федору Меньшикову. Таким образом я опять вернулся к теме олимпиадной информатики, но к тому времени был уже максимально мотивирован добиться успеха хотя бы в них.

Олимпиадное программирование в универе

Всё лето после первого курса я провёл в тренировках под руководством Фёдора Меньшикова: вернулся к чтению его книги, решения задач писал на Java. Осенью 2-ого курса я начал решать задачи из архива задач acm.timus.ru и первый раз участвовал в Центральном четвертьфинале ACM ICPC NEERC. Последующие 4 года в универе я полностью сконцентрировался только на программировании: это единственное, что у меня хоть как-то получалось, несмотря на то, что хороших результатов на соревнованиях я так и не достигал. Но, в отличие от провала в школе, я почему-то не лишался мотивации раз за разом видя свои ничтожные результаты после этих пятичасовых марафонов. Возможно это из-за того, что счетчик решённых задач между соревнованиям всё-таки непрерывно увеличивался, задачи стали потихоньку поддаваться и на соревнованиях. Олимпиадная тусовка по программированию в ВГПУ была очень небольшая: участники областных олимпиад школьников по информатике практически перестали поступать к нам, мои сокурсники интереса к этой деятельности тоже не проявили (что мне казалось очень странным с их-то математической подготовкой), старшекурсники уже активно думали о будущей работе. В какой-то момент я остался практически единственным, кто активно тренировался.

Начало профессиональной карьеры

В 2011 году я пошёл на пратику в R-Style Softlab зная Java по опыту решения олимпиадных задач на ней. Многие в индустрии наслышаны о том, что бывает, когда бывший олимпиадник начинает писать промышленный код. Но мне с самого начала тренером была привита практика максимального внимания к качеству кода в олимпиадных задачах: выбор максимально понятных имён переменных, хорошая структурированность кода. Всё это позволяло снижать когнитивную нагрузку при чтении кода (её и без того много на олимпиадах 😄) и устранять большой класс ошибок в коде ещё в зародыше. Это позволяло быстрее и «чище» сдавать задачи, тем самым подниматься на более высокие строчки рейтинга.

На работе я стал уже больше погружаться в современные технологии. В это время начинаю активно читать книги по профессиональной разработке, оптимизации производительности, многопоточному программированию, с которым приходилось сталкиваться на работе. Несмотря на новые сложные темы, изучение нового не было большой проблемой: внимание к деталям, умение «копать вглубь», разбираться в строгих доказательствах корректности алгоритмов – через всё это я уже проходил при подготовке к олимпиадам. Весь опыт я применил в своей первой большой программе (около 8k LoC) – системе автоматической проверки олимпиадных задач, которую защитил в качестве дипломного проекта.

Последний год участия в олимпиадах

После окончания специалитета я решил поступить в магистратуру. С одной стороны мне хотелось использовать последную попытку участия в ACM ICPC, с другой – мне была предложена интересная тема для исследований в области кластерного анализа данных. О том, как я готовился к последнему моему сезону в ICPC, можно почитать в архиве блога.

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

Первые выводы об IT

Первые 4 года я отработал в большой компании – «R-Style Softlab», где мы разрабатывали интернет-клиенты для банков. На ней я понял:

  • Насколько слаженная работа большого числа людей требуется, чтобы доносить качественный софт до конечных пользователей.
  • Насколько всё может не получиться, если разделять людей на элиту aka «разработчики ядра» и обезъянок aka «прикладные разработчики».
  • Насколько дорого обходится строительство «велосипедов», авторы которых потом ещё и «берут в заложники» весь отдел.
  • Насколько сильно soft skills могут влиять на продвижение людей по карьерной лестнице в большой компании.

После этого я перешёл в небольшой стартап – компанию «Smilart», где мы занимались лицевой биометрией. За следующие 4.5 года тут я понял про другие особенности работы:

  • Постоянное повышение квалификации – это то, без чего в ИТ будет сложно не только «дорожать», но и просто оставаться востребованным специалистом.
  • «Слишком современные технологии» бывают очень кусачими.
  • Единение целей бизнеса и амбиций технических специалистов очень важно, чтобы отрасль не продолжала пугающими темпами перерабатывать ценнейшие ресурсы (время и деньги) в г@вно.
  • Необходим контроль за условиями работы и умение отстаивать свои права.
  • Задача руководителя – построение команд и поддержание хорошей атмосферы в коллективе.

Более подробно о результатах работы можно почитать в моём cv.

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

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