Lua is a small, fast scripting language that hides inside bigger programs. Roblox, World of Warcraft addons, the Corona/Solar2D engine, and even parts of Adobe Lightroom all run Lua. Game developers love it because it is tiny — the whole interpreter is a few hundred kilobytes — and because it is easy to embed inside a C or C++ application.
The syntax is minimal. There are only a few concepts to learn, and that is the point. Here is a complete example:
-- tables are Lua's only data structure: array, object, and more local player = { name = "Asha", level = 5, hp = 100 } function player:take_damage(amount) self.hp = self.hp - amount if self.hp <= 0 then print(self.name .. " is down!") end end player:take_damage(30) print(player.hp) -- 70 Tables do the work of arrays, objects and dictionaries in other languages. Functions are values, so you can pass them around like any other data. Metatables let you add behaviour like operator overloading when you need it — but you can build real things long before you need any of that.
Lua is a great first scripting language for game development. If you want to mod games, build Roblox experiences, or script a game engine, Lua is often the only choice — and a good one. It is also used in embedded systems and network tools (Nginx, Redis scripting) where a small, fast interpreter matters.
The limits: Lua is not a general-purpose application language. There is no huge standard library, no built-in web framework, and very few Lua-only jobs. It is a language you learn because a platform you care about uses it, not because it does everything. Its 1-based indexing also surprises people coming from other languages.
Start today: install Lua, write the example above, and change it — add a heal function, a level-up rule, an inventory table. Then pick your target: Roblox Studio if you want to build games, or LÖVE (love2d) if you want a free 2D game engine. One small game is worth more than ten tutorials.