Обложка: Моя история в IT: как я из химика стал программистом

Моя история в IT: как я из химика стал программистом

Евгений Бакланов

Евгений Бакланов

младший Java-программист в CDEK IT

Мой опыт – это не гайд по трудоустройству или success story, а скорее что-то в стиле «Вредных советов» Остера. Однако в этом есть два позитивных момента:

  1. Если уж мне, со всеми моими ошибками и недоработками, удалось устроиться программистом примерно через полгода после начала обучения, то может быть и у вас получится?
  2. Прочитав это, вы можете не совершать моих ошибок.

В детстве у меня было 2 мечты: стать программистом и ученым. Программистом, потому что мама была программист, а папа – системный администратор. Знакомство с компьютерами произошло на работе у мамы, мне тогда было лет 6. На работе очень быстро были обнаружены компьютеры, а на компьютерах – Warcraft II. Я был в восторге.

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

Но мечта стать программистом отошла на второй план после поступления в Специализированный учебно-научный центр при Новосибирском государственном университете и сменилась мечтой стать ученым-химиком и спасать мир. Но к концу обучения оказалось, что на зарплату ученого мир особо не спасешь. Я устроился в одну из компаний-резидентов Академпарка и следующие 5 лет работал инженером-химиком.

На каждой работе случаются такие дни, когда задумываешься, а не сменить ли эту самую работу. Ты заходишь на какой-нибудь сайт с вакансиями, чтобы посмотреть, а что еще там на рынке труда есть. Тут внезапно оказывается, что инженеры-химики не особо-то и нужны. Разница между вакансиями по запросу «химик» и «программист» была больше даже не на порядок, а на полтора. Я подумал: «в некотором роде ученым я уже был, пора воплощать вторую мечту детства».

Брат посоветовал школу программирования: она находилась недалеко от дома и имела отличные отзывы. Оплачивать можно было частями в течение курса. В школе преподавали Java и C#. Про C# я знал только, что он используется при разработке компьютерных игр, а в России это не очень развито. К тому же все знают, что «3 Billion Devices Run Java», а значит без работы не останешься. Выбор был очевиден. Идти на курсы или обучаться самостоятельно я тоже особо не раздумывал – деньги позволяют, почему бы и не заплатить за курсы: прогресс с преподавателем быстрее, чем в одиночку.

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

Весь курс превращения простого человека в программиста включал в себя 4 части:

  1. Основы программирования на Java.
  2. Объектно-ориентированное программирование на Java.
  3. Клиентская веб-разработка (HTML, CSS, JavaScript).
  4.  Серверная веб-разработка на Java.

Полное прохождение занимает примерно год. Я успел пройти только первые две части. Через полгода обучения времени и на работу, и учебу стало не хватать, на работе предложили новую должность. Пришлось выбирать. Выбор, естественно, пал на программирование. Начальник очень удивился – редко бывает, что сотруднику повышение предлагают, а он приходит с заявлением об увольнении.

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

Мой честный стек технологий тогда был примерно таким: Java, ООП, SQL, Git, IntelliJ IDEA, Maven. Я даже сходил с этим на несколько собеседований. Продвигалось как-то не очень: либо компании были сомнительные, либо предлагали заниматься чем угодно, кроме программирования.

Как говорится «Fake it till you make it», поэтому я приписал к своему стеку Spring, Hibernate и JUnit и стал отправлять резюме на все вакансии, где было написано Java-программист. Даже туда, где у меня вообще не было шансов пройти. В конце концов, мало ли, может у них и в джуне потребность есть, просто опубликовать забыли. Это была правильная тактика – появлялись компании, которые связывались со мной.

В итоге нашлась компания (это было еще до CDEK IT), которая дала мне тестовое задание на Java Core: просканировать директорию, найти все текстовые файлы, посчитать в них символы, отсортировать по частоте встречаемости и вывести результат в новый файл (подобное задание на подсчет символов и сортировку по частоте встречается достаточно часто). Я сделал это задание и использовал всю мощь своих знаний: накрутил ООП, писал логи (правда через System.out.println – не надо так), использовал switch-case, приделал где-то сбоку недавно выученный singleton и написал ко всему этому на GitHub инструкцию на английском, как работает эта махина. Накодил так, что напрочь отбил моим будущим интервьюерам желание разбираться в этом творении. Собеседование началось с того, что мне дали ноутбук, воткнули в него флешку и сказали: «Показывай, как это работает». Я показал, оно работало. Это был еще не конец, но уже маленькая победа.

Интервьюеры сказали, что не будут комментировать мой код, немного погоняли по Java, спросили про паттерны. Затем начали спрашивать про те самые английские слова у меня в резюме. Про Hibernate я ответил, что он нужен для того, чтобы ходить из Java в БД более удобно, чем при помощи дефолтного джавового JDBC. После этого меня спросили об особенностях реализации ORM в Hibernate, ответа я, конечно же не знал. Про Spring я наплел что-то вроде «использовал в учебном проекте, но толком рассказать ничего не смогу». Когда интервьюер спросил: «Ну а что вы можете рассказать о JUnit?», я искренне удивился: «А я и JUnit в резюме написал? Какой молодец».

Несмотря на всю дикость приемов, которыми я пытался покорить «экзаменаторов», мне дали еще одно тестовое задание, и сказали, если справлюсь, то возьмут меня на работу.

Второе тестовое: разработать портлет для отображения списка пользователей портала на платформе Liferay (под эту платформу разрабатывала компания). Дали примеры и доку по созданию портлетов. Не скажу, чтобы мне понравилось погружаться в незнакомую платформу и не то, чтобы это было просто. Пришлось пройти все 7 стадий принятия, но мне все-таки удалось создать портлет, заставить его выводить список пользователей, и даже справиться еще с кое-какими неочевидными пунктами задания. Хотя, конечно, на этом этапе все пункты задания казались неочевидными.

Уже через час после отправки решения начался небольшой торг с HR-ом по поводу зарплаты и через пару дней мне сделали оффер.