Как подполковник стал программистом
Андрей Ткаченко увлекся программированием еще в военном училище, но 25 лет посвятил службе в армии. По ее окончании, в 42 года, он решил вернуться к программированию и стал Software Engineer в Intetics. О своем карьерном пути он написал для DOU.
Служба
В мои семнадцать я тяжело представлял, кем хочу быть. Жизнь распорядилась так, что профессию выбирать мне надо было лет 30 назад, когда программирование сильно отличалось от того, каким мы его знаем сейчас. И хотя оно мне нравилось с точки зрения возможностей решения сложных задач, это направление не рассматривал серьезно в качестве будущей профессии. Программисты тогда работали в больших вычислительных центрах в машинных залах на перфокартах, магнитных лентах и барабанах. Это не было так привлекательно и интересно как сейчас :) Тот факт, что мой дед и дядя были военнослужащими, сыграл свою роль, и на семейном совете было решено поступать в военное училище. Свой интерес к программированию я смог реализовать, попав там в группу программистов.
Когда в училище на кафедре программирования появились первые ПК (EC 1840), я почувствовал «кайф», написав в качестве курсовой работы игру «Морской бой», а для сдачи зачета по матанализу — программу для моделирования прыжка с парашютом. Тогда я понял что, возможно, хотел бы заниматься этим в будущем.
Я закончил училище с красным дипломом и мне посчастливилось попасть в Военный научный центр космических исследований (при Харьковском военном университете), который взаимодействовал в том числе и с Национальным космическим агентством Украины. Я был вовлечен в очень интересные проекты, связанные с разработкой системы контроля космического пространства, специальной обработкой информации глобальных навигационных спутниковых систем. Эти проекты требовали как научного подхода, так и умения программировать. Именно там и пригодились не только мои научные знания, но и приобретенные на кафедре навыки программирования.
За 25 лет в армии я дослужился до звания подполковника. Службу проходил в нескольких местах: Военный научный центр космических исследований, Объединенный научно-исследовательский институт Вооруженных Сил, Харьковский университет Воздушных Сил им. Ивана Кожедуба. Также защитил кандидатскую диссертацию на тему «Первоначальное определение орбит космических объектов по радиолокационным и оптическим наблюдениям».
Программирование
Чем ближе было окончание службы, тем четче я понимал, что программирование — это реально то, чем мне бы хотелось заниматься после увольнения. Тем более, что я имел определенный опыт программирования на С++, а слова ООП, STL, паттерны не были для меня пустым звуком. Вместе с тем меня одолевали сомнения: достаточно ли моего опыта программирования, смогу ли я конкурировать с молодыми программистами, получившими современное образование, и которые, с большой вероятностью, лучше знают современные технологии, будет ли мой возраст играть против меня. Тем не менее года за полтора до даты моего увольнения я уже четко знал, что я сделаю все возможное, чтобы стать программистом, и имел более-менее сформулированный план по подготовке.
Чтобы определиться с технологией, я проанализировал рынок и пришел к выводу, что со знанием Java у меня открывается больше возможностей, чем если бы я углублялся в С++. Я понимал, что надо развиваться, и начал углубленно изучать английский, прошел курсы Java в Oracle Academy, начал программировать на Андроиде.
Английский я изучал постоянно (частные уроки, аудиокниги, фильмы, онлайн-курсы), начиная с уровня Pre-Intermediate в 2009 году и заканчивая получением сертификата САЕ в 2016 году.
Хотя во время службы на Java не приходилось писать, поставил себе цель изучить Java до такого уровня, чтобы быть готовым к сертификации SCJP for Java 6, для чего прошел четырехмесячные курсы в Oracle Academy.
Android же для меня был на уровне хобби. Мне просто нравилось писать программы для телефона, которые помогали мне в жизни. Как, например, при изучении английского: мне не хватало функциональности существующих аудиоплееров для изучения языка (нельзя было выделить несколько частей звукового файла и перемещаться между ними, многократно прослушивая каждый). Я написал собственный аудиоплеер, который решил эти проблемы, и даже были идеи довести его до PlayMarket. Всем этим я занимался около года, когда было свободное время.
Чтобы постоянно поддерживать свои навыки программиста в тонусе, а также понемногу «прокачивать» их, я сам придумывал себе задачи. Так, например, одна из программ, которую я написал, моделировала прохождение Луны по небу в определенную ночь (идея задачи родилась во время одной из ночных рыбалок).
Если я чего-то не знал или не понимал, то приходилось искать ответы на форумах и в книгах. В то время я больше читал книги, привязанные к определенным технологиям. Сейчас же, имея определенный опыт, могу сказать, что и книги, посвященные практическим законам разработки, такие как «Code Simplicity», не менее важны для развития.
В вопросе самообразования и самодисциплины мне очень помог армейский опыт. По крайней мере, я ставил перед собой четкие задачи и понимал, зачем мне это нужно и какие усилия нужно приложить для их достижения.
Работа
Наверное, мне повезло. Я не искал работу очень долго. Вакансию функционального программиста в Intetics мне подсказали друзья за месяц до увольнения из армии. По сути, это было первое место, куда я отправил резюме. Я был готов к тому, что чего-то не знаю, также понимал, что без определенного опыта проходить собеседования тяжело. Во время отбора основной фокус делался на умение быстро и качественно решить конкретную сложную логическую задачу, а не на знание/опыт в определенной технологии. Такой подход мне импонировал, я чувствовал в себе уверенность пройти тест и поэтому решил попробовать.
Тестовые задания были непростыми, но интересными — пришлось поломать над ними голову, но это как раз стимулирует найти решение. Заданий было два. Первое относительно простое, его я делал дома. Это обычная алгоритмическая задача для проверки понимания алгоритмов и структур данных. Для выполнения второго задания меня пригласили в офис. Оно показалось чуть сложнее: помимо знания алгоритмов пригодился опыт программирования и оформления кода. Второе задание у меня отняло часов восемь, но это время вписывается в стандартную норму выполнения. После собеседования меня пригласили на работу.
Когда я начал работать как программист, испытал приятный культурный шок. Контраст между армейскими дисциплиной и принципом единоначалия с одной стороны и душевной обстановкой в компании с другой — был разительным.
Начал я сразу с реальных задач, хотя и самых простых, вроде добавления элемента «Кнопка» в графическом редакторе. В начальный период главной задачей было освоиться с функциональным языком программирования (у заказчика он свой). Язык внутри проекта — Flow. Он закрытый, не open source и используется только у нас. Таких много, их называют DSL-языки, или Domain-specific language. Такие языки предназначены для специфических областей. Также предстояло смириться с тем, что ООП в общепринятом понимании не поддерживается, и разобраться с архитектурой уже написанного кода.
Очень понравилось то, что заказчик учитывает индивидуальные особенности каждого и дает возможность входить в проект в своем собственном комфортном темпе. Лично у меня ушел где-то месяц на «вхождение» в проект (по опыту коллег — в среднем так и происходит). Мне помогло изучение ресурсов по реактивному функциональному программированию (их достаточно много в сети), а также курс «Functional Programming in Scala» на Coursera. Я прошел этот курс немного позже, но считаю его очень хорошим с точки зрения знакомства с функциональным программированием. Сейчас новички проходят тренинговый курс из 10 задач, охватывающих разные аспекты использования языка.
За 3 года я дорос до тимлида одного из подпроектов. И снова свою положительную роль сыграл армейский опыт: навыки управления коллективами оказались востребованы для этой позиции. И, конечно, очень помогает сертификат CAE: такой уровень английского позволяет более-менее свободно общаться с заказчиками.
Сам проект длится уже довольно давно, мы постоянно расширяемся и набираем на него новых сотрудников. Иногда я выступаю в качестве их ментора — благо, полученные навыки и знания помогают мне успешно справляться с этой ролью. Да и я сам прекрасно помню, как начинал — так что могу с уверенностью говорить нашим новичкам, что понимаю их опасения и страхи.
Вывод
Когда я пришел в IT, мне уже было 42 года. Да, были определенные сомнения — тем не менее у меня все получилось и, более того, я продолжаю развиваться и расти. Для сомневающихся я могу сказать одно: пробуйте и будете удивлены, насколько все оказывается проще и легче, чем вы ожидаете. Разумеется, усилия прикладывать придется, но это применимо ко всем сферам, а не только к IT, которое зачастую кажется гораздо более требовательным, чем другие индустрии. Надеюсь, мой пример ясно доказывает, что никогда не поздно поменять что-то в жизни :) Главное, решиться.