I have had these questions for several years and haven't received a straight answer from anyone in the teaching profession.
What are the most important things you have learned from higher level education as they apply to programming?
What things were sorely lacking from your formal education?
Was there anything you were taught that was counter-productive for your career or down-right wrong?
I recently went into my first development-related job after a long period of self-guided learning, several summers of community college, and two years of university level education (in progress). My limited experience is that the multiple years of formal education had little or nothing to do with actually working on a product that will be of use to people. The order of relevance seems backwards to me: self-guided learning (books, forums, blogs, etc.) was most valuable, followed by community college courses, and then lastly, university level courses.
For those of you who don't know, let me clue you in to how the first few years at university work (and this is at a well respected, technical university):
C++ courses are on the way out, my school at least is going exclusively to high(er)-level languages (Java)
The remaining C++ classes are taught the following way:
- Memorize the exact syntax of the language because we're going to test you on paper without an IDE. Absolutely no reference material of any kind.
- There's this thing called OO. Imagine that there's a Shape. Now image there is a Rectangle. The Rectangle "is a" Shape, you see? Moving on. (And if you're really lucky, they might mention Shape could be abstract).
- Then there is this huge lecture on how hard pointers are and how they aren't that important because other languages don't use them. Then there's a half-hearted attempt to explain them with lots of warning that you can get an A without knowing anything about them.
- And then there's recursion. There's even more apologies and hand-waiving and then all of the sudden, you never have to think about pointers or recursion ever again (or so they lead you to believe).
- The rest of the course is about familiarizing you with GUIs and some discussion about data structures (and if you're lucky, they might make you actually implement one or two). Oh and by they way, they practically write the data structure code for you and don't stress full understanding. Just memorize when to use an array and when to use a linked-list and you'll be fine.
The same story applies to a class called "Software Engineering". It is only offered in Java.
- Memorize syntax
- Do some basic GUI work
- This is what unit testing and source control are (the bright spot of the course, they actually mention them!)
- And then the rest of the course is about Agile and Extreme Programming with rushed, partnered projects that consist of one screen that does one simple calculation (repeat, slightly modified, 10 times).
Now it's not all bad, I've had a good experience in a class about DBMSs and one about algorithm design. But most of it just seems... wrong. Are all schools like this?