Николай Ланец
4 сент. 2021 г., 5:05

Стратегии развития

Всем привет!

Сегодня я наконец-то публикую функционал, который давно уже планировал, но не мог сделать раньше, так как объем работ очень большой, а времени мало. Но так как недавно я обновил сайт до последних технологий, внедрять новые фишки стало гораздо быстрее и проще, а главное - надежней. И вот сегодня я могу поделиться тем, что сделано. Но сначала давайте посмотрим вот на эту картинку:


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

Так же надо учитывать, что те технологии, знание которых приносило существенную прибыль, сегодня могут быть уже совсем не востребованы. Да и то, что популярно сегодня, так же может стать не актуальным через год-два. То есть руку на пульсе надо держать постоянно.

Но есть еще одна серьезная проблема в современных методиках обучения: не понятно когда те или иные знания начнут приносить прибыль (то есть когда с каким уровнем знания чего-то можно будет рассчитывать на работу и за какие деньги). То есть чтобы было не "Через 3 года вы станете сеньором и наконец-то устроитесь на работу за 5 килобаксов в месяц, а пока крепитесь и учитесь", чтобы "через полгода вы сможете пойти джуном за 20 000 в месяц, через полгода з.п уже будет 50 000, еще через год пойдете мидлом за 100 000 и т.п.". То есть должен быть поэтапный рост. Но проблема в том, что сложно просто так вычленить какой надор знаний надо получить, чтобы закрыть очередной этап. Можно потретить несколько месяцев и выучить несколько технологий, который в итоге не понадобятся и никак не помогут в трудоустройстве.

В итоге я придумал такую штуку как "Кривые обучения", или как я их сейчас называю "Стратегии развития". Смысл в том, чтобы учить не все подряд и не бездумно, а планировать поэтапное развитие. В итоге вот что получилось:

1. Есть справочник технологий. Конечно же это даже близко не все технологии, даже в рамках JS, но я стараюсь сюда заводить те, с которыми сталкивался.
Каждый пользователь может для себя указать какие технологии использует и какой статус использования. Для этого просто заходите на страницу технологии, жмете кнопку "Я использую", затем редактируете появившуюся строку, указав соответствующие статусы и уровень.


Здесь важное уточнение по статусам и уровням:

1.1 Статус. Это ваш текущий статус использования технологии. Сейчас вот такие варианты:
  • Планирую изучать
  • Изучаю
  • Отказался изучать
  • Активно использую
  • Иногда использую
  • Больше не использую
На мой взгляд этот набор вполне соответствует реальностям. В программировании нет такого, что все, что вам попалось, обязательно очень важно и нужно и всегда вам понадобится. Совсем не так. В процессе постоянно что-то новое попадается. И бывает запланируешь что-то изучить (и даже потом потратишь какое-то время на изучение и что-то усвоишь), но потом или задача не актуальная становится, или нашел что-то получишь, и в итоге забрасываешь эту технологию. А бывает и так, что прям плотно сидишь на этом годами, и вроде как даже эксперт уже в этом, но в итоге тоже случается завершить использование. Это как я в свое время был очень сильным специалистом по MODX и писал в основном на PHP (более 10 лет), но в итоге завязал с этими направлениями напрочь. Но не указывать эти технологии в своем профиле тоже не стоит, это же все-таки мой опыт. Если вычистить из профиля все, что я забросил и оставить только то, что я сейчас активно использую, так у меня профиль почти голый останется:) С другой стороны если просто выводить без статусов свои технолгии, так заказчики будут думать, что я со всем этим работаю, и будут предлагать всякие нерелевантные заказы. С того же хедхантера часто вакансии приходят ну прям совсем уже не по моему стеку. Поэтому я и решил, что надо указывать статусы заинтесованности, чтобы и общая картина была, и было понятно с чем работает специалист, а с чем нет.

