The idea here is to get better programmers right out of college.
I think I would have to go with Algorithms, it’s not exactly something you can pick up on your own very easily and I think it enables you to look at efficiency and correctness of software on a deeper level.
I also believe that teaching actual programming can be helpful, but I learned most of what I learned about programming at work, which makes me think some of those programming course blocks (not all) could have gone to better use.
These results will be part of a letter I want to write to the CS dept at my old school, I think there are tons of classes I took that didn’t help at all, and others that I think would have been invaluable.
I’ve yet to find a good CompSci course that adequately prepares software engineers for the workplace. If you find one that has the following [although whether it could be called CompSci I’m doubtful, it’s more like Real-World Software Design which is a very different beast].
Computer science is a more theoretical subject that has very real world implications, but is more useful in an academic light. Algorithm design for instance is fantastically helpful to software engineers, but isn’t really directly helpful to the consumer. For instance, knowing how to build a quicksort algorithm, or understanding linked list traversal is not really so useful in today’s software engineering environment – of course, understanding the theory is helpful for choosing the right tools for the job, don’t get me wrong. As developers, many of us rely on the output of the computer science world to further our development tools, in fact, without them many developers would be left floundering, but put a computer science graduate in front of a user and get them to design a meaningful piece of software for them and the academic intellect is going to fall to pieces because the two speak completely different languages.
A much more useful course for software engineers would include as many [and possibly more] of the following components that I can think of off the top of my head:
And even if you did manage to learn all that in your course, I daresay you’d still learn more in three or four of months internship at a software development consultancy of a decent callibre than on the whole course. I learned more in my first 6 months after my bachelors degree than I did in my whole 3 year course. Admittedly I’d have fallen flat out my face without many of the things I learned on that course, but there was so much that was taught needlessly that could’ve been replaced with far more useful content.