Всем привет! Это уже моя четвертая статья на моем любимом хабре! Сегодня я хочу рассказать вам свою историю того, как я смог войти в IT, с какими сложностями я столкнулся и как в свои 20 лет я стал тим-лидом.
Дисклеймер
Уважаемый читатель, в данной статье я просто рассказываю про свой карьерный рост и интересные вещи с которыми я столкнулся за последние 3 года. Я не пытаюсь заявить о себе как о "Гениальном программисте" или примером для подражания. Цель данной статьи состоит в рассказе моего личного пути и наставлению будущих разработчиков.
Начало моего пути или то как я афигел от Питона
Моя история вхождения в IT началась крайне обыкновенно. Еще в девстве моя любимая Мама купила мне компьютер и познакомила меня с ютубом. В ютубе я обычно смотрел как Гагатун, Хесус или Юзя проходили игры разного сорта и мечтал в один день стать как они(быть популярным и зарабатывать деньги на прохождении игр), но в один день я наткнулся на него...
Многие данного человека не любят, но Алексей Шевцов сыграл огромную роль в формировании моего вектора развития. Еще в далеком 2016 году, Алексей рассказывал на своем канале о перспективе работать разработчиком, о новостях из мира компьютерной техники и важности поставленной речи и глубокого русского словаря, думаю у вас уже начинает выстраиваться картина того, как я смог столь быстро дойти до позиции Лида в большой телеком компании.
После скрупулёзного анализа я принял решение попробовать себя в программировании и пошел на тот момент в известную школу программирования Method (просто она первая вышла мне в гугле) на курс "Основы Python". Курс длился 2 месяца, за которые я познакомился с основами программирования на Python, библиотекой turtle, tkinter и немного ООП(на тот момент я даже не понимал для чего оно нужно и как работает).
Для завершения данного курса, мне нужно было сдать финальный проект полностью написанный на Python и боже упаси каждого человека, который взглянул бы на мой код. Я писал одинаковые функции, которые различались только названиями и сообщениями которые я передал в print(). Никакого ООП и все было написано в одном файле. Вспоминая те дни, я крайне удивлен тому, как я не сошел сума в процессе написания кода не используя никакого IDE, я писал в нативном редакторе от пайтона и запускал код через F5.
Курс я сдал успешно и позже с этим же проектом выступал на разных олимпиадах по физике в Республике Казахстан и занимал первые и вторые места (Когда я показывал комиссии свой код, они думали, что я гений, но на самом деле там было говн* из 3000 строк).
Идея проекта была крайне простой. Я просто обожаю теоретическую физику и поэтому сделал приложение с GUI, которое помогало изучать основы ОТО(Общая теория Относительности) и Квантовой механики, я даже запихнул туда калькуляторы разного рода.
ССЫЛКА НА ВИДЕО С МОИМ ПРОЕКТОМ
Высшее IT Образование в Казахстане и мои студенчески истории
Как вы понимаете, итого я решил поступить на профессию связанную с информационными технологиями. Среди всех возможных факультетов я выбрал факультет "Информационной безопасности". Сделал я этот выбор по нескольким причинам:
Хотел стать крутыми Хацкером
Хотел быть как ГГ сериала "Мистер Робот"
Хотел ходить в худаке и взламывать всех кто меня будет обижать
Так же, я изначально рассчитывал изучать программирования своими силами, что-то внутри меня подсказывало, что в ВУЗах меня этому нормально не научат и вы не представляете насколько я был прав.
Первый семестр я начал в ВУЗе имени Хованского(назовем его так чисто для примера), что в городе Алматы, так как поступил туда на грант. Long story short, после первого семестра я перевелся в другой ВУЗ. Спросите почему? А вы когда-нибудь расписывали шифр Виженера на 5 страницах как домашнее задание? Если нет, то я неимоверно рад за вас!
А знаете куда я перевелся? В тот самый "Передовой IT ВУЗ Республики Казахстан". В тот самый ВУЗ, который находится на территории EXPO. Почему именно туда? В первую очередь мне нужно было абстрагироваться от родителей и родного города, так как в Алмате были слишком комфортные условия для жизни, а Астана это холод, злые люди и много денег!
Не буду сильно распыляться о том какое там "передовое" и "крутое" обучение, лучше расскажу о том, как я получил первую работу и познакомился со своей любимой Java.
Все началось с курса Object Oriented Programming, который вел крутой преподаватель Олжас Кайратович(в будущем человек который взял меня на первую работу). На данном курсе, который длился 10 недель, я смог полностью реализовать свой потенциал разработчика. Каждый день, я сидел по 5-6 часов и изучал основы Java и ООП в целом, мне нравился этот предмет тем, что он был на тот момент для меня крайне комплексным. За 10 недель обучения и self-study я написал проект NurCrypt. Сегодня как и на свой первый проект на питоне я смотрю на NurCrypt с кринжовой улыбкой на лице, написано крайне ужасно, но по крайней мере я старался.
ССЫЛКА НА ПРОЕКТ NurCrypt прошу не кидаться помидорами.
Идея проекта заключалась в создании механизма ЭЦП и генерации простых чисел.
Первое место работы
После 10 недельного курса, Олжас Кайратович решил забрать меня в свою аутсорс компанию, так как увидел во мне большой потенциал, единственным условием для начало работы было изучение Spring Boot, так как сами понимаете на голой Java интерпрайза никого не напишешь.
Мое знакомство с Spring Boot началось с курсов:
Признаюсь честно и я крайне этого стыжусь, данные курсы я спиратил. Денег у меня не было и у родителей денег я просить стыдился.
Вот основные моменты, на которые каждому новичку нужно уделить внимание при изучении Спринга:
Я не советую вам изучать Spring изучайте именно Spring Boot. Spring Boot это логическое продолжение Srping, он намного легче в применении и имеет огромный багаж инструментов. Для новичков голый Spring с его xml файлами может быть крайне комплексным.
Уделяйте больше внимания на изучении Sping IoC.
Открывайте и изучайте классы которые входят библиотеку Spring Boot, попытайтесь понять как работает тот или иной метод.
Не забывайте про основы Java. Всегда повторяйте структуры данных, основы Computer Science и немного математики (самую малость).
Умоляю вас, изучите от А до Я сборщики проектов. За последний год, я провел около 70 собеседовании и большинство кандидатов даже не знают, для чего нужен depedencyManagement в gradle и maven.
После изучении Spring Boot я считал себя БОГОМ, я думал мне все подвластно и я могу написать Google за ночь. Как вы понимаете моя эйфория длилась недолго, а именно до момента пока я не начал пилить первую в своей жизни систему авторизации и аутентификации. Вы просто не представляете насколько я ненавидел Spring Security на тот момент. Сегодня я с улыбкой вспоминаю моменты, когда по 2-3 дня я пытался настроить фильтры, которые будут брать JWT токен из заголовков и создавать по нему сессию. Это делалось в реалиях CRM системы для бизнеса по доставке питьевой воды.
Что вам стоит подметить в начале изучения авторизации и аутентификации
Пароли нужно хешировать а не шифровать. Шифровку возможно вернуть в initial состояние и хеш нет.
Изучите что такое CORS.
Не используйте CSRF токены.
Изучите OAuth 2.0 протокол.
Познакомьтесь с Keycloak.
ИТОГО: В 21Tech я проработал 2 года и ушел в URL(на самом деле компания называется по другому, решил ее переименовать так как не очень понравилась работа в ней).
Второе место работы
Запомните, раз и на всегда, никогда не принимайте решения в приступе эйфории. Я студент, второго курса, моя стипендия приблизительно 6000 рублей и прохожу собеседование в большую компанию. Собеседование было легким, заняло приблизительно час, на нем меня гоняли по простым вопросам по типу:
Что такое Рекурсия
Отношения между таблицами в реляционных БД
Различия между Java 11 и Java 17
Как работает мультипоточность
После собеседования я уже знал, что получу работу, единственное что меня волновало это моя ЗП. Когда мне позвонил рекрутер и назвал цифру в 3 раза больше ожидаемой ЗП я сразу согласился на все условия, пропустив мимо ушей слова: "ГПХ, рабочий ноутбук, фРоНт-еНд".
В общем и целом, я начал работать по ГПХ. Если говорить простым языком, ГПХ - ты получаешь зарплату, но нет социальных отчислении, страховки и пенсионных, да и вообще ты раб.
Так же в компании URL я познакомился с "Казахским Скрамом". Что такое Казахский Скрам? Это гибкая методология разработки при которой Back-End разработчик может стать Front-End разработчиком, DevOps инженером и сетевым инженером, звучит очень классно и очень даже гибко, не считаете ли вы так?)
За приблизительно 7 месяцев работы в URL я смог сильно прибавить с Soft и Hard скиллах. Вообще Soft скилы у меня всегда были на хорошем уровне, спасибо за это Шевцову. Благодаря поставленной речи, которую я нарабатывал с 10го класса(прошу не брать во внимание видео с первым проектом на питоне) люди всегда прислушиваются ко мне и готовы были вести со мной дискуссии на любимые темы. так же не мало важную роль сыграло то, что я был Президентом в своей школе и в Республиканском лагере, в которых с раннего детства мне приходилось заниматься оценкой кадров и делегированием задач.
Для улучшения хард скиллов я прочитал 2 основополагающие книги, которые должен прочитать каждый программист.
Роберт Мартин - Чистый Код
Роберт Мартин - Чистая Архитектура
Спасибо Дядюшке Бобу за детство и хороший интерпрайз код! Запомните раз и навсегда, идеального кода не существует и вы никогда не сможете написать приложение, которое будет соблюдать все правила чистой разработки. Старайтесь придерживаться общих принципов по типу KISS, DRY, SOLID и ваш код будет как минимум читабельным.
Мой любимый Kcell
Вот и пришел момент, когда компания URL окончательно достала меня свои Казахским Скрамом и я решил найти новое место работы и желательно с удаленкой, так как я на тот момент я все еще был студентом. Боже спасибо, что меня нашла HR Kcell и предложила Senior позицию в команде OMNI-CRM.
Cool Strory. Думаю каждый разработчик перед собеседованием ищет фулл инфу по сотруднику компании, который будет тебя собеседовать. Итого я нашел фотографию разраба который будет меня собесить и спасибо богам двоичного кода, на фотке он держал шарф ФК "Ливерпуль". Перед собеседованием я пошел и откопал свою старую майку Стивена Джерарда и его же поставил себе на аватарку в Teams. ЗНАЛИ БЫ ВЫ, насколько я был разочарован тем, что в последние полчаса перед собеседованием мне написал HR с новостью о том, что интервьюер меняется. С потом на лбу и со слезами в глазах (YNWA!) я панически начал искать информацию о другом интервьюере и боже мой, там было:
Team-Lead команды разработки с 10 летним стажем
Team-Lead команды DevOps
Сертификаты
Регалии
Собеседование было на тот момент для меня сложным. Затрагивались такие топики как:
Углубленная мультипоточность
Углубленное АОП
Работа с Транзакциями
Принципы работы БД
Паттерны проектировки приложения
Работа с Докером
Логика работы CI/CD
Абсолютно весь Java Core.
Another Cool Story. На первом курсе я собеседовался в компанию Abiateс и на вопрос, что такое индексы в БД я ответил: "Индексы это уникальные циферки каждой записи в таблице"
Итог: Спустя 3 дня, мне звонит HR дает оффер, и я был настолько рад, что забыл про концерт группы "Нервы" в Астане и не пошел на него.
Как я стал лидом?
Дамы и господа, ответ крайне прост - я работал и получал кайф от разработки. На протяжении 6 месяцев я брал на себя больше ответственности, интегрировал новые принципы разработки в команду, брал на себя инициативу проведения митингов с бизнес заказчиками. Итог был закономерным, я получил повышение и последние полгода работаю в качестве лида в суперской команде Kcell.
Давайте теперь поговорим о вещах, которые я осознал как новенький тим-лид.
Хоть я и не люблю высказывать какой-либо негатив, но нужно "душить" членов своей команды, особенно когда вы работаете удаленно. Разработчик это уникальное существо. Мы хотим много денег ничего не делая и периодически лень берет над нами верх, чтобы такого не было, нужно вовремя отчитать человека. Опять таки, возможно для вас это кажется БАЗОЙ, но для меня это было крайне сложно на первых этапах.
Распишите ваш Confluence от А до Я. Грамотно расписанные Confluence сэкономит вам уйму времени. В Confluence должны быть описаны правила разработки в команде, взаимодействие разработчиков между собою, политика MR-ок, информацию о стеке технологии и т.д. Также грамотно расписанный Confluence сэкономит много времени в процессе онбординга
Не бойтесь брать людей умнее вас. Я понимаю, что у всех есть ЭГО. Эго одновременно сила и слабость любого хорошего программиста, но Тим-Лид это в первую очередь Soft скилы.
Итог
В данном посту я постарался максимально сжато рассказать свою историю становления лидом и некоторые особенности Казахстанского рынка разработки. Если данный пост залетит, напишу еще несколько статьей про Хакатоны и Смешные моменты за мою карьеру разработки. Всем спасибо!