Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Веб-разработчик, геймер, специалист по этике  · 22 июл 2022

Как легко научиться программировать

Специально для тех, кто ноет, что люди пишут в статьях много воды, суть моей статьи в одном предложении после заголовка:
Никак.
Теперь вы можете идти дальше смотреть по-диагонали что-нибудь ещё, а я наконец допишу статью как положено.
Так вот. Я здесь на Кью вижу десятки однотипных вопросов на тему обучения программированию, и часть из них мне приходит вообще в виде "призывов ответить". То есть, вроде как реальные люди реально интересуются тем, как им стать разработчиками ПО. Однако, во всех вопросах, буквально во всех, которые я видел, видна одна и та же подоплёка, очевидно, потому что нам много платят:
"Как мне устроиться на работу программистом быстро и легко?"
Это неверный подход к делу, и я хочу объяснить, почему.
Во-первых, про заработок.
Да, даже стартовая позиция в разработке ПО - 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, но сложность работы в них состоит в неортодоксальности, в том, что приходится рассуждать о решении задачи в новых терминах, которые нужно перед этим изучить. Для мейнстримных языков такой проблемы нет.
Конечно, если вы целенаправленно учитесь с нуля, чтобы пойти в контору к хаскеллитам, вам не нужны мои советы. Что вы вообще ещё тут делаете, я для других совсем людей пишу.
Вывод
Да, разработчикам ПО много платят. Это происходит потому, что мы долго учились и тяжело работаем. Да, мы не выдуваем стекло, не обслуживаем ЛЭП и не прокладываем трубы в пустыне, сложность работы программиста выражается в других вещах. Это не меняет того факта, что разработчик ПО это высококвалифицированный специалист, и это не пустые слова, и вам нужно быть морально готовыми к этому, если вы хотите в эту карьеру.
Я даже не буду сейчас про самостоятельную работу независимым бизнесменом, про важность интереса к самому процессу, про уровень профессиональной ответственности, перед этим вам нужно уяснить  и уложить в голове более базовые вещи, которые и были написаны выше. С надеждой на то, что хоть кому-то станет понятнее, как же быстро и легко стать программистом.
1 эксперт согласен
Я вас сейчас обижу, но это все написано для тех, кто понимает, а вы собирались составить статью для тех, кто не... Читать дальше
@Евгений Антонюк, не очень понятно, как вторая половина вашего комментария связана с его первой половиной, я пропущу её.
Статья для тех, кто задаёт вопросы типа "как стать программистом как можно быстрее и легче". Суть её в том, чтобы показать, что сама постановка вопроса уже неверная, нельзя так подходить к этой задаче и не надо. Да, в том числе потому что всё это так сложно.
Норм!
Л.К.
@Виталий Сергеев, нет там текста, еготамнет! По Вашей ссылке.
Л.К.
Прочитал вот это (на Хабре):
https://habr.com/ru/company/jugru/blog/485134/
Понял - оченно мало чего. Но, здорово, блин!
Л.К.
Полезный текст для тех, кто раздумывает, можно ли ему податься в девелоперы. Как мне показалось упущена важная подробность - специализация будущего программиста. Ведь стек (набор технологий, инструментов и языков), который будет изучать программист-новичок прежде всего зависит от того, пойдет ли он в фронт-энд (разработка интерфейсов и других видных пользователю частей приложения) или в бек-энд (разработка серверной части). Можно конечно изучать всё это вместе и стать в итоге фул-стак программистом, но это самый времязатратный и тернистый способ войти в профессию.
@Алексей Игнатов, в некоторых областях разработки ПО нет разделения на фронтэнд и бэкэнд. Например, в embedded. В мобильной разработке, на десктопе, в геймдеве, в научном ПО чаще всего приложения тоже монолитные и клиентские.
По сути, если задаться целью всё не итак и сложно, но есть одно НО: выбор языка программирования. В данный момент изучаю маркдаун, самый простой способ освоить кодирование для начинающих, следующий шаг выбор между актуальных языков и направлением разработки между ПК и мобильными устройствами. Из этого исходит язык. Теории тут по факту являются лишь "справочником" и нужно практиковать Писание кода постепенно усложняя его. Оптимальный вариант когда у вас есть знакомые программисты для обратной связи, проверять правильно или нет написан код. Следующий этап это самопроверка, то есть пишем код, компилируем, проверяем и выполняем отладку. На выходе получается готовое ПО. Так что всё в Ваших руках и скорости обучения зависят только от вас. (Из личного опыта работы).
@Андрей Майоров, это не ответ на вопрос, это мой пост :) Но за комментарии спасибо. :)
Очень интересно, как и что вы программируете на Markdown'е. 🤔 Потому что это язык разметки, его компилируют в HTML, в нём нет вообще команд для выполнения.