[Из песочницы] Разработчиком на удаленке – c нуля до героя
Последнее время все большее количество людей начинают мечтать о том, как они будут сидеть дома, писать крутые проекты в распределенной команде, гладить котика под чашечку домашнего кофе и лутать за это хорошие деньги. И в этом на самом деле нет ничего плохого, тысячи разработчиков так и работают. Однако об этом часто начинают рассуждать ребята, которые не имеют достаточного опыта, и в действительности вряд ли смогут получить такую работу, не получив боевой опыт в офисе.
Джуны на удаленке не нужны
Как любят говорить ребята с Тостера, в частности кураторы большинства разделов, джуны на удаленке никому не нужны, как и вероятность что-то заработать джуном на фрилансе. И это действительно так. Но также всем известно, что всегда найдется человек, который сделает то, что считалось практически невозможным.
И так, меня зовут Сергей, я enterprise-разработчик, я живу в городе Уссурийск (Приморский край, 200к население, +7 часов с Москвой), у меня нет профильного образования, и я ни дня не работал в офисе разработчиком. И эта история про то, как я дошел до такой жизни.
Я не ставлю своей целью воодушевить ребят из провинции, чтобы они все дружно бросились и начали пытаться устроиться на удаленку. Я хочу показать то огромное количество времени, которое я потратил, чтобы дорасти до разработчика (без всякого сомнения, если бы в моем городе был «офис», я бы сделал это гораздо быстрее).
После университета
Изначально я планировал работать в игорной сфере, поэтому после школы пошел на «Социально-культурный сервис и туризм», однако на 2 курсе вышел закон РФ о запрете игорной деятельности. Хотя я живу в Приморском крае, где должны были к 2012 году построить казино, все сроки сорвали, и фактически к моменту моего выпуска ничего не было. Точнее были подпольные казино, но это были те места, где тебе бы точно не хотелось работать.
Как итог, я устроился сначала в оптовую компанию по продаже риса, потом ушел оттуда на монтажника подключения интернета, а потом уже в поддержку в 1С-Франчайзи. Это все заняло примерно полтора года. Как говорится, в руках красный диплом универа, и все двери перед тобой открыты.
Техническая поддержка
Все это время я просматривал что-то более подходящее, и в один день на «Моем Круге» увидел вакансию в ночную техническую поддержку. Я прикинул, что с учетом моего часового пояса, 7 утра по Владивостоку, это 0–00 по Москве, я смогу работать в ночную смену фактически днем. Я откликнулся, прособеседовался и устроился на работу.
Естественно, просто так левого человека не возьмут в поддержку. Я еще со школы увлекался сайтостроением и делал различные сайты для своей команды по дотке и местного игрового клуба. Плюс из-за моего образования, у меня был достаточно хороший английский язык, что позволило мне также оказывать поддержку клиентам из Австралии, Новой Зеландии и США. У меня фактически был уровень такого хорошего веб-мастера с английским языком, плюс опыт поддержки из 1С.
Движение дальше
На одном из корпоративных съездов я пообщался с ребятами из отдела разработки, и понял, что обсуждаемые темы — это не какой-то «рокет саенс», и что я мог бы попробовать также. Плюс формальное образование хоть было и гуманитарным, но все же математика, статистика, экономика, бухучет и программирование у нас было, так что я не сильно боялся формул и цифр.
Это был 2014 год, везде кричали, что php-отстой, что python — это будущее и прочее (Как я был наивен и глуп!). Поэтому я начал изучать программирование с него. Как я это сделал:
1) Скачал книги Марк Лутца «Изучаем Python», «Программируем на Python». Книги дались достаточно сложно, ибо читать их было крайне скучно, тем не менее, они дали очень хорошую базу. Если у вас есть выбор, начать быстро или прочитать какую-то фундаментальную книгу по программированию, то я настоятельно рекомендую начать со второго, чтобы получать необходимую базу. Важно понимать, не только «Как», но и «Зачем» и «Почему».
После книг я решил немного поиграться и начал писать различные парсеры для игровых порталов (Brablay/GoodGame) с целью сбора статистики по определенным темам. В частности было интересно увидеть, как определенные люди оставляют комментарии, в частности их огромное количество. В
2) Потом я решил сделать что-то более значимое и собрать статейный портал на Python. Прочитал книгу по Django (Если честно не особо её понял — информация давалась слишком быстро и слишком «вакумно»). Поэтому посмотрел пару вступительных роликов по Django от ITVDN и обратился к официальной документации.
За 4 месяца разработки я освоился с версткой, понял, как работать с базой, писать миграции, ставить SSL и прочее. В итоге, следующий год я потратил на запуск целого ряда собственных проектов и разработка небольших сайтов для местных ребят (дроп-шиппиг сайт, магазин велосипедов, магазин спортивного питания и так далее).
3) Через год мне наскучило разрабатывать проекты на Django. Я стал смотреть, что еще можно придумать на Python. Я, наверное, прочитал все книги по Python, что были на сайте Ozon. Начиная от книги по Devops, заканчивая компьютерным зрением и машинным обучением. Эти темы не особо меня вдохновили (я не видел прикладного значения в моих масштабах, что я могу использовать прямо здесь и сейчас), но эти термины из какой-то неведомой магии и «скайнета», превратились в обычные формулы и прикладные библиотеки.
4) В итоге, я решил немного поднять свой уровень компьютерной грамотности и начал читать книги по C/C++/Java/Компьютерным сетям/PostgreSQL/TDD и Корпоративным паттернам. Если честно достаточно интересный опыт, когда ты понимаешь, как работает другая технология, на что она опирается, какие несет в себе сложности, и как она решает «сложные задачи» из твоего стека.
Отдельно можно отметить книгу по Spring, которая показала, насколько корпоративное приложение сложнее, чем «easy-going» проекта на Django.
Тестирование и Автоматическое тестирование
Через три года работы в поддержке, мне, к сожалению, отказали в переход в отдел разработки, но появилась возможность получить позицию в отделе тестирования. К тому моменту я свободно знал Python и мог в Java, поэтому было бы глупо не согласиться.
Отдел тестирования дал достаточно хорошее понимание, как ведется разработка сложных систем, как взаимодействуют команды внутри себя и между собой. Конфигурация различных тестовых окружений, приоритезация задач и многое другое.
Естественно, это автоматизация тестирования на селениуме с дерганием тестов через jenkins при релизах новых билдов.
Отдельно понравилась тема тест-дизайна. В компании был большой пул различных курсов по тестированию, поэтому с ними можно было узнать много крутых фишек, о которых ты вообще раньше не задумывался из сферы тест-дизайна. Например, проектирование минимального число тест-кейсов, чтобы покрыть наиболее количество вариантов системы с помощью pairwise (http://www.pairwise.org/) генераторов. Это крутые штуки из работы QA-Инженера, о котором многие разработчики даже не задумываются.
Переход в разработку
Через полтора года в отделе тестирования, я получил договоренности, что если я предоставлю рабочий прототип на php-стеке, я получу возможность пройти стажировку в отделе разработки.
Один месяц у меня ушел на книги по PHP. После Python и Java освоить PHP оказалось достаточно легко, хотя время от времени и появлялись вопросы «А почему тут так нельзя».
И три месяца я потратил на АПИ-сервис на Symfony (веб-морда, личный кабинет, бизнес-логика, почтовые уведомления, пдф-генератор, парсинг сложных json-структур и прочее). Внезапно оказалось, что Symfony — это своего рода гибрид Django и Spring, поэтому каких-либо проблем с пониманием вообще не возникло.
В итоге, я показал свой проект и получил стажировку в отделе разработку, откуда меня уже перевели в полноценного разработчика.
Первые месяцы в качестве разработчика
Мне предоставили ментора, который фактически ревьювил мой код и подсказывал, почему нужно делать так, а не иначе. Иногда созвоны длились по полтора-два часа, когда детально разбирался код по шаре и давались рекомендации, как его улучшить. Фактически получалось так, что я давал решения в нужные сроки с нужной логикой, но за счет того, что у меня не было опыта корпоративной разработки, они получались слишком запутанными и усложненными. Плюс время от времени появлялись вопросы по работе Redis/RabbitMQ/Elastic итд. Но все же главная работа велась в сфере, чтобы упросить код и сделать его тестируемым (когда пишешь код для себя, даже не задумываешься, что другие люди не смогут его читать). Как итог, за 4 месяца мой код подтянулся по стилю до корпоративных стандартов.
Реально, когда пишешь код сам, даже не задумываешься о том, как его будут понимать другие люди, и правильно ли излагать свои мысли таким образом. Опыт работы в команде сложно чем-то заменит.
Общий стаж, чтобы получить работу разработчика на удаленке с нуля — 4 года, 9 месяцев.
Как итог об удаленной работе с нуля:
- Вероятность получить работу разработчиком на удаленке, пройдя какой-то курс и почитав какой-то туториал — стремится к нулю.
- Вероятность справится даже с работой джуна на удаленке без опыта коммерческой разработки, либо каких-то собственных проектов — стремится к нулю.
- Вероятность того, что без каких-либо рекомендаций, компания будет тратить на вас время, чтобы чему-то научить — стремится к нулю.
- Вероятность того, что прочитав какие-то книжки, и устроившись на удаленку, вы будете получать какие-то «большие деньги» — стремится к нулю.
- Принять решение в начале своей карьеры, чтобы отказаться от офиса и искать удаленку — большая глупость.
- Отказываться от других айти-работ, так как вы хотите быть только разработчиком на удаленке с самого начала своей карьеры и никак иначе — большая глупость.