Blog→Getting started
ProgrammingFor beginners

How to start programming from scratch: a practical 30-day plan

13 Aug 2026 · 11 min read

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.

Quick start

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.
Applications and .NET

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:

Python
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

  1. After each session write two sentences: what already works and where you got stuck.
  2. Save one bug you solved, including its cause.
  3. 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.

10 minutesredo yesterday’s code without copying
20 minutesstudy one new principle
25 minutessolve a task or extend the project

Week 1

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, elif and else,
  • repeating statements using for and while loops.

Output of the week: a number-guessing game or a simple calculator.

Week 2

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.

Week 3

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.

Week 4

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

  1. Version 1: read one amount and print it.
  2. Version 2: store multiple amounts in a list and compute the total.
  3. Version 3: add a category to each amount.
  4. Version 4: create a menu for adding and displaying expenses.
  5. 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:

Python
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.

Python
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:

Expected output — categories and menu
[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.

Python
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.

Expected output — data after a restart
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.

Less useful

“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.

A better prompt

“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

  1. Switching languages every week. Stay with one for the first month. Change language according to your goal, not the next YouTube video.
  2. Watching tutorials without writing. After every ten minutes of explanation, change something, run it and try to break it.
  3. 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.
  4. Copying errors without reading them. Read the last line of the traceback, find the line number and describe the expected state.
  5. Trying to memorise all the syntax. Professionals routinely use documentation. Remember the principle and learn to look up the detail precisely.
  6. Waiting for motivation. A regular 45 minutes is more reliable than bursts of enthusiasm.
  7. 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.

View the Python course →

Sources and further study

Zdeněk Vais

About the author

Zdeněk Vais

Founder · Senior Principal Software Engineer, Oracle

Zdeněk has been programming since secondary school. Since then he has gone from programmer through team lead to architect. Along the way he has developed large financial systems, scientific applications and, for example, IoT solutions for aircraft. He currently works as a senior principal software engineer at Oracle, where he builds cloud for media services.

Meet our team

← Back to the blog