There are over 50 million school-aged kids in the US and hour of code is only trying to reach 10 million of them. K-12 is just shorthand for grade school. It doesn't mean that they're trying to teach kids in kindergarten how to code before they learn to read. They're putting it out there and it's up to teachers to decide whether it's appropriate for their classes.

Aside from that, if you'd looked at the Angry Birds example given, you'd have also seen that you don't actually write anything in Javascript, R

They can do some code-writing like things. Papert, who had worked with Piaget, worked with Feurzeig's team to developed the logo programming language. There was some research done in the late 1970's- early 1980's with young students (and a bit more done with young deaf students).

The point is that we've got a perfectly good, well researched, language for teaching computer programming concepts to very young children. Why piss around wit

Hey, I've worked with quite a few developers that couldn't write coherent sentences or spell. Not all of them were bad at coding, however.

I bet they knew the alphabet, and could at least read the keywords. I volunteer for an after school program that teaches Scratch [mit.edu] to 3rd and 4th graders. At that age (8 and 9) they are ready to understand programming. In kindergarten they are not. You can't keep the kids interested unless their programs involve graphics and animation. To do that, they need to understand distance, angles, and rotations.

I remember in middle school it took the teacher a week to teach us enough to put a white box on the screen and have it move from one side to the other. I couldn't imagine 3rd and 4th graders. Maybe since they have grown up in a completely digital age, their little minds are more open to the concepts.

Ruby finds it's niche. IIRC Twitter switched anything that mattered from ruby to scalar / JVM the very moment their platform became more than a toy.

He'd probably be better off showing them javascript, no need to install 3rd party software. Kids already have access to all runtime libraries and development tools with a web browser and a text editor. Really makes no sense to show them ruby.

Ruby is a beautiful language, much easier to learn (syntactically) than javascript. I don't know that Ruby is a better choice than Javascript, Python, BASIC, LOGO, or (Something else), but it does have some advantages for a young mind.

1. it's pure OO

2. control structures are intuitive. I prefer "for (;;) {" style, but "1.upto 100 do |counter|" style is more intuitive.

3. Cartoon characters can teach you Ruby lessons in a collaborative environment. This is mostly due to the work of one WhyTheLuckyStiff, bu

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 can write procedural code in Ruby, but I think even a beginner benefits from *using* objects. Beginners might not create their own classes. TFS gives the example of Mark showing kids

facebook_user.each do |user|

which is clean code. So my one point that you agree with (syntax is easier), does piggyback a bit off the OO. I agree that 3 can be done for any language, but using what's available has obvious advantages to rolling something new.

The code snippet you showed may be "clean", but I have NO IDEA what it does, and I program daily in 5+ different languages. That tells me that Ruby is a poor choice, since the syntax doesn't resemble common languages like C, python, perl, fortran or bash.

I don't blame you, Ruby syntax can be rather arcane.facebook_user.each do |user|... end

Can be translated as:facebook_user.map(function(user){... })

Basically "each" is an array method and "do |var|... end" is a "block"/closure/anonymous function. "|var|" can be omitted if there are no arguments, I don't know the syntax for multipel arguments. I do know that "do... end" can be written as "{|var|... }". I really don't know which version is considered syntactic sugar of the other. BTW Ruby blocks aren't *r

That syntax doesn't piggyback on OO at all. Basic had the same syntax- FOR i FROM 1 TO N. There's no benefit for a beginner using objects when first learning- it adds more to the learning curve that can easily be added later. The first rule of teaching is KISS.

As for your snippet being clean- umm I have a 13 years of professional experience, over 20 years if you include hobbyist. I have no clue what that does. My guess is some kind of foreach loop, but the part to the right of the do is completely o

I like to point out that *all* code is procedural in that all instructions effectively happen after and because of a previous instruction. Objects are just a different way to organize those instructions, but easier to teach after the fact. Its easier to teach this:

I made the jump to OO just fine. But the objects used in programming with methods, data, and various scopes have very little in common with objects in the real world. They only do at a very abstract level. Children would have difficulty in making that leap. Its a better add on for later once they've learned the basics of programming and begun to think in mathematical abstractions.

I think the problem is one of environments, the problem is that there seems to be this inherent assumption that kids need to learn the same tools that professionals use from the very outset. I'm not sure that's true.

I think some of the best historic tools for teaching programming to kids like Scratch and Klik 'n Play provide visual representations - you can have say, a monkey and the teacher can say "So how do we make the monkey move his arm?" then it's a case of filling in the procedural code there by call

Given that PHP and Python are both horribly slow, how does that show Ruby is now scalable for big apps?

