Zuckerberg Shows Kindergartners Ruby Instead of JavaScript 144
theodp writes "If one was introducing coding to 10 million K-12 kids over 5 days, one might settle on a programming language for examples more than a few weeks before D-Day. But the final tutorials for the Hour of Code aren't due now until the day they're to be taught, so Code.org was able to switch the example Facebook CEO Mark Zuckerberg uses to illustrate Repeat Loops from JavaScript to what looks like Ruby (earlier /. discussion of the JavaScript example), which will no doubt make things clearer for the kindergarten set working on the accompanying Angry Birds tutorial. Khan Academy, on the other hand, is sticking with JavaScript for its Hour of Code tutorial aimed at middle-schoolers, which culminates in a project showing the kids how they can draw a circular plate by invoking an ellipse function with equal major and minor axes. By the way, as Bret Victor might point out, the 2013 Khan Academy lesson looks a lot like circa-1973 PLATO!"
language wars still hot for good reason (Score:3, Interesting)
I tried introducing my nieces to a bit of programming. The older was about 7 when I tried it, and she hated it. The younger took her sister's lead and wouldn't even try it. Settled on SVG with reservations, thinking that drawing pretty pictures that a browser can display might interest them. Hoped SVG might be a little like LOGO in a browser.
A big part of the problem was unnecessary complexity. Doesn't seem like any language does well on that. C or Pascal? Can't just dive in to those. Have to have some boilerplate (the "int main() {... return 0; }" stuff), and a bit of command line training to run the compiler (make is right out) and the executable, or some training to use an integrated environment. A "scripting" language like Perl does better on the boilerplate, but still need to learn extra stuff to get going.
One of the problems with SVG is the underlying XML syntax. XML is horrible. It's not just verbose, but verbose in a redundant, cluttered way. Maybe syntax highlighting for XML like languages should set the names of closing tags to white on white or black on black, anything to reduce eye clutter. SVG isn't a true programming language anyway, have to at the least drag in JavaScript for that. Then you're into the whole mode mess, very much the same sort of thing with C and makefiles, and the C preprocessing directives.
Cleaner, simpler syntax might not have been enough to make the difference. The girls are, I think, a bit prejudiced against the nerdy. But it would have helped.
Re:Sigh (Score:2, Interesting)
No, BASIC is also a pile shit in pedagogical terms: complex, fiddly, inconsistent, crude. Edsger Dijkstra described potential programmers exposed to BASIC as "mentally mutilated beyond hope of regeneration", but I increasingly think this description could be generalized to cover all students raised in the Algol school of programming - and since Algol begat C and Pascal, which in turn begat C++, Java, ObjC, Python, Ruby, PHP, and JavaScript, I think it sums up nearly all mainstream programmers today.
Seymour Papert once had the right idea: you don't teach "programming", you teach structured thinking and analytical problem solving. That students learn how to program along the way is just a nice side-effect of the platform used, which in Papert's case was LOGO. Algolites frequently perceive LOGO as a toy language for little kids because it looks ludicrously simple compared to Algol-family languages, those vast baroque monuments to their own extreme cleverness. But any idiot can do complicated: it's doing it simple that's hard. Syntactically and semantically, LOGO only has two primitive structures - words and lists - yet it can express everything that a "proper" language like Pascal can. Heck, you can even learn Computer Science Logo Style [berkeley.edu], which makes me think that CS departments should actually be teaching LOGO as their first language.
As Guy Steele once put it (back before he went to the Dark Side): "The most important concept in all of computer science is abstraction." And LOGO - bless its crystal clear sense of priorities - gets right to the heart of this, introducing itself like so:
1. This is a word.
2. This is how you run a word.
3. This is how you add your own words.
Simple, beautiful, and incredibly powerful and empowering. No bullshit, no fuss. Just the total essence of computer programming, expressed in terms that even a child can understand and use.
Basically, the Algol-family languages teach students to "bang the rocks together" - the procedural ones neatly wash the rocks first, while the object-oriented ones paint them all shiny silver to show what hot shit they are. The apex of achievement is measured by how hard and rhythmically they can bring the rocks together, and how many rocks they can get through before their arms fall off. Whereas the Lisp school, of which LOGO is part, could not be less impressed by all this sturm und drang clatter of rocks. Their only interest is in learning how to use those original stones to manufacture flint knives, which can be used to fabricate clothing and axes, which can be used to construct buildings and forges, which can be used to smelt iron... and so on. Honestly, if civilization had been built by C and JavaScript programmers, we'd all still be living in caves today.
The genius to LOGO's pedagogical approach is that what it teaches is not merely tool use, but tool creation. Start with a primitive core vocabulary, then build it out and enrich it until it can effectively and efficiently express your own specific wants and needs. And the reason it can get on and teach this right away is because it doesn't spend 99% of its time drowning its students in vast swamps of micromanaging make-work nonsense. The myriad 'special forms' that all those macho Real Languages so proudly present as if they're the most important and special fundamental concepts in all of programming - statements and expressions and operators and conditionals and loops and types and values and variables and punctuation and so on - turns out to be entirely unimportant and not special at all; it's just garbage, with no real value beyond obfuscating and distracting and keeping honest onlookers from developing the sneaking suspicion that most of today's programmers don't really know what they're doing nearly as much as they pretend to.
It's just a tragedy that Khan and Zuckerberg and others have now progressed to the stage where they're now enthusiastically evangelizing their own Algol-crippled mentalities upon millions more. I'm sure they mean well enough it, but the world could really do without such Dunning-Kruger idiocy going recursive.
Wat? (Score:4, Interesting)
Ok, so technically learning to program doesn't have the same set of requirements as production programming. Back in the day you were likely to get BASIC and then moved on to Pascal, C, Fortran or (god help you) COBOL. Once you realize that all languages have essentially the same structures, you start to say things like "languages are just syntax. Learn to program in one language and you can pick up any other language very easily." This is not actually completely true, but I'll get to that in a moment. They also didn't tell you much about the environment beyond giving you the "vi cheat sheet" and instructions on how to invoke the compiler. Near as I can tell they don't do a much better job of it today.
Rolling objects into the mix really doesn't change that much. You still need to know structural programming because you're going to need to write your methods and you don't want to write them as spaghetti. You have a whole other set of concepts to master for OOP. You can show people objects, but until they're ready for them, they're not going to understand them. I don't know how many people remember learning to program, but when you're looking at it for the first time, even basic language structure like function parameters (and functions) and variable initialization are confusing.
So yeah, Ruby and Javascript might make OK learning languages, inconsistencies and all. Of all the ones I looked at when I was a wee programmer (And I looked at them ALL,) Logo and Pascal seemed like the most sensible. We did Pascal in my high school (in the '80's) in a programming environment on Apple II machines. They environment was mildly quirky, but didn't take long to pick up. That let us concentrate on the language. Logo offered the most immediate feedback about how your changes affected the behavior of the program. At least for me, immediate feedback was very helpful to the learning process. You can definitely get that with the interpreted languages. The same things that make them reasonable languages to learn programming also make them not-so-great for production projects, at least not without a lot of unit testing that no one ever bothers to write.
Of course, the more you work with different computer languages, the more you start to realize that the statement that "all languages are the same" is not really true. You discover things like the ones mentioned in the presentation I linked to at the beginning of this post, and find yourself having to work around deficiencies in the language. At a basic level all languages are the same and once you learn the control structures you can write simple code in any language very quickly. To actually learn the quirks of a specific language and truly master it, that could take years. I'd go so far as to say that most programmers will go their entire career never having truly mastered a single language. What they give you in school are the tools to achieve that mastery, and I don't feel that anyone even does a good job of doing that.
Re:At Long Last... (Score:4, Interesting)
Number 1 is actually a negative. The right paradigm to use for kids is procedural. First off because it matches how they're likely to think- plenty of stuff is broken down into steps 1,2,3 etc just like procedural, but nothing is broken down by objects outside of programming. Secondly, they have to learn procedural and structured code anyway to write functions- why confuse them with extra stuff? Teach them without objects first, then teach them objects- as an added bonus they're more likely to understand *why* they're useful.
Three is an app. It can be written for any language. Its not a good reason to pick one language over another.
There's great communities for every language. There's also horrible ones for every language. You just need to know where to look, which a teacher should. Not an advantage.
You have exactly 1 point that stands up.