Thought this would be an interesting discussion piece.

STSC CrossTalk – Computer Science Education: Where Are the Software Engineers of Tomorrow? – Jan 2008

It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional’s repertoire.

The main argument here is that students are becoming programming plumbers – basically able to follow set patterns or string together libraries, but lack knowledge in fundamental computing areas to enable them to solve complex or large scale computing problems efficiently.  The article also describes some computer engineering skills/knowledge that programmers should have.

In the Iowa College of Engineering, first year students have a programming course in which they learn C.  However, the course skips pointers, references, and memory management in order to simplify the course and retain more students.  I’m not sure when, if ever, pointers and memory management are re-introduced into the engineering curriculum.  Perhaps somewhere in the EE track.  As a programmer, I hated having to deal with memory management and pointers, and I have been extremely happy to move from strongly typed compiled languages like C, C++, Java into scripting languages like Python and Ruby. But I think that a fundamental knowledge of memory management becomes like a common abstraction between languges that lets you learn new languages and techniques more efficiently.