Look again.... features and functions that are slow and get in the way of big applications can be coded in C or C++.Parallel is just understanding what can be done on different nodes without interfering with each other.

Ruby is a darn fine modern language. Slightly better than Python.

JavaScript has legs because it is the incumbent not because it is better.Dart may improve the fate of JavaScript. I just noticed some Node.js recastas Dart and found it easy to read....

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.

As I get older, I believe more and more than the creators of BASIC knew what they were doing, and make something kids and beginners could understand quickly even if it wasn't perfect.

Well said, and I agree. The hint for me is in the name of the language. For children, you want something that gives near instant gratification and which they can understand as they go. Even the horrendous goto statements allow children to see clearly where things go...and so with children its probably is the best bet. You

A better place would probably be to start them with algorithms in simple English. It would make it easier for the kids in the long run.. hell, even to this day, I lay out algorithms in my code before I actually start coding:

The problem is that people keep writing things in these languages and they end up being extremely difficult to maintain because of deficiencies in the language. Yes, you can write bad code in any language, but a few of them encourage it. I grew up on BASIC, and it's one of those languages. You can write some of the best spaghetti in BASIC. Visual Basic was another.

JavaScript is better but has *way* too many inconsistencies and gotchas. I think Ruby is a good choice, although I think a strictly typed languag

yay for BASIC. Remember the times when you had to completely retype the code because you needed to add something inbetween the line numbers and hadn't figured out to number them by 10's? And, by the time you finish typing everything back in, the power would go out? Ahhh... teaching kids the frustrations of programming early. haha

The traps in both javascript an ruby can make even a grown person's head explode, let alone a kindergartner.

I'm also not convinced by "block programming". OK, it's easy to make a pig move 3 steps forward by sticking three "move forward" blocks together. But that' gets old in minutes, and you want variables and functions. At that point (about an hour in) block programming becomes more of a hassle than typing "A=11".

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. "
Disagree. When I started programming as a kid 30 years ago BASIC taught ME structured thinking and analytical problem solving.
Mac

The problem with LOGO as a kid was either limitations of the language or the way it was taught.

Basic was fun, you could program games (really really shitty text adventures, maybe with a little non deterministic combat even, guess the number games, craps, simple character based action games (or modify ones that came in magazines)).

LOGO may teach concepts of building blocks and using them better, but all that was really covered (in my upbringing) was drawing shapes. Sometimes it was a robot turtle, which was

The graphics focus of LOGO has the pro / con of requiring visual thinking.

Basic was great because I could understand what was going on and make changes, and it came on all computers.

Granted, I don't really know LOGO, I'm just commenting from how things went, and I guess your point is that simple if/then type long chains is bad, but I think that something like basic, with actual functions would do a large part of the trick.

I don't see where the evil of python is (or really any other language with functions),

Scheme has a number of problems. A big one can be summed up with this backronym: Lots of Idiotic Single Parentheses. The language could have really used a way to consolidate lots of closing parentheses.

The prefix notation is another problem. Or, rather, that LISP uses prefix, and grade school math is taught in infix.

Recursion is yet another problem. Children are going to have a very hard time grasping recursion, rather than using explicit loop constructs such as "for next" and "while".

Is it just me that thinks that, when aiming at kids, BASIC still probably is the easiest language to understand (if not the most rigorous)?

The first example is just HORRENDOUS anyway - boilerplater and ternary crap getting in the way. The second is simplified using specific language facilities and objects.

So what would have been wrong with a BASIC-like:

FOR EACH USER IN USERS

SENDMESSAGE(USER, "Happy Birthday")NEXT USER

As I get older, I believe more and more than the creators of BASIC knew what they were doing, and make something kids and beginners could understand quickly even if it wasn't perfect.

Historically, Kemeny and Kurtz had had little or no exposure to object-oriented design in 1964. I believe that the first serious attempts at Object-Oriented thinking didn't even begin until 1964.

They were basically attempting to create an interactive "FORTRAN Lite" language. Which they did, quite successfully. I love FORTRAN. But I am also quite aware the creation of the term "spaghetti code" probably owes more to FORTRAN than it does any other language except assembler, and even more, probably, than COBOL.

He says it's all C or nothing. C++ if you're weak but want to look cool. I can't believe how hard core he is. I had no idea 5 year olds could form such hard ideals about programming. He says at school, all the kids who use Java are picked on. Some of the teachers tried to front Ruby, but they just got all up in her grill.

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.

A big part of the problem is that young people still think very concretely and still do not always get cause and effect. A big problem is that people focus on the language rather than the basics of programming.

