В 38 лет из управленца в разработчики: спасибо TopJava
Я далеко не сразу понял свое призвание. И путь к этому пониманию был очень неоднозначный, если не сказать тернистый.
Специализация, которую я получил в вузе, даже для нетехнических профессий является достаточной экзотичной: государственное регулирование экономики. То ли менеджер, то ли экономист.
После вуза я поступил на службу в таможенные органы. В общей сложности службе я отдал 12 лет. И большую часть этого времени я изредка вспоминал о своем настоящем интересе. Успел защитить кандидатскую диссертацию по экономике. Но именно последовавшее за этим увлечение наукой помогло мне вернуться к поискам призвания. Я задался целью построить сложную нелинейную модель экономического развития. Все свободное от службы время штудировал различные разделы высшей математики, эконометрику, сетевые модели и прочие интересные вещи. В ходе этих изысканий я понял, что модель имеет такую сложность, что для ее построения и использования требуется написание компьютерной программы. Тогда же я начал использовать на работе SQL для анализа данных. К тому моменту деятельность возглавляемого мною подразделения в таможне была настолько налажена, что я мог всего пару часов в день отводить на управление, а в оставшееся время упражнялся с SQL и математической статистикой.
Последовавшее увольнение из таможни заставило меня задуматься о профессиональном выборе. Правда тогда я пошел по пути наименьшего сопротивления и устроился в один из питерских вузов преподавателем. Почти сразу же назначили заведующим кафедрой. Но сколько волка ни корми он все в лес смотрит. Я захотел создать программное приложение для семинаров – в рамках так называемой геймификации учебного процесса. Стал изучать Delpi. Дело не очень ладилось – сказывалось отсутствие опыта и требуемой базы. Да и понял потом, что не имеет смысл изучать «мертвую» технологию.
Потом попытался развить бизнес, связанный с разработкой обучающих мобильных приложений. Вот тогда и состоялось мое первое знакомство с Java. Программировал я не сам, а мой партнер по бизнесу. Но я посчитал, что для ведения бизнеса в IT-сфере надо иметь хотя бы немного самому разбираться в разработке. Для знакомства с джавой я выбрал курсы "Level Up". Занятия проходили в аудитории два раза в неделю. Толку от них было не очень много. Проходили они, преимущественно, в лекционной форме. Немного практиковались в классе. Давали достаточного много домашних заданий. Но их почти не проверяли, поскольку в таком режиме это было невозможно тем, кто работал в пятидневку. Первое занятие было во вторник, второе – в четверг. В распоряжении оставался только вечер среды, когда ты усталый вваливаешься домой после работы. Хотя после четверга было еще 4 дня на работу дома, но это уже не имело особого значения, так как занятия с прошлого вторника не были толком проработаны. Ревью кода как такового я тоже не припомню. В результате я научился только писать в консоли сортировку пузырьком. Обо всей остальной базе – ООП, статические поля/методы, коллекции – я имел весьма смутное представление. А абстрагирование, интерфейсы я не понял тогда от слова «совсем».
Бизнес в итоге не задался. Компанию закрыли. И тогда же я решил приступить к плану Б. Он состоял в том, что я смогу сам поддерживать разработанное партнером приложение. Оно мне представлялось эдакой коровой на вольном выпасе. Висит себе, понимаешь, в GooglePlay, а деньги от встроенных покупок капают на счет. А если вылезут какие-то баги, то мне хватит джава-квалификации их пофиксить. Так мне тогда представлялось в наивных мечтаниях. Но реальность расставила все по своим местам. Баги не заставили себя ждать. Причем, самые жесткие – к примеру, пользователи оплачивали покупки, но не получали требуемую услугу. Когда я попытался влезть в код, то сразу понял, что со своими джунскими навыками мне очень долго придется разматывать то, что наворотил мой бывший партнер (как он сам выражался, «нахреначил»).
Тогда я решил заняться созданием новых мобильных приложений с нуля. Мне показалось это будет легче, чем разбирать чужой грязноокод. Проштудировав пару книжек по андроиду, я написал свой первый собственный грязнокод. Параллельно я вернулся к свой старинной задаче по созданию нелинейной модели экономики. Теперь уже на Java. Это были первые шаги на пути к разработчику. Но по-настоящему профиль начал оформляться, когда я осознал, что для моего мобильного приложения нужна серверная часть. Сейчас кажется смешным, что тогда я хотел сделать это «на ход ноги», так как основной задачей виделось создание приложения для андроида. Далее, по мере погружения в сервлеты, базы данных, Hibernate, JavaScript, я понял наконец, что моим профилем является бэкэнд-разработка. Задача оказалась не совсем «на ход ноги», поэтому я обратился за помощью по доработке кода на биржу фриланса. После нескольких консультаций удалось собрать небольшое веб-приложение для новостного портала. Тогда же было принято окончательное решение стать Java-разработчиком.
К тому моменту мне казалось, что я уже имею достаточную квалификацию для устройства на позицию джуна. Вроде разобрался, наконец, с интерфейсами, изучил некоторые паттерны проектирования, изучил в общих чертах взаимодействие клиента и сервера, основы многопоточности, даже соприкоснулся с лямбдами. Нужно только изучить «модный молодежный» спринг и можно размещать резюме на hh. Незадолго до этого специалист, который консультировал меня по созданию новостного портала, посоветовал мне курсы TopJava. Он сам разместил историю успеха по окончании этих курсов.
Переход в новую профессиональную сферу требовал проработки стратегии, ведь я уже не холостой выпускник вуза, перед которым все двери открыты. Подрастают двое детей, и я отвечаю за их материальное благополучие. С другой стороны, требовалось время на подготовку в рамках курсов и последующий поиск работы, участие в собеседованиях. Исходя из этого, я запланировал присоединиться к курсам в мае. Летом отпуск, да и работы меньше. С сентября перевожусь на должность простого преподавателя. Расписание позволяло появляться в вузе раз в неделю – оставшегося времени должно было хватить на поиск работы.
Но получилось не совсем так, как я задумал. После двух попыток решить вступительное задание курсов TopJava, мне порекомендовали сначала пройти курсы BaseJava. Для меня новость о том, что надо «спуститься» на ступень ниже стала почти шоком. За этим последовала череда сомнений в правильности профессионального выбора. 37 лет, без технического образования – а может уже поздно? Или изначально я переоценил свои возможности/способности. К слову, для меня всегда очень трудно давался счет в уме. Да и большой внимательностью я не отличался. Тесты фиксировали хорошую невербальную логику и лингвистические способности. Но достаточно ли этого программисту? Все эти внутренние колебания переросли в невроз, который, в свою очередь, проявился в приступе панической атаки.
Впрочем, справившись со стрессом, я начал курсы BaseJava. Обстоятельства изменились, но стратегия еще действовала. TopJava переносилась на осень, когда я все-равно буду простым преподавателем. С другой стороны, я только тогда понял, насколько полезным был старт обучения на базовом курсе. Оказалось, что я в самообучении упустил многие фундаментальные вещи. К примеру, не понимал, чем принципиально отличается применение List от Map, когда следует использовать поля класса, а не аргументы методов, в чем преимущество статических полей. Выяснилось, что я не до конца понимал практическую ценность наследования и весьма в общих чертах представлял себе полиморфизм. А с юнит-тестами я познакомился только на BaseJava. И что особенно замечательно проверка домашнего задания сопровождалась долгожданным ревью кода. Именно тогда куратор Ирина мне привила «аллергию» на дублирующийся код, за что ей низкий поклон. В среднем я справлялся с выполнением домашних заданий за неделю. С такой скоростью я должен был успеть к началу осеннего потока TopJava. Но первый серьезный вызов я встретил на 7 уроке, в котором надо было построить объектную модель с учетом полиморфного обращения со структурами данных. Эту задачу я решал две с половиной недели. К исходу этого срока я не выдержал и обратился за подсказкой к другим участникам курса за помощью. В итоге это очень важное задание помогло мне выработать навык построения каркаса приложений и обращения со структурами данных. Но в душу опять закралось проклятое сомнение – почему я не доделал это задание сам без подказок?! Последующие задания тоже оказались непростыми. В частности, сериализация, стримы, устранение дублирующего кода с помощью интерфейсов. Я двигался со скоростью один урок в 3 дня, но уже с частым обращением за помощью к сокурсникам. Нарастающие внутренние сомнения спровоцировали новую волну панических атак. Только теперь она оказалась гораздо сильнее и продолжительнее. В общей сложности эти состояния отравляли мне жизнь почти 5 месяцев. На фоне этих неприятных ощущений близилось завершение BaseJava. И здесь хочу отметить еще один положительный момент курсов – когда на одном из завершающих заданий нужно было применить дебагер браузера, я решил попытать куратора, как этим пользоваться, за что «получил по голове». Мне дали понять, что в среде разработке не принято задавать лишние вопросы – надо сначала основательно погуглить, использовать форумы, а только потом уже доставать коллег. В этом плане курсы помогли мне впоследствии избежать многих ошибок джунского поведения на работе.
Повторное выполнение вступительного задания для TopJava далось мне не очень просто, что, опять же породило новые сомнения. Панические состояния привели к тому, что я стал бояться спускаться в метро, оставаться дома один, отдаляться от дома на расстояние более километра – мне казалось, что случится сердечный приступ. Один раз даже ночью вызывал скорую. Я далеко не сразу понял, что эти состояние являются следствием моих внутренних колебаний. Страхом, который я вытеснил куда-то в подсознание (или как это еще там происходит). А боялся я все того же. 38 лет. Образование непонятно какое. Коммерческого опыта нет. Возьмут ли меня куда-то? А если возьмут, то справлюсь ли? А ведь мне надо семью кормить. И все в таком же духе.
Пришлось проводить серьезную работу над собой. В этой связи кураторы Григорий и Максим очень кстати в онлайн-семинаре перед началом майского курса TopJava советовал начинающим разработчикам соблюдать режим, высыпаться, уделять время прогулкам, не забывать о хобби. Все это мне и пришлось применять на практике. После многолетнего перерыва в физической активности занялся восточными единоборствами, стал больше времени уделять семье. Поработал и над головой – для внутреннего успокоения утвердил план Б. А именно: если не получится стать разработчиком, попытаюсь стать системным или бизнес-аналитиком – ведь тоже сфера IT, хоть и с другой стороны.
Постепенно состояние улучалось, и я активно изучал модули TopJava (с решением домашних заданий). Благодаря курсу я познакомился со Spring, глубже изучил Hibernate и открыл много нового. Так, для меня открытием стал REST, а также авторизация и аутентификация средствами Spring. Тогда только я понял, насколько было ужасным было мое первое приложение для новостного портала.
На предпоследнем занятии я разместил вакансию на hh. Поиск длился не очень долго, да я и не ставил высокую планку, поскольку сделал ставку на получение коммерческого опыта любой ценой.
Устроился на небольшое текстильное предприятие Дримвайт. С первых же дней мне поручили спектр задач, смежных с DevOps, а не с разработкой. В частности, до этого я никогда не сталкивался с Докером. Было очень трудно. После развертывания окружения с нуля, мне поручили с нуля же создать микросервис, целью которого является агрегирование данных из других модулей. То, что я тогда чувствовал, оказалось, прекрасно вписывается в так называемый синдром мошенника. Но я справился. А огромная заслуга TopJava здесь состояла еще и в том, что для создания микросервиса я почти полностью взял за основу проект TopJava. На самом деле, только используя эту заготовку, я и понял до конца то, о что мы изучали на TopJava. В итоге я начал получать истинное удовольствие от работы. Ходил на нее, как на праздник, даже несмотря на то, что с зарплатой эти ребята меня немного кинули.
Далее, последовали известные события с пандемией. Всех перевели на удаленку. Зарплату еще срезали, правда, и работы новой не поручали. То есть были созданы все условия для поиска новой работы. В этот раз я искал работу более обстоятельно. Тем более, что я не ожидал, насколько этот процесс будет интенсивным. Поступало по нескольку откликов на вакансию в день. Каждый же день проходили собеседования – а иногда и по нескольку интервью в день. В течение месяца я нарастил хороший навык прохождения технических интервью. Не буду здесь подробно на этом останавливаться – это тема для отдельной статьи. Главное, что в итоге я нашел работу в приличной организации. Речь идет о питерском офисе ФГУП НИИ «Восход», который вовлечен в разработку модулей в рамках крупных государственных заказов. Поскольку это новое подразделение, то ему еще не присущи болезни крупной государственной организации. Работа идет по agile в команде молодых, очень грамотных ребят. Регулярно проходит код-ревью. График – гибкий, зарплата достойная. При этом, разработка не сводится, собственно к написанию кода: каждый программист может выступать в роли мини-архитектора, участвуя в проектировании ключевых компонентов приложения. Уже успел проявить себя, скрестив паттерн построителя с шаблонным методом через функциональные интерфейсы, которые мы применяли еще на BaseJava. А еще я убедился в важности заключительных занятий TopJava, в которых изучали front-end. Бывало, некоторые участники курса сетовали не перекос в сторону «клиентской» разработки. А я теперь наоборот жалею, что не успел осилить «клиентскую» часть TopJava, поскольку на текущей работе в «клиента» приходить вникать очень много.
Спустя 3 месяца закончился испытательный срок и меня повысили до разработчика первой категории.
В общем, я считаю, что пройденные курсы мне очень здорово помогли в реализации моего профессионального выбора.
И я желаю всем, кто решился стать разработчиком, верить в себя и ничего не бояться.
Андрей, 02/08/2020