"The goal of much of software engineering is to remove all the fun out of programming." So says Colin Potts of Georgia Tech as quoted by Mark Guzdial also of Georgia Tech. Well if that doesn't scare one away from software engineering and computer science what will! (Before I forget, Mark Guzdial's two part series on Software Engineering and the decline in CS enrollment is well worth reading - part 1 & part 2)
Mark Guzdial sees that attitude as contributing to a lack of interest in programming that is contributing to a lack of interest in computer science. Way too many people think that computer programming is what computer science is all about. Even setting aside for the minute that they are wrong about that - computer science is a lot more than just programming - what programming and fun?
Like Mark who admits to enjoying programming I really enjoy it. Oh sure there are boring and tedious parts to some programming that I could do without. My view of what software engineering is (or should be) and my view of what computer science should be are colored by the fact that it was programming that first attracted me to the field. There I said it.
Now when I was young and didn't have a life I powered through the boring pieces to get to the fun. Now days I want to get right to the fun. Fortunately people - computer scientists and software engineers - are working on that. They're not working on it enough in our research colleges and universities though. Rather they are working on it at companies like Microsoft. Colleges and universities are spending too much time making programming hard for students.
Mark suggests in his blog that we not teach a C-based language in a first programming course. That would include C, C++, C# and of course Java the current darling of the computer science education crowd. Now before I go on let me say that I do think that someone going into computer science for research or for work should absolutely learn a couple of C-family languages. So should someone who wants a career in industry. But not in the first course. Oh good grief no!
The first course should be about the fun and creativity of computational thinking and getting the computer to do what you want it to do. Let's get as much of the tedium out of it as possible. That is the main reason I have promoted Visual Basic as a first programming language for a dozen years or so. It is also why innovative teachers are using tools like Alice and Scratch as an introduction to programming before moving on to "real" programming languages.
For professionals I believe that tools like LINQ for data handling show promise for doing for data manipulation what Windows Forms has done for graphical user interface design. That is to say the tedium is far reduced. Which reminds me. A lot of first courses are all console based - still - in the 21st century. Why? Well because in to many language the tools for creating interactive screens are too tedious. Who wants to write code that explicitly spells out how large a window is (and in what unit of measure?), the precise coordinates of each object on the window along with its size and other properties. Why not just drag and drop objects interactively and let the IDE do the tedious parts?
I see the role of software engineering to be removing the tedium so that programmers (not a dirty word in my lexicon) can have fun writing their code. I believe there is plenty of room for creative work in computer programming. I wish universities/colleges and even high schools taught more of the fun stuff.