"The idea is to give the students a broad view of computer science during the first two years ("making them ready for their first internship or project") and then using the next two years to go into depth in some selected areas. During the first two years, the students get a fairly classical CS program with a slightly higher component of software development projects than is common. They have courses in hardware and software (using C++), there is some discrete math, algorithms and data structures, (operating and network) systems, programming languages, and a "programming studio" exposing them to group projects and some project management."
And bang, just like that, we'll have raised a whole 'nother generation of Java/IT "programmers".
Java and C/C++ are horrible languages with which to teach computer science. "Programmers" more and more are becoming technical fast-food-workers. Trying to reason using horrible, imperative bloatware like C++/Java moves "programming" more and more away from even an engineering discipline.
I have heard the argument about particularly java being a horrible language for teaching CS, and that it gives you terrible habits. I've heard it both here and other places - so it's most probably right.
Not being a seasoned programmer I don't quite understand why. Would it be possible for someone to explain the reasoning behind this?
At least one reason is that it hides too much from you.
I started out in Java. It really got me into programming - I could make all these pretty little windows and graphics and do everything else quickly and easily. But, as I later found out, at the expense of that ease came my knowledge.
Example: The ArrayList class. It's a dynamic array. The LinkedList class. It's a linked list. They're fundamentally different. But in Java, they look and act pretty much the same, and they're already available in the standard library. The learning programmer doesn't need to know how they work or anything.
Same thing with memory. In Java, you get no feel for what memory is being used, or how it's being managed. In C, you're the master (and the slave), and you yourself have to manage and take care of memory and pointers. It tells you much more about how computers actually WORK when you're programming in C.
In summary, Java just gives you too much. It hides you from the raw details. This is great for a production purpose language - but for a teaching language, what could POSSIBLY be worse, when the intent is to reveal and NOT hide all the small details?
I started programming in PHP, and can relate to the experiences you've had with java. It's great for actually getting stuff done right out of the box, but I suspect a lot of stuff is being hidden from me. Since you seem to have gone through this process, in your experience, does this give problems later on in a production setting?
The main argument against using 'bloatware C++/Java' for teaching is that the language obscures the relevant idea/lesson at hand and so makes the learning process unnecessary harder.
But the problem is that you have to define what kind of learning experience you wanted to achieve in the first place. If you use assembler as a teaching 'language' (or some similarly lowlevel language) you would show all the nitty-gritty details of what's going on, but you would probably be attacking too many points at a given time. If on the other hand you'd use a more abstract language than 'C/C++/Java', then you may loose some details along the way, but you will be able to focus much more on the algorithmical/computational part of what is being taught.
So in the end it's all about what you want to learn/teach and only after that's been decided you can choose the appropriate language to best transport the lessons with.
And bang, just like that, we'll have raised a whole 'nother generation of Java/IT "programmers".
Java and C/C++ are horrible languages with which to teach computer science. "Programmers" more and more are becoming technical fast-food-workers. Trying to reason using horrible, imperative bloatware like C++/Java moves "programming" more and more away from even an engineering discipline.