This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Урок Roadmap под платформу RageMp [1/2]

MoonFusion

Гуру
Автор темы
high coder
14 Июн 2021
308
250
123

Не думал что вам так зайдёт прошлая статья, по этому ловите ещё одну, но на другую тему.

* Смайликом ( ) обозначена ирония/самоирония, постарайтесь не воспринимать эти тезисы в серьёз.
Я чутка решил разбавить скучный текст своими припадками шизофрении, надеюсь это поможет более легко воспринимать информацию, все же я не робот и не пишу свои темы с каменным лицом, по этому будет забавно почитать мои мысли во время написания этого шедевра топика.

Данная тема это некое руководство/roadmap для начинающих в этой сфере, я постараюсь довольно детально расписать необходимый стек технологий, аргументирую их выбор ( ), и расскажу про ресурсы с помощью которых можно будет все это изучить и которыми пользовался лично я, так же не хочу рассказывать вам о том что нужно больше практики, сколько нужно уделять времени в миллисекундах в день, не буду рассказывать про оптимальный подход к обучению, эта тема о другом. Не будем ходить вокруг да около, приступим.



Основы программирования ( + Теория программирования ):


Я не буду сейчас нести всякую чушь о том что вам нужно начать с низкого уровня, выучить С++, разобраться с контролем памяти, понять как работают процессоры, написать свой компилятор и потом пойти писать проект на платформе RageMp ( ), но все же начать следует с чего то, что соответствует следующим параметрам: компилируемый, со статической типизацией, мультипарадигмальный ( что бы это не значило ), под это описание полностью подходит C#, именно его я рекомендую использовать для изучения основ программирования.

С чего начать? Все просто - научится гуглить, да да, основы программирования начинают изучать именно с этого, в интернете давно существует огромное количество информации по интересующим вам темам, и в первую очередь научитесь искать информацию самостоятельно, рекомендую далее по ходу этой темы гуглить все неизвестные вам термины и тезисы.

После того как вы изучили вдоль и поперёк поисковую строку google.com дам вам несколько зацепок и направлений который нужно изучить в первую очеред

  • Тык - тут простым языком вам расскажут об основах программирования, используя "псевдо язык" ( )
  • Тык - отличный материал по языку C#, с упором на синтаксис
  • Тык - здесь вам объяснят что такое client-server взаимодействие
  • Тык - ООП парадигма, очень важно хорошенько понять эту тему ( я не понял )
Сразу оговорюсь, я бы посоветовал вам какие-то книжки, но увы, после прочтение книги Герберта Шилдта о С++, у меня психологическая травма , по этому я впитываю информацию с других источников, если кому то более интересно и более продуктивно получать информацию из книг - гуглите "топ 10 аниме книг по тема" и читайте первые две.

И только после того как вы поняли базу-фундамент на примере C#, следует идти дальше в наш любимый JavaScript , о чем мы и будем говорить далее.



JavaScript ( + TypeScript ):


JavaScirpt + TypeScript


