С чего начать изучать программирование

Всем привет!

Довольно часто люди спрашивают "Я хочу стать программистом. С чего мне начать?". Несколько лет назад на этот счет можно было дать сжатые рекомендации довольно быстро. К примеру, если это веб-программирование, то что-то типа "Возьми для начала блокнот, попробуй элементарные HTML-теги, потом CSS, ну и в конце концов Javascript". Да и в случае с JS не так много вариантов было при выборе каких-либо библиотек, в те времена это было prototype, MooTools, jQuery и наверно все. Остальные либо не получили популярности, либо появились позже (хотя может я что-то и пропустил). Вот неплохая визуализация развития браузерных технологий http://www.evolutionoftheweb.com/#/evolution/day

Или можете просто посмотреть эволюцию отдельно взятой технологии react-js


Технологии на сегодня настолько быстро развиваются, что даже если вы очень опытный разработчик с огромным стажем, вы не сможете освоить все тренды ни при каком желании. Это примерно напоминает ситуацию с учеными. Если в каком-нибудь 16-ом веке хороший ученый знал практически все в изученной части своей науки (просто потому что объем изученного материала был относительно небольшой), то сейчас науки дробятся на специализации и еще глубже и ученые часто выбирают какие-то определенные ниши.

Собственно говоря, это и меня никак не обошло. Если раньше я считал, что в MODX знаю практически все и практически достиг в нем своего какого-то предела, то на сегодня я могу только сказать, что я уже довольно хорошо знаю javascript, node-js и react, и еще поработал с несколькими десятками js-библиотек из какого-то нереального множества библиотек, и нет им ни конца ни края.

В таких условиях дать какой-то совет с чего именно начать программировать, практически нереально. Но есть два моих личных Но:
1. Вопросы эти не перестают занимать. Какова бы ни была реальность, новички есть всегда, и они все равно задают этот вопрос. То есть какие-то ответы все-таки надо давать.
2. Мозг совсем не резиновый. Я практически каждый день сталкиваюсь с чем-то новым, и что-то новое осваиваю. И надо все-таки иметь возможность эти знания новые куда-то складывать, чтобы и самому можно было вернуться к ним при необходимости, и другим может полезно будет.

И вот эти два Но меня толкают к поиску какого-то взаимополезного решения. Но я очень долго думал как бы это сделать так, чтобы это действительно было полезно и интересно. Ведь просто еще один справочник и набор статей делать бессмысленно, их итак много. И вот к чему я пришел:
1. Минус классических наборов статей в том, что они плохо структурированы. Как правило в куче и вопросы, и ответы, и чьи-то личные кейсы или вообще что-то отвлеченное. Да, если ты долго в каком-то узкопрофильном сообществе, то ты может и читаешь это каждый день или через день и боле менее в курсе о чем писали, а о чем нет. Но если возникнет задача найти некий срез материалов по какой-то отдельной технологии, то скорее всего этого не получится сделать.
2. Да, есть различные обучающие ресурсы, как тот же https://learn.javascript.ru/, но на мой взгляд он так же не успевает за современными тенденциями. То есть если вы хотите изучить только сам javascript, то он конечно же будет полезен. Но если вы захотите попутно изучать какие-то мейнстримовые библиотеки и т.п., то там под многое из этого просто нет материала. И опять таки, он не очень-то помогает новичку найти ответ на вопрос "А с чего начать?"

Есть еще много плюсов/минусов, которые я брал во внимание, когда изучал подобные ресурсы (чтобы ответить себе на вопрос "а что и для чего делать"), но все их не буду перечислять. Озвучу только конечную формулировку, к которой я в итоге пришел: Изучать надо что-то для чего-то.