I learned to code simple things in basic, use a compiler, and run a program around age 11. But I did not learn programming until two years later using FORTRAN. But we did not get to FORTRAN immediately. We talked about how to break down a problem, how to write steps in simple statements, how to

I learned to code simple things in basic, use a compiler, and run a program around age 11. But I did not learn programming until two years later using FORTRAN

I learned BASIC and then assembly when I was 14. I'm not sure when I learned programming. Arguably, none of us have.

If the Commodore 64 taught us anything it's that the language shipped with the system is crap and you have to dig deeper. Maybe yesterday's PEEK and POKE assembly programmers are reflected in the next generations. Maybe there are "s

Then we should form a trade union with accreditation. First we need to get a law passed that demands only accredited individuals be allowed. Pick any tech disaster (healthcare.gov?) where we can point and say, "See! We need some standardization in who is qualified to write software!!" We can charge large amounts of money for 'official' training from our accredited university programs. Then we intentionally limit the number of people who can be allowed through the system each year. Finally, if someone with a

Kids will be choosing to work at a McD's or writing JavaScript code. This is all tech industry's goal of making programming and development a skilled trade - much lower paying trade.

But a skilled trade is exactly what programming is. Nothing wrong with calling it that. Show me a developer that's more a scientist or theorist than a tradesman, and I'll show you someone who should be kept clear of production.

And hey, if they want to pay too little... they'll get burned because demand for competence far outstrips the supply. And as far as I can tell this is true for nearly all engineering disciplines - but especially programming.

Did anyone watch the video? The code was completely inconsequential to what was talked about and only shown for a brief few seconds as a "ooooh look at code". It wasn't really meant to be read or understood.

Agreed. But if you're going to display code to show kids the concept of looping and impress them with just how fast computers can do things repeatedly, a simple 20 goto 10 [urbandictionary.com] infinite loop in BASIC is certainly a lot easier to grasp than the JavaScript Happy Birthday function that used arrays and 0-based-indexing, or the object-oriented Ruby/Facebook API example!:-)

Right, so let's get right to wasting kids' time and confusing the hell out of them with this ADHD style bullshit. I call shenanigans. This is all about having a younger audience for marketing, not at all about educating the new generation at an earlier or faster rate.

My 6yo daughter loves minecraft. She's played it since just before her 5th birthday.

Minecraft is the perfect vehicle for teaching programming to kids, but not for the reasons you might think. Just playing the game teaches several core concepts: 1) 3D visualization and imagination, 2) acquiring and applying arcane knowledge, 3) solving tasks by breaking them down into subtasks easily accomplished, 4) solving problems in debug (creative) and runtime (survival) modes, 5) finding even more arcane ways to mani

The tutorial was likely incomprehensible to kindegartners but maybe Mark Z. was speaking equally to kindergartners as legisilators and educators

Your 6 yr old might enjoy the "ComputerCraft" mod.

Minecraft and Minetest have several forks, mods that allow coding in game and complete access to all the code in "grown up" languages. Teaching Scratch is easier but the two biggeest hurdles are still time and patience.

What I dig about minecraft's effects on my daughter is that it motivates her immensely. We started out playing on the iPad but she wanted to move on to the PC version. I told her we would do that if she 1) build a 2000 square foot house in the game, 2) build at least 3 floors, 3) use at least 3 different building materials, and 4) make all possible tools using all possible materials. She was five years old at the time, but she eventually did it. It took her three months! (And she could have done it in a

My nephew has been into Minecraft since he was 3/4.. and now a few years later, he is modding, watching HOWTOs on YouTube and loving the Minecraft music videos (he even wants to produce his own) and has gotten a fantastic amount of experience with basic programming logic through pistons and redstone. The social aspect has even been positive--he enjoys joining servers and helping others.

As someone that learned to program at the age of 4/5 in C64 BASIC (copying games out of magazines line-by-line), I feel t

Fairly predictably, this post has led to comments regarding which language is better for teaching kids. There is merit to that discussion, of course, but the main goal of teaching programming to kids to get them interested and maintain their interest. With regards to this, it matters more what they learn to do with the language than what the language is. The smart, creative, motivated kids will figure this out for themselves; those are the kids that will self-teach. The rest will need to be shown the utilit

This approach to having a generation of coders on the way seems like throwing the teapot in the ocean to fill it. And throwing a torch in after it to make tea. And saying you're being efficient because you picked a rainy day.

These kids are going to be watching these presentations, going "huh?"

Kindergarten is, remember, that "grade" before 1st grade. It's not even an education-oriented grade. The point of kindergarten is to establish social awareness and really basic, proper conduct. Kids are given rudimenta