Should a computer science degree require learning C?
But without ever learning C, you won’t know what some [fundamental] concepts _are_, or why some implementations are better than others in different contexts. Your code will be doing all sorts of things behind the scenes that you don’t understand (or even know about), so you won’t know where to start when you need to find out why [some esoteric error is happening]
You can get along just fine without knowing C and its concepts. But your skills and knowledge reach an entirely new level when you fully understand what the computer is _really_ doing.
I completely concur with Marco.
Granted, I’m biased, as I was taught C++ in school, and spent my first two or so years as a professional software engineer doing C++. However, for the last two or so years I’ve been working in C#.
I really enjoy working in .NET. One of its many advantages (in my eyes) is automatic garbage collection—that is, it will take care of memory management for me. While extraordinarily important, memory management is tedious and error-prone. In .NET, I can create new objects left and right, and just go on faith that all will work out in the end.
However, occasionally things do go wrong; if not with memory then especially when dealing with “physical” resources such as files or devices. Many times I’ve noticed those of my peers who were brought up on .NET, Java, or some other higher-level language don’t really fundamentally grasp the importance of proper resource management. Further, to Marco’s point, when they do have an issue they need to fix, they’re often up a creek, because they don’t understand what’s going on “under the hood”.
Even more comically, I’ll notice peers getting tripped up by some of the basics—they don’t understand boolean logic, the ternary operator, the difference between reference and value types, when the out keyword is necessary, etc. Perhaps all of that is just plain ignorance, but I feel like a C/C++ programmer would intrinsically understand all these concepts.
I think what I’m trying to say, in the most long-winded way possible, is that I consider myself to be a better programmer due to learning C++ in school, as well as using it exclusively for the first couple of years of my career.
On a related note, marc says:
I think what is missing from most (all?) University systems is a software engineering degree that belongs in the engineering school, with Civil, Mechanical, and Electrical Engineering disciplines, each of which draws on courses from the science curricula.
At my alma mater, I majored in Computer Engineering, which was a sort of meld of Electrical Engineering and Computer Science. I did CPE because I wanted an even more well rounded background than a degree solely in Computer Science would have given me.