C/C++ as a first programming language

A response to Shane's message in the comments. "Although programmers can make a lot of stupid mistakes with C, that is the entire point. Make the stupid mistakes now. Understand what went wrong. Understand how a computer functions when certain code is executed."

There's a difference between making a mistake which results in just a "segmentation fault" or in "array index out of bounds". Stupid mistakes can be made in any language, C is just very good at hiding where they occured and what exactly went wrong.

"Languages like Java and C#, do a great job hiding mistakes. The garbage collector will come and destroy objects that the developer neglected to destroy. However, a developer will have a much harder time creating good C/C++ applications when they forget to destroy point references or any other entities that need to be cleaned up. C/C++ will give you a good foundation."

Not clearing memory after you use it in C#/Java is not a mistake, it's a choice the designers of the platform made. The idea behind it is to make the programming as little complex as possible. A task of modern programming languages should be to make programming as easy as possible. The less you have to worry about, the better. This is in particular convenient when you just start with programming. Your first program reporting a segmentation fault isn't what a starter is waiting for, and it's unecessary too.

"My first programming class in school was C++ Programming. Sure, many people hated C++. They didn't like the fact that they programmed 6-8 lines of code and all they got was a DOS window with Hello World printed on it. But, at the same time, transitions to other languages were a lot easier."

Yes but if you learn OO concepts together with a language such as C++, the language adds a lot of complexity. You have to worry about pointers, objects, memory management, buffer overflows, array index bound checking and a very complex language (and syntax) all at once. If you start with a simpler language such as Java, C# or even PHP you can first get accustomed to the different OO concepts, if you know those, you can add some more complexity by learning C++ (for those who want that).

"Lets say a college started out with something simple, like VB. These students may get the wrong impression that every language is written in pure English."

So? Why would that be a problem.

"VB code also tends to get a little sloppy if not watched correctly, but that's another story. Let's say that after the VB course was over, the new programmers would then after to go to a C/C++ course. All of a sudden, these programmers now had to worry about case, buffer overflows and their applications were not so "pretty" any longer."

Yep, personally I find it wrong that a language opens up the opporunity for such security issues. It's not necessary, so it shouldn't be there. Furgesson once said "if we stopped using C and C++ as programming languages 50% of our security flaws would be gone."

"But, for CS majors who plan on developing high-end applications for businesses with a team of 5-10 developers, they should get used to seeing compiler errors and errors that are caused by a small mistake. I strongly believe in starting out with C and/or C++. But, that's just my opinion."

The question is whether they learn less about errors and the effect of small mistakes in languages such as VB, PHP, Java or C#. They learn about errors that can occur in a sloppy language such as C or C++, but is that relevant?

By the way, sure, if you're studying computing science you have to know about C, C++ and Assembly. But those are really not suitable to start with.