TITLE: The Program's the Thing AUTHOR: Eugene Wallingford DATE: February 04, 2008 6:51 AM DESC: ----- BODY: Readers of this blog know that programming is one of the topics I most like to write about. In recent months I've had something of a "programming for everyone" theme, with programming as a medium of expression, as a way to create new forms, ideas, and solutions. But programming is also for computer scientists, being the primary mode for communicating their ideas. To the non-CS folks reading this, that may seem odd. Isn't CS about programming? Most non-CS folks seem to take as a given that computer science is, but these days it is de rigeur for us in the discipline to talk about "computing" and how much bigger it is than "just programming". Too some extent, I am guilty of this myself. I often use the term "computing" generically in this blog to refer to the fuzzy union of computer science, software engineering, applications, and related disciplines. This term allows me to talk about issues in their broadest context without limiting my focus to any one sub-discipline. But it also lets me be fuzzy in my writing, by not requiring that I commit. Sometimes, that breadth can give the impression that I think programming is but a small part of the discipline. But most of my writing comes back to programming, and when I teach a CS course, programming is always central. When I teach introductory computer science, programming is a way for us to explore ideas. When I teach compilers, it all comes down to the project. My students learn Programming Languages and Paradigms by writing code in a new style and then using what they learn to explore basic ideas about language in code. When I taught AI for eight or ten straight years, as many of the big ideas as possible found their way into lab exercises. Even when I taught one course that had no programming component -- an amalgam of design, HCI, and professional responsibility called Software Systems -- I had students read code: simple implementations of model-view-controller, written in Java, C++, Common Lisp, or Ada! I love to program, and I hope students leave my courses seeing that programming is medium for expressing and creating ideas -- as well as creating "business solutions", which will be the professional focus for most of them. Then again, the best business solutions are themselves ideas that need to be discovered, explored, and evolved. Programming is the perfect medium to do that. So when I ran across The Nerd Factor is Huge, via Chuck Hoffman at Nothing Happens, I found myself to be part of the choir, shouting out "Amen, brother!" every so often. The article is a paean to programming, in a blog "dedicated to the glory of software programming". It claims that programming needs an academic home, a discipline focused on understanding it better and teaching people how to do it. (And that discipline should have its own conference!) In Yegge-like fashion, the author uses expressive prose to makes big claims, controversial claims. I agree with many of them, and feel a little in harmony even with the ones I wouldn't likely stake my professional reputation on. I agree with the central thesis of this article. However, separating programming as a discipline from HCI and some of the other "non-programming ghettos" of CS creates a challenge for university educators. Most students come to us not only for enlightenment and great ideas but also for professional preparation. With several distinct disciplines involved, we need to help students put them all together to prepare them to be well-rounded pros. How should we encourage more kids -- girls and boys alike -- to study computer science? "Nerd Factor" is right: don't shy away from programming; teach it, and sooner rather than later. Show them "how easy it is to create something. Because that is what programming is all about: making things." And making things is the key. Being able to program gives anyone the power to turn ideas into reality. One of my early memories of OOPSLA comes from a panel discussion. I don't recall the reason for the panel, but several big names were talking about what we should call people who create software. There were probably some folks who supported the term "software engineer", because there always are. Kent Beck spoke heresy: "I'm just a programmer." I hope I muttered a little "Amen, brother" under my breath that day, too. -----