1.2 Готовность к найму. Здесь пока всего 3 варианта:
  • Очень заинтересован
  • Не против
  • Не заинтесован
Здесь особо расписывать нечего, уточню только, что это задел на ближайшее будущее под новый функционал: Резюме. Да, скоро и такой раздел появится здесь. Но когда я думал как автоматизировать наполнение карточки, понял, что статусы по использованию не совсем подходят. То есть помимо статуса активности нужен еще и статус готовности. То есть если я умею, это не значит, что я хочу с этим работать. И обратная сторона медали: если я что-то еще только изучаю (и не являюсь большим специалистом), но мне это может быть очень интересно, и я могу быть очень заинтересован в трудоустройстве по этому направлению.

1.3 Технологический уровень (от 1 до 5). Это субъективый оценочный уровень знания технологии. Его нельзя объективно вычислить, так что каждый ставит его себе сам. Но я вот так примерно оцениваю:
  1. Еще вообще ничего практически не могу, только прочитал вводную по технологии, выполнил "Hello World".
  2. Уже чему-то научился, могу простые вещи сделать без копипаста. Но пока еще не могу ни на какую работу рассчитывать.
  3. Считаю, что уже могу пробовать устраиваться на джуна.
  4. Считаю, что уже и в мидлы могу потянуть.
  5. Отлично знаю технологию, тяну на сеньора и выше.
Вот здесь я специально нарушил порядок, рассказав про Технологический уровень в последнюю очередь, нарушив очередность вывода в таблице. Просто это очень важный параметр и не хотелось сбивать мысль. Дело в том, что в профиле пользователя теперь тоже есть этот уровень (всем советую зайти в свой профиль и указать его, особенно тем, кто обучается). Этот параметр не связан напрямую со знанием отдельных технологий, это общий параметр. Очевидно, что новичок не может быть сразу 5 уровня, а опытный программист, даже если завяжет со всем своим текущим стеком и начавший новый, все равно остается высокоуровневым специалистом. Но зачем все это нужно? Я решил так сделать, чтобы разделить Стратегии развития так же по уровням, то есть пользователь может подключиться к стратегии или создать свою стратегию максимум на 1 уровень выше своего уровня. Как мне видится, с этим будет больше порядка. То есть если специалист начинающий (уровень 1-2), очевидно, что ему не надо браться за Стратегии 4-5 уровней. Даже если это очень целеустремленный и обучаемый человек, все равно на освоение технологий такого уровня уйдет не меньше двух лет, а за это время они могут просто потерять свою актуальность. Если мы говорим про то, чтобы обучиться за какое-то вменяемое время чему-то, что нам принесет деньги в самом обозримом будущем, то такой подход с длительным обучением скорее всего просто не принесет должного эффекта. Я же вижу это так: если у вас 1-2 уровень, то выбирайте из простых стратегий. Наметьте цели, оцените сроки и желаемые результаты, пройдите это, сделайте выводы и т.п. и далее, когда поднимете свой уровень выше, скорее всего более осознанно будете выбирать из открывшихся стратегий, тем более, что к тому времени их будет больше и, скорее всего, более качественные.

