To block code, or to not block code, that is the question. Whether ‘tis nobler of the mind to suffer the slings and arrows of outrageous block coding or to take arms against a sea of block coding languages and by opposing end them?
It kind of breaks down after that thank goodness.
In this on-line APCS-Principles class I am taking they are using Snap!, a version of Scratch. This has stimulated some conversation in regards to the viability of block (or drag-and-drop) languages (Scratch, Alice, Snap!, Kodu, App Inventor, Mindstorms NXT-G, etc) as teaching languages. Alfred Thompson has also written in his blog lately about the subject. I have taught using block code languages pretty much for as long as they have been around. They have a purpose and are great for that purpose. Many purists poo-poo these languages because they have no real world uses; they are not what the commercial world uses. This is education, not the commercial or real world. There are a lot of things used for education that have no real world applications. They are just stepping stones.
We as teachers do have to be very careful when using block languages. They are a teaching tool. If all we taught was a block code language and ended it there I believe this would be comparable to having drivers ed kids do nothing but the simulator and assume they therefore know how to drive. There are block code languages that are for real world applications. I understand some of the commercial robotics languages are block code so non-coders can program industrial robots. We need to at least show kids a typical line code language before they escape high school. In my Frosh/Soph Programming I we spend most of the semester in Scratch and Small Basic but the last few weeks we dabble in VB. Build a form and make a button on the form do something. Just enough to see what a grown-up IDE and language is all about. (Part of this lesson is actually installing VB on the computer. Installing software is one of those topics that seems to be overlooked in most school syllabi due to restrictions on student access to school computers. That is what a temporary admin account is all about.)
For beginners block coding is fun and having fun is what teachers want in an introductory elective. (No fun, no students. No students, no elective.) They do not have to remember some strange syntax, everything they can use is listed right there on the screen. Dig around a little bit through the options on the left and maybe read (OMG!) a tiny bit of a help file and they are off building the next great computer game. We are not building coders here, we are introducing a thinking style and some fundamental concepts – sequence, conditional and iteration. Throw in some Boolean operations (and the word “Boolean”) for good measure and we have the start of a real programming class.
Block code languages are like an introductory drug, it may be enough to get some kids interested in hanging around for the “hard” stuff. So what if that is all they want to learn? It is the concepts behind programming that are the learning target here. Most kids are only going to take that one semester of CS/programming and for most that is all they are going to need. Teaching a block language gives time to teach a lot of non-programing CS content that a “professional” language course would not have time to cover.
Some block code languages I like (Scratch, Kodu), some not so much (Alice, NXT-G). For the right teacher in the right class they all do the right job.