Интервью
Как преодолевать трудности и самостоятельно стать iOS-разработчиком
Hard work beats talent!
Давид Григорян работает iOS-разработчиком уже 5 лет. Он участвовал в разработке таких крупных проектов, как СберБанк Онлайн, Ozon, Спортмастер и других популярных сервисов. Принимает участие в митапах по мобильной разработке, вебинарах, написанию технических статей на зарубежных ресурсах, а также в научно-технических журналах. Давид является самоучкой, изначально у него было непрофильное образование, поэтому он как никто другой знает, что значит испытывать сложности в процессе освоения профессии разработчика.
Давид расскажи, как ты попал в профессию. Из твоей биографии кажется, что ты преуспевал в точных науках. Или у тебя изначально был очень хороший технический бэкраунд?
Отнюдь. Школа была с гуманитарным уклоном и несмотря на этот факт, меня всё еще хотели исключить из-за явных пробелов и неудач в математике. С таким техническим «багажом» меня ожидал только экономический факультет Московской сельскохозяйственной академии. Из всего «компьютерного», что я успел попробовать в школьные годы, так это платный месячный курс по HTML, в то время таких учреждений было очень мало. Мне это очень понравилось, но к сожалению на этом весь энтузиазм и угас, так как не было практического применения новым знаниям, в основном только домашние работы. Да и не сказать, что это дало какую-то техническую основу.
Обучаясь на экономическом факультете, я понимал, что не буду работать экономистом, сама сфера программирования меня интересовала, но я вообще представления не имел, как они работают и что входит в круг их обязанностей. В то время ролики на YouTube, которые рассказывали про то, кто такие программисты, были очень витиеватыми. После обучения в ВУЗе, я всё же решил попробовать себя в ИТ, но никаких данных у меня для этого не было. Пришлось выбирать что-то с низким порогом входа — это оказалась позиция помощника системного администратора.
Сложно ли было входить в ИТ? Какие сложности ты испытывал ?
Работу я эту искал около 6 месяцев. Так как я был пользователем с уровнем владения ПК выше среднего — большинство задач мне были под силу. Заменить картриджи в принтере, перезагрузить сервер/компьютер/факс/браузер, в общем, обычная рутина офисной жизни. Спустя полгода меня наскучила такое однообразие, и я решил сменить сферу деятельности и податься в программирование. Благо, на некоторых созвонах (в которых я редко принимал участие) были разработчики и мне постепенно начало приходить понимание того, чем в принципе занимаются эти специалисты и интерес к данной профессии. Не дам соврать, мой оклад также говорил о том, что пора что-то менять. Я принял решение об уходе и о том, что обучусь программированию самостоятельно. Я и понятия не имел, с какими трудностями мне придется столкнуться.
Как ты начинал учебу? Почему выбрал именно iOS-разработку? Ты обучался один или с кем-то?
Первое что я должен был для себя определить — в каком направлении я хочу разрабатывать. На тот момент я выделил следующие направления:
- Desktop
- Web
- Mobile
- GameDev
Погуглив и проведя мини-исследование по каждому направлению, я понял, что:
- Desktop скоро станет невостребованным
- GameDev — очень высокая конкуренция и высокий порог входа
Остаётся Web и Mobile. Я решил поискать вакансии на порталах поиска работ по этим двум направлениям и посмотреть востребованность и требования по каждому из этих направлений. Я решил для себя, что мне стоит начать с чего-то простого, так как если задать слишком высокую планку, можно просто перегореть и забросить это дело.
Поэтому пункт с количеством требований в том или ином направлении был для меня, на тот момент, значимым. Для веба как минимум требовались знания HTML, CSS, JavaScript, какого-нибудь фреймворка по типу jQuery, работой с БД, а еще лучше, весь стек LAMP.
С мобильной разработкой всё было попроще, знание соответствующего языка, на тот момент (2016 год) Objective-C/Java и знание iOS/Android SDK. Я уже решил, что буду заниматься мобильной разработкой под iOS, хотя, скажу честно, я был далеко не фанатом яблочной продукции. Однако количество устройств у Apple было гораздо меньше, чем под Android, и я посчитал, что это должно упростить ситуацию. К моему удивлению, я нашел бесплатный курс по iOS-разработке. Курс состоял из 40 уроков и почти каждый урок сопровождался домашним заданием. Обучался я один, никакого контакта с преподавателем не было, хотя у меня была возможность задавать вопросы, для меня было эффективным во всём разбираться самостоятельно.
Какие трудности ты испытывал во время обучения? Как нашел первую работу?
Я абсолютно ничего не понимал. От слова совсем. На свои последние деньги я купил себе iPod Touch и лицензию разработчика и начал обучаться. На обучение уходило по 6-8 часов в день. Мне хотелось как можно быстрее всё освоить и начать уже работать. У многих эта тенденция сохранилась до сих пор, но с таким подходом вход в профессию будет еще сложнее. Так же, я пытался невольно сравнивать себя с другими новичками, которые продвинулись дальше меня. Это конечно демотивировало.
Но сравнивать себя с кем-либо — это бесполезная и деструктивная затея. У каждого свой темп, свой подход, своя отдача.
Одной из самых весомых сложностью была неуверенность. «А получится ли всё в итоге?», «Что если я пройду этот годичный курс и ни к чему не приду?». Вопросов было больше, чем ответов, и отвечать было некому, кроме как самому себе.
Первую работу я искал параллельно обучению, отзывался почти на каждую вакансию iOS-разработчика. К тому моменту у меня уже было приложение в App Store, простая новостная лента. После отклика на сотню вакансий на меня обратила внимания Paragon Software Group, которая проводила стажировку. Так я и получил свою первую позицию.
Ты впоследствии получил профильное образование? Как ты считаешь, необходимо ли оно сегодня?
Несмотря на то, что у меня уже было 2 года опыта работы, я все-таки решил получить образование. Это была полутора годовая профессиональная переподготовка в вечернее время. За такой срок получить все необходимые знания в университете — задача не из простых. Упор, как правило, так же делается на самостоятельную работу во внеуниверситетское время. Раньше, например, требование высшего профильного образования в Computer Science было чуть ли не обязательным пунктом в каждой вакансии. Но после этого цифровой мир претерпел революцию мобильных устройств и планка постепенно начала снижаться, так как идей и планов у бизнеса становилось всё больше и больше. Насчет требования к техническому образованию я скажу так. Если вы собираетесь его получать (и ВУЗ входит в Tier-1,2 или 3), вам будет НАМНОГО проще как изучать новые области, так и решать сложные задачи.
Какие советы и рекомендации ты бы дал новичкам, которые решили войти в профессию, не имея технического бекграунда ?
Рекомендации следующие:
- На обучение нужно закладывать 6 месяцев — 1 год. В этот период вы должны не только просматривать лекции и уроки. Если вновь полученные знания не закрепить практикой (домашним заданием, pet-проектом или какой-либо другой формой практики) — то эти знания на ветер. Мозг так устроен, что такие технические сферы и техническую информацию он понимает и запоминает только в том случае, если она была обработана несколько раз. Более того, все домашние задания и pet проекты станут неплохим портфолио при поиске первой работы. С портфолио ваши шансы на получение работы намного увеличиваются.
- Сила воли и терпение — тоже очень важны на начальном этапе, потому что неудачи будут практически всё время. Об этом тоже важно помнить и не ожидать от себя грандиозных результатов в самом начале.
- Найти себе ментора. Если вы обучаетесь в рамках какого-либо курса и у вас есть преподаватель или ментор, то это отличная возможность задать ему те вопросы, которые будут вас волновать. Вначале я бы посоветовал найти ответ на свой вопрос самостоятельно и в случае неудачи попросить помощи. Ментору будет проще вам помочь, если у него будет более подробный контекст вашего вопроса.
Пример того как, можно правильно задать вопрос: Я пытался сделать так, чтобы при нажатии на эту кнопку закрывалось меню. Судя по логированию кнопка нажимается, но меню почему-то не закрывается. Пример не совсем корректного вопроса: Как закрыть меню?
- Уделять внимание перерывам и физическим нагрузкам. Я в своё время думал следующим образом. «Зачем тратить время на прогулки и отдых, когда я это время могу потратить на изучение нового материала или выяснить, почему же моя программа не работает?». Это неверный подход. Все идеи, все новые мысли и решения как правило приходят когда наш мозг находится в рассеянном состоянии, во время прогулок, в душе, во время занятия спортом или любым другим видом занятий. Об этом феномене рассказано во многих материалах, и я лично рекомендую к прочтению книгу Барбары Оакли «Думай как математик» — в этой книге как раз описываются такие приёмы.
- Умение гуглить. Раньше это было одним из требований в вакансиях, сейчас это требование смотрится топорно, но это один из основных навыков. Искать информацию, как правило, нужно на английском языке, так как в основном вся документация и всё комьюнити общается и обменивается информацией на английском. Чем короче и точно выглядит поисковый запрос, тем выше шанс того, что вы найдёте ответ. Гуглить — это не атрибут junior разработчика. Им пользуются все разработчики всех мастей.
Примеры хорошегозапроса: close menu android send http request ios Пример плохого запроса: how to close action menu when user taps on custom button in landscape mode in android
- Декомпозировать задачи. Сколько было придумано различных метафор и выражений на этот счет: ешь слона по кусочкам, разделяй и властвуй и т.д. Умение разбивать крупные и сложные задачи на мелкие и простые нужно будет не только в начале карьеры, а на всём её протяжении. У очень многих, в том числе и у меня, остается соблазн сделать всё и сразу. В большинстве своем это приводит к тому, что работу нужно будет начинать с начала или залатывать её сиюминутными решениями.
- Не боятся признавать незнание. Это сложная часть, особенно в культуре СНГ, когда многие хотят выглядеть всемогущими программистами, у которых нет ни пробелов, ни недостатков. Если вы чего-то не знаете или в какой-то теме разбираетесь хуже — этого не стоит стыдиться. Некоторые прячут это за ширмой: «Мне не интересны такие задачи». Но факт в том, что в работе программиста неинтересных и рутинных задач тоже будет достаточно.
- Не пытайтесь сразу создавать аналог Facebook/Google/Twitter. У вас наверняка есть хорошая идея для стартапа, однако воплощать её в процессе обучение — занятие не очень полезное и продуктивное на данном этапе. ИТ очень широк и многие, даже опытные специалисты, не могут учесть все аспекты при построении таких высоконагруженных систем.
Есть какая-то специфика именно в iOS-обучении? Может Roadmap?
iOS направление по-своему очень специфично. Разрабатывать можно только с использованием техники и ПО от компании Apple. Язык программирования Swift тоже разработан компанией Apple и в большинстве своем только он и используется для создания мобильных приложений. Да, сейчас на рынке существуют и кроссплатформенные технологии, но они больше подходят для MPV проектов и стартапов, когда с минимальными затратами нужно выпустить приложение с минимальным функционалом под две платформы — iOS и Android. Крупные проекты, такие как Instagram и Facebook, так же используют кроссплатформенные решения, однако в большинстве своём это касается каких-то отдельных и простых экранов, например «Настройки» или «Профиль».
Что касается roadmap, то я рекомендовал бы посмотреть для начала Стэнфордские курсы по iOS-разработке. Они публикуются на официальном YouTube канале Стэнфорда и обновляются каждый год. Если вас заинтересовало то, каким образом создаются приложения под iOS, тогда уже имеет смысл покупать первоначальный сетап для разработки и выполнять домашние задания и параллельно делать то, что рассказывается в лекциях. Если денежных средств для новой техники мало, то можно приобрести бюджетные варианты (на 2022 год): б.у. Mac mini или Macbook Air, а также, б.у. iPod Touch 7-ого поколения или iPhone SE2.
Для первоначального портфолио может подойти такое приложения, как лента новостей с подгрузкой фотографий. Вдобавок, можно параллельно следить за тем, когда и где проводятся стажировки, узнать минимальный набор требований и подаваться на стажёра. Учтите, что в большинстве своем, программа обучения может показаться слишком перегруженной. Это один из этапов проверки того, как вы справляетесь с подобными вызовами. Если в процессе стажировки вы сталкиваетесь с какими-то трудностями, то всегда можно обратиться к своему ментору. Но как было сказано ранее, с вопросами лучше приходить тогда, когда у вас есть список тех решений и подходов, которые вы пытались применить.
Как сейчас ты учишься/развиваешься?
Я наивно полагал, что мое обучение закончится после 2-3 лет работы. Однако, когда у меня за плечами уже 5 лет трудового стажа, я больше понимаю, что есть куда расти.
Возможно, этот факт отпугнет некоторых новичков, однако к этому моменту учеба уже становится как неким приключенческим исследованием, а не нудным заучиванием материала в учебных заведениях. На сегодняшний день я всё так же покупаю книги, смотрю обучающие материалы на YouTube, читаю статьи и слушаю подкасты. Как правило, темы перешли уже от общих к более специфичным и узконаправленным.
Мне, на начальном этапе, больше подходил принцип обучаться от высокоуровневых тем к низкоуровневым, что принципиально отличается от того, как обучают в классических учебных заведениях. Например, в ВУЗе вам сначала будут читать лекции про то, как работает операционная система, архитектура компьютера, как передается и хранится информация, биты, байты, структуры данных и алгоритмы и т.д. Это всё очень важные темы. Однако если человек, без профильного образования и опыта начнет учится по такому принципу, он быстро потеряет мотивацию и желание стать программистом.
Дело в том, что у многих мозг устроен таким образом, что ему нужен фидбек от полученных знаний. Если мы вначале будем обучаться по высокоуровневой модели, например, выставлять кнопки на экране, менять цвет фона при нажатии на различные кнопки — то мы уже начнем понимать, как и с чем происходит взаимодействие. Как итог, мы получим результат от новых знаний, который можно кому-то показать. И здесь мы имеем дело с тем, с чем мы уже сталкивались в процессе работы с компьютером или смартфоном (экран с кнопками).
Если же мы будет использовать низкоуровневую модель и начнем реализовывать числа Фибоначчи рекурсивным подходом в консольном приложении — то таким результатом не похвастаешься ни себе, ни друзьям, ни знакомым. Да и вряд ли кто-то из новичков когда-либо сталкивался с числами Фибоначчи и понимает, для чего они нужны.
Что пожелаешь тем, кто начинает учиться сейчас?
Напоследок я хотел бы отметить, что наличие или отсутствие так называемого «математического склада ума» не делает вас программистом. Программистом вы становитесь только благодаря постоянному труду и обучению. Все люди разные, и поэтому каждый из них вносит свои интересные и необычные идеи, которые воплощаются в виде программных решений. Барбара Оакли, которая в юном возрасте не умела включать телевизор, не умела говорить который час, провалила все экзамены по математике — стала доктором наук, инженером-консультантом, членом совета Американского института медицинского и биологического машиностроения. За обучения она взялась в 26 лет, но даже если вам больше — это вообще ничего не значит.
Hard work beats talent!