I am a professor at a German university in the Department of Electrical Engineering. Currently, our students take a mandatory course on the C programming language in their first term. Beyond that, there are no required programming courses. In other classes, various instructors make use of languages such as Python, MATLAB, Julia, or C++ (especially in the context of SystemC).
When I was a student, I also had a course on C, as well as one on algorithms and data structures. We covered topics such as memory management, linked lists, sorting algorithms like quicksort, and performed some basic complexity analysis. I appreciated C for its closeness to the hardware, which I felt was well suited to students of electrical engineering or electrical and computer engineering.
However, I should mention that I already had a fairly solid background in C, C++, and even some assembly programming when I entered university. What we observe now is that when students are required to program—often during their bachelor’s thesis—they have forgotten most of what they previously learned. Moreover, if students were not already enthusiastic about programming, being introduced to it through C is unlikely to inspire them. C does not appear to many as a practical tool for quickly solving problems.
I have noticed that at many U.S.-based universities, Python is now commonly taught as the first language. I certainly see the advantages: students can quickly tackle complex problems by using existing libraries. Although Python avoids the infamous “dependency hell” associated with C and C++, students still need to learn about environment management and dependency tracking. However, the time not spent teaching makefiles, pointer arithmetic, or manual memory management might instead be used to introduce version control systems like Git or concepts like CI/CD workflows.
This brings me to a pedagogical question: if one were to use Python as an introductory language, what kinds of algorithms and data structures should be taught? Given how high-level the language is, does it still make sense to teach “classical” concepts such as linked lists?
As a heavy user of Julia, I’ve also considered advocating for its adoption. Julia is a language designed for scientists; it offers modern high-level features while still allowing one to write code that interacts closely with the hardware when needed.
So there are a couple of questions, I am not sure I see the answer:
- What are the long-term goals of our programming curriculum? Are we aiming to train software-literate engineers or to support algorithmic thinking for hardware specialists?
- If we choose a high-level language like Python or Julia, how do we ensure students later understand lower-level concepts such as memory layout, registers, or instruction sets? Do we need a second mandatory programming class?
I am curious about the experiences at other universities/departments.