How to start programming from scratch: a practical 30-day plan
Want to learn to program but don’t know where to start? You don’t need a talent for maths, knowledge of ten technologies or to pick a field for life right away. You need one language, a regular rhythm and a small project on which you really try out the basics. This plan guides you through the first 30 days so that at the end you are left not just with notes from tutorials but with your own working program.
A realistic goal for the first month: In 30 days you won’t become a professional developer. But you will understand the fundamentals, learn to break a problem down into smaller steps and finish a simple project without blind copying.
1. What programming really involves
Programming is not mainly about typing strange words into a black window. It is a way of translating a problem into precise steps the computer understands. When you build a program for tracking expenses, you first have to clarify what data you store, what the user can do with it and what should happen on invalid input. Only then comes the syntax — the rules for writing these steps in a specific programming language.
At the beginning you will spend most of your time doing four things:
- Reading other people’s code and trying to predict what it will do.
- Writing small parts of a program — a condition, a loop or a function.
- Finding bugs based on the error message and the program’s behaviour.
- Adjusting the solution until it works even for unexpected inputs.
Finding bugs is usually the surprise for beginners. But a bug is not proof that you’re not cut out for programming. It is information about where your idea differs from the program’s actual behaviour. A more experienced developer makes fewer mistakes not because they know everything; they can isolate and verify them faster.
2. Python or C#? How to choose your first language
Choosing a first language is not a marriage for life. The basic principles — variables, conditions, loops, functions, working with data and finding bugs — you will later carry over to other languages. Decide according to what you want to create within a few months.
Start with Python if…
you want to quickly write readable programs and you are attracted by automation, working with data, the server side of web applications (backend) or artificial intelligence.
- it has a concise and highly readable syntax,
- you create your first useful small program (script) very early,
- it offers a large selection of ready-made packages (libraries) and learning resources.
Start with C# if…
you are attracted by enterprise and desktop applications on the .NET platform or game development in Unity and you want a firmer structure from the start.
- the compiler — the tool that checks the code before running — warns you about many errors early,
- it naturally guides you towards precise data types and clear program structure,
- it is strongly represented in corporate development.
Still hesitating? For this 30-day plan choose Python. With less syntax you get to solving problems sooner. But if you already know you want to go into .NET or Unity, C# is an equally good first choice.
3. Set up your environment — simply, not perfectly
For Python you need the language itself and an editor. Download the current stable Python from python.org and, when installing on Windows, tick the Add Python to PATH option. As an editor you can use Visual Studio Code with the official Python extension.
In the editor create a folder prvni-projekt, inside it a file main.py and write:
jmeno = input("Jak se jmenuješ? ")
print(f"Ahoj, {jmeno}! Tvůj první program funguje.")
In VS Code open the menu Terminal → New Terminal. In the bottom panel type python main.py and press Enter. On some Windows installations use py main.py. If the system doesn’t recognise the command, close and reopen VS Code after installing Python. Once the program prints the greeting, you’re done. Don’t install large sets of programming tools (frameworks), databases or ten extensions yet — you won’t need them for the first weeks.
Before you start: set up a simple study journal
- After each session write two sentences: what already works and where you got stuck.
- Save one bug you solved, including its cause.
- At the end of the week, explain three new concepts in your own words without help.
4. A practical plan for the first 30 days
Count on five study blocks a week of 45 to 60 minutes. One long weekend marathon won’t replace short regular contact with code — between lessons you would keep searching for where you left off.
Basic building blocks
Learn to read a simple program and change its behaviour.
- variables for holding values and basic data types such as text and numbers,
- reading input from the user and printing the result,
- decisions using the conditions
if,elifandelse, - repeating statements using
forandwhileloops.
Output of the week: a number-guessing game or a simple calculator.
Data and your own functions
Stop writing everything in one long sequence and start composing the program from smaller parts.
- lists and dictionaries for storing multiple values,
- your own functions — named pieces of code — their inputs (parameters) and results (return values),
- checking whether the user entered a valid value (input validation),
- reading the error output (traceback) and finding the cause of a bug (debugging).
Output of the week: a to-do list that can add and list items.
Project from design to first version
Start with a personal expense tracker. First write down what it must do, and only then the code.
- adding an amount and a category,
- listing all items,
- total of expenses,
- saving data to a file.
Output of the week: a small program that solves a real problem.
Finishing and sharing
Tidy up the project, test it and prepare it so that someone else can run it too.
- splitting long sections into functions,
- handling invalid input,
- a README file describing the project and how to run it,
- Git and uploading the project to GitHub.
Output of the week: your first finished portfolio project.
You don’t have to master Git on day one. As soon as you have a project worth keeping, go through our guide Git and GitHub for beginners. In it you will learn your first commit, uploading a repository and creating a meaningful README.
5. First project: a personal expense tracker
A good first project has a clear input, a visible result and can be extended in small steps. An expense tracker meets all of these: you enter an amount and a category, the program stores the data and can summarise it.
Build the project in layers
- Version 1: read one amount and print it.
- Version 2: store multiple amounts in a list and compute the total.
- Version 3: add a category to each amount.
- Version 4: create a menu for adding and displaying expenses.
- Version 5: save the data to a text file in JSON format so that it survives shutdown.
Start with a really small version. The following program can read one amount, store it in a list and print the total:
vydaje = []
castka = float(input("Částka v Kč: "))
vydaje.append(castka)
celkem = sum(vydaje)
print(f"Celkem: {celkem:.2f} Kč")
float() converts the entered text into a decimal number, append() adds the amount to the list and sum(vydaje) adds up all numbers in the list. Only once you understand this small version and can modify it without copying, add a category, a menu and saving to a file.
Intermediate step 1: Add categories and a menu
We now store each expense as a dictionary with two fields: castka (amount) and kategorie (category). The menu lets you repeatedly add items, show a summary or quit the program.
vydaje = []
def pridej_vydaj(vydaje):
zadana_castka = input("Částka v Kč: ")
try:
castka = float(zadana_castka)
except ValueError: # zadaný text nejde převést na číslo
print("Zadej číslo, například 249.90.")
return
kategorie = input("Kategorie: ").strip()
if not kategorie:
kategorie = "Ostatní"
vydaje.append({"castka": castka, "kategorie": kategorie})
print("Výdaj je přidaný.")
def vypis_souhrn(vydaje):
if not vydaje:
print("Zatím nemáš žádné výdaje.")
return
celkem = 0
for vydaj in vydaje:
print(f"{vydaj['kategorie']}: {vydaj['castka']:.2f} Kč")
celkem += vydaj["castka"]
print(f"Celkem: {celkem:.2f} Kč")
while True:
volba = input("\n[P]řidat, [S]ouhrn, [K]onec: ").lower()
if volba == "p":
pridej_vydaj(vydaje)
elif volba == "s":
vypis_souhrn(vydaje)
elif volba == "k":
break
else:
print("Vyber P, S nebo K.")
Expected output in the terminal:
[P]řidat, [S]ouhrn, [K]onec: p Částka v Kč: 249.90 Kategorie: Jídlo Výdaj je přidaný. [P]řidat, [S]ouhrn, [K]onec: p Částka v Kč: 80 Kategorie: Doprava Výdaj je přidaný. [P]řidat, [S]ouhrn, [K]onec: s Jídlo: 249.90 Kč Doprava: 80.00 Kč Celkem: 329.90 Kč
This version works, but the items exist only in the program’s memory. When it quits, they are lost.
Intermediate step 2: Save expenses to a file
Now we add the file vydaje.json. The function nacti_vydaje() loads older items at startup and uloz_vydaje() saves them to disk after every change. Short comments directly in the code explain the important lines.
import json
from pathlib import Path
SOUBOR = Path("vydaje.json")
def nacti_vydaje():
if not SOUBOR.exists(): # při prvním spuštění soubor ještě neexistuje
return []
text = SOUBOR.read_text(encoding="utf-8")
return json.loads(text)
def uloz_vydaje(vydaje):
text = json.dumps(vydaje, ensure_ascii=False, indent=2)
SOUBOR.write_text(text, encoding="utf-8")
def pridej_vydaj(vydaje):
zadana_castka = input("Částka v Kč: ")
try:
castka = float(zadana_castka)
except ValueError: # zadaný text nejde převést na číslo
print("Zadej číslo, například 249.90.")
return
kategorie = input("Kategorie: ").strip()
if not kategorie: # prázdná kategorie dostane výchozí název
kategorie = "Ostatní"
vydaje.append({"castka": castka, "kategorie": kategorie})
uloz_vydaje(vydaje) # po každé změně přepíše soubor na disku
print("Výdaj je uložený.")
def vypis_souhrn(vydaje):
if not vydaje:
print("Zatím nemáš žádné výdaje.")
return
celkem = 0
for vydaj in vydaje:
print(f"{vydaj['kategorie']}: {vydaj['castka']:.2f} Kč")
celkem += vydaj["castka"]
print(f"Celkem: {celkem:.2f} Kč")
vydaje = nacti_vydaje() # načte dříve uložené položky
while True:
volba = input("\n[P]řidat, [S]ouhrn, [K]onec: ").lower()
if volba == "p":
pridej_vydaj(vydaje)
elif volba == "s":
vypis_souhrn(vydaje)
elif volba == "k":
break
else:
print("Vyber P, S nebo K.")
Expected result after quitting and restarting: previously entered expenses stay saved and the S command lists them again.
python main.py [P]řidat, [S]ouhrn, [K]onec: s Jídlo: 249.90 Kč Doprava: 80.00 Kč Celkem: 329.90 Kč
On this one program you practise input, conditions, a loop, lists, dictionaries, functions, working with a file and error handling. Then ask yourself: What happens with a negative amount? How to show the total by category? How to delete a wrong item? Each answer is a small extension of the project.
6. How to use AI so that it really teaches you to program
An AI assistant can explain an error, create another exercise or check your approach. But if you let the whole project be generated by a single prompt, you get finished code without understanding how its parts work together. The program will run, but at the first change you won’t know where to start.
Stick to a simple rule: first your own attempt, then a hint, finally an explanation in your own words.
“Write me the whole project.”
AI makes most of the decisions for you. The result may work, but you don’t train problem decomposition or independent bug hunting.
“Give me one hint.”
“I want to sum the amounts in dictionaries in a list. Don’t show the whole solution; ask me a question that guides me to the next step.”
It is also good to have three test inputs generated, ask for an explanation of a specific error message or have it ask you review questions. We cover healthy use of AI in more detail in the article Why learning to program is still worth it in the age of AI and vibe coding.
7. Seven mistakes that needlessly slow down the start
- Switching languages every week. Stay with one for the first month. Change language according to your goal, not the next YouTube video.
- Watching tutorials without writing. After every ten minutes of explanation, change something, run it and try to break it.
- A first project that is too big. A social network or an e-shop contains dozens of problems. Start with a program you can describe in five sentences.
- Copying errors without reading them. Read the last line of the traceback, find the line number and describe the expected state.
- Trying to memorise all the syntax. Professionals routinely use documentation. Remember the principle and learn to look up the detail precisely.
- Waiting for motivation. A regular 45 minutes is more reliable than bursts of enthusiasm.
- Comparing yourself with finished projects. Compare today’s code with what you wrote last week.
When you get stuck: shrink the problem. Check one variable with print(), run only one function and prepare the smallest input on which the error occurs. Debugging is not a last resort — it is a normal part of programming.
8. What to do after the first 30 days
After a month you can explain your project, independently modify one function and track down a cause from an error message. You don’t have to write everything from memory. What matters more is that you understand the flow of the program and can verify whether a change works.
Next month, extend the project with category filtering, a monthly budget or export to a CSV spreadsheet file. Add a few automated tests — short checks that verify functions return the correct results. Then create a second small project, this time without exact instructions — perhaps a file converter, a quiz or a task-planning tool.
Want to start with guidance and feedback?
In the Python Programming and Vibe Coding course you go through the basics on practical tasks, learn to use AI as a helper and build portfolio projects. If the world of .NET and applications attracts you, take a look at the Become a C# Programmer course.
Sources and further study
- The Python Tutorial — the official guide to the Python language
- Getting Started with Python in VS Code — environment setup and first run
- A tour of the C# language — official introduction from Microsoft
- Git and GitHub for beginners — your first repository and project on GitHub