Just ran through the 14 exercises of the Minecraft Hour of Code over at code.org and I can say that I'm fairly impressed with the presentation of the information. Also the fact that it grabbed the attention of my children so readily.
Back in my day
I myself have 3 children, and it has always been a bit of a dream of mine to have at least one of them pickup the trade of 'ole dad.
My approach has always been jump in with both feet and paddle your ass off till it makes sense. I've come to learn this is an innate side effect of being somewhat A.D.D. In addition, not everyone learns this way, and it has given me a hard time adapting the concepts for my children.
When I was introduced to computers in a serious way at 14 (my mom bought me a 486sx 25mhz).
BBS's and and dialin systems were widely popular at this time with, AOL (aka Facebook of the 90's), Compuserve, Prodigy, and I'm sure a bunch of others that had existed well into the 80's as well. But you had to know you wanted to go to these places and you were committing to knowing a little bit about your computer in order to connect. Configuring modems, and all the fun things. But the PC was ready to become center stage for the household. Windows 3.1, Windows 95 right around the corner, Windows NT (the precursor to Windows XP, and Server). Microsoft was kicking ass and taking names.
Computer Science is still young
Ok nice run down of history, how the heck does all this have an impact on today and teaching CS? The availability of information and support of the ideas was different when I started. The interconnectedness (may be a new word!) of all of the data wasn't there quite yet. And if you weren't a mainframe programmer it was very much client/server architecture. More over figuring stuff out required a lot more understanding, trial and error, and actual local computer enthusiast groups that would meet. Design Patterns book from "The Gang of 4" was published in October of 1994 . And even to this day it's a very heady read. After all it is a 4 person dissertation on abstract software behavioral patterns. They didn't invent patterns, but they came up with an abstraction of concepts that were language agnostic. Kind of akin to a carpenter creating a jig for a cut that they have to do frequently. Little did they know that this would become a corner stone of software craftsmanship. This has enabled developers to talk about forces in a software system without being overly concerned with what programming language is being used.
Usage of Technology today
From observing my children use technology and other patterns from questions and comments on StackOverflow and other online resources, I have observed a few things
- They use YouTube as the center of their entertainment world
- Original content created by YouTube users
- Instant messaging applications are preferred communications forms. To name just a few
- Copy and Paste Coding FTW
The divide between software craftsmanship and coding is increasing as coding becomes more accessible. StackOverflow with it's plethora of helpful folks has created a double edged sword. For folks like myself it's very valuable to look for an implementation of some behavior without having to reinvent the wheel. For others it's a place with copy and paste code blocks they can put together. First case, I can usually fix anything that's not quite correct with the solution, second case you can see quite clearly in the comments of a solution with the person going back and forth with solution providers. It becomes clear that the individual is missing a core fundamental concept.
So a lot of new programmers appear to have expectations that information is available when they need it on the internet. And they will be spoonfed the answers, if they just keep asking enough, because this is hard stuff. I've even seen some go to extent of actually stating that "Their learning style works better with video, so if the person that presented the answer could provide a video tutorial that would be better" WTF kind of sense of entitlement is this? If you need a damn video to put two pieces of code together... Anyway I digress and get salty, moving along.
The value of presentation
Kids see a wall of text and check out instantly. Feels too much like school, or it's not visually appealing enough to grab their attention. They are surrounded by colorful presentations of all of their content, games etc... They get into the salty world of text editing and programming, a lot just check out. I don't blame them!
The usage of common games as a driving mechanic is awesome and something I have been waiting for. Back in the early Minecraft modding days, I made an attempt to get my kids onboard. But Java was a bit too much for them, they had to learn a lot of things before they could even try and see anything happen. I did what I could to streamline the process, but it still required them to know too much to get into the mental space that was important. More over the process of making changes, and seeing the results was too long. Kids have short attention spans, they don't need to know how to chop down a tree to carve a piece of wood.
Now, code.org is not the first ones to present these concepts. Here are a list of other games I've run into that teach structured thought and problem analysis.
Results of my kids trying it
Interestingly enough after I did the 14 exercises, one of my children was meandering by, caught wind of the Minecraft music playing in the background and they were instantly interested.
So I said, you finish the 14 exercises and I'll let you play minecraft. I've never seen a kid get after it so fast. Then it was on. There was a competition between all 3 of the kids about how could do it faster etc... All this time they are learning to break down a problem into discreet steps, noodle through the process and make it work. They were all learning the core concepts of Computer Science without even knowing it.
So by the end of the day all of my kids had given it a shot, and were fairly proficient at solving the problems using the Blockly[1:1] based language
Critical Thinking and Analysis is important
Even if your child doesn't want to be software engineer, the ability to decompose a problem into the basic building blocks to get it built is an important one. It forces the development of critical thinking and analysis. If we can teach this through the presentation as a video game this is extremely powerful. Now lets just hope someone gets the itch to do something serious with these powerful machines we all have at our disposal.