Второй момент: ваш опыт в стратегиях не теряется. То есть если вы в каких-то стратегиях постигли требуемые технологии до нужного уровня, то в других стратегиях, если требуются такие технологии, они будут зачтены. Так же следует учитывать, что одни стратегии могут включать в себя другие стратегии. К примеру, посмотрите мою стратегию 3 уровня @prisma-cms/nextjs-nexus. Она включает в себя несколько других стратегий, как фронтовых, так и бэковых. По сути это полноценный фуллстэк движок, где и работа с базой данных, и API, и фронт и все-все-все. И все это написано на TypeScript/JavaScript. Там еще не все технологии указаны, но из основных указано большинство. То есть если вы этот движок освоите, то сможете делать весьма не простые проекты (freecode.academy тоже на нем сделан :)). Но это все-таки довольно высокий и сложный уровень, для новичка будем очень много не ясно. Но для этого и разбита данная стратегия на отдельные стратегии, чтобы вы могли начать с чего-то более малого, при этом имеющего какие-то границы. К примеру, если вы хотите больше в бэк, то беритесь за бэк. Если хотите во фронт, то беритесь за фронт. При этом с фронтом у вас будет далее выбор: если вы хотите далее развиваться в Реакт, то есть и такая стратегия. А если захотите в Vue или Angular, или что-то еще более экзатическое, как тот же Svelte, то тут я уже вам не помощник, но может кто другой придет и заведет такие стратегии. Там у вас уже будет свой путь развития. Но, даже если вы пошли по такому пути, там все равно понадобится базовая стратегия Web Developer, то есть уже не зря учились. А там уже Next/Nuxt, в зависимости от того, React выбрали или Vue. В общем, в процессе и будете выбирать по какому пути пойти. Зайдя в стратегию, вы всегда сможете быстро сориентироваться чего вам не достает в знаниях.


В дальнейшем этот функционал еще будет активно развиваться. Появятся общение (обсуждения в конкретных стратегиях), менторство и прочие полезные штуки. А чем больше будет информации, тем более интересные и полезные срезы информации можно будет собирать, графики всякие рисовать, анализ трендов проводить. Поэтому не стесняйтесь, подключайтесь к движухе :)
А еще просьба: общайтесь активней. Не имея обратной связи, мне сложнее оценить что я делаю полезное, а что нет. Где ошибки вдруг какие. Да и вообще.
И на всякий случай напомню, что у нас появился телеграм-канал: https://t.me/freecode_academy
С часами на изучение правильная тема: дает возможность примерно прикинуть трудозатраты. Но есть вопрос - как ты это время получаешь? Личное ощущение или есть что-то более формализованное?
Есть один момент, структурный: я подключаюсь к стратегии и развиваюсь по ней или я кликаю ПОДКЛЮЧИТЬ, если все технологии изучены на достаточном уровне? Мне ошибку выдаёт про "or: Не указан ваш технологический уровень. Сделать это можно в своем профиле." Хотя все технологмии вроде указал для стратегии
Дима, да, сейчас это чисто субъективное мое время. Ведь здесь даже сложно определить границы необходимого изучаемого материала. У нас нет сейчас тестов-экзаменов на проверку кто что выучил. Но все же я пытаюсь определить это время боле менее реально исходя из сложности первых шагов. Согласись, в CSS и HTML сделать первые шаги совсем не сложно. Можно даже в блокноте начинать. Всего пара часов, и ты визуально уже определяешь начальные и конечные теги, атрибуты и свойства. Даже до второго уровня можно без особых сложностей подняться за неделю. А вот на третий уровень (чтобы хотя бы на джуна претендовать), надо уже значительно больше времени потратить, чтобы начать ориентироваться в каких случаях какие именно теги лучше использовать, какие в них базовые свойства и как их переопределять (и можно ли переопределять). То есть тут уже нужна практика побольше.
Но в дальнейшем я планирую все же внедрить некоторые элементы автоматизации. Но это заработает в том случае, если пользователей будет больше и более оперативно будет набиваться информация. Раскрою идею: у нас сейчас есть уроки и время, затрачиваемое на прохождение уроков фиксируется и сейчас довольно точно. Если сделать привязку "Раздел уроков - Технология, уровень", то можно боле менее точную статистику собрать. Здесь останется только внедрить еще одну мою задумку - Прогресс пользователя. Что это такое? Сейчас, когда пользователь меняет у себя уровень знания технологии, мы имеем только сам факт - его уровень в текущий момент. Я же хочу внедрить как бы журнал, чтобы логировалось когда что изменилось. Имя статистику типа "Поднял 1 уровень", "Прошел столько-то уроков, затратил столько-то времени", "Поднял такой-то уровень" можно очень четкую картину получить. Ну и визуализировать это в графики.
>> Есть один момент, структурный: я подключаюсь к стратегии и развиваюсь по ней или я кликаю ПОДКЛЮЧИТЬ, если все технологии изучены на достаточном уровне? Мне ошибку выдаёт про "or: Не указан ваш технологический уровень. Сделать это можно в своем профиле." Хотя все технологмии вроде указал для стратегии

