domingo, 21 de diciembre de 2008

Teaching Programming

The aim is to instill a degree of professionalism; to get to the point where the students can write software suitable for the use by others than themselves.
(...)
You cannot be a professional in the IT field while being comfortable in only one language.
(...)
There is another enrollment problem that’s endemic: Not enough women choose computer science. If – as in some technical fields – women were about 50% of the students, we’d probably have the opposite enrollment problem: we’d have to cut back by raising standards! I do not know why (though I suspect I have heard all the popular explanations), but CS seems particularly unattractive to women entering university – throughout the US and Europe and beyond.

That’s a bleeding shame for CS; the field seems to have become steadily worse at recruiting women since 1980 or so while other areas of study, including math, biology, medicine, and some branches of engineering have done better. I’d love to help reverse that trend. For starters we should have a more serious discussion of the problem.
(...)
Programming is part of software development. It doesn’t matter how fancy your code is unless it solves the right problem and you can explain it to others. So, brush up on your communication skills. Learn to listen, to ask good questions, to write clearly, and to present clearly. Serious programming is a team sport, brush up on your social skills. The sloppy fat geek computer genius semi-buried in a pile of pizza boxes and cola cans is a mythical creature, best buried deep, never to be seen again.

Learn your first language well. That means trying it for difficult tasks. Don’t obsess about technical details. Focus on techniques and principles.

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.

Don’t just do programming. Computing is always computing something. Become acquainted with something that requires your software development skills: Mediaeval history, car engine design, rocket science, medical blood analysis, image processing, computational geometry, biological modeling, whatever seems interesting. Yes, all of these examples are real, from my personal experience.

Bjarne Stroustrup on Educating Software Developers
By James Maguire
December 9, 200