Специально для тех, кто ноет, что люди пишут в статьях много воды, суть моей статьи в одном предложении после заголовка:
Никак.
Теперь вы можете идти дальше смотреть по-диагонали что-нибудь ещё, а я наконец допишу статью как положено.
Так вот. Я здесь на Кью вижу десятки однотипных вопросов на тему обучения программированию, и часть из них мне приходит вообще в виде "призывов ответить". То есть, вроде как реальные люди реально интересуются тем, как им стать разработчиками ПО. Однако, во всех вопросах, буквально во всех, которые я видел, видна одна и та же подоплёка, очевидно, потому что нам много платят:
"Как мне устроиться на работу программистом быстро и легко?"
Это неверный подход к делу, и я хочу объяснить, почему.
Во-первых, про заработок.
Да, даже стартовая позиция в разработке ПО - junior developer - в любой области это 60-80K рублей, но это происходит не потому, что это 140% от средней типичной зарплаты на других работах. Это происходит, потому что зарплата джуна это 25% от зарплаты того, кого компания хочет на самом деле - сеньора. Если они вывесили вакансию на джуна, это значит, они согласны потерять кучу денег и времени на его обучение, лишь бы найти хоть кого-то кто заткнёт образовавшуюся дыру в компетенциях команды. Это не привилегия, это позорное положение, временное.
Да, это очень практично: прокачать скилл достаточно, чтобы взяли хоть куда-нибудь — деньги-то надо зарабатывать. Но если вы целитесь конкретно в уровень джуна, вы проиграли ещё до старта.
Вам выгоднее целиться сразу в уровень сеньора, а ещё лучше - с мировым именем. В уровень автора React, автора книги Practical Common Lisp, автора Linux, автора nginx, мейнтейнеров проекта junit, и многих других, их тысячи. Всех их принципиально объединяет одно - они участвовали в реальных проектах, они написали реальный код, который используют другие люди.
И вот в процессе прокачки скиллов, в процессе написания реальных программ, вы постепенно, раз за разом, тычетесь в интересные вакансии и проверяете, принимают вас или нет. Вот такой процесс обучения с поступлением на работу будет самый эффективный. Потому что первый реально осмысленный вопрос который вам зададут на собеседовании — это вопрос "в каких проектах вы участвовали, есть ли какие-нибудь ваши опубликованные работы?"
Если вы самоучка, то чтобы сравняться в уровне с выпускником профильного университета, вам придётся самостоятельно написать аналог четырёх курсовых работ и диплома, как минимум.
Во-вторых, про скорость обучения.
Разработке ПО с нуля в любой сфере можно научиться примерно за год. Это мой личный опыт обучения и то, что я слышах в разных источниках, которые я не помню. Те, кто говорят вам, что можно быстрее, либо лгут, либо подразумевают такой график, который вы точно не ожидаете.
И это только обучение непосредственно программированию, понимание того, что вы вообще в принципе пишете в исходном коде. Вы никогда не пишете "просто" программы - это всегда решение конкретной задачи на конкретную тему. В этот один год не включено обучение самой предметной области, для которой вы собираетесь программировать. Если вам интересно писать плагины к системам цифрового создания музыки (DAW, Digital Audio Workstations типа FLStudio или Cubase), извольте почитать учебник физики, к которому в обязательный довесок прилагается учебник математического анализа.
Более того, в современной разработке ПО вы неизбежно будете использовать собственно инструменты разработки, помимо текстового редактора. И обращаться с ними тоже нужно учиться, на что нужно время. Просто, чтобы вы понимали масштаб ситуации, приведу пару примеров из своей практики.
Когда в разработку ПО активно начали внедряться системы контроля версий, а особенно git, мне понадобилось почти два месяца только чтобы разобраться, что происходит, и только где-то через полгода пользоваться им стало привычно и обыденно, и я до сих пор лезу на Stackoverflow чтобы узнать как им пользоваться в каких-то специфических случаях. И это я использовал гит в реальной работе каждый день, будучи к тому моменту уже года два как профессиональным веб-разработчиком.
Сейчас, когда у меня уже двенадцать лет практики за плечами, мне понадобилось ещё два месяца, чтобы освоиться и более-менее комфортно пользоваться Kubernetes, системой контроля автоматического развёртывания контейнеров на базе Docker. Вы, возможно, даже не поняли, что я только что сказал, а при этом на одно только изучение, что такое Docker мне тоже понадобилось несколько месяцев, и я использовал этот инструмент в реальной работе каждый день.
То есть, нужны месяцы на одно только изучение инструментов работы. А таких инструментов в каждой сфере работы - в сумме с десяток точно наберётся. Wireshark и Metasploit у реверсеров, Webpack у веб-разработчиков, cmake у людей на десктопе. Если вы серьёзно считаете, что вы сможете условно "за лето" с нуля научиться эффективно решать задачи, вы поступаете очень самоуверенно, на мой взгляд.
В-третьих, о лёгкости
Коротко и по существу: те, кто утверждают, что какой-то язык программирования из мейнстримных легче другого и его будет проще изучить — они просто лгут вам и возможно, себе тоже.
Современный мейнстрим, а это
C++, C#, С, Javascript, Python, PHP и Java, и даже второй эшелон в виде Ruby, Go, Rust, Scala и Bash - одинаково сложные, комплексные языки, способные на очень многое. Мейнстримные языки все C-подобные (да, питон, ты тоже, и уже давно) и основаны на одних и тех же принципах.
Огромная часть сложности в программировании основана на сложности решения задачи, для которой и пишется программа. Профессионалы сравнивают языки программирования не по абстрактной "сложности" а по выразительности решения конкретных задач.
Да, есть языки, работать с которыми вам будет реально сложно, например традиционная квинта Haskell, Common Lisp (он тут самый лёгкий на самом деле), Prolog, Forth и Smalltalk, но сложность работы в них состоит в неортодоксальности, в том, что приходится рассуждать о решении задачи в новых терминах, которые нужно перед этим изучить. Для мейнстримных языков такой проблемы нет.
Конечно, если вы целенаправленно учитесь с нуля, чтобы пойти в контору к хаскеллитам, вам не нужны мои советы. Что вы вообще ещё тут делаете, я для других совсем людей пишу.
Вывод
Да, разработчикам ПО много платят. Это происходит потому, что мы долго учились и тяжело работаем. Да, мы не выдуваем стекло, не обслуживаем ЛЭП и не прокладываем трубы в пустыне, сложность работы программиста выражается в других вещах. Это не меняет того факта, что разработчик ПО это высококвалифицированный специалист, и это не пустые слова, и вам нужно быть морально готовыми к этому, если вы хотите в эту карьеру.
Я даже не буду сейчас про самостоятельную работу независимым бизнесменом, про важность интереса к самому процессу, про уровень профессиональной ответственности, перед этим вам нужно уяснить и уложить в голове более базовые вещи, которые и были написаны выше. С надеждой на то, что хоть кому-то станет понятнее, как же быстро и легко стать программистом.