Additional profile information on Alfred Thompson at Google+
A big focus of my time these days is on introduction to computer science courses. What might be called CS0 at the university level. basic courses to provide a foundation for later learning. Perhaps these courses will create or drive interest in additional courses. One of the topics that comes up in these courses is always hardware. Is it really needed? After all kids grow up with computers don’t they? They know how they work right? Well I’m not so sure they do. Of course people often point to Dijkstra saying "Computer Science is no more about computers than astronomy is about telescopes."
To some degree Dijkstra was right. But you know I think astronomy is somewhat about telescopes. Computer science is somewhat about hardware (computers). I’m no expert on astronomy but I’ve owned a telescope or two in my time and I’ve looked at the stars. Understanding a little about how telescopes work is quite helpful in understanding how to use them and what you are seeing through them. So too understanding how computer hardware works provides some understanding into how computing works. Especially as to its practical (compared to theoretical) limits.
So I think it is useful for beginners to understand the parts of a computer, especially conceptually, before they get too deep into CS. Registers, accumulators, different types/levels of memory or storage, how binary arithmetic works, and much more. I also think it is useful to explore the various ways of getting information into and out of computers. And how information is stored as well. Can you understand why 0.1 added ten times is not 1.0 if you don’t understand how computers store floating point numbers in binary?
I think we do students a disservice if we skip too lightly over the computer itself. That information is valuable. Of course we should also encourage them to think about alternative ways that computers could work. After all it is harder to break rules through limits if you don’t know what they are.
Now that I have decided that hardware is important I have to figure out what the key must know pieces are. Suggestions?
Now that school is up and running pretty much everywhere I’m hard at work on my own efforts to get involved. One of the things I enjoyed most last school year was school visits. I did a number of guest talks at various schools. Career talks, technical talks, Internet safety talks and at a few places I did various project reviews. It’s always fun to hear students talk about projects in progress and ask a few critical evaluative questions. Not surprising I tend to ask the sort of questions their teachers are already asking them. Somehow it seem to resonate in a different way coming from someone with a career in industry. I’m hoping to schedule some more visits this year. Primarily I’m looking to visit schools in New Hampshire where I live and near by Maine and Massachusetts. I have some trips planned to other parts of the country this year (northern NJ near Newark/NYC in mid October for example) so maybe I can visit some other places as well. If you’re interested let me know by email (alfredth (at) microsoft.com or Twitter @AlfredTwo)
People tend to under estimate the power of game consoles because they are used for gaming. however modern game consoles are really quite powerful. According to this story researchers are using an Xbox 360 as a high performance parallel computer for simulations. Gaming drives much of the state of the art in both hardware and software. Something to think about.
I found an interesting interview with Maria Klawe last week. Women in Technology: Maria Klawe on Male Dominance in Tech, What Prevents Innovation & Future Maria Klawe is a pretty amazing person. President of Harvey Mudd College and a member of the board of directors of Microsoft among other accomplishments.
Michelle Hutton, president of the CSTA and a middle school computer science teacher, recently recorded an interview (CS in the Middle School ) in which she talks about the CS program at her all-girls middle school. You can read about it at the CSTA blog at New Podcast on Building a CS Program in Middle School.
The Microsoft Robotics team has opened up a brand new Microsoft Robotics educational home page with lots of tutorials and much improved navigation.
Free resources for teachers from the Microsoft Teachers blog
Lastly, the ISTE 2010 (previously named NECC 2010) call for participation opened last week. Are you going? Do you have something to propose as a talk?
I installed some software this morning. Every indication is that it is just what I am looking for for a project I have in mind. It is touted as easy to use. There is source code available even. Supposedly there is documentation as well. But I can’t find the documentation. Now could I figure it out? Probably. I’ve been around code a long time and I can read the source code. I could probably duplicate this package from scratch if I really had to. But the thing is that I am trying to save time. The project is not a high priority but if I could put it together in an hour or two now would be an OK time to do it. Clearly though without documentation it will take longer than that. So I have moved on to other more important things like updating my blog. :-)
One of the things I have said for years as a professional developer and as a teacher is that “reading the directions is the short cut.” The older more experienced I get the more I believe that to be true. There are a couple of problems though. One is that too often documentation is non-existent or poorly written. Another is that even when documentation does exist people don’t want to read it. The latter is common with students and other beginners.
Why don’t they want to read documentation? Several reasons. Some people are lazy and just want someone else to verbally explain things. All too common in the classroom but you see it other places as well. How often have you opened a new game with a group and everyone wants someone else to read the directions and explain it to the group? One flaw here is that the further away one gets from actually reading and understanding for themselves the less they truly understand. And of course the “oh yeah I forgot to tell you about that” gotcha can make playing the game later interesting in unpleasant ways.
Other people try to save time by just starting in with what ever obvious, or apparently obvious, knowledge they get from looking at things other than the documentation. They’ll “figure it out.” Experience tells me that this is seldom a short cut and generally adds lots of time to the process. One may learn lots of things in greater detail but at that same time they’ll also learn a lot that is just plain wrong, inefficient, or miss things that will come back to cause problems later.
It’s hard to convince students of the value of documenting their own student projects because these projects tend to be simple and quite obvious. I wonder though if giving them a complex set of code and asking them to document it from scratch might be useful. One could grade them on how easy their peers found using the software after reading the student generated documentation. This is probably not trivial to set up but might be worth it. It is the sort of thing that influenced me a great deal.
When I was in university my professor handed me a deck of punch cards (I’m old experienced) that had no documentation and almost no comments inside and asked me to comment and document it. Talk about a life lesson! It forever convinced me of the value both of comments in code and documentation for software. The world would be a better place if more students learned that lesson. How do we teach them though?