Additional profile information on Alfred Thompson at Google+
Periodically I check the list of searches that lead people to this blog. And there are a lot of different items. I’m always surprised at how many people are searching on my name for example. But most of the searches are what you might expect – looking for resources on the topics I blog about. It never fails though that at least a couple of times a month that someone is searching on “high school computing is boring” or some variant of that. “computer science is boring” is another common search term. It makes my wonder – why are people searching for that topic? Are they looking for people to agree with them? Are they looking for a fix to the problem of boring computer courses in high school? or something else? I’m really at a loss here. I do think that at many schools or at least for many students “high school computing” is boring – at least for those students. Me? I find computing, computer science and the teaching/learning of computing in high school to be endlessly fascinating. Is that because I am an uber geek? Not necessarily.
I think that part of the problem is many schools is how they define “computing” or even “Computer science.” Many adults think of learning applications as learning computing or computer science. Really they do. And then they make it all about learning the specific tool without providing relevant context. Learning computer applications can be a lot of fun. Now I confess that I didn’t always do a good job of making learning computer applications fun. That is something I regret. But I’ve learned a lot in the last few years and I think I would do a better job of making it fun, interesting, relevant and in general not [as] boring. It would still not be a computer science course and arguably not even computing. Though computational thinking can and should be a major part of an applications course.
Web development is a lot more computer science/computing than applications but even there a focus on the tools can get in the way of interesting. That is why the web development course Microsoft hired teachers to develop focuses first on concepts and also includes projects that can be used as part of curriculum integration. Yes, it uses Expression Web as the tool but it is not a course about Expression Web. It’s aa course about web design and development concepts.
Now programming and what I think of as “real computer science” is where I really get stirred up about. There is no way a course involving programming should ever be boring. I know that sometimes it is though. Sometimes the teachers fault, sometimes the curriculum’s fault (it’s easy to make AP CS boring I’m afraid), and sometimes it is just frustration with the picky syntax of programming languages. But it is easy to make projects that are fun and relevant (TO STUDENTS) and teach the important concepts. One of the things I like about Visual Basic and C# is that they support drag and drop form design for creating Windows user interfaces that look like “real” applications. Well they are real applications but it helps a lot that students see them that way. Intellisence allows students to discover even more things they can do than they learn in class. This leads to almost constant discovery which reduces boredom.
If you are looking for more interesting projects or to bring more fun into high school computer science (or computing) please check out the blog posts listed by the Projects and fun tags. I think you’ll find some of these projects helpful. I’ve got some links for Microsoft Office as well BTW. And if you have suggestions for reducing boredom in high school computing let me know. I’m always looking for good ideas.
Note: I am on vacation this week so this post was prepared in advance for appearance now. To subscribe to this blog please use http://feeds.feedburner.com/ComputerScienceTeacher as the RSS feed source. Thanks.
Last week I ran across a blog post by John D Cook titled How much does typing speed matter? that got into the debate over how fast programmers should be able to type. It was a response to Jeff Attwood who had compared programmers to pianists. (Cult of the Keyboard) John Cook compares programmers to writers. I think John is on to something. I know that my style of programming is a lot like my style of writing prose. In both cases I spend a lot of time thinking before I put fingers to keyboard. Sure there is an advantage to being able to type quickly especially when writing something like a blog post or a book or documentation. The marginal value of being a fast typist when entering code is not as great though. The lack of a spell checker in an IDE is alone a good reason for someone like me to slow down a little.
But the most important part of any writing, prose or code, is knowing what you are doing. I used to accuse some of my students of the “Ready, Fire, Aim” school of programming. In some cases they skipped the “ready” part completely and jumped right into fire and then trying to do mid course corrections. Basically like they say no matter how fast you are going if you don’t know the way you are not going to get there.
What a lot of programmers do, ok not many professionals but a lot of students, is to keep entering different bits of code and running the compiler to see if they fixed things. It’s not too far from the old line about enough monkeys on enough typewriters over enough time turning out the works of Shakespeare. It’s not the best way to do things.
Give me a programmer who thinks about the problem, develops a plan/algorithm and then systematically and even slowly enters the code. Hunt and peck? Sure, fine, why do if care if I know that there will be a lot less wasted time debugging later on? And you know what? If you go slow and look at the Intellisence suggestions in an IDE like Visual Studio you may stumble across something new and perhaps even better. You can miss a lot by moving too quickly.
Note: That I am on vacation this week so this post was prepared in advance for appearance now. To subscribe to this blog please use http://feeds.feedburner.com/ComputerScienceTeacher as the RSS feed source. Thanks. BTW I wrote this last week so it would show up today and people would not forget I exist.
Through the wonders of DZone I came across a blog post called Don't teach like you code. The target audience seems to be professional coders who are teaching beginners. It’s always interesting to read articles like this and part of that is to understand the perceptions that people have about teaching when they are not full-time teachers themselves. And this article does make some good points about how not to teach. Unfortunately the examples of how people, one presumes the author included, actually code are not what I want new programmers to learn. In fact this post was quite unsettling to me as someone who made his living writing code for 14-15 years and who still writes some when necessary.
The article has a line that reads “”But, good coding isn't like teaching at all. It promotes habits that are entirely counterproductive to the art of teaching.” Really? I’m skeptical. He goes on to say “”Part way through writing a method, you might decide you need to track things in an array. After a few minutes, you'll decide a hashtable works better.” Oh please in the name of all that is good in the world don’t let that be common among professional developers. Yes, that happens sometimes but it should be awfully rare. You should have thought things through in some detail before you started coding. If you are making big data structures in the middle of coding you clearly (in my opinion at least) were not ready to start coding at all.
On the other hand in teaching I would expect this to be more common. Specifically the lecture that worked well with one audience may not work as well with another. A good teacher sees this, adapts and tries to explain things a little differently.
And then there is this gem “Second, coding lets you cheat on the details. We compile our code not because we think we're done, but because we want to find out what we may have missed. ” No! If you run the compiler and get errors and warnings you should be surprised. Or at very least disappointed. Now maybe the author is using crummy tools. I am spoiled by Visual Studio which notices a lot of syntax and other errors as you are typing. And IntelliSense goes a long long way toward helping avoid spelling errors. This makes it easier to avoid missing things. But don’t people read though and self-edit before compiling any more? Some days I think we were all better off when programmers had only one or two chances to compile their code a day. Coding is about details. Cheating on details is a path to destruction.
The last line of the article is priceless. “How do you teach people well? It starts by knowing that what may make you a great programmer will not make you a great teacher.” Probably true. But you also have to understand what makes a great programmer. I think a lot of programmers have a much higher opinion of their coding ability than is warranted. I never saw myself as a great programmer BTW. In fact I know what a great programmer is and how they work. I’m pretty sure I don’t have it. But I know enough about it to teach it. Like a great football coach who has never thrown a touchdown pass or gotten a sack or kicked a field goal but who can help others do all those things better a good teacher is someone who helps others learn from the mistakes of others.
A great programmer may not make a good teacher because they may not understand how they do what they do in a way that they can translate for a beginner. But someone who speaks the language of software and can translate the concepts and ideas for beginners may make for a great teacher even if only an average (or even fair) programmer themselves. We still have to focus on what makes for a great programmer not what makes a lazy programmer though.