Как стать программистом с нуля – инструкция от профессионала

Фото: lifehacker.ru Антон ЯрковИнженер-программист, руководитель команды разработчиков Access Softek Inc., США

О том, как стать программистом с нуля, рассказывает руководитель команды разработчиков компании, занимающейся разработкой банковских продуктов для рынка США.

Содержание статьи [развернуть]

    На пути к профессии программистаСоветы начинающим программистамСоветы студентамКак освоить профессию программиста специалисту из другой сферыПерспективы профессии программиста

Меня зовут Антон Ярков, я являюсь 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.

Обязательно нужно практиковаться в решении реальных задач. Для этого создано множество платформ, вот самые популярные:

    topcoder.com official.contest.yandex.ru LeetCode.com

Все эти знания позволят вам проще и быстрее подготовиться к интервью в любую крупную компанию. При этом не стоит спешить. Лучше разобраться детальнее и порешать больше задач для лучшего понимания темы.

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) в ту или иную сторону.

Я не считаю стыдным желать высокой зарплаты или признания в области, но кратчайший путь к этим двум целям совершенно разный и требует очень разного подхода к своей карьере, о котором я могу рассказать в следующей статье.

А чтобы добиться сразу нескольких целей, кратчайшего пути, пожалуй, не знает никто. В общем, хоть большинству это и кажется банальным, но обязательно в первую очередь нужно внимательно относиться к своим истинным целям и желаниям, чтобы не потратить время зря.

Спросите себя зачем вы хотите стать программистом. Честный ответ позволит вам найти наиболее быстрый путь к мечте.

Антон Ярков – Senior Software Developer and Chief of development staff.  Инженер-программист и руководитель команды из 100 разработчиков в компании Access Softek Inc., занимающейся разработкой банковских продуктов для рынка США. Последние 8 лет играет ключевые роли в приятии инженерных и управленческих решений, работая над высоконагруженными и инновационными приложениями. 10+ лет опыта в разработке в стартапах и enterprise. LinkedIn.

ITВостребованные профессииИнтересные профессииИнтернет 200000

Источник: promdevelop.ru

Добавить комментарий