По специальности я инженер-испытатель в аэрокосмической отрасли. После института устроился на одно из предприятий Роскосмоса, где обещали большие перспективы. Отработал полгода: первое время было очень интересно, но из-за ошибки подрядчика у нашей конторы сорвался пуск с космодрома «Восточный» и начались внутренние проблемы. Я перешёл в другую организацию, тоже в составе Роскосмоса. График сутки через трое оставлял много времени для учёбы, и я решил осваивать программирование.
Почему программирование и Python
Во-первых, на IT-рынке кадровый голод. На фоне избытка стажёров компаниям остро не хватает специалистов высокого класса: мидлов и старших разработчиков. Во-вторых, и это очень важно для меня, программирование – работа, где виден результат и его можно однозначно оценить. В-третьих, IT-сообщество является международным, и ты не привязан территориально. Наконец, в этой сфере можно хорошо зарабатывать. Для меня выбор был очевиден.
В вузе мы практически не занимались кодом, зато научились учиться и получили техническое образование, отнюдь не бесполезное для IT. Инженер, как и разработчик, имеет дело с алгоритмами – например, составляет программы испытаний. Но алгоритмистика в программировании – далеко не всё, особенно когда речь идёт о трудоустройстве. Надо владеть инструментами и знать лучшие практики, а для этого – много читать и постоянно практиковаться.
Я начал штудировать книги, документацию и обучающие сайты по Python. Это один из самых популярных и перспективных языков, у него понятный и приятный синтаксис. Новичкам в программировании и так всегда нелегко, а если ещё грузить их с порога излишне сложными конструкциями, это же страх и ужас, который замедляет обучение и снижает мотивацию! Я не стал усложнять себе жизнь и начал с простого.
Почему разработка не даётся с наскока
Когда начинаешь с нуля, даже очень простые и очевидные вещи могут быть непонятны, если рядом нет человека, который всё объяснит. Можно читать форумы, но там на вопросы отвечают зачастую с большой задержкой или вовсе игнорируют.
Многие вещи кажутся интуитивно понятными, но скрывают под собой серьёзные фундаментальные понятия. Если это игнорировать и скользить по поверхности, можно какое-то время работать вслепую, но рано или поздно окажешься в тупике. И всё равно придётся разбираться, что же ты упустил в начале.
Я осваиваю Python на курсах, а не самостоятельно, потому что общение с преподавателем и группой однокурсников в режиме реального времени незаменимо. Допустим, ты не понимаешь текущую тему, но думаешь, что нормально усвоил предыдущую. Твой одногруппник что-то недопонял в теме прошлого урока и задаёт вопрос преподавателю. Ты вникаешь в ответ и вдруг осознаёшь, что сам знаешь пройденный материал не до конца, потому и столкнулся с трудностями дальше. Вот так у тебя в голове выстраивается вся цепочка и, даже не задав вопроса, ты решаешь проблему.
Считаю, если ты решил стать программистом, надо сразу настраиваться не просто запоминать приёмы или рецепты, а последовательно выстраивать систему знаний.
Космос, банки и GeekBrains
Из Роскосмоса я до сих пор не уволился, но параллельно с работой там и учёбой в GeekBrains уже успел побывать на трёх должностях в IT. Сначала устроился верстальщиком в стартап, где удалённо трудился один-два полных рабочих дня в неделю. Затем у меня был экстремальный опыт работы в Севергазбанке. Сейчас я программист в компании Genplace, которая занимается аутсорсингом. После Нового года успешно прошёл оценочное тестирование, так что через месяц полностью переключусь на программирование и попрощаюсь с аэрокосмической отраслью. Но обо всём по порядку.
Начало работы в IT
Я приступил к учёбе на курсах в мае 2018 года. К августу, когда мы дошли до разработки мессенджера, я понял, что не успеваю выполнять учебные задачи и не справляюсь с ними. Решил перепройти курс. За пару недель до повторного обучения я устроился верстальщиком в команду, которая делала приложение типа BlaBlaCar. На тот момент я даже JavaScript не знал – только разметку HTML и CSS.
Вёрсткой я занимался четыре или пять месяцев, но дело шло плохо: до конца работу не довёл – решил снова полностью сконцентрироваться на учёбе.
В марте 2019-го я устроился в дочернюю компанию одной из «дочек» Газпромбанка – Севергазбанк. «Внучку» Газпромбанка, получается 🙂 Они делали сервис для оформления услуг факторинга, банковских продуктов и гарантий. Решением пользовались фирмы – конечные потребители услуг – и внешние агенты, которые подыскивали банкам клиентов. То есть мы предоставляли агентам площадку, куда они приводили клиентов, чтобы заключать с ними договоры от имени кредитной организации. Сервис был интегрирован с несколькими банками.
Работа оказалась ужасной: куча legacy-кода, огромная текучка кадров, маленькая зарплата – чуть ниже средней для питониста-стажёра в Москве. Разработчики убегали целыми командами. Оставался только один тимлид, и то не представляю, что его там держало.
Как джун я рассчитывал начать с простых задач, однако на третьей неделе работы мне сказали: «Вот есть основной сервис, сделай так, чтоб люди могли брать кредиты». У меня сразу паника, страх: «Вы что, с ума сошли?! Я несколько месяцев назад написал свой первый интернет-магазин – плохо, не до конца. А тут система выдачи кредитов, где нужно обеспечить безопасность и всё остальное!»
Однако именно на этой экстремальной работе я познакомился с Django REST Framework, углубил знания View.js и получил опыт быстрого погружения в сложные задачи. Всё это сняло обычные страхи начинающего разработчика и вселило уверенность, что по ходу дела я могу освоить любой необходимый инструмент. Но каша в голове ещё оставалась 🙂
Жизнь становилась всё веселее: 5/2 в офисе, где мы писали дрянной код без нормальной работы менеджмента и учёта современных технологий, затем – сутки-трое в Роскосмосе плюс учёба. Я быстро понял, что дальше развиваться как программист в таких условиях не смогу, и снова начал искать работу.
Начинать заново – обычное дело
Я обновил резюме, указал более высокую зарплату и стал отправлять письма в интересные компании, уже без криков «Возьмите за еду». Вскоре я получил два приглашения, но собеседования завалил, потому что от волнения не мог вспомнить простых вещей. Дальше я прошёл за неделю ещё шесть собеседований, на некоторых был близок к трудоустройству, но находились более сильные кандидаты.
Был я и на собеседовании в Mail.ru Group. Прошёл дистанционное интервью, но в офисе тимлид меня просто уничтожил – стало ясно, как многому ещё предстоит научиться. Вакансия была уровня B Junior / Middle, и я никак не вписывался, потому что не был знаком с асинхронным программированием, Docker-контейнерами и виртуализацией. Я и сейчас ещё вникаю в это.
Но оставаться в неинтересном проекте отчаянно не хотелось. Я повысил желаемую зарплату в резюме на hh.ru с 65 000 до 75 000 рублей, продолжил поиск и вскоре получил предложение с нынешней работы. Интересно, что кандидатов с зарплатными ожиданиями ниже 70 000 они не рассматривали.
Тимлид в то время болел и провёл собеседование в Skype, где к нам присоединился менеджер проекта. Сначала было стандартное интервью, затем мне дали участок кода и задание на час – обработать два массива данных. Тут мне пригодились опыт предыдущей работы и знание библиотеки Functools, которую мы дополнительно изучали на курсах Python в GeekBrains.
Дальше, в ожидании результатов, я сделал то, что – везде пишут – делать нельзя: позвонил тимлиду и спросил о его впечатлениях от собеседования. Очень уж хотелось получить эту работу. Тимлид сказал, что всё хорошо, и если с задачей я справился нормально, он скажет менеджеру меня брать. Четыре дня спустя я получил письмо с первым официальным оффером и был счастлив.
Работа, где можно развиваться
Я убеждён, что только практика в реальном коммерческом проекте даёт навыки поиска решений и данных, позволяет вникнуть в процесс разработки и избавиться от страхов новичка. Правда, я сейчас говорю о самоучках – у выпускников профильных вузов всё может быть иначе. На работе ты перестаёшь бояться незнакомых слов. Ты понимаешь, что любой фреймворк написан для конкретных задач и изучать его надо в процессе их выполнения.
На новом месте мы делаем сервис по аутсорсингу бухгалтерского учёта. В этот раз я плавно переходил от простых задач к сложным – было даже непривычно. Спустя три месяца я полностью втянулся и начал работать над интеграцией нашего сервиса с банком.
Сейчас ни один сервис не живёт своей основной функцией. Посмотрите на Яндекс.Драйв: он был просто каршерингом, а теперь он интегрирован с проектом «Яндекс.Авто», предлагающим дополнительные сервисы и бортовые компьютеры для автомобилей.
Наш сервис тоже постоянно обрастает новыми функциями. С его помощью люди не только забывают о необходимости вести бухгалтерию, но ещё и управляют своей фирмой, получают аналитику, открывают счета в банках и оформляют платежи.
У многих небольших банков сейчас нет средств или желания создавать свои IT-продукты. В лучшем случае у них есть API для интеграции с внешним сервисом. Из-за этого они не могут соревноваться с лидерами рынка. Но тут появляемся мы и предлагаем доступную альтернативу.
Если говорить о стеке технологий, мы используем Django REST framework, Vanilla JS, набор стилей на базе Bootstrap, мультипроцессорность и многопоточность для выполнения фоновых backend-задач и чата, а ещё, конечно, Docker. Поскольку команда у нас небольшая и тестировщика нет, тесты пишем сами.
Памятка начинающему разработчику
Вот несколько главных выводов, которые я сделал из личного опыта и которыми могу поделиться с теми, кто делает первые шаги в Python-разработке.
1. В свободное время читайте книги и статьи по профессии. Это не бег на короткую дистанцию, а марафон – надо заниматься этим постоянно. Лично я предпочитаю бумажные книги, с ними мне проще воспринимать текст. Плюс заметки мне приятнее делать на полях, чем в электронных документах.
2. Постоянно мониторьте рынок. Ищите правильно оформленные заявки на вакансии в России и за рубежом, отслеживайте стек технологий и составляйте себе карту обучения.
3. Выучите фреймворк Django REST и основные библиотеки к нему как «Отче наш». Кто умеет быстро что-то создавать на этой основе – без труда найдёт работу. Страшные для каждого джуна слова B (!) knowledge of Django REST сейчас есть в требованиях ко многим вакансиям на рынке. Медицинским (и не только) стартапам нужны отраслевые IoT-решения – следовательно, надо писать API, а пишут их чаще всего на Django REST. Не только, конечно, но свой основной фреймворк надо знать хорошо.
4. Не ленитесь! Это главное. Во время учёбы на курсах будьте готовы к тому, что из тридцати человек в вашей группе через несколько месяцев домашнее задание будут сдавать семь, а закончат обучение и устроятся на работу – четверо. Это обычная история, потому что человек ленив. Если поставили цель, не сходите с дистанции.
И не пугайтесь, когда вещи, которые казались абсолютно прозрачными, через несколько занятий обернутся неразберихой и хаосом в голове – так будет происходить очень часто. Похожее напутствие я прочёл у одного хирурга, который решил стать программистом после сорока. И стал. Главное – уметь учиться.
Хотите узнать больше о выпускниках Python-факультета GeekUniversity? Вот их истории:
- «Проблема маленьких городов – нет вакансий для джунов». Инженер-радиотехник Денис Горшков – о своей жизни в Ярославле, работе в МТС и умном доме на Python;
- Постигая Python: учёба в GU, практика в Австрии, развитие. Интервью с Python-разработчиком Максимом Столпасовым;
- «Сейчас или никогда!» Бросил хорошую работу ради Python. А стоило ли? Чему научили ошибки и успешные собеседования по новой специальности;
- Поиск себя и быстрое погружение в веб-разработку. История Ильи Курбакова, который в 25 лет решил кардинально поменять направление в своей карьере.