Всю свою профессиональную деятельность, уже более семи лет, я развиваюсь самостоятельно. Так сложилось, что всегда работал один или с командой, которая была ниже меня по уровню. При этом позволить себе расслабиться, ощущая себя самым умным, в IT индустрии строго недозволительно. Постоянно приходится искать способы поднять свой скилл и быть уверенным в том, что ты реально его поднял и соответствуешь рынку.
В этой статье я поделюсь правилами, которые помогают мне постоянно развиваться как специалист, поддерживать себя в конкурентноспособной форме, и расскажу историю подъема от pre-junior до senior.
БОНУС: подборка забавных и удручающих случаев с собеседований.
Предыстория
Программированием я увлекся на младших курсах университета. Базовая программа, как и везде, была, мягко говоря, слабовата, а душа хотела боли и настоящего хардкора. Но все, что мне могли предложить ВУЗовские преподаватели в качестве факультативного обучения, упиралось в написание сомнительного вида утилит на сишнике с примесями ассем-АПЧХИ!!! (прощу прощения, аллергия на низкоуровневые языки).
Может быть, я не тру программист, но написание чего-то, что нельзя потрогать руками и вообще мало применимо к реальности, совсем не вдохновляло, как и строгание -сайтов на коленке, чем занимался у нас на потоке каждый второй. И вот после небольшого мониторинга существующих платформ, я решил удариться в мобильную разработку. Хочу отметить, что не важно, в какой сфере вы работаете, мобильной или нет, подход везде одинаковый.
Как вы могли догадаться, разработку под iOS, а именно в эту сторону меня понесло, в университете никто не практиковал. Тогдашний приятель со старших курсов предложил замутить свой стартап, где я буду в роли iOS разработчика за баснословные 5к рублей в месяц (2010-й, Москва), налив мне красивых сказок про невероятную перспективу, чудесную жизнь в кремниевой долине, где нас давно уже ждут, надо только состряпать прототип, показать его инвесторам и миллионы инвестиций у нас в кармане.
Разумеется, я согласился на это чумовое предложение. Стоял только один вопрос: как научиться? Никаких онлайн обучающих курсов тогда в помине не было, и всю информацию приходилось добывать сугубо самостоятельно. А потом возник и более серьезный повод задуматься: как сделать правильно? Тем более, что проект регулярно менял направление(какая неожиданность) и его пришлось дважды переписывать с нуля уже за первые полгода.
Первые шаги
Мне повезло сразу получить проект, на котором можно учиться. Даже больше, у меня был напарник в Android направлении, с которым мы постоянно конкурировали, соревновались, кто быстрее, лучше, сильнее сделает тот или иной функционал. Делились опытом, способом реализации фич и выясняли отличия между нашими платформами.
Но далеко не всегда получается так складно. Чаще всего человек хочет научиться, а ему везде отказывают в найме даже на стажировку, требуя уже определенный уровень знаний. Можно пойти на фриланс, предложив себя в качестве раба, но есть огромный риск нарваться на головняк и потом сильно пожалеть об этом.
Моя рекомендация для начинающих — это найти туториал для своей платформы, где результатом обучения будет осмысленное приложение. Не просто набор раздельных уроков по инструментам, а с фактическим результатом. Например, по iOS есть потрясающий канал на ютуб, где парень пошагово разрабатывает реальные приложения. В результате у вас, кроме опыта, будет еще готовое приложение в Open Source, которое вы сможете выгрузить на github и показать будущему работодателю или заказчику в качестве образца ваших способностей, что значительно повышает шанс трудоустройства.
Это, естественно, не отменяет необходимости освоения отдельных инструментов. Просто копировать код с ютуба недостаточно. Надо понимать, что ты делаешь. Если какое-то действие спикера вызывает вопросы и непонимание, то стоит найти инструкцию конкретно по этой технологии и как следует разобраться. Без понимания не получится создать что-то новое.
Для iOS собратьев есть еще один канал, но уже на русском, где можно найти помощь по той или иной вещи. Крайне рекомендую.
Когда вы уже освоитесь в азах, то можно приступать к реализации настоящих проектов. Я советую найти и присоединиться к существующей команде, с которой можно учиться, где вам подскажут и помогут.
Но независимо от того, будете вы работать один или в группе, это не отменяет необходимость в поиске инструментов и решений.
Поиск информации
Во-первых, для любого языка и платформы есть так называемые 'awesome' списки. Это подборка полезных материалов, библиотек и прочих ништяков специально для разработчиков.
Например, для iOS.
Найдите похожий в своей области, изучите и обязательно подпишитесь на коммиты. Так вы будете получать информацию об апдейтах и находиться в курсе новых решений.
Кстати, когда ищете какой-то инструмент для задачи, не стоит забывать и о гугле. Можете звать меня капитаном, но многие так увлекаются готовыми подборками, что ленятся или просто забывают смотреть решения извне. Это большая ошибка, потому как огромное количество библиотек оказываются зачастую просто не включенными в эти списки и в итоге проходят мимо глаз.
Еще одно место для поиска информации, уже не такое живое и динамичное (или наоборот, как посмотреть), — это тематические мероприятия и выступления. Даже не важно особо, какие доклады заявлены, там может быть совершеннейшая муть, но главное — это пришедшие туда люди.
Поищите в перерыве ребят из флагманских компаний, расспросите об их стеке технологий и расскажите о своем, поделитесь архитектурой. А потом смело можете наслаждаться потоком критики в вашу сторону.
Может быть, вас даже запомнят, что вообще замечательно.
Проверка навыков
Любое образование требует проверки качества. В университете есть конкретный учебный план, контрольные и экзамены, после которых сразу станут видны ваши проблемы в знаниях и информация о том, что надо подтянуть. Но в реальной жизни ничего такого нет. Еще повезет, если найдете сертификационнные курсы под вашу платформу, как, например, для Android, вот только для iOS ничего подобного нет. Да и то, этот сертификат покрывает лишь малую долю реальных технологий, которые требуются каждый день.
Лучший способ проверки ваших знаний на проблемы, если некому оценить вас со стороны из профессионального окружения, — это прохождение собеседований. Как я писал в прошлой статье, там вас будут допрашивать с наибольшим пристрастием, пытаясь докопаться до всех ваших изъянов. Вам только и требуется, что записывать вопросы, вызывающие сложности.
Можно пойти еще дальше — делать аудиозапись собеседований. При этом не нужно из-под стола как Джеймс Бонд пытаться включить микрофон, просто спросите прямо разрешения. В ответ на поднятые вверх брови интервьюера, скажите честно: "Хочу поработать над ошибками, обещаю никуда не выкладывать". Это имеет дополнительный сверхэффект: человек начинает крайне основательно фильтровать весь базар. Прошу прощения за дворовую лексику, но иначе напыщенный лексикон некоторых личностей просто не назовешь.
Разумеется, при этом не обязательно устраиваться на работу. Да, вы тратите время других людей. Немного некрасиво. Может даже лицемерно. Но любой работодатель тратит впустую куда больше чужого времени, чем вы.
Еще стоит заранее продумать причину отказа. Желательно, чтобы это было связано с чем-то личным, чем интересоваться неудобно. Не надо топорно отвечать: 'Решил остаться на текущей работе'. Любой работодатель, заинтересованный в вашей кандидатуре, начнет вас раскручивать о причинах, уламывать на свою сторону, что в итоге закончится испорченным впечатлением.
Просто скажите: 'Появились неприятные личные обстоятельства, из-за них вынужден отказаться. Не хочу раскрывать детали, но если в будущем вакансия будет актуальна, то обязательно с вами свяжусь. Спасибо, что уделили мне время.'
Так вы оставите впечатление ответственного человека и обзаведетесь знакомствами, которые могут пригодиться впоследствии. И не стесняйтесь спрашивать контакты у технарей, которые вас собеседовали, если они показались квалифицированными. Чем больше ваша сфера общения, тем лучше.
Продвинутые стратегии
Однажды наступает такой момент, когда самообразование, чтение статей и посещение специализированных мероприятий уже не приносит удовольствия результата. Такое наступает, когда вы находитесь на верхней границе middle или уже являетесь senior-ом. Это этап, когда большинство технологий уже изучены, все исследовательские статьи копируют друг друга, и по-крупному остаются только архитектурные вопросы. Потому все так любят мусолить Viper, например. Реально интересных вещей не остается.
Что же делать? Как дальше поднять свой скилл?
На самом деле неизвестных фич еще много, но их зачастую не публикуют. Их авторы ленивы и требуют стимуляции извне.
Потому начинайте писать свои статьи. Возьмите область, в которой вы уверены и разбираетесь, снимите ролик на ютуб или выступите на митинге с этой темой. Не обязательно делать все идеально, даже лучше, если будет к чему прицепиться. Можно начать с простейшего выступления в офисе среди коллег в качестве тренировки. Даже если вы опытнее на порядок, у них все равно найдется вопрос, способный поставить вас в тупик и подтолкнуть к дальнейшим исследованиям.
Обратная связь не заставит себя ждать. В комментариях тут же польются потоки критики, предложений по улучшению, негатива и обвинения вас в некомпетентности.
А вам это и нужно, теперь только успевайте запоминать. И не стесняйтесь писать в личку за уточнением, если чье-то мнение показалось вам интересным, даже если он грубо и отрицательно высказывался о вашей работе. Шанса поумничать никто не упустит. Даже если его заминусовали. Это не значит, что он спорол чушь. С большой вероятностью его не поняли, не все умеют четко выражать свои мысли.
Не беспокойтесь, если вас неправильно поняли и минусуют просто так, как вам кажется. Это неизбежно, не надо это принимать близко к сердцу. Со временем, вы станете формулировать мысли четче и яснее, положительной обратной связи будет больше. Все это в итоге оставляет положительный отпечаток на так называемых communication skills.
Проблема начнется, если вы станете непреложным авторитетом, и критика значительно снизится: несогласные с вами будут просто отмалчиваться, не желая терпеть нападки аудитории. Я регулярно наблюдаю подобное у более известных коллег. Но это уже отдельная тема. Со стороны могу только порекомендовать не зазнаваться, потому как отсутствие критики не означает ваше совершенство, помните об этом.
P.S. Кроме обратной связи вы еще сами разберетесь с материалом, который решили опубликовать. Когда что-то рассказываешь, то начинаешь сам глубже понимать тему. Как говорится, нет лучше способа что-то понять, чем объяснить другому.
БОНУС
Как и обещал, подборка случаев с собеседований:
- Приходишь в компанию, недолго думая, тебя сажают за компьютер и, комментируя каждый твой шаг, просят сделать тестовое задание. Втроем сидят и покачиваются на стульчиках практически впритык к твоему рабочему месту, мотивируя это тем, 'чтобы не гуглил'. И по ходу задавая вопросы на отвлеченные темы. Как хорошо, что я там не работаю.
- Просили написать код к небольшому тестовому заданию… на листочке.
- Трижды просили пройти техническое собеседование, регулярно теряя результаты предыдущего. Каждый раз его проводил новый разработчик, сетуя на раздолбайство и систему.
- Просили перечислить паттерны. Утверждали, что GCD — это паттерн. No comments. Пояснение для не iOS девелоперов: это как говорить, что треды в Java — это паттерн.
- Назначают собеседование с руководством в качестве завершающего и… не приходят. Полчаса пообщался с потенциальными коллегами о жизни.
- Из кода одного проекта, с которым мог бы работать. С разрешения автора.
- Дали сделать тестовое задание. Выложился на 120%, но его даже не открыли. И случай, к сожалению, не единичный.
Некоторые моменты приведены из практики моих знакомых. Большое вам спасибо, что поделились опытом.
Заключение
Я постарался максимально раскрыть способы самообразования от начинающего уровня до senior. Надеюсь, было полезно.
Особый акцент хотел бы сделать на необходимости проверки своих навыков, ведь без взгляда со стороны нельзя быть уверенным в действительности своего прогресса. Если у вас есть команда, которая дает фидбек, то вам очень повезло. Старайтесь регулярно смотреть код друг друга, проводить ревью и устраивать митапы внутри компании хотя бы раз в месяц. Все это крайне способствует вашему развитию.
Напоследок хочу попросить вас рассказать о своих способах саморазвития. Поделитесь вашими фишками. И спасибо всем, кто решит меня покритиковать.