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

Старожил
BackEnd developer
14 Июн 2021
371
222
143

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

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

Данная тема это некое руководство/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;
Все, идём дальше.



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

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

youngBeaver

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

MoonFusion

Старожил
BackEnd developer
14 Июн 2021
371
222
143
upd: добавил более точное описание асинхронности NodeJS
 

stage

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

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,671
2,848
219

MoonFusion

Старожил
BackEnd developer
14 Июн 2021
371
222
143
Webpack лучше не юзать, крайне медленный и ху$вый сборщик, статья годная, +rep
Webpack не плохой сборщик, это надёжный инструмент с кучей функционала, в теме я рассказал о том что он достаточно сложный в настройке и медленнее конкурентов в рамках каких-то тестов, но на реальных проектах это слабо ощущается)
 
Реакции: MADARAdev

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
746
286
141
29
Умница. Все толково и по полочкам.
 

MaxFanti

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

MoonFusion

Старожил
BackEnd developer
14 Июн 2021
371
222
143
Апну, может кому интересно будет, а то потерялась в глубинах интернета
 
Реакции: youngBeaver

Fumarie

Участник портала
27 Июн 2024
81
21
50
24
Я привык писать код на маке, в связи с чем пришлось недавно поебаться с тем, чтобы настроить автоматическое телепортирование билдов на винду , где открыта ГТА и запущен сервер. Если кому-нибудь будет полезен гайд, могу написать

Пс. Пробовал на маке в докере держать сервер, при переподключениях к серверу часто зависала ГТА и приходилось перезапускать ее по 5 минут, поэтому запускаю серв тоже на Винде и портирую билды через rsync
 
Реакции: Harland David Sanders

MoonFusion

Старожил
BackEnd developer
14 Июн 2021
371
222
143
Я тоже что то подобное делал для своего мейн проекта, так получается что у меня часто отключают свет, и я тоже частенько пишу код с мака. Билжу все через ВС код, после чего просто по SSH гоню на тестовый сервак и через скриптик рестарчу сервак, и все на одну кнопку
 

Fumarie

Участник портала
27 Июн 2024
81
21
50
24
Да, видел что у вс кода такая тема есть, я просто сижу на вебшторме, поэтому пришлось возиться. У джетбрейнсов есть тоже что-то подобное, но нужно фулл лицензию на все продукты покупать. Но есть и плюс в моем подходе, вебпак watch mode после каждого ребилда сам все синкает
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,671
2,848
219
Какие варианты есть по запуску рейджа на mac os?
 

Fumarie

Участник портала
27 Июн 2024
81
21
50
24
Какие варианты есть по запуску рейджа на mac os?
Если имеется ввиду сам рейдж с игрой, то через параллель десктоп и подобные эмуляторы только
Сервер можно запустить в докере, подняв образ винды или виндоус сервера, еще есть такая темка, но я не пробовал
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,671
2,848
219
Ты сам пробовал через parallels запускать или просто рандомно пишешь?
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,671
2,848
219
Вообще то у рейджа есть античит Kernel уровня и он запалит твою виртуализацию и просто не даст запустить игру, но это ладно. Ты пробовал запускать хотя бы просто GTA 5 в одиночке?
 

Fumarie

Участник портала
27 Июн 2024
81
21
50
24
Ты сам пробовал через parallels запускать или просто рандомно пишешь?
Не пробовал. Я, как и писал, сейчас запускаю игру и сервер на винде. До этого держал сервер в докере и подключался к нему с виндоус компа по сети, но это был плохой опыт.