← Back to overview

Savvy

In 2025, I completed my internship at Die Keure, where I developed an application to teach young students how to code in Python. No installation is required, and everything runs in the browser.

Published on May 27, 2025
Savvy

For the 2025-2026 school year, Die Keure aims to launch a new teaching method called Savvy, targeting the final years of secondary education. The method focuses on teaching computational thinking using the Python programming language. Starting in September, students will be able to practice Python exercises via the Polpo learning platform, gradually learning how to design and develop a computer program step by step. Aside from the pure design aspect of the user interface and the use of some pre-made elements, the logical development of the application was mainly my doing.

Installing Python is often not an easy step for a student just starting out with programming. That’s why Savvy ensures that everything runs on a web page and the student doesn’t need to install anything extra to start working with exercises.

Among other things, it supports the following features:

  • Showing textual output via the print function and when an error occurs
  • Displaying graphical output such as graphs via the Python module Matplotlib
  • Correctly executing the wait function time.sleep, where the program is paused for a certain number of seconds
  • Supporting textual input via the input function
  • Testing whether an exercise is solved correctly using unit tests
  • Writing code in multiple files, allowing exercise authors to write separate files for starter code, tests, and solutions
  • Writing files and creating folders from Python
  • Importing existing and user-written modules in a script
  • A module to explain errors and warnings from your script in Dutch
  • A linter to identify problems with the written code in advance and communicate them in Dutch
  • A tab system with support for multiple editors

Most of the above features are not trivial and require extra attention to work correctly. For this, I wrote a complete type safe compatibility layer in Python, where events are forwarded to the UI, based on pyodide-worker-runner and python_runner. To bring Python to a browser environment, Pyodide was used, which in turn relies on Emscripten.

The Python part runs in a web worker, and also uses a service worker to pass on input.

See here for the page about Savvy or check it out in the Die Keure catalog for secondary education.