In a summer 2008 meeting, our Information Technology and Programming and Game Development faculty agreed to teaching the introductory programming sequence in C++, and covering other languages as “2nd languages” when needed in later classes. As early as Fall 2009 we will likely begin our migration to this approach. Meanwhile, many people have questions about why we intend to make this change. In this blog, I will share our rationale.
C and C++ are sometimes criticized as being difficult languages to learn and master. This difference in difficulty is not that significant when compared to what you get when you learn in C or C++. The increased difficulty of these languages forces the learner to understand things such as how memory is managed or how variables are passed between functions. This understanding is important when debugging code or when learning other languages that may have more limitations (these limitations are sometimes called ‘features’).
C is a very powerful language that allows programmers direct access to the hardware. Few other languages, short of assembly language, can do that. Most other programming languages and operating systems are written in C or C++.
Importantly, C++ is a superset of C. C++ has all of the capabilities of C with the added feature of object-oriented (O-O) capabilities. Now is a good time to mention that C and C++ are free and with little fuss the code is portable between platforms (Linux, UNIX, Macintosh, Solaris and Windows).
There are many languages to learn and someone who becomes a software developer will likely learn a second, third, and many more. Those who learn and master C++ will be well-positioned to learn any language quickly.
The choice of C++ as our principle programming language was made for teaching both procedural and O-O principles in a single language. Experts will disagree as practitioners will lobby for what’s hot or for what they know. There are newer languages that have their advantages. However, C++ has specific advantages that few languages share.
In summary, I appreciate feedback regarding this choice and we do expect to revisit this question every two years. Our choice has and will continue to take many things into account but most importantly is the goal to prepare students with procedural and O-O programming concepts that apply across all languages so that they will pick up not only C#, Objective C, Java, and Visual Basic, but even the languages we don’t even know about yet.