"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.
PingBack from http://msdnrss.thecoderblogs.com/2007/09/11/software-engineering-vs-fun-2/
Hi Al. Both links point to the same post :(
Good catch Isaac! Easy enough to fix and now fixed. Thanks for the assist!
Well, you had me until the Visual Basic part. I just cannot agree with that as the first programming language. After all, how could you advocate VB instead of C#, when the two languages are so very similar, except for C# which has much more elegant syntax?
In addition, C# is a much better stepping stone into any of the other popular languages: C, C++, Java, or even Visual Basic. Learning VB first, and then moving over to C#, would be somewhat uncomfortable for students.
I first learned programming in BASIC, then assembly, and finally Pascal is where I really developed a love for programming, and coincendentally when I first really leared about computer science stuff like data structures. I see C# as a modern Pascal in that regards - a nice, clean, powerful language not totally weighed down by complexity and legacy compatibility.
I do like C#. No question that it is a great langauge. And you have a point about it being a good stepping stone to other languages especially C family languages. But elegant? I'll have to disagree with you there. I've been using various C based languages for 25+ some years and various versions of BASIC for over 30. I'll take a good BASIC (and VB is about the best ever) over a C style langauge for syntax most days. But I will not fight with someone who chooses C# over it.
I was never fond of PASCAL BTW. I had to use it professionally and I did teach it one year. As a teaching language it was ok. As a professional language the I/O left a lot to be desired I thought.
I started with FORTRAN, then BASIC (BASIC PLUS actually) and then COBOL. C, C++, Java and others came later.
DIBOL was a very cool little language that taught me a lot about data structures and other things. It didn't have a floating point type but you could and did simulate that by "remembering" where the decimal point went. I played with a bunch of other high level languages and a half dozen (at least) assembly languages over the years. I think I learned about one new programming language every two or three years for the last 35 years. I learned something from all of them. People who only know two or three programming languages are missing out I think.