Let’s start this post with a simple observation: The better students are prepared for the real world, the easier it is to onboard them after graduation. The more skills students pick up at university, the more attractive they become to future employers. The more the economy benefits from talented graduates, the higher the research funding flowing back into academia grows. This is a win-win situation for all participants and should be an incentive for academia to ensure a curriculum is the best it can be.
The standard curriculum for computer science has evolved over the last decades, and so have the teaching methods. I think there’s been a change that offsets the best environments in education from the average ones, and that involves a consistent investment in tools and technology to provide interactive tasks to facilitate learning on a deeper level, moving away from dry exercises and learning by heart. As computer science evolves, education follows.
There are many ways to approach computer science, some of which start with the theoretical foundations and historical developments that led to the first computers. I believe the most successful ones provide a combination of theoretical content paired with programming exercises that slowly but steadily reinforce knowledge picked up in lectures.
A great example is the current course on introduction to operating systems held by the Chair of Connected Mobility at TUM. In addition to classic lectures, weekly quizzes, and exercise sheets, programming exercises are published throughout the term, with tasks similar to MIT’s 6.1810 or Stanford’s CS140. xv6, a bare-bones variant of Unix V6 is used to provide deeper insights into memory management, syscalls, and other Unix core concepts.
Obviously, different people have different ways they learn best. For some, picking up a textbook may be sufficient, and others may need a more hands-on approach. I am definitely on the practical side when it comes to understanding new concepts. Combining different concepts to create resources for everyone guarantees that students can choose what works best for them.
As an example, the Chair of Applied Software Engineering at TUM is building Artemis, a platform for handing out assignments ranging from text-based exercises over quizzes to programming tasks. Programming exercises are provided through a Git repository with continuous integration to evaluate solutions and give hints as students progress. Students engaging with tasks are automatically exposed to version control through Git, which helps them later in their careers. Artemis is used by many other faculties at TUM, which makes for a streamlined experience for both staff and students, and prevents duplicate projects and competition within the university.
Computer science is as much about understanding how processors, instruction sets, programming languages, compilers, operating systems, and other parts of the stack work as it is about learning how to think in the scope of real-world projects with requirements and constraints.
The Chair of IT Security at TUM offers a website for CTF-style homework tasks, where exploit solutions can be uploaded and validated, as well as a leaderboard for tracking team progress. Providing students with realistic cases of insecure applications and engaging them in a process of understanding exploits and potential solutions prepares them for real-life encounters with security practices while rewarding analytical thinking and the will to try different approaches, which gets much closer to real work than textbook exercises ever could.
Some modules could still use a partial overhaul, with faster feedback cycles for students through interactive learning experiences, and I believe this will improve the lives of both faculty and students in the long run, but it requires continued resources including time to figure out the best format for certain topics.