Всем привет! Было трудно вспомнить и структурировать все периоды и моменты, потому что мой путь в профессию довольно сильно растянулся. Статья получилась не самой короткой, так как я постарался рассказать обо всех аспектах пути продолжительностью почти в 4 года. Как говорится, запасайтесь чаем, приятного чтения :-)
- Первые шаги
- Знакомство с Хекслетом
- Что мне дал универ
- И снова Хекслет: как я оценил мощь проектов
- Вторая неудачная попытка и отчисление
- Прокрастинация, немного депрессии и первая работа
- Работа
- Итоги
Первые шаги
Думаю, стоить начать с первых попыток «потрогать» программирование. Это было примерно в 9 классе. Не помню, почему, но у меня появился интерес, и я полез на YouTube. Первое видео было о С++. Не понял абсолютно ничего, испугался этой магии и выключил.
Через некоторое время наткнулся на канал «Хороший программист». Там ребята топили за Ruby, и я принялся изучать его по их видео. Как сейчас помню puts "Hello World!"
. Счастью не было предела. Но я быстро очнулся, когда следующим уроком были переменные, объекты и if-else
. Буквально впал в ступор. Забавно сейчас вспоминать это :-)
Чем дальше, тем больше я не понимал, поэтому со временем забросил обучение.
Затем был период учёбы на HTMLacademy. Позанимался там не больше пары месяцев. Заполнил шкалу обучения на 30 % и понял, что вёрстка мне не интересна.
Знакомство с Хекслетом
В июне 2017 года каким-то образом наткнулся на Хекслет, он сразу зацепил меня. Фронтендом я не хотел заниматься, поэтому выбор пал на профессию «Бэкенд JavaScript». Прошел все бесплатные уроки и 28 июля оплатил подписку.
В процессе обучения мой мозг не раз ломался. Порой ощущал себя неспособным к программированию, и это мягко говоря. Но когда что-то начинает получаться, когда ты видишь зеленые тесты... Когда задачу решаешь весь день, думая о ней за обедом, на улице, перед сном, а придумав что-то, берешь телефон и записываешь в заметки, а потом проверяешь решение, и оно работает — испытываешь неописуемое удовольствие. Забываешь, что что-то не получалось. До очередной сложной задачи, естественно. И так по кругу :-)
Момент радости
Так я занимался до конца августа. Прекратил обучение, так как начинался десятый класс, и я хотел сфокусироваться на экзаменах, чтобы поступить на бюджет и уехать из своего небольшого города. Собственно, у меня это получилось. Довольно неплохо все сдал и поступил в питерский политех, на специальность математика и компьютерные науки.
Что мне дал универ
Как и следовало ожидать, в универе было много математики. Программирование у нас началось на C, а во втором семестре перетекло в C++. Раз в неделю проходили лекции, и раз в неделю была сдача лабораторных работ. Лабы сами по себе были несложные, но вот преподаватель, который их принимал — ох... Как раз из-за этих лаб из 46 людей отсеялась почти половина.
Проблема была больше в самих студентах, ведь преподаватель просто хотел, чтобы люди отлично понимали базовые вещи. Сначала я тоже не совсем понимал такой подход, но со временем проникся. Как сейчас помню это окошко с памятью в VisualStudio, указатели. Как нужно было понять, сколько выделится памяти под переменную, на сколько будет сдвиг и так далее. Сейчас я благодарен данному преподавателю, хоть С/С++ мне пока не пригодились в работе, но для общего понимания это очень даже полезно.
В октябре я вновь оплатил подписку и вернулся на Хекслет. Конечно, за 2 года забыл большую часть информации, почти заново пришлось проходить все. Повторил многое и даже успел пройти новые курсы. Остановился где-то на «Последовательностях», затем снова отодвинул Хекслет, так как приближалась зачетная неделя и сессия, которую я вскоре сдал. В конце февраля 2019 года снова стал учить программирование.
И снова Хекслет: как я оценил мощь проектов
На этот раз был настроен серьезно. Думал, точно не брошу Хекслет, пройду пару проектов и наконец найду работу. Спойлер: я снова обо***лся, хоть и не сразу.
Не всё и не всегда идёт гладко
В начале марта завершил первый проект, а через месяц и второй. Понял, что проекты — это действительно круто и интересно. Проект структурирует весь пройденный материал. Иногда возникали сложности, но менторы помогали во всем разобраться, спасибо им.
Где-то между первым и вторым проектом я начал мониторить вакансии на HH, присматриваться к рынку, добавлять что-то в избранное. В какой-то момент понял, что для джунов очень много вакансий на PHP, а вот на ноде, чтобы онли бэкенд без фронта — таких вакансий маловато. После окончания второго проекта перешел в профессию «PHP-программист».
Первая попытка найти работу
В середине апреля наткнулся на вакансию: офис, Питер, онли бэк на ноде. В общем, мне всё подходило. Написал эйчару, девушка отправила мне тестовое задание на почту. Вот как оно выглядело: «Сделать веб-приложение, при открытии надо показать кнопку авторизации, по нажатию она делает oauth-авторизацию ВКонтакте и показывает имя авторизованного пользователя и 5 любых друзей пользователя». При последующих запусках заходах на страницу приложение сразу показывает всю информацию, так как запоминает авторизацию.
Я снова вернулся к JavaScript, начал в спешке проходить курсы по Express, HTTP Server. В итоге почти до конца доделал задание, оставалось запоминать авторизованного юзера. Спасибо парню из слака, который помог разобраться с oauth, так как были сложности с токеном.
Я осознанно не стал доделывать до конца, так как вновь приближалась сессия, к тому же, были куплены билеты домой, а работа была бы в офисе в Питере. В тот момент пожалел, что метнулся в PHP, так как за это время успел бы пройти нужные курсы по ноде и быстрее выполнить тестовое задание, не купил бы билеты домой и, возможно, проработал все лето программистом, а не курьером на доставке роллов, как это было в итоге.
Вторая неудачная попытка и отчисление
Весь сентябрь и половину октября сдавал долги и экзамены за второй семестр, поскольку весной большую часть времени сидел на Хекслете, а по ночам играл в CS. Соответственно, в универ ходил редко. Уже в тот период появились сомнения по поводу высшего образования.
Параллельно со сдачей долгов пытался найти работу. Заметил, что осенью почему-то гораздо меньше вакансий, чем весной. Подвернулась вакансия fullstack-разработчика (React + Express). Несмотря на то, что вакансия с моим нелюбимым фронтом, решил откликнуться. Через некоторое время мне позвонил HR. Я как раз в этот момент сидел на паре. Собеседник начал спрашивать о HTTP, DNS, JS. Я ответил правильно примерно на 70 % вопросов. Этого хватило, и мне отправили тестовое задание.
Нужно было сделать чат с комнатами: очень урезанная версия слака. На самом деле, задач там было не так уж и мало, особенно, для человека, который не знает React и сокеты от слова совсем. Побежал оформлять подписку и изучать React и Redux, параллельно читая документацию по socket-io. Задание было рассчитано на неделю. Чат был сделан и сдан с опозданием в пару часов. Мне дали фидбэк по тестовому и пригласили на очное собеседование.
Встретил HR и провёл в переговорную, где я ожидал директора компании. Естественно, волновался. Сначала были общие вопросы по типу «почему именно программирование», «почему js». Затем алгоритмическая задача, какая конкретно, не помню. Помню лишь, что я дико затормозил. Хотя конкретно такие задачи всегда щелкал легко.
Наверное, на меня никто и не давил, я сам загонял себя в рамки. Но чувствовал какое-то давление, будто нужно ежесекундно решить задачу и притом оптимально.
Конечно, предложил какой-то вариант, но он явно не был оптимальным. Затем собеседующий попросил оценить через big O сложность моего решение, и здесь я снова ошибся, хотя через пару минут до меня дошло, но было уже поздно. Начались другие вопросы. Говорили о Linux и TCP. Процентов 70 по Линуксу я вообще впервые слышал.
В целом всё было не так плохо. Директор сказал, что я не безнадёжен и неплохо знаю для второкурсника. Но если он сейчас позовёт тимлида, и тот начнёт задавать вопросы по коду, то, скорее всего, меня раздавят. Я согласился с этим, хотя в глубине души понимал, что на вопросы по коду отвечу лучше, чем на вопросы по Linux и TCP.
В общем, мне дали список must-have литературы и сказали приходить, когда почувствую, что готов. Неделя, две, месяц, как мне удобно, меня ждут. Не знаю, правда бы меня взяли через месяц. После интервью не был разочарован. Наоборот, у меня остались только положительные впечатления, я был замотивирован двигаться дальше, изучать новое, копать глубже.
И тут я понял, что больше не могу разрываться между универом и желанием работать. Нужно было выбрать что-то одно, потому что конкретно на моей специальности, на втором курсе, невозможно было совмещать фултайм-работу и учиться. Хорошо подумав, выбрал перспективу найти работу программистом.
Почувствовал самую настоящую свободу: больше не нужно было посещать универ, беспокоиться по поводу долгов и так далее. Тот самый вкус свободы после 11 лет школы и не самого легкого года в универе. Это было самое начало ноября.
Прокрастинация, немного депрессии и первая работа
В первые недели после собеседование я продолжал заниматься на Хекслете, даже пару раз ходил в библиотеку, чтобы в тишине почитать про Linux. Казалось бы, полная свобода, куча времени, почти никаких обязательств, разве что перед самим собой. В общем, делай что хочешь, занимайся сколько хочешь, но не тут-то было. Началась какая-то дикая прокрастинация: я сидел до 6-8 утра, занимаясь абсолютно бесполезными вещами, которые вообще никак не связаны с программированием, а потом спал до 16:00. Так прошел почти весь ноябрь.
Так как нужно было на что-то жить, я почти устроился барменом в ночь, уже должен был выходить на смену вечером в понедельник. Но ещё в пятницу мне позвонила девушка, спросила актуально ли моё резюме на HH.
Важная заметка: еще в октябре я разместил свое резюме на HH, чтобы было удобнее откликаться на вакансии.
Естественно я ответил «да». Девушка сказала, что чуть позже позвонит начальник, так как он пока что где-то в Сингапуре. За выходные мне никто так и не позвонил, я уже и не надеялся, но днём в понедельник мне позвонили. Было пару технических и один общий вопрос. Затем мне должен был позвонить еще один человек для полноценного интервью.
Всё происходило в Codeshare, там были подготовлены задачи на JS. Я неплохо справился, но немного забыл совсем базовые вещи по типу работы с объектами и тому подобное. Мне сказали за два дня повторить всё это. Естественно, я оплатил подписку на любимом Хекслете и начал всё повторять. Двух дней мне более чем хватило. В среду было ещё одно интервью, уже с чуть-чуть другими задачами. Всё прошло успешно, и уже через час я был в офисе. Компания маленькая, занимается разработкой мобильных приложений. Собственно, от меня требовалось написание бэкенда на Express для устройств.
Работа
Мне выдали макбук, рассказали о SSH, pm2, показали Cyberduck, advanced rest client (классная штука). Я сидел и разбирался со всем этим, читал документацию по realm (используем в качестве БД), копался в коде. Примерно на следующий день мне уже дали реализовать небольшую логику. От меня требовалось просто на бумаге решить задачу, но я смог и код написать.
Мне давали небольшие задачи, таким образом я потихоньку включался. Была неделя, когда я только и делал, что тестировал одно сложное приложение, составлял баг-лист со стороны логики, UI/UX. По началу было интересно, но потом быстро наскучило. Затем снова делал небольшие задачи по бэку, потом очень неохотно по админпанели на Vue.js + Jade. Плевался на Vue после React. Видимо, если вы пишите на ноде, то сложно отделаться от работы по фронту. Ну да ладно, для опыта и общего понимания полезно знать и уметь.
Я делал различные методы, работал с api Сбербанка, Страйпа, искал и подключал различные библиотеки для всяких нужд. Не уверен, что это была самая сложная задача, но именно она мне запомнилась: нужно было реализовать систему мониторинга для отправки пуш-уведомлений. Самое сложное было протестить это всё, так как там была зависимость от времени, и нужно было сопоставить много условий.
Так прошло где-то полтора или два месяца. Иногда занимался на Хекслете, читал статьи, смотрел видео. С каждым днём, сам того не замечая, я всё больше понимал, всё больше деталей пазла складывалось в моей голове.
Примерно через два месяца со дня начала работы второй бэкендер спросил у меня, смогу ли я самостоятельно сделать небольшой проект, начиная с подготовки сервера и проектирования БД, заканчивая интеграцией с БД сайта. У продукта уже был давно функционирующий сайт. Я был вообще не очень уверен в себе, но согласился.
Как говорится, глаза боятся, а руки делают, так я и закончил свой первый самостоятельный проект. Меня проконтролировали с проектированием БД, чтобы в дальнейшем не было факапа. Были небольшие сложности с интеграцией БД сайта. Разработчики предоставили api для доступа к их базе, я начал делать интеграцию и заметил, что у них в БД есть жёсткий косяк, поэтому пришлось хардкодить на сервере.
План
Недавно старший разработчик доделал абсолютно новую архитектуру сервера, в которой учтены все ошибки текущей. И на новом сервере мы будем писать на TypeScript, что неплохой опыт, я считаю.
В последнее время меня потянуло к Пайтону, стал проходить курсы на Хекслете, а на днях ещё и наткнулся на новость о стажировке в яндексе (бэкенд на пайтоне). Заполнил анкету, мне прислали ссылку на Яндекс-Контест. В ближайшее время буду проходить. Если дойду хотя бы до очного собеседования, то обязательно напишу об этом статью, дайте знать в комментариях, если было бы интересно.
На самом деле, в конце обучения в школе думал, что в будущем буду заниматься Data Science. Поступлю в универ, начну изучать Пайтон, матан, и ворвусь в эту, что называется, «хайповую» область. Но что-то пошло не так, я и не заметил, как мне стал интересен JS, backend и всё, что с этим связано. Сейчас же, спустя полтора года, вновь думаю изучить всю эту пока что магию чисто как хобби, для себя, а если что-то получится, то, возможно, в будущем все-таки ворваться в data science.
Что касаемо универа, я пока не знаю. Тут есть 5 вариантов: восстановиться в политехе, пойти в универ попроще, забить на высшее образование, пойти на заочку, ну и последний, самый привлекательный: поработать ещё один год и в 2021 уехать в Чехию учиться. Осталось решить проблему с армией.
Итоги
Пишу всё это спустя ровно 3 месяца с первого дня работы. Буквально сегодня подошёл к концу мой испытательный срок. Меня должны официально устроить и повысить зарплату. Хочу дать пару советов новичкам.
Во-первых, не распыляйтесь, если уж взялись за какую-то область, то постарайтесь довести до логического конца. Повторюсь, лично я пожалел, что в какой-то момент метнулся из JS в PHP, только время потратил. Если уж и менять направление, то с концами, а не метаться туда сюда. Говорю лишь о начале обучения, уже состоявшемуся разработчику даже необходимо заглядывать в другие технологии и языки, тут и говорить не о чем.
Во-вторых, не забывайте оглядываться назад. Лично мне это помогает осознать масштабы пройденного пути, понять, что не зря старался. Сравните себя в начале пути и, к примеру, спустя месяц, два.
В-третьих, не забывайте про сон и физические нагрузки. Где-то месяц-полтора назад я начал больше спать, ездить перед работой в спортзал и бассейн, и чувствую, что голова стала ясней, работать стало легче.
В-четвертых, если у вас есть возможность посещать митапы, конференции, то обязательно пользуйтесь этим. IT-сообщество разрастается, и даже в небольших городах потихоньку появляются постоянные митапы. А про Питер и Москву и говорить не приходится.
Ну и конечно, большое спасибо Кириллу, Рахиму и всем, кто трудится над Хекслетом. Ребята, вы крутые! Я не знаю лучшей площадки для изучения программирования.
Всем успехов и удачи!