В прошлый раз я рассказывал, как из веба перешел в мобильную разработку, поработал в Нью-Йорке и стал директором направления mobile dev. Сейчас хочу поделиться идеями, которые помогут начинающим разработчикам избежать ошибок, быстрее прокачать скиллы и стать более востребованными специалистами.
Людям, которые уже работают программистами 1–2 года, мои мысли покажутся банальными. Это нормально — вы уже достаточно опытны и сами через многое прошли. Статья будет полезна тем, кто только в начале профессионального пути.
1. Не идти в программирование только ради денег
Впервые я ощутил себя волшебником, который из ничего создает полезные для людей вещи, когда проходил объектно-ориентированное программирование. Там учат мыслить такими категориями, как «объекты» и «свойства», и я чуть ли не целиком погружался в абстракцию. Друзьям, которые спрашивали, что я делаю, я говорил: «Представь, ты можешь создать такой объект, как кирпич, и заставить его летать, просто потому что ты разработчик. Это же круто!» Ощущение, что «программирование — магия», драйвило меня. Тогда оно было очень ярким. Со временем немного утихло, но сопровождает до сих пор.
Сейчас нередко замечаю, что люди переходят в программирование из других профессий просто потому, что здесь хорошие зарплаты. Но я считаю, что зарплаты хорошие как раз у тех разработчиков, которых драйвит то, что они делают. Они не задумываются о том, сколько им за это заплатят. Конечно, труд должен оплачиваться, но также важно получать удовольствие от процесса и всегда пытаться сделать чуть больше, чем ожидают, потому что самому в кайф.
Мне кажется, это касается любой профессии: если человек занимается чем-то только ради денег, он либо долго не продержится, либо будет держаться на уровне, который не позволит ему подняться выше.
2. Освоить слепую печать на обеих раскладках
Печатать десятью пальцами на обеих раскладках я научился в 10 классе на платных компьютерных курсах. Английскую раскладку тренировал по Typing Viking Easy — программе, которую привезли из Штатов. Русскую раскладку изучал по «Соло на клавиатуре». Помню, как занимался, плакал и чуть ли не ломал клавиатуру. Никому не рекомендую учиться на «Соло». Это ад. Но на тот момент выбора не было.
Всем, особенно начинающим разработчикам, советую не лениться и освоить навык. Очень выгодное вложение в себя. Слепая печать увеличивает продуктивность — даже не знаю, сколько времени она мне сэкономила за 20 лет. Несколько сотен часов точно.
3. Развивать системное мышление
В 19 лет мне поручили сделать веб-приложение для внутреннего управления складом и упаковкой. Заказчик — американская компания, которая получала от поставщиков крупную партию мелких деталей: шурупов, болтов, скрепок, — и расфасовывала их по пакетам и коробкам. Производители платили нашему клиенту за работу и расходные материалы.
Я тогда был джуном, рядом не было сеньора, который бы мне подсказывал, поэтому первая версия платформы получилась с кучей багов. Например, я не учел, что программа должна запоминать цену упаковочных материалов на определенную дату. Из-за этого появились ошибки в счетах, которые менеджеры выставляли поставщикам.
Суть бага. Допустим, метр пузырчатой упаковки стоил 10 центов. Фасовщики использовали два метра материала и вбили в приложение, что упаковка обошлась в 20 центов. На следующий день стоимость пузырчатой упаковки выросла до 15 центов и данные в программе за предыдущий день обновились с учетом новой цены — вместо 20 центов стало 30.
Такие моменты критичны: никому не понравится, если он закажет в интернет-магазине вещь за 500 ₽, а потом приедет курьер и скажет, что теперь покупатель должен 1 000 ₽, потому что за ночь цена выросла.
Опытный программист предвидел бы проблему, потому что, скорее всего, уже сам с ней сталкивался. Но для меня это было новым: я не думал, что произойдет с данными из базы в будущем. Так что всем начинающим разработчикам рекомендую задавать себе два вопроса:
1. Данные сто процентов фиксируются и не изменятся?
2. Если они изменятся, должно ли это влиять на какие-то другие взаимосвязи? Если да, значит необходимо сделать срез и запомнить ту или иную информацию на конкретную дату.
4. Внимательно читать документацию
В Нью-Йорке мы писали приложение на React Native. С фреймворком я раньше не работал, поэтому первым делом изучил документацию. Многие, почему-то, ленятся это делать. Но я считаю, что большинство вопросов и проблем отпадет, если разработчик внимательно прочитает документацию к платформе, проекту, библиотеке и сделает так, как там написано. Бывают моменты, когда с документацией все очень плохо, но если она есть, лучше начать с нее.
5. Ставить себе понятные и достижимые цели
Если чем-то заниматься, но при этом не ставить целей, будешь просто бултыхаться. Раньше я очень много времени бултыхался: брался то за одно, то за другое. Если у меня были заказы, я не пытался найти проекты круче и интереснее. Если бы я ставил себе четкие и достижимые цели, за 20 лет достиг бы в разы больше.
После переезда в Казань 6 лет назад бултыхание ушло, и каждые год–два происходили позитивные изменения. Я отучился в магистратуре и привел мозги в порядок, начал заниматься мобильной разработкой и получил проект в Нью-Йорке, стал директором целого направления. Но я понимаю, что если бы еще четче ставил себе цели, за последние два–три года добился бы еще больше, потому что возможностей огромное количество.
Я смотрю на своих бывших коллег, с которыми мы вместе начинали карьеру в ИТ. Один сейчас работает в ООН и живет в Вене, другой ИТ-директор в «Билайне». По сравнению с ними я еще немногого достиг.
Так что тем, кто хочет чего-то добиться, рекомендую не браться за все подряд, не обдумывая, для чего это надо, а ставить конкретную достижимую цель на полгода–год вперед.
Допустим, через год ты собираешься стать профессиональным разработчиком. Что характеризует профессионального разработчика? Например, наличие сертификата. Выбираешь сертификат и отводишь себе три месяца или полгода на подготовку к экзамену. Классно, если в итоге получаешь этот сертификат. Важна не сама бумажка, а факт того, что ты преодолел одну вершину на пути к своей цели. Сертификат — демонстрация того, что ты идешь в правильном направлении и приобретаешь нужные знания. Дальше определяешь следующий шаг и выполняешь его. И так до тех пор, пока не добьешься того, чего хочешь.
Конечно, можно просто читать статьи на Хабре или смотреть что-то на YouTube, но так путь будет очень долгим и неэффективным. Какие-то навыки будут качаться, но не с той скоростью, с какой могли бы.
6. Делать и не бояться
В 2018 году мне предложили написать мобильное приложение для логистической фирмы. Она находится в Нью-Йорке, доставляет людям онлайн-заказы из аптек. До этого я не занимался мобильными приложениями, но решил попробовать. Мы сделали классную платформу, которая помогла клиенту расшириться и заключить контракт с еще несколькими аптеками.
Наверное, я не рискнул бы взяться за проект, если бы не магистратура. Там меня научили инженерному подходу: не надо бояться — бери, пробуй, делай. Если приложение запустилось и работает — классно. Если нет, ищи причину почему. Что тебя может остановить? Ничего.
Чаще всего останавливает страх: «Ой, я такого никогда не делал, откуда я знаю как?» Да ё-моё, возьми и попробуй. Если что-то отвалится, разберись, почему отваливается. Если не получится, ничего страшного: зато в голове появятся новые знания.
7. Увлекаться чем-то еще, кроме программирования
В свое время я занимался и Photoshop, и анимацией, и дизайном, и версткой. В моей жизни был период, когда я фрилансил и собирал сайты полностью сам: начиная с дизайна, заканчивая разработкой. Не скажу, что создавал суперкачественные решения, но заказчикам было нормально. Благодаря тому, что когда-то я интересовался разными вещами, сейчас спокойно нахожу общий язык и с дизайнерами, и с разработчиками, и с тестировщиками.
Думаю, важно заниматься тем, что доставляет удовольствие, даже если хобби далеко от программирования. Нравится человеку писать музыку, хотя он разработчик? Пусть пишет. Главное, развиваться, чтобы увлечение не оставалось на дилетантском уровне.