Не думал что вам так зайдёт прошлая статья, по этому ловите ещё одну, но на другую тему.
* Смайликом ( ) обозначена ирония/самоирония, постарайтесь не воспринимать эти тезисы в серьёз.Я чутка решил разбавить скучный текст своими припадками шизофрении, надеюсь это поможет более легко воспринимать информацию, все же я не робот и не пишу свои темы с каменным лицом, по этому будет забавно почитать мои мысли во время написания этого
Данная тема это некое руководство/roadmap для начинающих в этой сфере, я постараюсь довольно детально расписать необходимый стек технологий, аргументирую их выбор ( ), и расскажу про ресурсы с помощью которых можно будет все это изучить и которыми пользовался лично я, так же не хочу рассказывать вам о том что нужно больше практики, сколько нужно уделять времени в миллисекундах в день, не буду рассказывать про оптимальный подход к обучению, эта тема о другом. Не будем ходить вокруг да около, приступим.Все так-же как и в прошлый раз, в этой теме я не пытаюсь преподнести контент как единственно верную истину, и не заставляю следовать этим советам, это лишь мой опыт, то что пришлось изучить мне на пути становления Senior Ragemp Developer ( ), прислушиваться к этому или нет - ваш выбор, я вполне адекватно воспринимаю объективную и даже субъективную критику, по этому добро пожаловать в комментарии.
Основы программирования ( + Теория программирования ):
Сразу же дам спойлер, далее по теме мы будем рассматривать связку NodeJS + TypeScript ( Server ) / JavaScript + TypeScript ( Client ), но есть небольшая проблема, JavaScript сам по себе очень плохой выбор для начала вашего пути в программировании, он может привить вам плохие привычки, и не даст понять что такое статическая типизация при его базовом изучении без TypeScript, по этому я крайне рекомендую выбрать другой язык для изучения основ.
Я не буду сейчас нести всякую чушь о том что вам нужно начать с низкого уровня, выучить С++, разобраться с контролем памяти, понять как работают процессоры, написать свой компилятор и потом пойти писать проект на платформе RageMp ( ), но все же начать следует с чего то, что соответствует следующим параметрам: компилируемый, со статической типизацией, мультипарадигмальный ( что бы это не значило ), под это описание полностью подходит C#, именно его я рекомендую использовать для изучения основ программирования.
С чего начать? Все просто - научится гуглить, да да, основы программирования начинают изучать именно с этого, в интернете давно существует огромное количество информации по интересующим вам темам, и в первую очередь научитесь искать информацию самостоятельно, рекомендую далее по ходу этой темы гуглить все неизвестные вам термины и тезисы.
После того как вы изучили вдоль и поперёк поисковую строку google.com дам вам несколько зацепок и направлений который нужно изучить в первую очеред
- Тык - тут простым языком вам расскажут об основах программирования, используя "псевдо язык" ( )
- Тык - отличный материал по языку C#, с упором на синтаксис
- Тык - здесь вам объяснят что такое client-server взаимодействие
- Тык - ООП парадигма, очень важно хорошенько понять эту тему ( я не понял )
И только после того как вы поняли базу-фундамент на примере C#, следует идти дальше в наш любимый JavaScript , о чем мы и будем говорить далее.
JavaScript ( + TypeScript ):
Да бы не сильно растягивать тему ( я знаю что я мог сэкономить буквы вырезав предыдущую тему, так-как её и так скипнут, но я все же надеюсь на благоразумие начинающих Senior Ragemp Developer'oв ), я не буду разделять все эти темы, а постараюсь лаконично вместить все сюда.
JavaScirpt + TypeScript
После изучение основ я крайне рекомендую использовать все же связку JavaScript + NodeJS/TypeScript для работы в этой сфере, аргументирую я это следующим:
- Больше ресурсов и документации для RageMp
- Более щадящий синтаксис, много сахара ( что по моему профессиональному мнению все же плюс )
- Существование TypeScript ( если бы его не было, я бы посоветовал C# )
- Сложность деббага ( JavaScript не имеет своего статического анализатора, что усложняет поиск потенциальных ошибок ), сейчас много кто пойдёт писать гневный коментарий про ESLint, или JSHint, но это не решает всех проблем с трудностями деббага.
- Отсутствие статической типизации ( вот вам и проблема, которую не решает ESLint ) что явно приведёт вас к куче проблем, особенно если вы планируете где-то работать в команде.
- Ошибки на стадии выполнения, если вы не дай бог где то допустили ошибку в коде, интерпретатор JS не сможет вам её отобразить на этапе интерпретации, он просто транслирует ваш код вместе с потенциальными ошибками, в следствии чего вы получите ошибки на этапе выполнения, и если в процессе разработки это не так критично, хоть и не удобно, то на этапе релиза вашего кода это может стать причиной вашего увольнения с Atom Community + .
И так, все три проблемы решает чудо инженерной мысли, гениальное творение человека который не смог придумать оригинальное название для своего инструмента - TypeScript, он буквально решает все проблемы JS и позволяет комфортно писать код на этом языке.
TypeScript - это расширение над JavaScript, по сути это обёртка, которая добавляет вам типы, компилирует ваш TS код в JS код, при этом не даст вам просто так скомпилировать код с ошибками, он будет ругать вас за неправильное использование типов, объявление констант без значений, неправильный набор аргументов для функций/методов и много чего ещё.
Что же, выше была аргументация выбора именно этих технологий, теперь же перейдём к самому процессу изучения.
Стоит начать с изучения синтаксиса JS, даже на примерах Web сферы, разницы нет, синтаксис останется неизменным и в NodeJS/TS.
Для этого я крайне рекомендую ресурс - learn.javascript.ru, он проведёт вас в мир грёз и фантазий, научит всему чему надо и даже немного поводит своим event(za)Loop по вашим eventLips ( )
Далее, как я и сказал ранее, нам понадобится TypeScript, я думаю вы уже познакомились с сайтом metanit, на нём так же есть подробный гайд на TypeScript и я крайне рекомендую прочитать его, я вас уверяю, если вы изучали C# - изучение TypeScript займёт у вас неделю, а то и меньше ( когда я прошел собеседование на Atom Community я знать не знал о TypeScript, а мне задали сделать тестовое на нём, с чем я вроде как неплохо справился за день ).
Изучили? Не стоит задерживается, идём дальше.
NodeJS ( Серверная часть ):
Что такое NodeJS? Представьте себе JavaScript, который выполняется не в браузере, а скажем у вас на ПК, либо на сервере, вот это по сути и есть NodeJS.
Он позволяет выполнять код написанный на JavaScriptна серверной стороне, как он это делает? Если интересно - гуглите, тема не об этом.
Стоит упомянуть некоторые важные детали для более глубокого понимания:
- Асинхронность - Node.js использует неблокирующий ввод/вывод ( I/O ), что означает, что операции ввода/вывода не блокируют исполнение других операций, это позволяет эффективно обрабатывать большое количество запросов и обеспечивать высокую производительность.
- EventLoop и однопоточность - то за что многие НЕ любят NodeJS, так как ни черта не понимают, дело тут в том что NodeJS не поддерживает многопоточность, а в место этого использует EventLoop для обработки асинхронных операций и управления потоком ( обязательно почитайте об этом, это важно, иначе как вы заткнете рот этому наглому HRу, который набрался словечек по типу многопоточность )
- Серьёзный недостаток связанный с однопоточностью - NodeJS не любит сложных вычислений, так называемых "high load CPU", это единственная причина по которой стоит отказаться от NodeJS в сторону того же C#, который умеет в многопоток. ( но мы тут вообще то пишем на платформе RageMp, это нас вообще волновать не должно ).
Выше я уже писал почему мы используем JavaScript ( client ) + NodeJS ( server ), а не C#, но стоит кое что добавить, не столько значительное что бы перечислять в аргументации, но достойное упоминание - если вы выбираете NodeJS, ваш проект будет использовать JavaScript окружение как на клиенте, так и на сервере, что в разы облегчит вам сборку проекта и упростит работу с окружением.
Впитали в себя эту информацию, двигаемся дальше, к изучению NodeJS, по сути изучать тут почти нечего, так как мы не будем использовать всю мощь этого инструмента для задач под платформу RageMp, по этому идём на сайт metanit, и читаем про NodeJS поверхностно, там же узнаём как все это дело развернуть у себя на ПК и запустить свой первый сервак для общего развития.
Далее быстро пробегаемся по таким вещам как пакетный менеджер npm, и читаем про npx.
Все, вы почти Junior Backend Developer ( нет ), идём дальше.
Webpack/Esbuild/Parcel ( сборщики ):
И так, у нас тут на проекте уже NodeJS ( server-side ) / JavaScript ( client-side ) / NPM пакеты, да ещё и TypeScript сверху, как все собрать в кучу, да так что бы все работало? Использовать сборщик на любой цвет и вкус, они нужны для сборки вашего сложного проекта с кучей разных файлов, технологий, модулей в просто билд для релиза. Как? Я уже устал объяснять что тема не об этом, если интересно - гуглим.
Но как и с NodeJS давайте обговорим важные моменты связанные со сборщиками, что они умеют и как их использовать, а главное, какой выбрать, ведь их существует огромное количество, на любой вкус, цвет и длительность сборки ( привет webpack ):
- Первая и самая основная работа сборщика - собрать все ваши файлы разных типов ( будь то картинки, .ts, .js, .json, и т.д. ) в один, или несколько так называемых "бандлов" учитывая все зависимости собираемых файлов, в процессе оптимизируя и сжимая код.
- Сжатие ( минификация ) - как упоминалось выше, ваш код не только собирается в один, или несколько бандлов, подтягивая все зависимости но и оптимизируется/сжимается, что это значит? Сборщик буквально проходится по вашему коду, убирая комментарии, пробелы, переходы на новую строку, заменяет имена переменных на символьные что уменьшает объём файлов и полностью убивает их читабельность ( это дополнительно защищает ваши билды, если они попадут не в те руки, так нежелательные персоны не получают весь исходный код )
- Оптимизация - сщуествует огромное количество инструментов которые позволяет так или иначе оптимизировать код: сжатие файлов, кэширование ресурсов, оптимизация изображений и т.д., мы не будем рассматривать в это, но вы можете погуглить.
- Обфускация - дополнительно сборщик может провести так называемую "обфускацию" ( найс слово, еле загуглил ), по сути это почти то же самое что и минификация, только это уже целенаправленное усложнение ревёрс-инженеринга вашего кода, с дополнительным шифрованием участков кода.
Теперь когда мы знаем что это такое, встаёт вопрос какой выбрать? На самом деле в большинстве проектов вы встретите Webpack, это мощнейший инструмент, самый популярный сборщик, но у такой силы есть своя цена..
Да, я говорю про время сборки, то чувство когда поставил билдиться фронтенд, покакал, покушал, а он все ещё билдится, да это мощный инструмент, но довольно сложный в настройке из-за изобилия функционала, и неприятный на вид, аналоги не сильно отличаются, но именно webpack завоевал основную долю в проектах ( webpack был разработан ещё в далёком 2012 году, думаю отсюда и такая популярность ).
Скажу честно, в последнем проекте я решил избавится от webpack и попробовать относительно новый и свежий esbuild ( был разработан в 2020 году ), я был в восторге, файлик с настройкой содержал в себе 15 строк кода и все прекрасно работало, но вот нашему фронтенд разработчику esbuild оказался непреодолимым барьером, то ли он ленивый алкаш, то ли esbuild не предоставляет тех инструментов, которые ему были нужны.
Справедливости ради я сам столкнулся с проблемой, у меня не работали декораторы с esbuild, и так как на тот момент у меня не было ни сил ни времени разбираться в чем проблема, я просто накатил webpack
Вроде разобрались какой выбрать ( любой, если кто не понял ), теперь перейдём к его изучению, тут все проще простого, выбираем для себя сборщик, заходим на его официальный сайт, переходим в раздел документации и читаем, это наверное единственно правильный подход при изучении подобных инструментов, ведь тут нет определённых договорённостей и общих спецификаций, никто не расскажет вам как правильно настроить сборщик именно под ваш проект. По этому изучаем инструмент и пользуемся.
Для примера, документация Webpack 5;
Все, идём дальше.
Далеко собрались? Тема то не резиновая, да и я вам не печатная машинка, хочу кушать и все такое.
А если серьёзно, тут и так довольно много контента для изучения, по этому я решил не грузить вас огромной темой на триллион символов, я разделил эту тему на две части, во второй мы изучим ещё пару очень важных тем, таких как Базы данных, и прочие инструменты которые вам может нужны, а может и нет.
Накатите пару комментариев, очень интересно ваше мнение, так же тема открыта для дополнений, старайтесь ясно изложить ваше дополнение и красиво оформить, после чего я могу добавить ваш ответ в тему.
Спасибо что уделили мне время.
Последнее редактирование: