It started with a Saturday afternoon and a five-year-old asking, "Baba, how do computers think?"
I am a software engineer. I have been writing code for fifteen years. I know Python, C, JavaScript, Rust. I have shipped software used by hundreds of thousands of people. But sitting on the floor with my daughter, laptop open, cursor blinking, I realised I had no good answer to that question in a form she could understand — and do something with.
Every language I opened felt like I was handing her a power tool without a safety guard. Python is better than most, but even print("Hello") raises questions: Why the brackets? Why the quotes? Why does it matter if you use a single quote or a double quote? What is print — is that a word or a magic spell? Her brain was trying to find the story in the symbols, and the symbols refused to tell one.
The noise problem
Here is what I mean by noise. When you write your first Python program, the language forces you to understand, at minimum: the concept of a function call, the concept of a string delimiter, the fact that parentheses group arguments, and the fact that indentation matters. None of these are explained. They are simply rules. Break one and the program crashes with a message designed for someone who already knows what they did wrong.
Scratch, the visual block language, avoids this by removing text entirely. And for young children it works beautifully. But my daughter was already reading. She loved books. She wanted to type words that did things, not drag coloured blocks. She wanted to write a story to the computer, not paint by numbers.
"Baba, I want to tell the computer to say Bismillah. How do I say that?"
What she wanted to write was: say "Bismillah". And that is exactly what ILMA lets her write. That is the first program in every ILMA tutorial, because it is the first sentence she asked to write.
Designing for a child's mental model
Children do not think in abstractions first. They think in stories. A variable is not a box in memory — it is something you remember. A function is not a subroutine — it is a recipe. A list is not an array — it is a bag you carry things in. A condition is not a branch in a control flow graph — it is a question: if this, do that. Otherwise, do the other thing.
This is not dumbing down. Every keyword in ILMA was chosen because it maps onto a concept a child already has in their head. When you teach a five-year-old to bake bread, you do not say "combine the reagents and apply thermal energy." You say "mix the flour and water, then put it in the oven." The complexity is the same. The vocabulary is the right one for the learner.
The ILMA keyword list grew out of conversations with my daughter. remember for variables, because you ask children to remember things. recipe for functions, because recipes are a sequence of steps with ingredients. bag for lists, because bags hold a collection of things. notebook for dictionaries, because notebooks have labelled pages. blueprint for classes, because blueprints describe how to build something. give back for return, because when you borrow something and are done with it, you give it back.
Technical choices
I made a deliberate choice to compile ILMA to C, not to build a simple interpreter. This was not obvious at first. An interpreter is faster to build. But I wanted ILMA programs to be fast — genuinely fast. I wanted a child to write a Fibonacci program and have it finish in a blink, not sit there grinding. I wanted the door to be open for her to later learn that the friendly words she wrote became machine code that ran directly on the processor.
Compiling via C also means ILMA programs run on everything — Linux, macOS, Windows, a Raspberry Pi. No virtual machine, no runtime to install, no version conflicts. One binary. The program her tablet runs is the same kind of program that runs the web server serving this page.
The other choice was to make the language progressively more capable. ILMA has three tiers: Seed (for ages five to eight), Sapling (ages eight to thirteen), and Tree (ages thirteen and up). A Seed-level program uses only say, remember, and repeat. A Tree-level program can use blueprints, lambdas, pattern matching, and modules. The same language grows with the child. She does not have to switch to a "real" language later. ILMA is already real.
The moment it worked
Six months after I started building ILMA, my daughter sat at her desk and wrote a program without me telling her what to type. It calculated how much pocket money she would have after saving for three months. It looked like this:
remember weekly = 5
remember weeks = 12
remember total = weekly * weeks
say "I will have {total} pounds!"
She ran it. It printed: I will have 60 pounds! She looked at the screen for a long moment, then looked at me, and said: "Baba, I told the computer what to do."
That was the moment ILMA became real.
What comes next
ILMA is now at version 0.5.0. It has a package manager, a language server for VS Code, a REPL, a formatter, a static checker, and a documentation generator. There are active tests, and the toolchain is growing. You can install it on Linux or macOS with one command. There is a Homebrew formula for macOS. There is a Windows installer.
But the most important thing is that it still only takes one line to make a computer say something meaningful:
say "Bismillah"
If you have a child who is curious about computers, and you want to give them a language that respects their intelligence without overwhelming them with syntax, try ILMA. Install it, open a file, type those two words. Watch their face when the computer answers back.
That is why I built it.
Written by Raihan • March 2026