Да, надо сразу подключать. Смысл в том, что это твоя цель. То есть ты указываешь чего хочешь достичь, смотришь чего не хватает и прокачиваешь. А уровень не указан у тебя в самом профиле. То есть указать надо не уровень отдельной технологии, а твой личный. Тебе можно сразу 3 поставить, хоть и будешь более начальные стратегии проходить ввиду смены стека.

Есть еще кое-что, что предстоит сделать: обсуждения в стратегиях. И тут будет минимум два типа:
1. Обсуждение самой стратегии. То есть я создал стратегию, в ней можно задавать вопросы, писать попутную информацию. Это общее.
2. Обсуждение в подключенной стратегии пользователя. Это уже менторство. То есть, допустим, я, как ментор, захожу в твою подключенную стратегию, и даю тебе советы.
Кстати, ты себе сразу подключай @prisma-cms/nextjs-nexus :)
Спасибо) Я и не знал, что этот параметр есть - общий уровень)
Я писал: << Дело в том, что в профиле пользователя теперь тоже есть этот уровень (всем советую зайти в свой профиль и указать его, особенно тем, кто обучается)

Надо было мне скрин сразу приложить :)
Николай, приветствую! Вопрос по уровню знаний в технологиях.
Изучаю NodeJS и Express.js. Вернее - знакомлюсь.
И тут прям совсем не понятно, как оценивать свой уровень.
NodeJS можно углублять до седин, а Express - как мне показался, довольно компактный фреймворк.
Можешь дать список, что я должен уметь с их помощью делать, чтобы честно поставить себе 2 и 3 балла?
Мне кажется, что этот список будет прям очень востребован в описании технологий.

Дима, привет!

В нашем случае express используется совсем мало. По сути, у нас все с ним взаимодействие ограничивается одним файлом /server/index.ts. По моей практике максимум что от него требуется, так это роутинг запросов и объекты Request и Response, то есть объект запроса из вне и объекта ответа во вне. Там уже разбор заголовков и составление заголовков. То есть сам по себе node-js из коробки не несет необходимых методов по работе с кукисами, данными форм и т.п. Это как раз и дает express-js.

С node-js одновременно все просто и не просто. Просто в том плане, что это все тот же JS, так что если ты основы JS выучил, то и в основы node-js сможешь. А сложнее в том, что в чистом виде нода мало пригодна нам для работы. Нам здесь нужны всякие библиотеки для работы с файловой системой, заголовками, базами данных и т.п. При этом есть как встроенные библиотеки самой ноды (как те же fs, path и т.п.), так и внешние, которые часто используются и считаются практически маст хэв (типа того же debug). Поэтому здесь, чтобы дать какой-то список необходимых знаний, надо дорабатывать структуру родительских-дочерних технологий, чтобы это прям боле менее наглядно было. Сейчас же могу пока только посоветовать развернуть у себя @prisma-cms/nextjs-nexus и пытаться разобраться с ним. Вот тебе примерно самооценка. Если ничего не ясно, на 1 не тянешь. Если что-то можешь поправить, то 2. Если в общих чертах понятно и даже можешь схему подправить, задеплоить в базу, пересобрать API и т.п., то троечка :) Спойлер: это довольно большой объем знаний. Но, наверно, не зря я видео записывал и топик писал? https://freecode.academy/topics/obzornoe-video-@prisma-cms/nextjs-nexus

Спасибо! Утопал разворачиваться)

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