A variable is essentially a labeled box that holds a piece of information your program can use and refer to later. You give it a name, and assign it a value — like saying "call this number 25, and refer to it as 'age' whenever I need it."
Data types define what kind of information is being stored. Common types across most languages include whole numbers (integers), decimal numbers (floats), text (strings), and true/false values (booleans).
Where languages differ is in how strict they are about types. Some languages like Java and C# require you to explicitly state what type a variable is upfront. Others like JavaScript and Lua are more relaxed — they figure out the type automatically based on what value you give it. Neither approach is better, they just require different habits depending on which language you're working in.