Photo by Gunnar Bengtsson on Unsplash
Reasons to Replace C++ as the Introductory Programming Language in Universities
Like some initiation rite of the past, if you are interested in computer science and want to have a four-year college education, many colleges have you go through the pain, suffering, and torment of learning C++ in year one. I'm sure I've triggered my readers on both ends of the opinion scale. On the one hand, C++ can teach some excellent core fundamental skills of how computers work; after all, a large percentage of software today is written in that language. However, on the other hand, out of all the languages aspiring computer science students want to be faced with first, does it have to be C++?
My past manager might take the side that learning C++ first is critical and that language "was the best language to date." He and I debated on how engineers seem to be shielded from core pieces of computers and how C++ made sure you had to manage all that effectively to have a good application. I can agree that knowing how memory is managed, and how C++ teaches you effective memory management, but I'd like to ask, WHY do we seem to use it as the FIRST language to teach our aspiring software engineers?
Memory management is critical to having a solid foundation in software engineering. I remember getting an error like ambiguous overload for operator<<’ (operand types are std::ostream and ClassName)
Or fiddling with the memory types by adding * or & or any combination to get the compiler to shut up only to find a runtime error still didn't fix it and I'm back to trying to understand why it's failing. I'd ask the questions, "Why is this so hard" and "Is all computer science like this?" Solving problems with the tools instead of the problem at hand. All I wanted to do was save something in memory and get it back. Still, first I had to understand pointers, memory references, arrays, loops, references to memory pointers, and the fact I had to use and allocate char arrays because "there was a bug in the string feature." I remember wondering, for as progressive as technology is, we sure have a lot of fundamental issues with how software is made.
Once I finally passed my "initiation classes" as it were, I finally got past the basic CS 200 level classes to find a marginally refreshing experience with other languages like Java, C#, JavaScript, you know the languages mainly founded the last decade or so.
So once again, I ask the question, why does it seem like universities, when learning a technology degree that requires you to know the latest and greatest seem to be so stuck in the past when teaching computer science?
If you came here thinking I'd have an answer, sorry to disappoint. I'm wondering the same question but here's my opinion about why it doesn't help.
Complex
Learning C++ is complex. I think there would be a consensus in agreement that C++ is a difficult language to learn. When teaching, we want to start with building blocks. It helps students create concrete connections with what they are learning. Starting with here's a computer, to here's C++ makes Computer Science feel unapproachable.
The White House and NSA have begged us to stop using it
No matter what side of the political spectrum you stand on, one thing is clear. When the White House and NSA have asked technology engineers to stop using something, there's a problem. As someone who likes to think that technology is a constant progressive force that aspires to break the boundaries of what next and envision the future by making devices in the palm of your hand, I feel ashamed as an industry to think that we can't seem to break past this echo chamber that C++ is where we need to start students with. I have talked to several different students studying computer science and Portland Community College and Portland State bemoaning the fact that C++ is still being taught, (some were even REQUIRED to use VIM as their editor - talk about an ancient torture chamber!)
Other priorities
Instead of focusing on one language, computer science has a host of priorities to learn. Fundamentals that seem to be missed while teaching computer science. The number of people I've interviewed from universities that don't know how source control works, test-driven design, a CI/CD pipeline, or basic security concepts. The list could go on. If universities are so interested in a well-rounded education, let's make that happen especially in the area one is focusing on.
Conclusion
I want to challenge the current status quo and ask; can colleges spend less time confusing students on more advanced concepts as 200-level classes and more time looking to the future and wondering what would make the next generation of computer scientists more quickly?
When a curriculum for computer science is being created, can the universities look to the future like the industry would expect them to and think about what the next generation needs to be a successful software engineer and scientist? Let's not do away with learning C++, however, let's make it an undergrad elective or advanced master's class.
PS
I would be remiss to not include the rebuttal that the creator of C++, Bjarne Stroustrup, wrote. Again, with every language, C++ has its place, but I would hardly say that his rebuttal has the sort of solution the government is asking for. The abstract he provided was nothing more than a few examples of "better code" which, again new computer scientists need to know more of before even getting started.