Teaching "An introduction to Python"
A small note before reading: this is my first post and I enjoyed writing it. However, I originally wrote it in italian and probably will update this post to show also that version. However, since the course was in English and I want to reach as many people as possible, I chose to translate it with ChatGPT and then review it manually.
In February 2026, I participated as an instructor in an introductory Python course. I expect this space on the web to host a series of posts and discussions about themes connected to this experience: teaching, an activity from which I derive deep satisfaction; education as a genuinely impactful contribution to society; the challenges of introducing beginners to new subjects; the intellectual stimulation that comes from interacting with both teachers and students; the importance of transmitting knowledge effectively; and much more. Perhaps there will also be room for reflections on Python itself, which I have been using beyond a basic level for several years, yet still occasionally leaves me puzzled.
This post has a specific purpose: the material produced should be accessible to as many people as possible. First, this gives meaning to the many hours spent creating, refining, and reasoning about the material. Second, I believe the content assembled for the topics discussed has some value. It is certainly not the best possible material, but I am reasonably proud of the outcome, and the students feedback has been positive overall.
The first topic covered was a very initial introduction to the language. I focused on Python’s fundamental features, highlighting how its strength comes from the ecosystem of packages built around it. Python established its domain through distinctive design choices, but today many people who do not regularly program—an interesting topic for another post—approach it because of its syntax, flexibility, and simplicity. This, in turn, attracts programmers who write code for this broader audience. Naturally, many packages are developed by programmers for programmers, and scientific libraries such as NumPy and related tools are emblematic examples, though they are not the sole drivers of the language’s success.
The slides then guide users through package managers, virtual environments, and the basic setup of a working development environment. They provide only a brief overview—less than thirty pages—but this conciseness can make them particularly practical.
The second topic was a brief introduction to scientific libraries, focusing mainly on NumPy and Pandas (the latter being especially requested due to its relevance for data science), with a short digression on SciPy and Matplotlib. I particularly enjoyed the sections on NumPy and SciPy, as these were the libraries I knew best. With NumPy, I believe I managed to introduce all the essential concepts needed to begin working effectively with arrays, including an approach to presenting universal functions (ufuncs)—which I initially found difficult to grasp—and a conceptual division of array operations into those that reduce dimensionality and those that do not. This distinction may be simple, but it seems pedagogically useful.
SciPy, being far too extensive to cover even a fraction of its capabilities, was represented through a demonstration of the Fast Fourier Transform, which remains one of the most fascinating topics to present.
Overall, I am satisfied with the material, though like any teaching resource it will require corrections, additions, removals, and updates. I am certain the introductory section will eventually need refinement, although for now I leave it as it is, since it already required more than ten afternoons of work. The Pandas section currently lacks coverage of groupby operations and a realistic data analysis example. This would be valuable to add, but on the one hand my familiarity with Pandas is limited, and on the other I tend to prefer other libraries (notably Polars). Perhaps these improvements will take shape in a future iteration.
For now, the material remains in the website’s repository, with the likely plan of moving it to a separate repository later on.
Finally, it is essential for me to acknowledge and thank all the resources that inspired the development of this material—online references, colleagues’ teaching material from previous years, and various video resources—all of which are cited throughout the work. In particular I thank my colleagues with which I enjoyed talking and teaching: Marco, Michael and Mandana (I am the only non-M of the sequence, what a pity).
The Material
Some of the material might have broken links, if you find any problems the openly available material can be found in CINECA’s GitLab repo.
These notebooks are explorable directly in your browser by clicking the links below (thanks Jekyll Notebook!):