I just finished reading a great interview with Stroustrup about CS education, and his ideas for how to improve it. He's got some great things to say, and the street cred to say them, especially now that he's a prof teaching CS. Here are some great take aways:
Take a simple example: A friend of mine looked at the final projects of a class of third-year CS students from a famous university. Essentially all had their code littered with “magic constants.” They had never been taught that was bad style – in fact they had never been taught about programming style because the department “taught computer science; not programming.” That is, programming was seen as a lowly skill that students either did not need or could easily pick up on their own.
...only rarely do [students get to] “connect the dots” to see how it all fits together in a maintainable program.
Those books were trying to spoon feed the students. Good students need to be challenged!
[on what makes a great programmer, the specific qualities] Curiosity, initiative, tenacity, ability to reason logically, ability to communicate and to work with others.
Learn another programming language; choose any language that’s quite different from what you are best acquainted with. You can’t be a professional in the IT world knowing only one language. No one language is the best for everyone and for everything.
I've been spending more of my time lately in C++ than any other language, and it's made me pause to think about how we teach it. Evan has always had an incredible vision for the need to start students programming in C and then C++ (our students do 3 courses in a row). Reading this interview just drives that home even more.
As I reflect at the end of another term teaching the first course on Mozilla development, I can't help but feel that we've got the right mix here: large scale C++ combined with another totally different language (JS), a need to deal with integration and maintainability, the use but not overuse of libraries, a need to get practical, the necessity of working in a large team, real world experience in industry while still a student, the chance to build a portfolio of work, etc.
I also think we can do some things better. First, I'd like to have more students working directly in bugs vs. on work that is outside the purview of the community. The students working bugs are almost always more successful than those on their own. Second, I think I need to move more people into working on bugs related to things in the tree or extensions. Partly this is me wanting to see them having to deal with build, XPCOM, JS, C++, etc. in their project as well as their labs (they get this in the labs now). Also, I think that this sort of work is more equal, where finding good projects outside this space is hit and miss for a variety of reasons.
Teaching programming is hard to get right. I love the challenge of it, and I get better with each time through. But it's something all of academia is struggling with together--even the man himself.
UPDATE: Thanks to Steve for pointing out that I forgot to link to the interview!