В последнее время мне постоянно задают один и тот же вопрос: «Как стать программистом?». Попробую в этой статье дать на него ответ.
Первое на что надо ответить, а что Вы видите в конце пути, например, через 5 лет? Вы работаете высокооплачиваемым специалистом по найму в компании? Или у Вас свой бизнес по разработке ПО и хотите начать с фриланса, как программист? Это 2 очень разных направления и требуют очень разных навыков.
Для работы по найму требуется быть узким техническим специалистом в своей сфере. Я сам фронтендер, поэтому буду рассказывать на примере фронтенда.
Для работы на фрилансе, надо наоборот быть широким специалистом и выдавать готовый продукт, например, веб-сайт. И учить сначала надо не технические навыки, а «мягкие» - маркетинг без него о тебе никто не узнает, ведение переговоров - можно так «договориться» и попасть в полную кабалу по качеству и срокам, продажи - можно работать долго и упорно, но за копейки. Фриланс — это не про программирование, а про бизнес. Ну и программирование ещё должно быть фулстек, т.е. и фронтенд и бекенд. Или можно прокачивать навык делегирования, чтобы другой специалист сделал часть работы. По фрилансу мне нравится тренер Надежда Раюшкина и её курсы.
И тот и другой путь хорош, если нравится часами сидеть за компьютером и решать задачи - лучше пойти в найм и работать на «дядю», если нравиться общаться, продавать и самому стать «дядей» — это фриланс. Обе дороги замечательные, всё зависит от конкретного человека.
Предположим, что решили стать высокооплачиваемым узким специалистом по найму и работать в команде.
И тут же возникает следующий вопрос «Я уже выучил html\css\js. Меня возьмут на позицию джуна?» Вообще-то, нет. Есть замечательная дорожная карта для фронтендеров Это перечень всех необходимых технологий, которые необходимо освоить так или иначе, чтобы начать проходить собеседование. По этой дорожной карте не надо осваивать все блоки, часть блоков необязательные. Но на 2022 год обязательно необходимо знать 3 раздела:
- Html\css\Javascript
- ReactJS\Redux(Mobx)
- Typescript
Возникает следующий вопрос: «А как доказать, что я знаю эти технологии?» Сделать 2-3 pet-проекта. Например, по Html\css\Javascript сверстать лендинг. Вот мой По ReactJS\Redux я написал «Сервис по учёту финансов "mymoney"» Идей для pet-проектов можно найти вагон и маленькую тележку в интернете.
«А где учиться, чтобы не кинули на деньги? Обязательно ли высшее образование?» Высшее образование не обязательно, для работодателя главное, чтобы ты сдавал задачи качественно и в срок. На прошлой работе, я знал тимлида, который разбирался в практически любой области программирования, и он закончил лесотехнический техникум. И высшее образование сейчас, ну, мягко говоря, даёт сильно оторванные знания от реальных бизнес-задач.
По поводу школ программирования реально очень много разводов. Ключевой фактор при выборе школы — это пообщаться с выпусниками этой школы выяснить их впечатления и как быстро они нашли после этой школы свою первую работу. И в школе обязательно должен быть ментор, у которого не 30-50 учеников, а 3-5 и он объясняет, почему там можно программировать, а так нельзя. Нет, автоматические системы для проверки домашек не подойдут, нужен именно живой человек. Пока живого человека не может заменить ни одна автоматическая система.
Лично я фронтенду учился в Хекслет, которую рекомендую. А также я слышал много хорошего про HTML Academy Про другие школы ничего плохого\хорошего сказать не могу.
Ещё раз повторюсь нужен живой ментор. Да, обучение с ним дороже, но он этого стоит.
Но ментор в обнимку с тобой сидеть и читать лекцию не будет. Знания, нельзя дать. Знания, можно только взять. Учиться придётся самостоятельно. И вот тут возникает следующий вопрос: «Объём информации, который необходимо освоить размером с гору Фудзи. Сколько времени всё это учить?» При ежедневных занятиях 1,5-2 часа и не менее 20 часов в неделю у взрослого человека занимает примерно 1 год. Кто может и за 7-8 месяцев, кто-то за полтора года у каждого по-своему. Но в среднем, 1 год. Так что все волшебные маркетинговые обещания сделать программиста за 3 месяца, увы, только обещания.
«А где взять на это время?» Где найти время я написал целую статью по тайм-менеджменту
Если сильно кратко. То сначала ставим долгосрочную цель по SMART. Например, сделать свой первый pet-проект самому, сверстать лендинг за месяц. Цель поставлена, осталось реализовать.
Есть испытание «100 дней кода» #100DaysOfCode. Его смысл, каждый день программировать и в конце дня написать отчёт о проделанной работе, хоть 1-2 предложения. Итак, 100 дней. Пока кровь из глаз превратилась в слезы счастья. Сразу скажу первая стодневка мне далась очень трудно, я бросал, возвращался снова. Но в конце концов её завершил. По сути, эта стодневка выработка привычки ежедневной работы над проектом. А менять существующие эмоции и привычки и встраивать что-то новое очень и очень сложно.
Я делаю так. Каждое утро, когда я наиболее продуктивен, где-то 1,5-2 часа посвящаю программированию. Приходиться пораньше ложиться и пораньше вставать. По окончании занятий, я пишу отчёт у себя в блоге в телеграмм Во время работы отключаю все мессенджеры, телефон отключаю от инета и т.д. Т.е. свожу количество отвлекающих факторов к минимуму. И это первое у меня дело, пока его не сделаю ничего иного я не делаю. В конце недели подвожу итог и в конце месяца тоже. При подведении итогов, обязательно задайте себе вопрос: «А что можно показать из того, что сделал на собеседовании?» Если ничего, значит всю неделю, месяц занимались тоже ничем. Ноль равен нулю. Программирование на редкость практический навык. 20% теории и 80% практики.
Если прошли 30 дней или 100 дней и внезапно осознали, что программировании ненавидите искренне и всей душой. Ну не подходит, значит Вам программирование, есть уйма других специальностей. Можно их попробовать.
Все эти техники, конечно не я сам придумал, а взял из книг. Рекомендую автора Максим Дорофеев «Джедайские техники. Как воспитать свою обезьяну, опустошить инбокс и сберечь мыслетопливо», «Путь джедая. Поиск собственной методики продуктивности»
«Во сколько лет можно стать программистом? Может я слишком стар для программирования в свои 16?» Я решил сменить профессию на программиста в 40 лет. Я думаю, возраст существенного значения не имеет.
Ну, всё 2-3 pet-проекта готовы, которыми можно поразить интервьюеров, пора и по собеседованиям. И вот тут возникает выплывает айсберг под названием «прохождение собеседований». Я тоже целую статью про это написал.
Опять если кратко, очень высокая конкуренция из тех кто хочет «войти в IT», поэтому очень жесткие и тяжелые интервью. Ощущение, что отбирают или космонавтов на Марс или спортсменов в олимпийскую сборную. А реальные задания первое время на работе - это клепать формочки. И никаких тебе рекурсий, графов и асинхронных систем управления лифтами на планете с отрицательной гравитацией в другом рукаве галактики.
Можно посмотреть публичные собеседования, чтобы понять, что ждёт. Например, вот это
И ещё собеседования очень хорошо прочищают мозги и разрушают иллюзии, показывает какие есть слабые места, что ещё нужно доработать. Но если походил по собеседованиям несколько месяцев, а на работу так и не берут, не стоит отчаиваться. Опыт open-source считается за коммерческий. Вот сайт с open-source проектами, можно выбрать любой по стеку и начать фиксить баги. Open-source отличает от работы по найму, тем что за него деньги не платят, но для получения первоначального опыта он идеален.
«А может есть хорошие ютуберы, которые хорошо объясняют сложные вопросы?» Есть, мне нравиться Владилен Минин по фронтенду и Сергей Немчинский по бекенду.
«А нужен ли английский?» Программисту английский нужен, но если джун то достаточно начального уровня A1-A2. Т.е. на первом этапе уровень английского - это читать Stackoverflow со словарём и 100 иностранных слов, чтобы называть переменные. А вот когда станешь мидлом и будут приглашать на совещания с клиентом лучше подтянуть до B1-B2. Лично мне по тому, как учить английский очень помогла Марина Горская
В принципе, программирование такой же навык, как и любой другой, никакого таланта и гениальности не нужно, просто информации много и приходится её долго осваивать. По факту нужна только самодисциплина, которую тоже можно наработать. Нужно взять на себя ответственность за свои действия в отношении обучения и образования и выполнения своего проекта. Я всё понимаю, что очень хочется спасителя и лёгких путей. Но, увы, фантастика в другом отделе. Мой секрет успеха:
- трудолюбие
- амбициозность
- упёртость
Будьте упёртыми, большое количество попыток обязательно приведёт к цели и Вы станете программистом.
Спасибо за статью! Разрушает иллюзии и в моем случае настраивает на продолжительную борьбу. Потому что я знаю точно, что программирование — это мой путь жизни.