Да, звучит банально, но все-таки именно сюда надо смотреть, как мне кажется. Большинство ресурсов созданы просто для того, чтобы что-то изучать. Но совсем не ясно для чего это делать. Нет конечной цели. А какова наша конечная цель? Правильно: чтобы зарабатывать денег. И хотя много кто скажет "Если я буду много знать, то обязательно заработаю денег", ИМХО, это не совсем так. Даже если вы знаете много, всяко есть такие знания, которые не приносят вам напрямую доход. К примеру, я знаю хорошо MODX, но больше не зарабатываю на нем, потому что больше не беру больше проекты на MODX. Я 10 лет его изучал, но больше он мне не приносит денег... А JS я плотно изучаю года три, и теперь это мой основной источник дохода. Но и в JS у меня много знаний тех, которые больше не приносят мне денег практически никак. К примеру, webpack. По сути я каждый день с ним обязательно сталкиваюсь, он во всех моих проектах присутствует, но я теперь не взаимодействую с ним напрямую, потому что он скрыт в глубинах react-scripts, он там уже сконфигурирован и мне никак не надо на него воздействовать и по сути вообще не обязательно знать как он работает и зачем он вообще нужен. А ведь когда-то без знания его мне было просто никак, потому что на плечи конечного разработчика ложилась обязанность его конфигурировать под свой проект. Это что называется zero-configuration. Если вы еще не знаете что это, советую к прочтению: https://habr.com/ru/company/plarium/blog/326520/

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

Конечно же я не мог это сделать все за раз. Есть на сегодня необходимая базовая реализация, которая в дальнейшем будет корректироваться и развиваться. Но уже есть с чего начать и куда двигаться.

Что на сегодня реализовано

1. Список технологий. Любой пользователь может добавить свои технологии в список (конечно же желательно перед добавлением убедиться, что данная технология отсутствует в справочнике).

2. Список кто какие технологии использует. Там же можно указать статус, в том числе "Больше не использую". Если вам хоть чуть-чуть интересно, укажите какие технологии вы сейчас используете.

3. Список уроков по технологиям. Каждый может добавить свои уроки по любым технологиям, а так же принять интересующие уроки и отметить выполнение. А еще можно оставить свои комментарии.
Здесь следует отдельно рассказать про принцип выполнения. Данный проект не ставит задачу обязательно внедрить уроки с непосредственным выполнением прям здесь. В уроке может быть прописано описание, а выполнением может происходить на любом стороннем ресурсе (в задаче указывается просто ссылка на источник). Надо понимать, что технологии могут быть перечислены какие угодно и всего здесь не охватить. Но когда вы берете какой-то урок, на вашей совести остается отметка о его успешном выполнении (то есть сами решаете, что вы его выполнили, и тогда отмечаете, что выполнили). Это по сути больше для самоконтроля. Но в дальнейшем этот механизм планируется сильно развивать.

4. Список выполняемых уроков. Здесь можно посмотреть всех участников и статусы. Фильтры помогут найти интересующие. К примеру, вот мои пройденные уроки по технологии HTML.

Что планируется сделать

1. Стратегии развития, то есть некий набор технологий с учетом последовательности изучения и примерной оценки необходимого времени.
К примеру, есть технология react-js. Как я и говорил, ранее для ее изучения нужно было еще и технологию webpack осваивать. То есть стратегия была бы примерно такая: HTML-CSS-JS-webpack-react. Сейчас актуальная стратегия: HTML-CSS-JS-react.
Таким образом новичку проще сориентироваться какой набор технологий надо освоить, чтобы дойти до какой-то логической точки, при этом не отвлекаясь на лишнее и ненужное. Я вот до сих пор встречаю людей, которые в том числе пытаются и webpack освоить, просто потому что они читают старые источники и просто не знают, что webpack изучать совсем нет необходимости.

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

2. Карьера. Хотелось бы не просто отразить карьерный путь (именно в плане очередности и сроков изучения тех или иных технологий), но и выводить какие-то финансовые показатели.

Сценарий: пользователь смотрит специалистов, зарабатывающих N денег в месяц, смотрит какие технологии они используют (то есть что стоит изучать), примерно оценивает необходимое время на освоение этих технология и подбирает наиболее подходящую для себя стратегию развития.

3. Каталог задач (проектов) с учетом технологий.

Приведу пример понятный: на сегодня, если кому-то нужен специалист по MODX, он напишет объявление типа "Нужен программист MODX, доделать сайт", ну и какое-то дополнительное текстовое описание задач. Но программирование на MODX это тоже не только MODX. Под MODX есть куча различных готовых дополнений (как платных, так и бесплатных). То есть если бы помимо текстового описания заказчик мог указать из справочника список используемых технологий (если все эти pdoTools и прочие вынести в самостоятельные технологии), то программисту можно было бы практически на автомате оценить все ли он скилы имеет под этот проект или нет. В свою очередь и заказчик мог бы откликнувшихся оценить по набору изученных ими технологий.
Тут еще вырисовывается возможность при достаточном количестве объявлений оценивать популярность тех или иных MODX-технологий.

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

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