Learning to code in Iraq: the path I would take if I started today
If I were starting today I would not begin with a framework or a long course. The path I recommend, based on the systems I build and the teams I work with.

In short
- Start with a small, real problem that someone you know has, not with a language or a framework.
- One language is enough to begin with: JavaScript, then TypeScript, because it opens up the web, the backend and mobile.
- AI does not remove the need to understand. It raises the value of people who know what to ask for, can read what was written and can test it.
In this article
The question I get most is where to start. My answer today is not the one I would have given some years ago, because the tools have changed. One thing has stayed the same: a person who learns to code by building something for a real person gets ahead faster than one who learns by watching lessons.
One rule before anything else
Do not start with a language or a framework. Start with a small problem that someone you know has: a stock sheet for a nearby shop, a booking page for a clinic, a menu for a restaurant. Once you know what you want to build, the language is just a tool, and learning turns into a question you are trying to answer instead of a lesson to memorise.
Learn so that you can build something. Do not build to prove that you have learned.
Why lessons fool us
Watching a lesson feels like progress, because everything in it works and every step makes sense. Then you open the code editor on your own and face an empty page. The gap between those two feelings is where the real learning happens, and you only close it by building something yourself.
I am not telling you to drop the lessons. Use them to serve your project, not to stand in for it.
Choose your first project
A good first project has four qualities:
- It is small enough to finish, because a project that never ends does not teach you to deliver.
- It is for a real person who can tell you whether it is useful.
- It has data that gets saved and displayed, not just a static page.
- It comes from a business you understand: a nearby restaurant, a clinic, a shop in your neighbourhood, or a school.
The path as I see it
These steps do not take much money, but they do take patience. I give no timings, because everyone covers them at their own pace.
Write a web page from scratch
HTML, CSS and a little JavaScript. Make it about yourself or about your project.
Give it data
A simple database that saves and displays, such as a product list or appointments.
Publish it on a real domain
This is where you learn hosting and domains, and that something nobody can see is not finished yet.
Put it in front of a real user
Watch them use it, and change whatever confuses them. This step teaches you more than any course.
Learn the habits of a team
Version control with Git, reading code someone else wrote, writing a clear commit message, and a simple test.
One language instead of five
I recommend JavaScript, then TypeScript. The reason is practical: with them you can write a website, a backend and a mobile app. Most of the systems I have worked on recently, Madar and Taeen among them, are built largely in TypeScript.
I do not claim it is the best at everything. It opens more doors in less time. And once you have mastered it, a second language comes easily, because the same ideas keep coming back.


University, course or project
I am not against any of these paths. Each one gives you something and may leave something out.
| Item | University | Course | Learning by project |
|---|---|---|---|
| What it gives you | A broad theoretical foundation and a degree | An ordered path with a trainer | Real experience and work you can show |
| What it may lack | Practice on real projects, unless you add it yourself | Carrying on by yourself once it ends | Someone to correct and guide you |
| Suits someone who | Wants a broad foundation | Needs discipline and guidance | Wants to enter the market quickly |
A mix works best: a foundation from one of them, then a real project on top. Thinkra was built on the same idea. It is an education platform, and I worked on parts of it, including the mobile app, the exams, the certificates and the live lessons. Recorded courses are not enough on their own. A learner needs a trainer who answers their questions and follows their progress.
Skills that last when everyone writes with AI
Tools change quickly. Here are three skills that I think will keep their value, whoever writes the code.
Use AI as a teacher, not as a writer
I work with AI agents every day, and I write instructions for them on every project. An agent can write in minutes what used to take a day. That does not spare you the need to understand. It raises the value of three things: knowing what to ask for, reading what was written and judging it, and testing it before it reaches a user.
Warning: Do not copy what you do not understand
Ask the assistant to explain the code line by line, then rewrite it yourself. If you copy without understanding, what you build falls over at the first error, and you will not know how to fix it.
Learn the business alongside the code
To be frank, the most important thing I ever learned was how to understand the business of the person I am building for, and that is not a programming language. A programmer who sits down with the shop owner, asks how they make money and where they lose it, and only then writes the code, builds something that gets used. When everyone is writing code with the help of AI, this is the skill that sets one programmer apart from another.
Read English from day one
Arabic is not the problem. Most first-hand sources are written in English, and whoever waits for a translation is always behind. You do not need to master the language. You need to be able to read documentation and understand an error message.
Learn to read the whole error message before you paste it to someone else, too. Half the solution is usually written there, and people who read these messages properly save themselves hours.
Show what you built and apply with confidence
A project nobody sees does nothing for you with an employer. Write a short page for each one: what the problem was, who you built it for, what you built, what you learned, and a link the reader can open. I write the project pages on this site the same way: the problem first, then what was built, then the result.
If nobody but you has used it, say so. Being honest about the limits of your project is better than an inflated number.
How you know you are progressing
Go back to code you wrote a few weeks ago. If you can see how to improve it, and parts of it are a little embarrassing, that is a good sign. It means your eye is sharper than it was. Progress shows up here before it shows on any certificate.
When to apply for a job
Nobody is going to announce the day you are ready. My own test is simple: you have a project that someone other than you uses, you can explain why you made the decisions in it, and you can open someone else’s code without fear. When those come together, apply. Do not wait until you feel completely ready, because that feeling never arrives.
What holds you back
Two obstacles come up again and again: the conditions you are learning in, and the habits that keep you where you are.
Learning with an unstable internet
Many learners here study with an unreliable internet connection and unreliable electricity. Do not let that become an excuse. Prepare for it: run a server and a database on your own machine, download the documentation you need, and work on whatever does not need a connection. Along the way you will learn how the thing you are building works on the inside.
Signs that you are going in circles
If you recognise one of these, stop and build something
Note: About promises
Do not pay anyone who guarantees you a job. Nobody can guarantee one, and anyone who promises it is selling you hope. Ask instead what you will build during the course, and what work you will leave with.
The short version
Start with a small, real problem. Build it, publish it, and put it in front of a user. Do that a few times and you will have something to show an employer. That is the path I would take if I were starting today.
Projects mentioned in this article
Questions
Do I need a university degree in computing to become a programmer?
I do not think it is a requirement, though it does give you a broad foundation. Whichever path you take, what settles it for an employer is what you have actually built.
Which language should I start with?
JavaScript, then TypeScript, because with them you can write a website, a backend and a mobile app. They are not the best at everything, but they open more doors in less time.
Should I learn from courses or from projects?
A mix works best: a foundation from a course or a university, then a real project for a real person. A course on its own is not enough.

