Приветствую! Вот таки решил написать статью. Меня когда-то они очень даже мотивировали. Если кратко, на данный момент работаю в качестве Golang разработчика(предатель), а в целом коммерческий опыт в IT чуть больше года. До этого год работал Java разработчиком в одной крупной телеком компании.
Собственно, история. На данный момент мне 22 года, когда решил податься в разработчики было 20. К слову по специальности я программист, однако из универа и колледжа в плане программирования я практически ничего не почерпнул. Единственное, было общее понимание работы циклов, условий и массивов в языках программирования, что согласитесь, так себе знания для "дипломированного специалиста". Но вот в целом понимание работы компуктера были. Прерывания процессора, как устроена память и прочие веселые вещи нам неплохо преподавали(на основе "Архитектура компьютера" Таненбаума если не ошибаюсь). Еще как-то друг меня замотивировал и за небольшой промежуток времени я познакомился с HTML/CSS/JavaScript. То есть общее представление о происходящем у меня все же было. Так что, какая никакая база у меня была. Если это можно назвать базой. И вот я наткнулся впервые на JR и решил попробовать изучать Java. За две недели прошел 5 уровней и в связи с личными причинами забил. Еще год "искал себя" в другом деле, но с поиском не задалось. В итоге продолжил обучение на JR и за месяц (август 2016) прошел до 20 уровня. Не сказать, что это было супер продуктивно, ибо как бы ты не старался, некоторые вещи должны со временем "утрамбоваться" у тебя в голове. В итоге я, полный решимости , записался на собеседование на курсы от компании, которая проводила их с целью набора лучших студентов на работу после окончания. Думаю, вполне логичным результатом было то, что на техническом интервью меня немного попустили :) Вот тогда я и столкнулся с первой очень интересной вещью: твои реальные навыки программирования никак не проверяются на собеседовании, в цене здесь только теория(личные выводы, не обессудьте). Причем 80% теории тебе вряд ли пригодится. И я понимаю прекрасно почему так происходит, но на тот момент это было для меня открытием. Сделал выводы. Решил поднажать на практику и закрепить теорией прежде чем пробовать проходить собеседования. В итоге где-то до середины ноября 2016 решал задачки на JR и дополз до 25 уровня, подогнав то что не понимал раньше. Сейчас уже работал на качество. Пытался разобраться по максимуму прежде чем переходить к следующей задаче. Еще полтора месяца ушло на работу с базами данных. В январе 2017 я уже мог написать простой справочник на основе JavaFx && MySQL. Вэб для меня оставался загадкой на тот момент. Однако я последние два месяца рассылал свое ужасное резюме где только можно было его рассылать :) И это дало свои плоды. Через некоторое время мне даже начало казаться, что я попал в черные списки некоторых компаний. В ответ ничего не поступало, просто игнор(да, я в курсе, что такое работа HR, но на тот момент мне реально так казалось). Но, как ни странно, хоть и живу я в Одессе, меня позвали на собеседование в продуктовую компанию в Харькове. По скайпу. В этот раз я уже успел подтянуть теорию, проштудировал вопросы для Junior Java. Однако все равно не хватило. Были вопросы которые вы вряд ли где-то найдете в интернете. Из разряда, а почему разработчики языка сделали именно так? Кстати, очень классные вопросы. Такое не заучишь, нужна смекалка и понимание. Смекалка у меня так себе в стрессовых ситуациях, а с пониманием, судя по всему, были проблемы. Однако, эти вопросы я потом проработал. И это мне очень помогло на следующем собеседовании. Через месяц стартовал новый набор на курсы от компании, на которые я не прошел в прошлый раз. И так как все решала теория, я начал читать "Java Библиотека Профессионала", до этого ездил в универ и читал "Философия Java" на лекциях. За месяц я осилил 1800 страниц тех. литературы но сказать, что это как-то повлияло на ситуацию не могу. Параллельно как-то дополз до 31 уровня. Начались проблемы в универе, не спал всю ночь доделывая лабы, после приехал и ждал до вечера чтобы сдать их. И когда наконец сдал и остался на бюджете поехал домой и завалился спать. Проснулся за час до начала собеседований и сразу же рванул :) По итогу мне сказали, что с Java у меня все ок, а SQL — на дне. Но, тем не менее, на курсы меня все таки взяли. Были лекции по Java, Oracle DB и практика. Также был учебный проект где я и познакомился со Spring и в принципе созданием вэб-приложений на Java. Курсы замечательные, сильно прокачивают, особенно в SQL. Мне очень повезло с командой: из 6 человек было 4, включая меня, кто реально хотел получить работу. После защиты учебного проекта, 3-их позвали на собеседование. В итоге меня и товарища по команде взяли. Стоит отметить, что 3-й чувак больше всего тащил проект. И на тот момент гораздо больше знал, чем мы. Поэтому народ, если вас не берут на работу — в этом безусловно есть ваш косяк. Но это не значит, что вы хуже тех, кого уже взяли. Возможно, даже лучше. Кстати этот чувак через пару дней после отказа получил оффер от другой компании на позицию мидла. С чего мы до сих пор орём, когда встречаемся.
Чтобы получить свой первый оффер у меня ушел ровно год. После трудоустройства, я поставил себе цель вырасти до мидла за год. О чем и сообщил линейному менеджеру(человек который отвечает за твой карьерный рост, как правило, разработчик который пошел по ветке менеджмента). Стоит отдать должное, меня не засмеяли и даже напротив: предложили каждый месяц описывать род работ которые я проделывал, что нового успел узнать, сделать, с чем до этого не сталкивался, чтобы как-то отслеживать мой рост. Этим я и занимался. И это очень мотивирует. Ибо когда приживаешься к проекту и знаешь большой участок кода, немного расслабляешься, так как ориентируешься во всем. Но когда ты осознаешь, что надо в конце месяца что-то рассказать, начинаешь брать задачи которые изначально кажутся тебе слишком сложными. И как следствие спустя 3-4 месяца такой работы — тебя уже вряд ли что-то напугает. Есть задача и ты должен реализовать ее. Как - дело твое. Плохо или хорошо — проверят на ревью и подскажут. Это все как раз пришлось на момент ухода моего ментора из компании. Когда уходит единственный человек который хорошо знал проект, а вместо него остается пачка джунов 1 жди беды. Что и произошло, но беду разруливать пришлось самим. А когда видишь, что в принципе оно не особо разруливается, начинаешь выкладываться по полной. И получаешь бонус в виде опыта, уверенности в своих силах. Что стоит отметить 1 всегда инициативу воспринимали с радостью. Когда я пытался улучшить уже налаженные процессы никто не говорил "Оу, алё-алё, куда ты лезешь, джун?". Чувствовалось, что это кому-то да нужно, что подкупало естественно. С нового набора курсов как раз пришел человек и его закинули к нам на разработку новой фичи. И мне даже довелось побывать в роли ментора на пару месяцев) Однако, были и минусы, как и везде, несмотря на то, что я выкладывался и это поощрялось премиями, я чувствовал, что в плане карьерного роста — я на дне. Также работал я как правило со старыми технологиями, поэтому был небольшой страх, что я окажусь ненужным на рынке труда(на проекте не было ни спринга, ни хибернейта). Все что я знаю по этим вещам — лично мои наработки в свободное от работы время. Плюс как ни крути, твоя зарплата и твои навыки растут асинхронно. Очень. И казалось бы большая компания, не бедные заказчики, лично моя зарплата была в два раза ниже по рынку. В связи с этим всем, я принял решение об уходе и начал поиски новой работы. Успел пройти два собеседования. Оба показались успешными, но по одному не дали фидбэка. От другого получил оффер. На позицию Back-End Developer, где бэк был написан на Golang. Принял оффер и работаю по сей день. Golang довольно интересный язык. Но есть и вещи которые мне не нравятся. Код пишется быстрее, но при этом, имхо, обработка ошибок — ужас. Нет перегрузки методов и функций. Это прямо боль. Ну и дженериков нет, что в свою очередь очень сковывает. Резюмируя, хотелось бы высказать свое мнение по поводу некоторых личных наблюдений и выводов:
  1. Чтение тех. литературы абсолютно никак не влияет на уровень вашей заработной платы, позиции, дивидендов.
  2. Если приняли решение читать техническую литературу, по моему скромному мнению лучше всего развивают книги где скорее доносятся какие-то best practice и идеи в разработке ПО, нежели конкретные инструменты и правила их использования. (К примеру: "Идеальный программист", "Effective Java")
  3. Собеседование — рандом. Если не прошел — анализируешь, делаешь выводы, что-то доучиваешь и вперед по новой. С каждым разом шанс все выше.
  4. Если вас не берут на позицию джуна — попробуйте на мидла :)
  5. Перейти на новый язык — не проблема.
P.S.: Я всегда хотел попробовать себя в качестве преподавателя. На данный момент у меня не так много времени, чтобы этим заниматься, но вполне достаточно чтобы менторить начинающих разработчиков. В свое время мне этого сильно не хватало. Часто возникал вопрос правильно ли я делаю, а спросить было не у кого. Поэтому если вам понадобится помощь, либо же просто по коду подсказать, обращайтесь, буду рад помочь :) Skype — sanek12good Email — sashamerlyan@gmail.com