Additional profile information on Alfred Thompson at Google+
I’m going to start this week’s list with some left over stuff from the Innovative Education Forum. That was one of the highlights of my summer and the reviews are coming in indicating that this was the case for others as well.
My Inspirational Microsoft Partners in Learning 2011 U.S. Innovative Education Forum Experience post by Melanie Wiscount @mwiscount about her experiences at the recent US Innovative Education Forum. Another post Innovative Education Forum post, this time by Laura, called How to make a teacher feel like a rock star.
Now a couple of keynote interviews that were recorded at the IEF.
Game designer Jane McGonigal interviewed by Cameron Evans, U.S. Education CTO, Microsoft Follow Cameron on Twitter at @EDUCTO Dr. John Medina interviewed by Mary Cullinane, WW Education, Microsoft Follow Mary on Twitter at @marycul
Amazing stuff from Microsoft Research and University of Massachusetts Lowell They have worked together to build a NUI-controlled robot for disaster assistance.
Found this nice article by Audrey Watters (@audreywatters) on How Scratch teaches kids about remixing, not just about programming. I like the different slant on things here.
Have you used SkyDrive? My wife uses it all the time to move work from home to school and back again. I use it to share resources with the world or privately with co-workers. If you haven’t look at this cloud storage option you should. Check out the latest features in the Windows Blog at introducing SkyDrive for the modern web, built using HTML5
Interesting article via @Publicyte: Microsoft's designing women want to dress you up in wearable tech love Gives a whole new slant to design, clothing, technology and out of the box thinking.
Check out the latest Student Windows Phone App of the week Police lights 7 just for fun. A blog series by a Microsoft high school intern.
Eugene Wallingford (@wallingf:) Tweeted a link to Programming Achievements: How to Level Up as a Developer With talk of “gameification” all over this place this makes for an interesting and timely read.
Last up, from Ruthe Farmer @ruthef an article about a 10yr old hacker girl who found a security flaw in mobile games Kids are learning younger and younger.
A blog post by Andy Firth, an Engineer Architect at Bungie, called The demise of the low level Programmer is getting some attention lately. In the post he lists some things that low level programmers (or perhaps he should have said high performance programmers) should know. He bemoans that all too many programmers today don’t have knowledge of low level programming. He says that “so much of what I consider to be essential is simply not being taught anymore.” They include:
I’m not so convinced that these things are not being taught anymore. Oh to be sure they are not all covered in the first several courses. Except for sorting which is of course covered in Advanced Placement Computer Science and I hope most first year college CS courses. As someone said in the comments to Adam’s post “If you weren't taught this list and you have a "Computer Science" degree, I would argue that you don't really have a Computer Science degree.” If you look at the ACM/IEEE curriculum documents (start with Computer Science Curriculum 2008 final report (CS2008) and you will find these items, either explicitly or implicitly, listed as part of the core knowledge that students must be taught as part of a CS degree. Now some programs may go into more or less depth in these areas. And students are not always great at retaining everything they learn. There are more then enough good programming jobs that don’t actually require low level programming so some students will move past it and forget it once a course is finished. But saying these things are not taught is just not the case.
Someone else pointed out that many game developers do not have CS degrees. That, I believe, highlights the problem with teaching oneself computer science. CS faculty know that students should have these knowledge items but if you are learning on your own how would you know? It is pretty easy to find shortcuts that are not “low level programming” but get the job done after a fashion. For most applications that is enough. On the other hand a lot of game code, and other important real-time applications, do require the sort of performance that low level programming enables. Where are you going to learn it? Oh sure once you know that you need to know it you can learn it on your own. And many successful game developers no doubt have done so. It’s probably not the easiest or the best way to learn these things though. This is one of the reasons that I recommend a degree in computer science for people who want to be serious developers.
More thoughts after a a night’s sleep. Is this a real problem though? By that I mean are we short of low level programmers? Perhaps the game industry needs more and some groups doing development with serious performance needs like operating systems and real-time systems do. But do the great majority of developers need these skills? Or is the fact that many people can be seriously productive without them a good thing? OK so more questions than answers from me. What about from you?
For most people the first real computer science course is introduction to programming. It may be called something else but effectively what it is is a course that teaches programming. Along the way concepts like encapsulation and abstraction are also taught and, hopefully, learned. The new CS Principles course reduces the emphasis on programming – in theory at least. I’m curious to see some good scope and sequence documents to see how it is working in practice. Likewise the Exploring Computer Science curriculum includes programming as only a part of the overall curriculum. In fact web design is the third major using with programming the fourth. This seems to be a trend.
Time will tell if this breath first approach is the way to go. I have mixed feelings myself. I do like the idea of teaching concepts without having to teach programming at the same time. Teaching a programming language, especially one involving real syntax, at the same time as introducing theoretical concepts can be daunting. I see that a lot of these new courses use tools like Scratch, Alice and Kodu rather than more traditional languages like Visual Basic, Small Basic, C/C++/C# or Java. This does reduce the programming syntax complexity somewhat. There are also great non programming resources like CS Unplugged and I am a huge fan of them. I especially like that they get students up and moving in many cases.
Many of us struggle with the idea that we were taught one way and so want to teach others the same way. We may not always admit it but that drive can still be there buried under an excitement over new tools. I think I am past it. On the other hand I also want to move students beyond the post syntax tools into “real programming languages.” A lot of people start a course with Alice/Scratch/Kodu and then move quickly (for various definitions of quickly) into other programming languages. Sometimes in the same semester or quarter and sometimes in a second course. With a good base in concepts this is not usually as scary or as difficult a move as one might expect. The two keys are the previously mentioned core concepts and a real enthusiasm for the subject. I found that if students became really interested in solving problems, usually because they found relevant (to them) problems to work on they were down right aggressive about wanting to move to some “next level.”
The question becomes how large a jump should that next level be? Should you go from Scratch right to C++? Ignoring the fact for a minute (or longer) that some advocate starting with C++ (I don’t) or even Assembly (hard to believe for true) I like the idea that easing students into things is a good idea. My current thinking is that Small Basic is a good first step into programming languages with syntax. Why? A couple of reasons but one is that the syntax is still easy as is the IDE. Another is that the path to Visual Basic, a serious professional development language and IDE) is pretty smooth using the “graduate” button/feature that is built into Small Basic. Other people will want to move right on to other languages and that is ok I think. It is important though that the material continues to be interesting. Students will work hard at fun but hard work for the sake of hard work is no fun at all.
The most consistent predictor of success in second and later courses (I believe and wish I had real data) though is a grounding in the concepts. A student who understands how a loop works will have an easy time picking up the syntax of a new programming language. This is where graphical tools like Alice, Scratch and Kodu do make life a little hard on teachers because they mostly hide the constructs that make things like loops work. Oh you can look at them and it gets easier with Alice 3.0 where you can see real Java code. But students have little natural incentive to do so early on. This means that teachers need to make sure they cover it and make sure that students really grok it. There is more to understanding a loop than “between here and here things will be repeated x number of times.” You can teach that loop without programming though. I love the climbing stairs example.
One can see the loop in Scratch (to pick on one) but that is not the same as understanding that a loop works with a setup, an action and a check to see if the action means that the loop is done. So what you can, and perhaps should start with the concepts before teaching programing at some point you’re going to need the programing. Let’s make sure that students find meaning in the code though.