О том, как стать программистом с нуля, рассказывает руководитель команды разработчиков компании, занимающейся разработкой банковских продуктов для рынка США.
Меня зовут Антон Ярков, я являюсь Senior Software Developer и Chief of Staff (руководитель распределенной команды разработки) из 100+ разработчиков в калифорнийской компании Access Softek Inc. На данный момент у меня больше 12 лет опыта в разработке, как в стартапах, так и enterprise.
У меня техническое образование, но не по информатике. Я думаю, что сделал успешную карьеру программиста в первую очередь за счёт неподдельного интереса к предмету, которым я занимался в свободное время со школы. Но вплоть до 4 курса университета я серьёзно не рассматривал для себя профессию программиста, и спохватился довольно поздно. Поэтому я прошёл непростой путь переосмысления своей профессии, дополнительного обучения в свободное время, отказов на интервью, и получения первого предложения о работе. Всё это было больше 10 лет назад, и сейчас, побывав и нанимаемый, и нанимателем, поработав и программистом и лидом, я хотел бы поделиться с сообществом несколькими советами и важными факторами, которые позволят человеку не только проникнуть в IT сферу, но и добиться высоких результатов в ней.
На пути к профессии программиста
Стоит сразу оговориться, что путь этот очень разный для студентов и уже состоявшихся специалистов. И я бы хотел рассказать отдельно про каждый случай:
- Если вы только заканчиваете школу, то очевидно, самым правильным было бы поступить на профильный факультет любого ВУЗа. Даже если ВУЗ не будет самым топовым учебным заведением страны, в течение учёбы вам так или иначе придётся изучить теорию и получить практику программирования, которой будет вполне достаточно (если действительно учиться), чтобы впоследствии пройти собеседование в IT компании и там набраться опыта. Уйма книг и онлайн курсов, доступных в интернете, позволят получить высокий уровень знаний в независимости от названия ВУЗа или красноты диплома.
- Если вы уже студент непрофильного ВУЗа или факультета, то вам придётся свыкнуться с тем, что нужно будет «попотеть» вдвойне. Но стать сильным программистом всё также возможно, так как времени у вас достаточно.
- В случае, если у вас за плечами несколько лет учёбы и работы не по профилю, студенческая жизнь позади, но вы всё же решились сменить профессию, то я не советую брать за основу путь студентов — ваш путь, совершенно иной, однако не менее перспективный.
Советы начинающим программистам
Для начала есть несколько советов, которые подойдут под любой из перечисленных случаев:
1. Есть как минимум две книги, которые познакомят человека любого уровня с азами программирования. Я их крайне рекомендую прочитать перед началом пути:
- Петцольд Ч. Код: тайный язык информатики.
- Столяров А.В.: Программирование — введение в профессию. Том 1 — азы программирования.
2. Сразу же начинайте общаться и вступать в сообщества, делиться первыми и последующими наработками, спрашивать совета и брать лучшие примеры с других. Здесь, пожалуй, первое, что необходимо сделать любому будущему программисту — это завести аккаунты на профильных ресурсах:
- Заведите аккаунт на платформе GitHub. Это сайт, где программисты хранят историю создания своих программ, делятся исходными кодами, учатся и берут примеры, создают совместные проекты и свои собственные, и где целые компании настраивают полный цикл создания программного обеспечения. По ходу использования аккаунта, так или иначе, вам придётся вникнуть в азы технологии GIT, которая используется по всему миру. Книга «Pro Git» от Скотта Шакона поможет вам разобраться во всём необходимом.
- Заведите аккаунт на LinkedIn. Это ресурс, где весь западный мир ищет специалистов, и где можно найти топовых людей из IT-индустрии, спросить совета или просто узнать новости. Тут есть авторы языков программирования и фреймворков, технологий и алгоритмов, книг и журналов.
- Заведите аккаунт и читайте Twitter — там огромное количество технических специалистов всех областей, которые регулярно постят что-то интересное.
- Для мотивации и выбора направления подписывайтесь и читайте тематические рассылки Habr.com, VC.ru, xakep.ru, Telegram-каналы профессионалов индустрии (https://t.me/addmeto, https://t.me/techsparks, https://t.me/g33ks, https://t.me/denissexy и т.д.) и целых компаний (https://t.me/avitotech, https://t.me/luxoftrussia и т.д.), слушайте подкасты про разработку, а также листайте профильные англоязычные ресурсы вроде Hacker News и прочих.
Имея всё это, позднее, при составлении резюме, вам будет что написать и на что сослаться.
3. В своём развитии найдите баланс между тем, что вас действительно интересует и увлекает (создание сайтов, программ, решение задач и т.д.) и изучением всей необходимой теории. Я советую 50% времени тратить на полезную практику и остальные 50% на теорию.
Например, всё ещё поверхностно зная язык программирования, можно уже начать создавать простые утилиты и выкладывать их на GitHub (попутно изучая как пользоваться системой контроля версий Git, или черпая хорошие примеры других похожих программ).
Создание чего-то работающего и полезного будет вас мотивировать и не даст бросить дело, а примеры ваших работ на GitHub дадут будущему работодателю понимания пути вашего развития.
Не стоит сразу и на 100% углубляться в языки, технологии или теорию без практического подкрепления, ведь теория сложна и часто не сразу можно её понять. Да и не вся она применима в жизни.
4. Используйте технику параллельного чтения. Я советую читать параллельно сразу несколько книг по одной и той же теме: языку программирования, алгоритмам, фреймворкам или технологиям. Как правило, главы и темы в них пересекаются. При этом разные авторы дают материал по-разному, и далеко не всегда их ментальная модель совпадает с вашей. К некоторым книгам нужна предварительная подготовка или опыт, а другие «разжёвывают» всё так, как вам нужно.
Я советую читать каждую главу так, чтобы вы максимально понимали прочитанное. И если вы что-то не поняли в какой-то главе, то смело открывайте другую книгу и читайте главу по той же теме. Чаще всего, лишь одна из трёх-четырёх книг объясняет всё подходящим для вас образом. Кстати, далеко не всегда вам подойдут те же книги, которые советуют опытные профессионалы. Найдите своё!
5. Английский язык обязателен. Вам нужно практиковаться в чтении и письме.
К сожалению, перевод книг зачастую искажает написанное и гораздо легче понять автора на английском языке. Если вы не готовы читать книги на английском, тогда хотя бы начинайте читать новостные сайты: вы увидите много новых точек зрения и начнёте постепенно обогащать свой словарный запас.
Практиковаться в письме вы можете на LinkedIn (добавьте в друзья какого-нибудь автора книги или языка и напишите ему пару приветственных слов), Twitter и даже в комментариях к новостным статьям. Не совершать глупые ошибки вам поможет такой сервис как Grammarly, который подскажет как исправить и обогатить написанное.
6. Без работы в компании над реальными жизненными задачами вы не станете программистом. Поэтому целью любого начального изучения программирования является поступление на работу в компанию.
Советы студентам
Итак, мы закончили с общими рекомендациями. Мои советы студентам будут следующими:
1. Изучайте фундаментальные вещи сразу. Не тратьте время на технологии — это успеется! Алгоритмы, структуры данных, практика решения стандартных задач — это три столпа. Переступив через эти темы сейчас, вы либо погубите свою карьеру в будущем, либо вам придётся возвращаться к этой теме и с трудом выкраивать время для изучения.
Книги для параллельного чтения:
- Седжвик Р. Фундаментальные алгоритмы на С++
- C. Скиена. Алгоритмы. Руководство по разработке.
- Т. Кормен. Алгоритмы. Построение и анализ.
- Лааксонен А. Олимпиадное программирование.
- Скиена С., Ревилла М. Олимпиадные задачи по программированию.
Не помешает обращаться к курсам и видео, например, на платформах Stepik или просто на Youtube.
Обязательно нужно практиковаться в решении реальных задач. Для этого создано множество платформ, вот самые популярные:
Все эти знания позволят вам проще и быстрее подготовиться к интервью в любую крупную компанию. При этом не стоит спешить. Лучше разобраться детальнее и порешать больше задач для лучшего понимания темы.
2. Постарайтесь найти несколько интересующих вас проблем и написать более-менее реальные приложения, которые:
- Решают ясную поставленную задачу.
- Имеют хорошо оформленный открытый исходный код на GitHub.
- Можно описать в статье со схемами, графиками и картинками.
Если вам трудно определиться с такой темой, то вот ресурсы, где можно почерпнуть идеи:
- Попробуйте поучаствовать в хакатоне (как онлайн, так и офлайн) и заразиться идеей оттуда. Вы сможете даже продолжить проект, начатый во время ивента.
- Прочитайте мега-список проектов тут.
- Посмотрите список проектов тут.
Коротко опишите свои проекты в резюме. Даже простые вещи покажут вашу активность и заинтересованность. Нанимающий руководитель лучше возьмёт неопытного, но активного разработчика, нежели пассивного «нахлебника».
3. Начинайте проходить интервью в компании. Выбирайте работу в компании, в которую:
- Были сложнее и интереснее интервью.
- Есть практика обучения молодых специалистов.
Выбирайте компанию не по уровню зарплаты, а по тому, насколько много вы сможете узнать и изучить в первые два-три года карьеры. Есть компании, платящие много даже начинающим, но в них никто не будет вас обучать или заботиться о вашем росте, никто не будет просматривать ваш код и давать советы по улучшению. Вполне возможно, что вас нагрузят совершенно другой работой, в которой вы мало будете программировать. Не стоит думать, что первая работа станет вашей последней.
Как правило, чем сложнее и интереснее было интервью, тем более перспективна работа в компании. Даже если после интервью вы чувствуете себя «лузером», но компания готова вас взять «в подмастерье» — это великолепный шанс!
Все дальнейшие шаги будут определяться вами лично или с помощью ваших коллег, друзей и руководителей. Получив фундаментальные знания и первый опыт, вы легко начнёте осваивать технологии, переходить между стеками программирования и компаниями, в общем «искать себя».
Как освоить профессию программиста специалисту из другой сферы
Однако, всё несколько не так с опытными специалистами из других сфер, желающими сменить профессию. И дело в не отсутствии потенциала, как раз наоборот, а в том, что потенциально вы можете скомбинировать свой накопленный опыт с профессией программиста, и это откроет вам огромные возможности.
О важности комбинации двух профессий уже много говорят, и такие специалисты очень ценны. Но важно сделать всё грамотно.
Шаг первый состоит в том, чтобы определиться, чем именно вас привлекает сфера программирования и в каком «стеке» технологий вы могли бы реализовать себя наиболее эффективно. В самом начале пути вы можете ещё не знать, что окажется вашей настоящей «пассией», поэтому стоит ответить на эти простые вопросы:
- Я хочу создавать мобильные приложения?
- Я хочу создавать классные красивые сайты?
- Я хочу создавать бизнес-приложения (банкинг, инструменты расчётов или статистики, и т.д.)?
- Я хочу программировать роботов, игры, базы данных, компиляторы, сложные приложения или искусственный интеллект?
Шаг второй состоит в изучении существующих на рынке компаний и технологий, которые они используют:
- Составьте список компаний, которые занимаются интересующей вас областью или предметом.
- Посмотрите описания вакансий на предмет технологий, которые они требуют от кандидатов. Обычно это язык, фреймворк и набор сопутствующих инструментов.
Например:
- C#, .NET, SQL, Git
- Java, Spring, SQL, Git
- JavaScript, ReactJS, и т.д.
- Kotlin, Android, и т.д.
- ObjC, Swift, iOS, и т.д.
- Выделите наиболее часто пересекающийся список из всех вакансий и компаний, и сузьте список до состояния, в котором будет ровно Один язык программирования и Один основной фреймворк.
Как малоопытный специалист за разумное время вы сможете изучить не так много и не так глубоко, но этого может быть уже достаточно для поступления на работу.
Шаг третий состоит в выборе одной или нескольких ближайших целей для написания более-менее реального приложения в процессе обучения. Цель может быть и большой (создание игры), и малой (создание простейшего сайта), и полезной (автоматизация процесса) и не очень (ИИ, рекомендующий цвет мороженого).
Важно, чтобы вы закончили один или несколько таких проектов, попутно изучив язык программирования и фреймворк. Важно так же, чтобы цель вас мотивировала двигаться и не бросать.
Далее, вам нужно сконцентрироваться на языке и фреймворке, взяв несколько наиболее часто рекомендуемых книг и воспользовавшись техникой параллельного чтения. Как правило, для быстрого старта полезно пройти несколько онлайн курсов (опять же, есть множество платформ, таких как stepik.org и udemy.com).
На процесс обучения потребуется значительные моральные и временные ресурсы, поэтому не забывайте выделять время на то, что вас по-настоящему увлекает в программировании. Результаты вашей работы должны быть обязательно отражены на GitHub, в ваших статьях (в блогах или популярных платформах), а также в вашем резюме. В идеале, после создания первых прототипов программ (сайтов, приложений и т.д.), вы могли бы презентовать их на хакатоне или локальном ивенте, собрать мнения и какие-то метрики (скольким понравилось, сколько людей посчитали идею интересной, и т.д.), о которых так же стоит упомянуть в резюме. Концентрация на результате и метриках очень часто ведёт к найму, несмотря на незначительный опыт.
Далее, начинайте рассылать резюме в компании, и откликаться на предложения на LinkedIn. Удача может улыбнуться не сразу, но спрос на специалистов так высок, что я могу практически гарантировать, что вы устроитесь на работу в IT компанию.
Перспективы профессии программиста
В любом случае, в дальнейшем вас ждёт долгий и увлекательный путь по карьере, который сам по себе тоже бывает совершенно разным. Официально, науке Computer Science чуть больше 50 лет, так что она достаточно нова, и в ней есть, куда расти и развиваться ещё многие годы. Будучи неопытным разработчиком, я отовсюду слышал фразы вроде «Всё уже написано, нечего программировать». Поверьте, это сущая глупость.
При этом, за счёт всеобъемлющего проникновения во все области жизни, IT-сфера чрезвычайно широка и позволяет добиться совершенно разных целей: высоких зарплат, научных степеней в разных областях, интересных задач и нескучной работы, возможности настраивать маятник баланса жизни и работы (work-life balance) в ту или иную сторону.
А чтобы добиться сразу нескольких целей, кратчайшего пути, пожалуй, не знает никто. В общем, хоть большинству это и кажется банальным, но обязательно в первую очередь нужно внимательно относиться к своим истинным целям и желаниям, чтобы не потратить время зря.
Спросите себя зачем вы хотите стать программистом. Честный ответ позволит вам найти наиболее быстрый путь к мечте.