ohjelmointikoulutus.fi

Learn to code, line by line.

Every course steps through a real, working program a line or two at a time — source code, a plain-language explanation, and the program's actual output, side by side.

For new users

Use code UUSI50 for 50% off

Enter the code when you subscribe. The discount lasts for as long as your subscription continues.

UUSI50

14

courses

249

modules

2,386

pages

and more every month

What a lesson looks like

Real screenshots of the course system — the same view you'll actually see. Click an image to enlarge it.

Try a real course →

How it works

  1. 1

    Code

    You see a real, working program — never disconnected snippets.

  2. 2

    Explanation

    Each line or two gets a plain-language explanation, right when you need it.

  3. 3

    Output

    You see exactly what the code actually prints.

You move one page at a time, at your own pace, and can always go back.

Why this works

  • One subscription, the whole library

    A subscription gives you access to every course — including ones added later. Cancel anytime from your account.

  • Go at your own pace

    Stop any time and pick up later exactly where you left off.

  • Carefully written content

    Every explanation is written and reviewed by hand, in both Finnish and English.

Learning path

Courses build on each other. Start with Python, the web, or both — the paths eventually converge.

1. Start here

No prerequisites — pick where you start.

  • A free orientation to the software development profession — what the job actually looks like day to day, the tools and processes real teams use, and the different paths you could specialize in. No coding experience needed; start here if you're not sure where to begin.

    View course
  • A free, beginner-friendly introduction to programming — learn by stepping through real example programs, one or two lines at a time.

    View course
  • A from-zero course in building and styling web pages — structure with HTML, presentation with CSS, one small concept at a time. No JavaScript.

    View course
  • A free, from-zero course in everyday local Git: repositories, commits, branches, and merging — plus the model underneath the commands, one small concept at a time. No prerequisites.

    View course

2. Go deeper in one language

Take the language you chose further.

  • For students who've finished the introduction course — a deeper look at Python itself: error handling, functions, iterators, functional-style programming, and object-oriented programming, one small concept at a time.

    Requires: Introduction to Programming with Python

    View course
  • For students who've finished HTML & CSS Fundamentals — the language itself first (variables, functions, arrays), then the DOM and real browser interactivity, one small concept at a time.

    Requires: HTML & CSS Fundamentals

    View course
  • For students who've finished HTML & CSS Fundamentals — deeper CSS: named grid areas, responsive tracks with minmax()/auto-fit, custom properties (CSS variables), transitions, transforms, and @keyframes animation, one small concept at a time.

    Requires: HTML & CSS Fundamentals

    View course

3. Broaden your skills

Skills you'll want on either path.

  • For students who've finished JavaScript Fundamentals — asynchronous code (Promises, async/await), fetch() against a real public API, and organizing code with JavaScript modules, one small concept at a time.

    Requires: JavaScript Fundamentals

    View course
  • For students who've finished Git & Version Control — remotes, GitHub itself (pull requests, Issues, forking, branch protection, Actions), and the advanced local Git commands the first course held back: rebase, cherry-pick, reset, stash, tags, reflog, and bisect.

    Requires: Git & Version Control

    View course
  • A from-zero course in relational databases and SQL — tables, querying, filtering, joining, and designing a simple schema, one small concept at a time, using real SQLite.

    Requires: Introduction to Programming with Python

    View course
  • For students who've finished Python II: Deeper Into the Language — a practical process for finding real bugs (reading a traceback backward, print-statement bisection) and writing trustworthy pytest tests, from your first assert to red-green-refactor, one small concept at a time.

    Requires: Python II: Deeper Into the Language

    View course

4. Bring it all together

A backend course and a final project tying everything together.

  • For students who've finished Python II: Deeper Into the Language and Databases & SQL Fundamentals — build a real web API with FastAPI: routes, path and query parameters, validated request bodies, real HTTP status codes, and a genuine SQLite-backed database connection, one small concept at a time.

    Requires: Python II: Deeper Into the Language, Databases & SQL Fundamentals

    View course
  • For students who've finished JavaScript Fundamentals or JavaScript II, Python for the Web, and Git & GitHub II — combine everything into one real project: a FastAPI backend, an HTML/CSS/JS frontend, a real Git/GitHub workflow, and deploying the result somewhere real.

    Requires: JavaScript Fundamentals, Python for the Web: Building a Backend, Git & GitHub II: Remote Collaboration and Advanced Git

    View course

Anytime

No prerequisites — fits anywhere along the path.

  • For anyone working on or with a software team — the real depth behind Scrum: every role, artifact, and event, how estimation and planning actually work, and how Kanban offers a genuinely different way to deliver value. No coding — a process course, built around diagrams and real charts.

    View course

Ready to start?

The first course is free, no credit card required.

Start for free