После изучение основ я крайне рекомендую использовать все же связку JavaScript + NodeJS/TypeScript для работы в этой сфере, аргументирую я это следующим:

  • Больше ресурсов и документации для RageMp
  • Более щадящий синтаксис, много сахара ( что по моему профессиональному мнению все же плюс )
  • Существование TypeScript ( если бы его не было, я бы посоветовал C# )
Расскажу про изучение, сам по себе JavaScript является интерпретируемым языком с не строгой типизацией, что доставит нам сложностей на этапе разработки, таких как:
  • Сложность деббага ( JavaScript не имеет своего статического анализатора, что усложняет поиск потенциальных ошибок ), сейчас много кто пойдёт писать гневный коментарий про ESLint, или JSHint, но это не решает всех проблем с трудностями деббага.
  • Отсутствие статической типизации ( вот вам и проблема, которую не решает ESLint ) что явно приведёт вас к куче проблем, особенно если вы планируете где-то работать в команде.
  • Ошибки на стадии выполнения, если вы не дай бог где то допустили ошибку в коде, интерпретатор JS не сможет вам её отобразить на этапе интерпретации, он просто транслирует ваш код вместе с потенциальными ошибками, в следствии чего вы получите ошибки на этапе выполнения, и если в процессе разработки это не так критично, хоть и не удобно, то на этапе релиза вашего кода это может стать причиной вашего увольнения с Atom Community + .

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


Что же, выше была аргументация выбора именно этих технологий, теперь же перейдём к самому процессу изучения.
Стоит начать с изучения синтаксиса JS, даже на примерах Web сферы, разницы нет, синтаксис останется неизменным и в NodeJS/TS.
Для этого я крайне рекомендую ресурс - learn.javascript.ru, он проведёт вас в мир грёз и фантазий, научит всему чему надо и даже немного поводит своим event(za)Loop по вашим eventLips ( )

Далее, как я и сказал ранее, нам понадобится TypeScript, я думаю вы уже познакомились с сайтом metanit, на нём так же есть подробный гайд на TypeScript и я крайне рекомендую прочитать его, я вас уверяю, если вы изучали C# - изучение TypeScript займёт у вас неделю, а то и меньше ( когда я прошел собеседование на Atom Community я знать не знал о TypeScript, а мне задали сделать тестовое на нём, с чем я вроде как неплохо справился за день ).

Изучили? Не стоит задерживается, идём дальше.



NodeJS ( Серверная часть ):


Стоит упомянуть некоторые важные детали для более глубокого понимания:

  • Асинхронность - Node.js использует неблокирующий ввод/вывод ( I/O ), что означает, что операции ввода/вывода не блокируют исполнение других операций, это позволяет эффективно обрабатывать большое количество запросов и обеспечивать высокую производительность.
  • EventLoop и однопоточность - то за что многие НЕ любят NodeJS, так как ни черта не понимают, дело тут в том что NodeJS не поддерживает многопоточность, а в место этого использует EventLoop для обработки асинхронных операций и управления потоком ( обязательно почитайте об этом, это важно, иначе как вы заткнете рот этому наглому HRу, который набрался словечек по типу многопоточность )
  • Серьёзный недостаток связанный с однопоточностью - NodeJS не любит сложных вычислений, так называемых "high load CPU", это единственная причина по которой стоит отказаться от NodeJS в сторону того же C#, который умеет в многопоток. ( но мы тут вообще то пишем на платформе RageMp, это нас вообще волновать не должно ).

Впитали в себя эту информацию, двигаемся дальше, к изучению NodeJS, по сути изучать тут почти нечего, так как мы не будем использовать всю мощь этого инструмента для задач под платформу RageMp, по этому идём на сайт metanit, и читаем про NodeJS поверхностно, там же узнаём как все это дело развернуть у себя на ПК и запустить свой первый сервак для общего развития.

Далее быстро пробегаемся по таким вещам как пакетный менеджер npm, и читаем про npx.
Все, вы почти Junior Backend Developer ( нет ), идём дальше.

Webpack/Esbuild/Parcel ( сборщики ):


Но как и с NodeJS давайте обговорим важные моменты связанные со сборщиками, что они умеют и как их использовать, а главное, какой выбрать, ведь их существует огромное количество, на любой вкус, цвет и длительность сборки ( привет webpack ):

  • Первая и самая основная работа сборщика - собрать все ваши файлы разных типов ( будь то картинки, .ts, .js, .json, и т.д. ) в один, или несколько так называемых "бандлов" учитывая все зависимости собираемых файлов, в процессе оптимизируя и сжимая код.
  • Сжатие ( минификация ) - как упоминалось выше, ваш код не только собирается в один, или несколько бандлов, подтягивая все зависимости но и оптимизируется/сжимается, что это значит? Сборщик буквально проходится по вашему коду, убирая комментарии, пробелы, переходы на новую строку, заменяет имена переменных на символьные что уменьшает объём файлов и полностью убивает их читабельность ( это дополнительно защищает ваши билды, если они попадут не в те руки, так нежелательные персоны не получают весь исходный код )
  • Оптимизация - сщуествует огромное количество инструментов которые позволяет так или иначе оптимизировать код: сжатие файлов, кэширование ресурсов, оптимизация изображений и т.д., мы не будем рассматривать в это, но вы можете погуглить.
  • Обфускация - дополнительно сборщик может провести так называемую "обфускацию" ( найс слово, еле загуглил ), по сути это почти то же самое что и минификация, только это уже целенаправленное усложнение ревёрс-инженеринга вашего кода, с дополнительным шифрованием участков кода.

Теперь когда мы знаем что это такое, встаёт вопрос какой выбрать? На самом деле в большинстве проектов вы встретите Webpack, это мощнейший инструмент, самый популярный сборщик, но у такой силы есть своя цена..





Скажу честно, в последнем проекте я решил избавится от webpack и попробовать относительно новый и свежий esbuild ( был разработан в 2020 году ), я был в восторге, файлик с настройкой содержал в себе 15 строк кода и все прекрасно работало, но вот нашему фронтенд разработчику esbuild оказался непреодолимым барьером, то ли он ленивый алкаш, то ли esbuild не предоставляет тех инструментов, которые ему были нужны.

Справедливости ради я сам столкнулся с проблемой, у меня не работали декораторы с esbuild, и так как на тот момент у меня не было ни сил ни времени разбираться в чем проблема, я просто накатил webpack

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

Для примера, документация Webpack 5;
Все, идём дальше.



Далеко собрались? Тема то не резиновая, да и я вам не печатная машинка, хочу кушать и все такое.
А если серьёзно, тут и так довольно много контента для изучения, по этому я решил не грузить вас огромной темой на триллион символов, я разделил эту тему на две части, во второй мы изучим ещё пару очень важных тем, таких как Базы данных, и прочие инструменты которые вам может нужны, а может и нет.
Накатите пару комментариев, очень интересно ваше мнение, так же тема открыта для дополнений, старайтесь ясно изложить ваше дополнение и красиво оформить, после чего я могу добавить ваш ответ в тему.

Спасибо что уделили мне время.
 
Последнее редактирование:

wholinc

Специалист
24 Янв 2023
778
457
95
24
а говорят chatGPT сложно добавить на форум)
upd: Бегло прочитал всю тему, это огромный труд автора. Если есть реально люди с амбициями и желанием начать че то делать, а не дрочить картинки на редаге то это их огромный шанс полегче влиться в эту тусовку. Это конкретно теория как нужно начать, никак писать код или значение функций. Это конкретно объясняет тебе для чего нужен этот ваш node js и почему то или иное необходимо.
 
Последнее редактирование:
Реакции: MoonFusion и MiLT

MoonFusion

Гуру
Автор темы
high coder
14 Июн 2021
308
250
123
upd: добавил более точное описание асинхронности NodeJS
 

stage

Специалист
14 Сен 2020
229
106
96
Webpack лучше не юзать, крайне медленный и ху$вый сборщик, статья годная, +rep
 
Реакции: dooj, Inoi и NITRO.dev

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,071
2,472
219

MoonFusion

Гуру
Автор темы
high coder
14 Июн 2021
308
250
123
Webpack лучше не юзать, крайне медленный и ху$вый сборщик, статья годная, +rep
Webpack не плохой сборщик, это надёжный инструмент с кучей функционала, в теме я рассказал о том что он достаточно сложный в настройке и медленнее конкурентов в рамках каких-то тестов, но на реальных проектах это слабо ощущается)
 
Реакции: stage

MaxFanti

Активный участник
5 Апр 2022
3
1
43
Даже добавить нечего, все четко и без воды