Learning to code from zero after 30: a realistic first 12 weeks
In this article (6 sections)
Related programme: the FDE for Freshers course (6–7 months; EMI from ₹8,000/month · full fee shared on your counselling call). See also open Forward Deployed Engineer jobs in India, updated daily.
You can learn to code from zero after 30, and the first 12 weeks should aim at one thing: writing small, complete Python programs from a blank file without copying. Expect slower syntax recall than a 20-year-old with free evenings, but faster judgement about what a program is for — which is the part most beginners lack.
What actually changes after 30
Most people who start late assume their memory is the problem. It rarely is. The real differences look like this:
| Harder after 30 | Easier after 30 |
|---|---|
| Finding two free hours in a row | Knowing what a business process is and why it breaks |
| Tolerating feeling stupid in front of younger classmates | Asking a precise question without embarrassment once you decide to |
| Recovering a week lost to family or work | Sticking to a schedule you have committed to |
| Unlearning "I must understand everything before I start" | Spotting when a task is unclear and asking for acceptance criteria |
The second column matters more than it seems. A forward deployed engineer spends much of the job turning a vague client request into working software, and ten years of handling customers, vendors or operations is directly useful there. The first column is what the plan below is designed around.
The 12-week sequence
Each block ends with a program you write yourself. If you cannot write it without looking, you repeat the block rather than moving on.
| Weeks | Topic | Finish line |
|---|---|---|
| 1–2 | Running Python, variables, print, input, arithmetic, strings | A tip-and-split calculator for a restaurant bill |
| 3–4 | Lists, loops, if / else, dictionaries | A categorised monthly expense summary |
| 5–6 | Functions, reading and writing files, simple errors | A script that reads a CSV of expenses and writes a report file |
| 7–8 | Debugging with tracebacks, try / except, testing with assert | The same script, now refusing bad rows with a clear message |
| 9–10 | Command line basics, Git, a first repository | The project on GitHub with a README a stranger can follow |
| 11–12 | SQL basics with SQLite, calling SQL from Python | Expenses stored in a table and queried by month |
SQL enters late on purpose. Two languages at once is where most late starters stall.
Three checkpoint exercises
These are the tests. Close every tutorial, open an empty file, and time yourself.
Week 2 checkpoint. Ask for a bill amount, a tip percentage and a number of people; print each person's share rounded to two decimals. Target: under 20 minutes.
Week 4 checkpoint. Given a list of expense lines, total them by category. This is the one most people copy from somewhere; do not.
# Week 4 checkpoint: synthetic expense lines
lines = [
"groceries,1240",
"travel,380",
"groceries,560",
"phone,299",
"travel,150",
]
totals = {}
for line in lines:
category, amount = line.split(",")
totals[category] = totals.get(category, 0) + int(amount)
for category in sorted(totals):
print(f"{category:<10} {totals[category]:>6}")
assert totals == {"groceries": 1800, "travel": 530, "phone": 299}Week 8 checkpoint. Extend the same idea so a malformed line does not crash the program but is reported.
lines = ["groceries,1240", "travel,abc", "phone,299", "badline"]
totals, rejected = {}, []
for number, line in enumerate(lines, start=1):
parts = line.split(",")
if len(parts) != 2:
rejected.append((number, "expected two fields"))
continue
category, amount = parts
try:
value = int(amount)
except ValueError:
rejected.append((number, f"amount '{amount}' is not a number"))
continue
totals[category] = totals.get(category, 0) + value
print(totals)
for number, reason in rejected:
print(f"line {number} rejected: {reason}")
assert totals == {"groceries": 1240, "phone": 299}
assert len(rejected) == 2The week 8 version is the first program that behaves like real work. Client data is always dirty, and a script that explains why it refused a row is worth more than a clever one that crashes.
A week that fits a job and a household
Assume 7 hours. Split it so no session is longer than 90 minutes:
- Monday, Wednesday, Thursday: 60 minutes each — new concept, then type every example yourself.
- Tuesday: 30 minutes — redo last week's checkpoint from blank.
- Saturday: 90 minutes — the block's finish-line program.
- Sunday: 60 minutes — fix what broke, write two lines in a learning log about what confused you.
The Tuesday redo is the part people skip and the part that works. Recall, not rereading, is what moves syntax into long-term memory.
Signals to change the plan
Keep going if you can finish a checkpoint slowly but alone. Adjust if any of these repeat for two weeks:
- 1You understand every video but cannot start a blank file. Cut watching time in half and double the blank-file time.
- 2You spend sessions installing and configuring. Use one editor and one Python version; stop comparing setups.
- 3A traceback makes you close the laptop. Read the last line first. It names the error type and usually the line number.
- 4You missed a full week. Do not jump ahead to "catch up". Redo the previous checkpoint, then continue.
Where this leads
Twelve weeks gets you a foundation, not a job-ready profile. An FDE role also needs APIs, cloud basics, production habits and the client-facing craft that comes after programming. If you want that path mapped out, the FDE for Freshers programme starts from zero prerequisites, and the forward deployed engineer hub explains what the role involves before you commit. A useful first step is the free resume skill check, which shows which of your existing skills already count.
Frequently asked questions
Is 30 too old to start learning programming?
No. Age does not stop you from learning syntax or logic. What changes after 30 is usually time, energy and responsibilities, so the plan has to fit shorter sessions and be built around small finished programs rather than long unbroken study days.
How many hours a week does a beginner need to learn Python?
A steady 6 to 8 hours a week, split across at least four days, is enough to make visible progress in 12 weeks. Four short sessions beat one long Sunday because programming skill depends on repetition and recall, not on a single marathon.
Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.
This article is part of our FDE for Freshers programme — 6–7 months. Build your engineering foundations, then take AI from discovery to delivery.
Explore FDE for Freshers