Slashdot linked to Bjarne Stroustrup on Educating Software Developers which follows up on an earlier article, The 'Anti-Java' Professor and the Jobless Programmers. The Anti-Java professor is Robert Dewar at NYU, who coauthored a short paper, Computer Science Education: Where Are the Software Engineers of Tomorrow? They contend that computer science curricula have been dumbed down to counter falling enrollment post-dot-com-crash and partially blame Java, which fosters reliance on libraries and garbage collection. But, not all of their critique can be written off as language bigotry. The result?
We are training easily replaceable professionals.
- reading code
- working in groups
- learning to reuse code
Those sound like solid points to me. One thing the field of medicine really gets right is an emphasis on mentoring. Mentoring is the heart of residency, which depending on specialty can last from 3 to 7 years. By the time a physician graduates from residency, they will have performed hundreds of procedures and seen thousands of patients under the guidance of an attending physician. I've often wished there was more of this in the computing field.
Over the years, I've accumulated a list of topics I wish I'd been exposed to as a CS undergrad.
- source control
- command line foo
- linking and dependency management
- software design: interfaces, refactoring, patterns, components, APIs
- software architecture: design with large components - app servers, databases, message queues, transactions, etc.
- data modeling: schema design and not just relational DBs. Hierarchical (XML) and graph (OO, RDF) representation
- models of computation
- pipes and filters
- and how they're are related.
- scientific/engineering computing: MatLab, R
- probability and statistics, statistical computing, analytics
Of course, then my undergraduate degree would have taken 7 years... On second thought, only my Dad would have complained.
What do you wish you'd learned in college? Post a comment!