Thursday, May 28, 2009

Computing at School Working Group

What did I learn about on Twitter today? The UK based Computing at School Working Group is what I learned about. From their home page:

The Computing at School Working Group is an informal group that aims to promote the teaching of computing at school. Our membership is broad, and includes teachers, examiners, parents, university faculty, and employers.

CAS was born out of our excitement with our discipline, combined with a serious concern that our brightest students are being turned off computing by a combination of factors that have conspired to make the subject seem dull and pedestrian. Our goal is to put the fun back into computing at school.

They have a conference and regional support groups called hubs. So if you are a pre-collegiate computer science teacher or a university faculty/lecturer with an interest in helping support such education in the United Kingdom you will want to look into this program.

In the US there is still the Computer Science Teachers Association which, while is largest in the US, is really international in scope and membership.

Speaking of the CSTA, they just released the draft of a model curriculum (Level I Course: Foundations of Computer Science) that covers K-8 computer science. They are looking for comments and opinions on it so take a look.

Thursday, May 21, 2009

Revisiting the GoTo Statement

In yesterday’s post I named the “GoTo” statement as basically a bad thing. To my surprise this started a short Twitter discussion and also came up in the comments. So I did a bit more research. I found this fairly balanced article called “Using gotos” by Steve McConnell. And Mark Guzdial twittered a link to an older post he wrote titled “Plea to Language Designers: Bring Back GoTo!” Wikipedia also covers the issue fairly well with a bunch of external links. So clearly  there are multiple sides in this issue. I made the comment in Twitter that this issue is far from settled science.

By settled science I mean that there is still a lot of discussion going on. Arguably there are cases where GoTo statements have a place. One of the things that Mark Guzdial pointed out in twitter “When non-programmers define processes, they use goto's. GoTo is natural.” There is a lot of truth there. Of course one could argue either for or against what is “natural” and people do. Another thing to consider is how an understanding of GoTo helps with understanding other concepts. Ian Bogost (@ibogost)Twittered “GOTO made understanding machine branches easy.” Let’s face it most assembly languages could not function without the equivalent of a GoTo statement!

Most programming languages do include a GoTo statement of some form. Why? Well the discussion comes up every time and people ultimately decide to include it and yet at the same time hope people will not use it. Even the venerable Programming Proverb 7 says “Avoid unnecessary GOTO's” and not avoid all use of the GOTO. I suspect that this is a debate that will go on for ever. Not that there is anything wrong with that. I think I learn something new every time it comes up.

Friday, May 15, 2009

A First Computer Science Course

Starting back this past winter I started hearing about a National Science Foundation (NSF) project to create or perhaps promote might be a better way of putting it a new three course computer science curriculum for high schools. This is part of the Broadening Participation in Computing  (BPC) program at NSF. I heard some of it at TCEA and more still at SIGCSE. It sounds pretty interesting. Clearly, in my opinion and in that of many others, we need to expand computer science education. We especially need more diversity in the field. Only some 20,000 high school students take the APCS A exam these days. That compares pretty poorly with over 80,000 in statistics which is a fairly new and still small (in AP terms) exam. Would a good course before the APCS course help matters?

What I have been specifically thinking about lately is this so-called first course. Some people refer to it as a pre-AP course but others see this as a course for far more students than just those who are headed for the Advanced Placement Computer Science course. I tend to agree. While it might be nice to have a lot more kids take the AP course – ok yeah it would be nice – I keep coming to the idea that what we need to do most in high school is:

a) get students interested in computer science and

b) give them some basics so that when they get to college/university they are ready to start if they have the interest

I’ve seen a number of my own students over the years take just one computer science course in high school and then do just fine as CS majors in college. Not taking APCS did not stop them because they had interest and some basics. So the question is – what should that first computer science course be like?

Should it have some programming in it? I’d have to say yes. But it doesn’t have to be boring or especially difficult programming. Start with Alice, Scratch, squeak/eToys or something along those lines. Then move to something a little more “real” like Small Basic, Visual Basic or perhaps Python or a functional language like F# or Scheme. Personally I’d avoid curly bracket and semi-colon languages but for some people C#, Java or even C++ will work out just fine. The important thing I think is to give teachers some choices. Let people teach with what they are comfortable with. If they like the tools teachers are much more likely to spread enthusiasm to their students. That to me is a key piece.

I think you also have to be concepts focused more than tool focused. I think that the activities at Computer Science Unplugged are great for that. its not just that they are fun and interesting it is that they move some of the focus from the physical computer and to the concepts themselves. That’s a big plus.

I’d like to see some computer history covered as well. I know. Everyone tells me history is boring. But maybe that just means we are teaching it wrong. We’ve got some real characters in the history of computers and we should play that up. There were some out of the box inspiring people like Grace Hopper for example. Let’s get some creative people to tell those stories in the best way possible. And stories are the way to do it – no dry recitation of facts and dates. That would be boring. But talk about the things that made change and innovation necessary. World War II and everything from code breaking to simple cannon trajectory calculations. Why was computing necessary for just in time inventory? And there are lots more we could come up with after a little brainstorming.

What else do we need? What concepts are key? Remember that in a single semester or even year course we can’t cover it all. Loops and decision structures? Absolutely! Right? What about object oriented design/programming? Is the first course too soon? Or should we use objects even if we don’t teach how to create them? Is recursion in or out?  Can we use games as projects? Why or why not? What are good projects that build interest while teaching concepts?

Do you have or know of a scope and sequence document (or more complete package) for a first computer science course? Please send me a link at alfredth (at) microsoft.com or add it to the comments on my main blog? Strong opinions about what this course should look like? Let me know in the comments, by email or write about it in your own blog and let me know about it. This is something I think needs a broad background of ideas and support.

Friday, May 08, 2009

Learn Programming with XNA: Curriculum Available Now

I get asked about curriculum available for XNA on a pretty regular basis. I’ve been linking to a lot of stuff that is available in parts and pieces and even more complete things like Brian Scarbeau’s great XNA educational resource page. And Kelvin Sung’s Game-Themed Introductory Programming Project.  Microsoft just added another piece at the puzzle with a curriculum titled Learn Programming with XNA.

Overview

"Getting Started Making Games with C# and XNA Game Studio" is a programming course for senior high school or undergraduate students with no prior programming experience. It is intended to engage students with the craft of programming by the creation of gameplay using the XNA game framework.

Whilst the students will learn how to create games, the course should really be regarded as one which teaches programming. All of the issues that are explored are also applicable in the wider scheme of software development.

Presentations are provided as part of the learning materials. The presentations are grouped into a number of topic based parts with a practical session to underpin the taught content. Each presentation is interspersed with demonstrations and annotated with speaker notes, as well as content review sessions.

The material is intended to foster a dialogue between the presenter and the audience; in some places the presenter is given some discussion points to further this. There are also some "interactive development" sections where presenter and audience use what they have been taught so far to solve a particular problem. These attempts (and their occasional failure) lead to more detailed exposition of the material and hopefully remind those present that having things not work is actually part of the software development experience.

The whole package includes demos, labs/projects, PowerPoint presentations and teacher notes. Lots of stuff in there. If you are thinking about a game development course take a look.

And there are more curriculum resources available on a variety of CS  topics at the Pre-Collegiate Faculty Connection site including a dynamite standards-based Web Design curriculum. Take a look around.