
Полная версия
Как стать программистом, переехать в США и получить работу мечты
Вероятно, вам встретятся рекомендации таких популярных книг по программированию, как «Алгоритмы: построение и анализ» (Томас Кормен, Чарльз Лейзерсон), «Совершенный код» (Стив Макконнелл), «Искусство программирования» (Дональд Кнут). Это хорошие книги, но они не подходят для получения первоначальных знаний в области программирования. Вы получите максимальную пользу от этих книг, когда уже какое-то время поработаете по специальности.
Онлайн-школы
Онлайн-школы – достаточно популярный и эффективный способ изучения программирования. Этот формат очень похож на видеоуроки, но подразумевает более высокий уровень обратной связи. Еще одним плюсом является проверка ваших практических заданий.
Учиться бесплатно в онлайн-школе не получится, цены начинаются от 10 000 рублей за месяц обучения. Платное обучение может добавить вам мотивации не пропускать занятия и выполнять домашнюю работу.
Наиболее известны онлайн-школы от «Яндекса» («Яндекс. Практикум») и Mail.ru (GeekBrains), но в последнее время появляется все больше небольших онлайн-школ. Вероятно, вы часто будете видеть рекламу с обещаниями научить программировать за три месяца и устроить на работу с зарплатой от 100 000 рублей. Реальность, разумеется, отличается от рекламных слоганов. За три месяца возможно выучить основы языка, но для получения прикладных навыков требуется куда больше времени.
Если вам позволяют финансовые возможности, то онлайн-школа может стать для вас хорошим вариантом для изучения программирования. Если отнестись серьезно к занятиям и домашним заданиям, то можно достаточно быстро освоить базовые навыки.
Офлайн-школы
Спрос на программистов настолько высок, что некоторые ИТ-компании готовы бесплатно обучать программированию и готовить специалистов. Офлайн-школы – наиболее эффективный способ усвоения информации, а получить ответы на возникающие вопросы можно при живом общении. Еще одним большим плюсом офлайн-школ является возможность трудоустройства после окончания.
Наиболее популярные школы на момент написания книги: «Тинькофф Финтех», школа программистов HeadHunter и «Школа 21» – проект Сбербанка, основанный на методике, используемой в инновационной французской школе программирования Ecole 42. Ежегодно появляются новые школы, поэтому стоит самостоятельно проверять информацию в поисковике.
Когда я работал в «Тинькофф», мы нанимали очень много ребят из нашей финтех-школы, поскольку выпускники имели хорошие базовые и практические навыки для решения повседневных задач. Сейчас обучение программированию проходит в Москве, Санкт-Петербурге, Новосибирске, Екатеринбурге и Рязани. Доступно множество направлений, среди которых разработка приложений для iOS и Android, программирование на Python, Scala, JavaScript.
HeadHunter в своей школе обучает программированию на Java и JavaScript. Занятия проходят по вечерам в московском офисе компании. Продолжительность курса – полгода: три месяца теории и три месяца практики. По завершении обучения у вас будут хорошие шансы устроиться в компанию.
«Школа 21» отличается от классических офлайн-школ программирования. В этой школе нет преподавателей, а задания проверяют сами студенты. Также оказывается помощь в поиске оплачиваемой практики в ИТ-компаниях. Обучение в школе бесплатное и проходит в Москве и Казани. Перед началом обучения в течение месяца проходит жесткий отбор, после которого начинается более глубокое изучение программирования. Доступны все популярные языки программирования: C, C++, Swift, PHP, Pyton, Rubi, JavaScript и т. д.
Обучение в офлайн-школе подойдет не всем, поскольку большинство школ находится в Москве и крупных городах. Но если у вас есть возможность поступить и посещать офлайн-школу, то постарайтесь использовать этот шанс, поскольку это откроет для вас больше перспектив.
Я помню, как один парень ездил из Казани в Москву на каждое занятие в «Тинькофф Финтех» и в результате успешно закончил обучение, а затем получил работу.
В изучении программирования определяющую роль играет не выбранный способ обучения, а постоянство и настойчивость. Не теряйте много времени на поиски наилучшего варианта. Если сомневаетесь, начните с обучения по видеоурокам – это универсальный и бесплатный способ начать осваивать программирование.
Будьте готовы к тому, что вначале у вас ничего не будет получаться, а мысли о том, чтобы бросить обучение, будут приходить очень часто. Ваш мозг будет искать тысячу причин для пропуска занятий или переноса на потом. Все это стандартная реакция нашего организма на получение полезной, но неинтересной и сложной информации. Просто нужно продолжать двигаться вперед.
Изучение основ языка программирования и приемов прикладной разработки займет несколько месяцев. Время обучения будет сильно зависеть от того, сколько времени вы сможете выделять и насколько эффективно работать. Но недостаточно просто пройти определенный материал и выполнить практические задания – важно овладеть самостоятельными навыками создания проектов. Это важный этап на пути к поиску первой работы, о котором мы поговорим в следующей главе.
Создание своих проектов
После того как вы освоили основы программирования и получили базовые навыки, самое время начинать свой проект. Создание своих проектов – один из самых важных этапов в процессе изучения программирования и развития в сфере ИТ. Это позволит вам получить реальный опыт прикладной разработки программного обеспечения, а также создать первые проекты для своего резюме.
Вам не нужно знать все тонкости выбранного языка программирования для написания своего первого проекта – пробелы в знаниях заполняются в процессе работы. Вам потребуется применить на практике все то, что вы изучили ранее, а также самостоятельно найти ответы на сотни вопросов, возникающих в процессе разработки.
Не стоит недооценивать умение искать информацию в Google. Этот навык поможет вам быстро находить ответы на возникающие вопросы. Поскольку вы программируете на одном из популярных языков программирования, то, вероятнее всего, решение вашей проблемы уже опубликовано на Stackoverflow или другом форуме. Стоит понимать, что большинство информации доступно только на английском языке, следовательно, вам предстоит искать ответы на английском.
Обладать какими-либо знаниями и уметь применять их на практике – далеко не одно и то же. Именно поэтому стоит как можно быстрей начинать работу над своим проектом. В следующих главах мы подробно рассмотрим каждый этап работы над ним.
В процессе работы над проектом вы приобретете много полезных навыков, главный из которых – решение неочевидных, на первый взгляд, проблем. Самостоятельный поиск решений – это один из самых главных навыков программистов.
Перед тем как получить свою первую работу программистом, я написал два приложения, которые могли продемонстрировать моему будущему работодателю наличие у меня необходимых практических навыков. Множество моих друзей и знакомых нашли свою первую работу таким же образом.
Идея
Первое, что вам стоит сделать, – определиться с основной идеей продукта. Для этого выпишите на листок список приложений, сервисов или сайтов, которые были бы вам интересны. Идея не обязательно должна быть уникальной, вполне нормально написать приложение для списка дел, трекер выпитой воды или прогноз погоды. Еще больше идей можно найти в Google по запросу side project ideas. На этом этапе важно определиться с выбором и двигаться дальше.
Для первого проекта не стоит выбирать идею со слишком сложной реализацией. Например, новичкам будет непросто написать приложение по обработке видео или графический редактор.
На этапе выбора идеи можно определить, какой минимальный набор функций должен содержать ваш продукт. Не старайтесь сразу сделать большой продукт, выделите базовую функциональность и сконцентрируйтесь на ее реализации, в дальнейшем вы легко сможете добавить новые функции. Например, когда я писал приложение для составления списка фильмов, в первой версии я реализовал только самые важные функции: поиск фильмов и добавление их в избранное. А в дальнейшем добавил синхронизацию между устройствами, рейтинги и расширенную информацию.
Дизайн
После того как вы определились с идеей, стоит подумать о дизайне и UX. Можно начать с набросков интерфейса и основных функций в блокноте. Затем перенести этот дизайн в графический редактор – тут хорошо подойдет Sketch или Figma. Если вам не хочется разбираться с графическими редакторами и самостоятельно рисовать интерфейс, то можно попробовать найти готовый дизайн.
В интернете множество сайтов, где вы можете скачать бесплатные шаблоны для сайтов и приложений. Можно целиком использовать готовый дизайн или взять только основные элементы. Также хорошим ресурсом для поиска шаблонов дизайна является Pinterest. На этом сервисе вы без особых проблем найдете множество хороших примеров, которые сможете использовать в своем проекте. Для первых проектов вам не нужен уникальный дизайн, можно взять готовые шаблоны для экономии времени.
Например, если вы хотите создать веб-сервис, связанный с фильмами, то достаточно ввести в Google-картинках movies web ui – и вы получите десятки вариантов дизайна для вашего приложения.
Не стоит пытаться сделать сложный пользовательский интерфейс с большим количеством нестандартных элементов. Правило «чем проще, тем лучше» хорошо работает в области разработки программного обеспечения.
В результате у вас должны получиться экраны и элементы вашего приложения в виде графических материалов. Перед тем как начать программировать, очень важно определиться с набором основных экранов в приложении и сценарием взаимодействия с ними.
Вероятно, у вас появится желание сначала написать код, а только потом приступить к дизайну. Это одна из наиболее часто совершаемых ошибок среди новичков. В результате такого подхода многое нужно будет переписывать, поскольку в процессе дизайна выявляется большое количество подробностей и требований, которые невозможно предусмотреть на этапе разработки. Соблюдайте баланс и не тратьте очень много времени на создание идеального дизайна, но и не переходите к разработке без готовых макетов.
Контроль версий
Представьте, что вы что-то изменили в коде и ваш проект перестал работать – нужно срочно вернуть все обратно, но вы уже не помните, что было изменено. Для решения таких проблем и существуют системы контроля версий, которые хранят все сделанные изменения, а также облегчают командную разработку.
Git – это одна из самых известных систем контроля версий с открытым исходным кодом, на которую полагаются миллионы разработчиков по всему миру. Git хранит информацию о том, кем какие изменения были сделаны, и позволяет очень легко ими управлять. Рано или поздно вам придется разобраться с основами Git, поскольку эта система версий является неотъемлемой частью ежедневной работы большинства программистов.
На первых этапах нет необходимости погружаться во все тонкости Git, достаточно будет освоить базовые функции. Для того чтобы начать работу с Git, нужно будет создать учетную запись и скачать одноименное приложение с официального сайта github.com. Далее, используя это приложение, необходимо создать репозиторий, а в дальнейшем добавлять новые изменения. Если у вас возникнут сложности, то в интернете вы без проблем найдете множество статей и курсов, подробно рассказывающих о принципах работы с Git.
В результате вся история изменений будет храниться на сервере GitHub. Это позволит вам не потерять важные изменения, а также при необходимости вернуть проект в предыдущее состояние. Еще одним плюсом является возможность показать свой код другим программистам для получения обратной связи и проверки ошибок.
Разработка
Настало время применить имеющиеся навыки программирования на практике. Вероятно, то, что вы изучили ранее, не будет получаться на практике, а некоторые проблемы будут казаться нерешаемыми. Вам потребуется самостоятельно справиться с этими проблемами и продолжать превращать дизайн в реальное приложение.
Важным моментом в процессе создания первого приложения является обратная связь. Будет здорово, если у вас есть друг-программист, который сможет посмотреть ваш код и указать на ошибки. Если у вас нет знакомых, то можно поискать конференции программистов в своем городе или найти группы в социальных сетях. Еще один вариант поиска – написать личные сообщения программистам в LinkedIn с просьбой посмотреть ваш код.
Обратная связь очень важна для того, чтобы узнать лучшие практики и избежать распространенных ошибок, которые совершают большинство новичков. Необходимость показывать свой код другим людям может вызвать дискомфорт, особенно при написании первого приложения. Это нормальное чувство, с которым сталкиваются начинающие разработчики. Важно помнить, что советы опытных программистов могут сэкономить вам много времени в процессе развития навыков программирования.
Следующим важным этапом в процессе разработки является декомпозиция задач. Полезно разбить проект на мелкие подзадачи – это позволяет лучше контролировать процесс разработки и примерно понимать, какой объем работы еще предстоит сделать. Также выполнение подзадач создает ощущение прогресса и добавляет мотивации в процессе создания проекта. Для управления подзадачами можно использовать Trello – в этом приложении вы сможете разбить ваш проект на небольшие подзадачи и двигать их по статусам. Таким образом процесс разработки будет более прозрачным и эффективным.
За несколько месяцев работы вы сможете создать свое первое приложение. Важно довести приложение до какого-либо финального состояния. Возможно, придется отказаться от каких-либо функций и пойти на компромиссы в дизайне, но важно получить финальный результат и опубликовать свой продукт.
В процессе работы над своими проектами вы приобретете много полезных навыков, которые пригодятся вам на будущей работе. Перед тем как получить свою первую работу программистом, я написал два приложения. Это позволило получить минимально необходимый опыт для того, чтобы пройти собеседование и в дальнейшем справляться с рабочими обязанностями.
Публикация
Не стоит стесняться опубликовать свой проект для большой аудитории. Если вы разработали веб-сервис или сайт, то купить хостинг и домен не потребует больших финансовых вложений. Для разработчиков мобильных приложений необходимо заплатить небольшую сумму за возможность публикации в магазине приложений.
Созданные вами продукты будут сильной составляющей вашего резюме. Для работодателя это будет означать, что вы можете работать самостоятельно, разбираться в сложных вопросах и доводить дела до конца. Также ваши проекты могут принести вам дополнительный доход.
Еще один способ увеличить свои шансы при поиске работы – опубликовать свой проект в открытый доступ на GitHub. Так вы сможете показать свое умение писать качественный код. Перед публикацией в открытый доступ обязательно следует потратить время на то, чтобы привести код в нормальное состояние. Проверьте структуру проекта, напишите тесты, удалите лишние комментарии, избавьтесь от магических переменных и замысловатых конструкций. Нужно понимать, что вашему потенциальному работодателю не важно, что делает ваше приложение, ему куда интереснее увидеть, как оно написано. Во многих компаниях кандидаты, которые присылали ссылки на проекты, всегда имеют больше шансов получить приглашение на собеседование.
Поиск работы
Термины:
Рекрутер – специалист по поиску кандидатов
Интервью – собеседование
Интервьюер – человек, проводящий собеседование
Оффер – письменное предложение о работе с указанием заработной платы
Нужно как можно раньше устраиваться на работу программистом для того, чтобы начать накапливать реальный опыт в области разработки программного обеспечения. Также не стоит ограничивать поиски работы только родным городом, обязательно обратите внимание на Москву и Санкт-Петербург.
Реальность такова, что зарплаты программистов в Москве и Санкт-Петербурге в 2—3 раза больше, чем в регионах. Если вы сейчас за пределами этих городов, то стоит серьезно задуматься о поиске работы и переезде в столицу. Нет большой разницы, в каком городе искать работу, в плане сложности прохождения собеседования. Помимо высокой зарплаты, переезд в Москву и Санкт-Петербург откроет много карьерных перспектив и поможет получить новые связи. Также это отличный вариант оценить все сложности смены места жительства и подготовиться к последующему переезду в другую страну.
В процессе поиска работы важно поставить цель добиться лучшего результата. Например, устроиться на работу в московский офис «Яндекса», Mail.ru, «Тинькофф», Avito, Badu или Revolut. Возможно, на первый взгляд это может показаться малореалистичным, особенно для программиста без опыта работы, но в реальности у вас есть все шансы. В следующих главах мы подробно поговорим о том, что нужно делать для получения работы мечты.
Поиск работы – это увлекательный процесс, который начинается с составления резюме и заканчивается подписанием приглашения на работу. Со временем приходит осознание того, что для успешного прохождения собеседования вам необходимо понять, чего ожидает от вас потенциальный работодатель. Для этого вам предстоит продемонстрировать хорошие технические знания и доказать, что вы без проблем справитесь с поставленными задачами. Не менее важно произвести хорошее впечатление и показать, что с вами будет приятно работать. Я провел около 50 собеседований во время работы в «Тинькофф Банке» и могу с уверенностью сказать, что каждый из этих пунктов играет важную роль.
Процесс поиска работы, как правило, состоит из следующих этапов:
1. Составление резюме.
2. Поиск вакансий.
3. Выполнение тестового задания.
4. Техническое собеседование.
5. Обсуждение и подписание приглашения на работу.
Важно правильно подойти к каждому этапу, и тогда вы сможете получить достойное предложение о работе в хорошей компании. Далее мы подробно разберем каждый из этих этапов.
Составление резюме
Хорошо составленное резюме многократно увеличивает ваши шансы на получение работы. Стоит потратить время и силы на этом этапе, для того чтобы в дальнейшем получить больше возможностей для достойного предложения.
Если не вдаваться в подробности, задача рекрутера состоит в том, чтобы найти кандидата, который соответствует описанию вакансии. Это значит, что данные в вашем резюме должны дать рекрутеру всю необходимую информацию для принятия решения о том, что вы подходите на имеющуюся вакансию. Еще одна задача рекрутера – проверить, нет ли в вашем резюме неправды. Я настоятельно рекомендую не врать в процессе поиска работы.
Далее я приведу пример резюме, которое вы сможете использовать в качестве шаблона.
Иванов Сергей
Junior iOS Developer (Swift)
Дата рождения: 17.09.1990
Город: Пермь (готов к переезду)
Телефон: +7 (123) 456 78 90
Email: sergey.ivanov@gmail.com
GitHub: github.com/sergey. ivanov
ОПЫТ РАБОТЫ
iOS-разработчик (март 2020 – настоящее время)
Полный цикл разработки приложений, от идеи до продвижения в App Store.
Movie List – простое и удобное приложение для составления списка фильмов.
– Реализовал клиент-серверное взаимодействие с The Movie Database API
– Разработал более 10 экранов с нестандартным дизайном, используя UIKit
– Реализовал синхронизацию данных с использованием CloudKit
– Использовал CoreData для кеширования пользовательских данных
– Локализовал приложение на 4 языка и опубликовал в App Store
– Написал 30 юнит-тестов и 10 UI-тестов
– Приложение было скачано более 7 000 раз за 6 месяцев
Travel Guide – офлайн-путеводитель по популярным городам мира.
– Реализовал поддержку офлайн-карт на базе фреймворка MapBox
– Использовал Core Data для доступа к данным без интернета
– Добавил монетизацию приложения с использованием StoreKit
– Реализовал 12 экранов с нестандартными UI-компонентами, используя UIKit
– Опубликовал и продвигал приложение в App Store
КЛЮЧЕВЫЕ НАВЫКИ
– Умение писать чистый и понятный код
– Навыки разработки и дизайна современного UI
– Опыт проектирования и разработки клиент-серверных приложений
– Умение заканчивать работу в срок
ТЕХНОЛОГИИ
Swift, UIKit, Foundation, CoreLocation, Autolayout, CocoaPods, Git, JSON, Client-Server API, GCD/Operation, MVP, Core Data, StoreKit, iCloud Sync
КУРСЫ
Видеокурс Swift – Алексей Скутаренко
Разработка iOS приложений на Swift – Geekbrains
ОБРАЗОВАНИЕ
Высшее образование: Пермский национальный исследовательский технический университет – «прикладная информатика» (2015—2020)
Первое, на что стоит обратить внимание, – это оформление вашего резюме. Для того чтобы сделать его более привлекательным для рекрутера, стоит придерживаться нескольких правил. Во-первых, резюме начинающего разработчика не может занимать больше одной страницы. Во-вторых, не нужно использовать сложные шаблоны, самый лучший вариант оформления – это просто черный текст. Также важно соблюдать одинаковые отступы между блоками и абзацами. В качестве инструментов оформления можно использовать размер шрифта, отступы, выделение жирным и курсивом.
Давайте рассмотрим подробнее наиболее важные элементы резюме. Первое, на что обращает внимание рекрутер, – это название должности. Важно указать конкретную позицию, например Junior iOS Developer (Swift). Таким образом вы не только привлечете внимание рекрутера, но и сэкономите свое время, исключив предложения о нерелевантных вакансиях. Ошибкой будет написать в должности просто «Программист», поскольку это вносит большую долю неопределенности о кандидате.
Добавьте к вашему резюме фото: люди хотят видеть, с кем им предстоит работать. Ваша фотография должна быть сделана в бизнес-стиле, не стоит выбирать снимок с отдыха или вечеринки. Будет здорово, если у вас получится произвести позитивное и дружелюбное впечатление, используя фотографию.
Не забудьте добавить контактные данные. Если вам неудобно отвечать по телефону в течение дня, то добавьте комментарий о том, что предпочтительный способ связи – email. В этом же разделе следует указать ссылку на свой GitHub-профиль. Не забудьте предварительно привести свои репозитории в порядок и добавить описание к каждому проекту. Хороший GitHub-профиль обеспечит вам приглашение на собеседование, а в некоторых случаях может послужить заменой тестового задания. Подробно об оформлении GitHub-профиля мы поговорим во второй части книги.
Следующий важный момент – это опыт работы. Основной упор должен быть сделан на релевантном опыте. Даже если вы успешно проработали последние несколько лет в индустрии, не связанной с ИТ, не добавляйте это в резюме. Ничего страшного, если у вас будет всего лишь одна запись о самостоятельной разработке приложений. Коротко опишите проект, укажите ваши обязанности и технологии, с которыми вы работали. Будет здорово, если вы добавите конкретные цифры и результаты, например процент покрытия тестами, количество скачиваний, или коротко опишете сложные технические решения.
Хорошее впечатление также можно создать, добавив личные качества. В последнее время этому разделу резюме начинают уделять все больше внимания. Подумайте, что у вас действительно хорошо получается: возможно, это умение доводить начатое до конца или способность сфокусированно работать.
Не забудьте указать список технологий и фреймворков, с которыми работали. Рекрутеру важно увидеть в вашем резюме определенный список ключевых слов, которые содержатся в вакансии. Для понимания востребованности технологий вы можете поискать вакансии на HeadHunter и проанализировать, какие есть требования к кандидатам в рамках определенного языка программирования. Посмотрев вакансии, вы найдете пробелы в своем опыте и поймете, какие технологии наиболее востребованы.
Наиболее часто встречаемая ошибка в составлении резюме – это добавление ненужной информации. Никому не интересно, какие у вас хобби или опыт работы в McDonald’s. Не добавляйте информацию о наличии автомобиля, семейном положении и спортивных достижениях. Компании нужен хороший программист, а не водитель или спортсмен.
Несмотря на то что образование не играет решающей роли при найме кандидата, указание высшего образования или специализированных курсов может добавить веса вашему резюме.