Программирование должно стать вашей жизнью.
Приветствую, меня зовут Скробот Алексей.
Моя история не совсем обычная. Всё началось в далёком, а может и не таком далёком 2010-ом году. Я открыл своё небольшое дельце. Это был отдел цифровых товаров, там были диски с играми, фильмами, музыкой и сопутствующей продукцией: батарейки, веб-камеры и пр. Я даже сам «производил» диски, которые мне заказывали, а у поставщиков их невозможно было найти. Одним словом — крутился. И вроде всё было хорошо. Но к концу 2010-ого года большую активность стал набирать интернет. И на горизонте появились трекеры, IP-приставки с доступом к пиринговой сети провайдера. Многим диски стали не нужны. Можно было скачивать фильмы на компьютеры и вечероком просматривать их в кругу семьи. Конечно, вся эта трендовая ситуация повлияла на мой отдел. Появилось множество проблем.
Первые перемены
В итоге, подумав, чем я хочу заниматься дальше, я понял, что работать «на дядю» я не хочу. Выбрал направление «дизайн». Изучив Photoshop, CorelDraw, я начал заниматься полиграфией: баннеры на билборды, визитки, листовки. Удалось устроиться в рекламное агенство, но через несколько месяцев я понял, что дизайнер я не очень. И даже очень «не очень». На сайтах FL.ru, freelance.ru заказов не было, потому что уровень моих работ был очень низок.
Однажды нашего системного администратора попросили создать сайт на Joomla. Мне стало интересно, я стал расспрашивать его, как и что он делает. Он мне рассказал о HTML&CSS. Мне понравилось и решил окунуться в HTML-вёрстку. Через 3 (или что-то около того) месяца у меня появился первый заказ. Внимание: за 500 рублей!!! Но я был счастлив. Мне что-то дали сделать. И сделал я ужасно! Как мог сделать самоучка, не понимая, куда дальше этот HTML-макет идёт. Меня это не остановило и я продолжил учиться: верстал, выкладывал работы в «линчевальню» на форуме http://itforums.ru/, обрастал связями в коммьюнити. Так я узнал о Javascript и примерно к 2011-ому году начал зарабатывать первые деньги на фрилансе в качестве верстальщика.
Как-то раз нам с напарником пришёл заказ от одной Ивановской фирмы: сделать сайт под ключ. После того, как мы закончили, нам предложили постоянное сотрудничество. Пришла пора серьёзно развивать свои навыки и способности. Работал я удалённо. За это время мне удалось изучить Wordpress, Drupal, Joomla и много других CMS, о которых многие уже, наверное, позабыли, — DLE, Livestreet. Я начал активно учить PHP и в стал полноценным Fullstack web-developer’ом. Стали приходить новые заказы, и они сильно отличались от «сделать сайт-визитку, каталог, интернет-магазинчик». Они больше были похожи на «реализовать полноценное комплексное решение для сети фитнес-клуба» или «реализовать CRM для сети автомоек». Знаний CMS стало не хватать. Поэтому я изучил и реализовал эти решения на PHP-фреймворках: Codeigniter, Kohana; посмотрел Symfony1, Yii1. В 2013 году меня позвали в команду стартапа. Он так и не запустился, но я получил неоценимый и даже колоссальный опыт. После этого я начал рассылать своё резюме на позицию «Middle PHP Developer». Стал получать приглашения на собеседования. В итоге, я начал работать удалённо в командах, и это стало моей жизнью.
Новый опыт
До 2015 меня всё устраивало. Но получив большой опыт в веб-разработке, мне стало скучно. Слова «PHP», «Laravel», «Angular», «Vue.js», «CRM», «ERP», «Highload» перестали вызывать восторг и стали обыденностью. То, что раньше меня мотивировало получать новые знания, стало обычной работой. Сложностей стало всё меньше. PHP перестал радовать как язык. Мне захотелось большего. И я стал всё чаще думать о карьере Java-программиста или Android-разработчика. Но количество свободного времени было сильно ограничено. Выделять 2 часа в день сила воли не позволяла. И тут я посмотрел в сторону портала GeekBrains. За относительно небольшие деньги (рассрочка 6500 в месяц длительностью полгода) я мог получить профессию Android-разработчика: 1 уровень Java и 2 уровня Android. Это стало для меня мотивацией. И в ноябре 2015-ого года я сделал этот шаг и решил, что я должен стать Android-разработчиком.
Честно говоря, моя мотивация во многом зависела от одного фактора — было жалко денег, которые я потратил. Я должен был чего-то добиться и в идеале стать Android-разработчиком. Иначе мои деньги ушли в пустую. Это и дало мне «пинок» для того, чтобы выделить 2 часа в день после работы. Я начал учиться, разбираться, а возможность прохождения стажировки меня вдохновляла до невероятного уровня. В итоге, в апреле 2016-ого года я уже прошёл Java 1 и Android 1. Команда очередного стартапа на тот момент развалилась. Я был в поисках следующего клиента, и мне попался заказ по созданию бэкенда с веб-интерфейсом для мобильного приложения. Написав этот бэкенд, я предложил свою кандидатуру в роли Android-разработчика. Меня взяли исполнителем. Уже через месяц я написал своё первое клиент-серверное Android-приложение под названием Anticafe.im
Android-разработчик
И пошло-поехало! На основной работе, где я был PHP-разработчиком и саппортил свои модули для ERP (Системы управления предприятием) в компании интернет-провайдера, мне предложили перейти в отдел мобильной разработки. Я согласился и написал ещё одно приложение — чат для поддержки клиентов. Изучил Socket.io и сам протокол веб-сокетов. К 2017-ому году я написал уже 8 приложений. В моём списке навыков:
- Dagger2,
- Retrofit + Okhttp,
- RxJava/RxAndroid,
- применяю структурный паттерн MVP,
- в последнее время пишу на Kotlin,
- изучаю тестирование и пишу тестируемый код.
И всё я это делаю вечерами и на выходных! Основная работа всё ещё в вебе. За эти уже 7 лет я стал тимлидом команды веб-разработчиков. А в свободное время фрилансер Android-разработчик. Это всё стало моей жизнью.
Что читать, смотреть?
Источников информации великое множество. Каждый должен выбрать для себя то, что ему нравится: хабрахабр, reddit, medium.com, блоги знаменитых разработчиков и пр. Самое важное — это коммьюнити. Вступайте в Slack-каналы, Telegram-чаты, Gitter-сообщества и общайтесь. Следите за трендами разработки, старайтесь отвечать на те вопросы, которые там задают. Не знаете ответа, не игнорьте. Подумайте, поищите и предложите свой вариант. Да, может обсмеют, но это тоже опыт. Вам скорее всего объяснят, почему вы не правы.
Вообще, надо уметь отключать своё эго. Если вы начинающий программист, вы знаете мало. Да, опытные разработчики ведут себя часто надменно. Это отпечаток профессии и психология. Стать специалистом трудно, поэтому мы в большинстве случаев так себя и ведём, забывая о том, какими новичками были раньше.
Трудности
Вспомнить главные пробелы, которые мешали на разных этапах расти и развиваться, довольно легко:
1. Английский язык. Это одна из самых важных трудностей. Но при этом с ней легко справиться. Всех своих джуниоров я отправляю на курсы английского. Отказавшихся или утверждающих, что это не важно, увольняю. Да, жёстко. Но это важно. Вся самая главная и важная информация публикуется на английском языке. На русском только в вольном переводе и далеко не вся. Мне повезло с английским: гимназия, класс угублённых иностранных языков, со 2-ого класса английский, с 5-ого немецкий.
2. Общее развитие. Нужно быть начитанным гиком. Любить читать — должно быть первым пунктом в резюме раздела «Дополнительно о себе». Читать необходимо много. «Классика» позволяет вам мыслить и анализировать пласты заложенного смысла. Фэнтези и фантастика развивают ваше воображение и навык визуализации. Необходимая техническая литература даёт самое главное — знание прикладной области. Если человек не читает или читает только тех. литературу, мне сложно с ним работать. Чаще всего такие программисты редко становятся хорошими разработчиками, но это конечно индивидуально, есть исключения. В моей практике это так.
3. Визуализация — не менее важный навык. Необходимо его в себе развивать. Строить в голове схемы архитектур, с которыми вы работаете или строите, а главное — видеть их. Помимо схем, идеально, когда вы представляете, как «подумает» транслятор вашего языка, компилятор, виртуальная машина или интерпретатор, и как выполнит ваш код.
4. УБИТЬ ЛЕНЬ! Это самое важное! Убить лень! Когда вы написали какой-то код, а вам предложили его отрефакторить или переписать тонкие места. Убить лень! Когда вам предлагают для оптимизации вашего перфоманса прочитать 200 страниц трактата об устройстве модели вашей виртуальной машины. Убить лень! Когда вы после релиза думаете, посматривая сериальчики/ютуб/аниме, саппортить уже работающий проект. Убить лень! Как только она появляется. Она — враг. Но вместе с тем и двигатель прогресса. Спроектировать дополнительный слой вашей архитектуры, потому что вам лень повторять один код в двух местах — хорошее её проявление. Но если появляются мысли «А, зачем мне читать эту книгу, это же столько времени надо потратить, и все ради того, чтобы изучить какие-то паттерны проектирования. Ради чего? Итак со временем пойму. Лучше пойду в дотку погоняю!» — достаём топор и убиваем лень.
Напоследок
Про курсы и GeekBrains можно говорить разное: это и хорошее сообщество, и иногда (замечу именно иногда) интересные и полезные статьи в блоге, и не абсолютно отличный преподавательский состав. Про стажировку сказать ничего не могу. К моменту, когда я закончил «Android. Уровень 2», необходимость в стажировке отпала: я уже сделал реальный проект за реальные деньги и выложил его в Google Play. С увереностью могу сказать одно — серебряной пули не существует.
Нет такого, что вы прошли курс и стали программистом. Нет такого, что без практики и мотивации вы станете хорошим разработчиком. Нет такого и не будет, что вы выберете программирование в качестве основной 8-часовой работы. Программирование должно стать вашей жизнью. А курсы — помощь и дополнительная мотивация. Рассчитывайте только на себя. Учиться должны именно вы, и никто вас не научит учиться. Местами это одинокая профессия — программист. До вас можно донести информацию, но как вы её усвоите, зависит от вас. И пусть это звучит как тавталогия «научиться учиться»: учиться, стараться и добиваться. И не смотреть на деньги. Если будете расти как специалист, доход будет расти вместе с вами.