Структурный парадокс: странность в обучении luau

Я специально написал этот топик здесь, потому что просто хочу высказаться.

Вспомните классическую roadmap любого популярного языка программирования. Всё начинается с основ: общая информация, примитивы, базовые встроенные инструменты. Потом изучение парадигм под конкретный язык. И, наконец, переход к теме проектирования.

Короче, это объясняет любой курс/плейлист по Java, C++, C#, JavaScript и так далее. Даже отдельные фреймворки объясняют через общепринятые в продакшене решения.

Но с luau-обучением происходит что-то явно не то. Как в русском сообществе, так и зарубежном. Почему программисты на этом языке так упорно игнорируют архитектурные вопросы?

Обучение выглядит так: вот есть переменные такие-то. Потом функции. Вот чуть-чуть ООП на прототипах. И всё! Дальше в открытое плавание.

По моему болезненному опыту — это убивает будущего скриптера. Любой первый проект чуть сложнее кликера превращается в адские мучения. Сначала они могут быть не видны. Но чем дальше в лес — тем больше шкибиди доп-доп йес-йес. Любое задание геймдизайнера приводит в кромешный ужас. Конечно, перед такой-то раздутой кодовой базой…

И казалось бы, посмотри решение на DevForum. Но аааааа! Там часто нет объяснения. Разве что пару топиков про ООП подходы. Не больше. Шаблонов проектирования — нет. SOLID – нет. Или я плохо искал? :grinning_face_with_smiling_eyes:

Остаётся просто гуглить. Однако вы ничего не найдёте. Вас обязательно закинет в мир других языков программирования. Вы становитесь зависимы от уроков на Java, C++ и любом другом языке. Причём эти языки принципиально отличаются от luau.

Я долгое время изучал базовые архитектуры по типу MVP и MVC исключительно на JavaScript примерах. Стоит напомнить, что такие вещи используют 90% крупных проектов на Roblox. Просто никто особо не задумывается.

Так что молодому скриптеру придётся освоить механизм транслирования. А это головная боль…Luau не имеет многих инструментов популярных языков. Так что приходится выдумывать костыли.

Лично я таким способом изучал всю ООП-составляющую. Спойлер: до сих пор не доучил до конца из-за запутанной реализации на выходе. Сюда же паттерны из моего поста про книгу.

Про ECS вообще промолчу. Везде пишут про библиотеки на luau, например, jecs. Но никто не говорит, как это работает изнутри. Я видел только одну статью от моего знакомого на DevForum. Но честно, она объясняет просто принцип. Не более. Так что мне пришлось лезть в самые дебри C++ gamedev разработки.

Читать код библиотек — не вариант с моей точки зрения. Вы просто не поймёте, что за монолитным кодом скрываются какие-то идеи по типу архетипов.

Получение знаний превращается в: найди решение, изучи кратко другой язык, протранслируй знания в luau, реши проблему на luau.

Абсолютным peak является то, что эти шаблоны/паттерны являются базовыми. Их изучают в начале junior-разработчики. На любом собеседовании в IT-компанию на Java, C++, C# вас будут дрючить этими подходами.

Проблема трансляции, конечно, исправляется обучением какого-нибудь roblox-ts. Да, его синтаксис близок ко многим ООП-языкам. Но давайте честно…Сколько % roblox ребят его использует? Из моего окружения: Tesmi и cr1zied.

Окей. Обойдёмся без ООП-парадигмы. Всё-таки luau у нас не особо предназначен для таких задач. Но и тут облом! Обучение фишкам функционального/процедурного программирования опять находится в тени luau-обучения. Как так-то? Приходится лазить в похожие языки и опять заниматься трансляцией.

Так что мой главный вопрос: не слишком ли много действий приходится совершать, чтобы решить базовую проблему?

2 лайка

Полагаю это из-за ЦА языка. Без сомнения, есть очень профессиональные разработчики на нем, но он изначально создавался для тех кто не умеет ходить, и те же посты про ООП и предложения по усовершенствованию просто оказываются мало кому интересны и погребены под тоннами туторов на иф. В процентном соотношении мало кому будет интересна продвинутая архитектура

luau, всё таки, создавался не для создании полноценных проектов, а для встраивания его в проекты. MVC, MVP, ECS и так далее - всё это подходит для более низкоуровневых языков аля Rust, C, C++ и т.п, чтобы потом luau работал с интерфейсом и с лёгкостью делать изменения. В самом роблоксе 90% головной боли этих паттернов приходится на сам движок и на программисте остаётся только понимание архитектуры и что да где находится. Я бы не сказал, что это слишком большая проблема.

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

Но и архитектуру сделать плохую достаточно трудно: даже хаотично расположенные объекты только продлевают разработку, а не усложняют.

В общем, мой вывод: обеспокоенность серьёзная, но больше для любителей хардкора по Луа. Luau не задумывался чтоб его использовали как основной язык (на то number это double, а также сильный упор в TS синтаксис). Я, лично, когда думаю об архитектуре часто загоняюсь в идеалы, но всегда спускаюсь на землю: а нужна ли мне идеальная архитектура, когда Roblox уже предоставляет множество инструментов для создания простой и работающей архитектуры. Для новичков есть множество гайдов на ModuleScript, на кастомные сигналы, на проклятые Module loaders, на CollectionService, на RunService. Большинство разработчиков на луау больше энтузиасты или люди, хотящие заработать, а крупные проекты делать - дело больше для добровольцев.

Продвигаю для профессионалов.

2 лайка