Очередной гайд по обучению программированию, ибо бомбит.
По мотивам поста тов. @foreigner92 про то, как надо учиться программировать: https://pikabu.ru/story/kak_lyudi_neuchatsya_programmirovat_...
У меня как у человека, который почти с нуля (в качестве базы - убогий курс дельфи и один семестр C под микроконтроллеры с их спецификой) обучился веб-разработке, бомбит не по-детски от подобных советов. Соответственно, писать буду именно в контексте веб-разработки.
Итак, если вы хотите в программирование, то определитесь с главным - нафига вам это нужно? Если вы видите себя-программиста через 10 лет эдаким гением разработки, сидящем в пафосном офисе, потягивающим смузи через стодолларовую купюру, и работающим по вдохновению, то вы будете сильно разочарованы.
Вначале вы будете много вjobывать за копейки, у вас будут нудные и скучные задачи: тонны вёрстки, кривого js'а, кривого css'а. От вас будут хотеть четко обозначенных сроков, которые вы будете не в состоянии оценить, поэтому вы будете их стабильно просирать, как полимеры, на что будет тратиться куча нервов и сил, если вам не повезло с тимлидом и/или ПМом, а это более вероятно, чем наоборот.
А чтобы получать не копейки, нужно будет (как правило, после работы) получать новые знания и навыки или хотя бы поддерживать их в актуальном состоянии, и не факт, что вам это будет нравиться настолько, что вы найдете в себе силы и мотивацию. Кстати, пока вы читаете этот пост, где-то вышла пара новых JS-фреймворков, каждый из которых, непременно, обещает легкую приятную жизнь и решение всех проблем.
В общем, если вы идете в программирование ради высоких зарплат, то это нерациональное вложение времени, а если вам это всё интересно, потому что это "факинг мэджик", которую вы хотите постичь, то имеет смысл переходить к пункту ноль моего, естественно, самого лучшего и исчерпывающего (на самом деле, нет) руководства по обучению программированию.
Итак, пункт 0.
Найдите проблему, которую можно решить с помощью программирования, и в которой вы разбираетесь. Это должна быть одна мелкая задача, которую вы сможете четко сформулировать и описать и которая облегчит вам лично жизнь.
Любой язык, фреймворк или технология - это инструмент, который подбирается под задачу, а не наоборот. Не нужно вот этих вот "когда у вас в руках молоток, всё окружающее кажется гвоздем". Так создаются ужасные вещи. Ruby on Rails на продакшне, например (прошу прощения у всех фанатов RoR на проде).
Если у вас будет задача, которая близка конкретно вам, то вам будет проще сохранить мотивацию, ковыряясь с ней изо дня в день безо всякого видимого поначалу результата.
Будет ненулевая вероятность, что вы не забросите это дело через неделю-другую.
После того, как вы поняли, каким образом вы хотите улучшить свою жизнь при помощи программирования, переходим к пункту 1.
Выбираете молоток, т.е. язык программирования, который лучше всего решает эту задачу.
Молоток должен отвечать следующим требованиям:
1. Он должен уметь решить вашу проблему (основные сферы применения ЯП нагуглить несложно).
2. Им должно пользоваться много людей.
Последнее особенно важно, потому что это дает вам гарантию, что вы сможете получить ответы на возникающие вопросы или найти готовые программные решения и не придется изобретать велосипед, хотя, конечно, вы всё равно их изобретете в процессе и не один раз.
Пункт 2. После этого вы идете на Coursera и/или читаете обучающие статья по выбранному ЯП и пытаетесь кодить, чтобы решить свою задачу.
Не нужно на этом этапе тратить время на паттерны, алгоритмы, юнит-тесты и пр. хероту. Ваш код всё равно будет говном. Лучше пусть это говно решит вашу проблему, ваш мозг вознаградит вас за это порцией эндорфинов, а потом вы откроете умные книжки и почитаете, как нужно было этот код писать, чем вы утонете в учебниках и в итоге забьете и не сделаете ничего.
Пункт 3. После того, как чуть-чуть освоитесь с синтаксисом, средой разработки и базовыми принципами в выбранном ЯП, начинайте почитывать что-то фундаментальное: Кормэна, Вирта, Банду четырех и др. По мере чтения вы будете видеть, какие косяки в коде вы допускали, сможете их исправить и сразу увидеть результат не в виде какой-то абстрактной и нафиг не нужной вам фигни из примеров учебника, а в виде нормального читаемого кода вашего приложения или увеличившейся производительности, за что будете также вознаграждены порцией эндорфинов.
Не зарывайтесь в это дело. Из того же Кормэна вам всё равно в повседневной деятельности вряд ли понадобится что-то кроме обходов графов в ширину/глубину, умения оценивать сложность алгоритма и сакрального знания о том, что скорость доступа к данным в хешах O(1). Всю эту дрочь с красно-черными деревьями и самописными сортировками вы всё равно забудете, т.к. не будете использовать 99% времени, но вы должны представлять, что они есть, и помнить, где их нужно искать. Аналогично с паттернами.
Я не хочу сказать, что это всё не нужно. Я хочу сказать, что это нужно не зубрить, а регулярно применять на практике. Потому что знание, которое вы не в состоянии применить на практике - это впустую потраченные ресурсы.
Пункт 4. Обязательно читаем документацию на выбранный язык программирования. Это прям вот важно. Реально задолбали комменты из серии: "Азаза, JS - говно. У него {} + [] дает 0".
Это не JS - говно, это ты приведения типов не знаешь (на самом деле, говно, конечно, но точно не из-за вышеуказанного примера).
После прочтения документации вы будете намного лучше представлять возможности выбранного вами ЯП и использовать его более эффективно. Уверен, в процессе вы откроете для себя много нового, чего не было в гайдах и лекциях.
В случае с вебом нужно будет ещё отдельно уделить внимание тому, как это всё дело исполняется: этапы отрисовки веб-страницы, как применяются CSS-стили, как выполняется JS, браузерные API и пр.
Пункт 5. Только после того, как вы нормально знаете ЯП и представляете, как он работает, ориентируетесь в фундаментальных понятиях, можно переходить ко всяким примочкам в виде юнит-тестов, фреймворков и пр. и параллельно искать работу джуном. Незнание фреймворков не так страшно для вас как для кандидата, как плавание в основах языка при знании чего-то специфического.
Я, к сожалению, на этом обжигался и сейчас очень жалею, что учил специфические либы, не зная нормально языка.
А вот от такого у меня горит особенно сильно:
Ну и чтобы все это дело полирнуть, что-нибудь почитать/посмотреть по методолгиям разработки: скрамы, канбаны и т.д.
Будете коммитить в Open Source - +100 к карме. Многие работодатели такое любят.
Не нужно вам всё это. Лучше нефритовый жезл полирните - хоть удовольствие получите. Канбаны, скрамы и пр. методологию будет знать ваш проект-менеджер. У него голова большая и зарплата соответствующая. Вы всё равно не будете готовы к тому, в какой пиздец превратили каноничный скрам в той или иной компании.
Если попутно запилите какой-нибудь стартапчик, или хотя бы бложек, где будете свой процесс обучения освещать, такого джуна оторвут с руками.
Бложики - это если у вас много времени, чтобы его просрать, потому что никому не интересны ваши потуги написать очередной велосипед. Закончилось то прекрасное время, когда мама кормила с ложечки, укладывала спать в обед, а убогие и неудачные попытки сделать что-то в первый раз всех умиляли. Не помню ни одного работодателя, который бы спросил меня на собеседовании (а джуном я их прошел ооочень много), не вел ли я какой-нибудь блог по программированию, потому что какой, блять, блог может вести джун? Как наговнокодить за 60 секунд?
Будете коммитить в Open Source - +100 к карме. Многие работодатели такое любят.
Нет! Не комитьте, пожалуйста! Астанавитесь!
Не нужно никому ваше джуниорское говно, и моё мидловое тоже не нужно. И большинство из того, что коммитят маститые сеньор-помидор-девелоперы, также не нужно.
Не трогайте OpenSource, если не собираетесь через пол года-год, получив баг-репорт, сидеть днями и фиксить его. Не создавайте проблем другим людям, которые решили использовать ваш код.
Не преумножайте энтропию этого мира, если не хотите, чтобы когда-нибудь к вам постучалась парочка странно выглядящих личностей и не спросила, что вы думаете о дедушке нашем Нургле.
В общем, если вы точно уверены, что оно вам действительно надо, то начните с задачи, а дальше - по списку. Тогда из этой затеи может получиться что-то если и не особо полезное, то хотя бы интересное, что уже положительный результат.
Всем добра-бобра)
Надеюсь, с этим гайдом не получится, как в анекдоте про 14 разных стандартов, и он окажется хоть кому-то полезным =)