I hate being negative, but I have to say that I really don't think this an effective way to learn how to code for someone without some programming knowledge to begin with.
I just watched someone with no programming experience whatsoever try the problems. She's smart and well educated.
The basic arithmetic is (obviously) fine.
Basic variable assignment is fine, although the 'var' keyword doesn't really serve a purpose. It's completely meaningless to the non-programmer, and seeing as you can declare variables in the global scope in js without using it, I don't really get what it's doing here.
The first difficult problem is why
'4' + '2'
is '42' and not '6'. The person I watched voiced a bit of frustration, then after a minute saw that 4 and '4' are different, and then breezed through the round. But she didn't learn anything at all about strings vs. integers or even variable types as a concept. She learned that, arbitrarily, when numbers are in inverted commas they should be concatenated when a '+' sign is used instead of added together. She didn't feel like she'd learned anything either. And without already knowing about types, about integers and strings, it is impossible to teach this concept intuitively because it is not intuitive. Someone taught that 4 + 2 = 6 and that '4' + '2' = '42' might very reasonably think that '42' - '2' = '4'.
Next was variable assignment order:
var a = 0; a = 4; a + 3;
She got the "rule" of last-assignment-counts pretty quickly, but again, didn't get what the variable was actually doing. She just learned to ignore the first line and add the last two numbers together. The idea of 'a' being a variable wasn't communicated to her.
Then there's a huge jump to functions, with
function hello (a, b) {
return a + b;
}
hello(2, 4);
After some trial and error, she worked out how to answer these kinds of questions as well, but with no understanding at all of what the function was, what the return statement was, the idea of functions having arguments, etc. She just learned to add the two numbers at the bottom, and later to perform an operation on the two numbers at the bottom using the operator from a few lines higher. The process became "find the numbers, find the operator, ignore everything else".
Up to this point I had been completely silent and just watched, but now she began to give up, and we talked about how she'd found the experience. She didn't feel that she'd learned anything and didn't like the lack of feedback and explanation.
The next questions were about about length:
var a = 'nudintm';
a.length;
I really don't like this. So far, the user has only been exposed to functions, and the syntax and structure will still be unfamiliar in the best-case-scenario. From there, it's a huge leap to properties and the implied existence of objects. This problem is just so arbitrary without an understanding of what's going on. Why is there a period between 'a' and 'length'? Why does length not have '()' after it like hello() did a few problems earlier? We know the answers to these questions, the intended audience will not.
var a = [9, 4, 'w'];
a.length;
This is another huge leap, and it's a bit odd because it introduces arrays in a problem that doesn't really indicate anything at all about what an array is or what it's for. It's also a bad question because the user might add together the length of '9', '4' and 'w' and come up with 3, the correct answer, and then think to get the length of an array you just add the length of every element in the array.
I'll stop there. I admire the execution and the ambition of the project, but in its current form I really don't think it works well at all if the intended audience is people who don't know anything about programming. Users learn superficial patterns to get the correct answers without understanding the problems in any real way or learning anything about the structure or function of code.
I just had my wife go through it, and she had similar sticking points. She seemed to grok most of it, with some small explanations of syntax along the way (=== as equality vs = as assignment, [a, b, c] is a list of things, etc).
I think that the value of this tool is to help non-programmers discover that code isn't scary, and that it's made of simple things that regular humans can understand. The key would be to have a developer beside them to (briefly) explain things that look utterly foreign or step in with some guidance if things get frustrating.
Overall, in my opinion it's a fantastic "gentle introduction to programming". It was a real confidence-builder for my wife, and she's agreed to go through tryruby.org with me tomorrow. Mission accomplished, IMO.
>I hate being negative, but I have to say that I really don't think this an effective way to learn how to code for someone without some programming knowledge to begin with.
I just watched someone with no programming experience whatsoever try the problems. She's smart and well educated.
I also hate being negative and I agree with your main point. That said I don't believe that someone with "no programming experience whatsoever" truly qualifies as "well educated" in this day and age.
It's like someone who doesn't know what an interest rate is or someone familiar with none of the major literary cannon of their first language. They might be very intelligent but their education has a gaping hole in it.
It only shows "correct" code and never has a syntax error or lets you try out your '42' - '2' example. It starts with bare numbers without the word "var" and later adds the word "var" with no explanation.
I just watched someone with no programming experience whatsoever try the problems. She's smart and well educated.
The basic arithmetic is (obviously) fine.
Basic variable assignment is fine, although the 'var' keyword doesn't really serve a purpose. It's completely meaningless to the non-programmer, and seeing as you can declare variables in the global scope in js without using it, I don't really get what it's doing here.
The first difficult problem is why
is '42' and not '6'. The person I watched voiced a bit of frustration, then after a minute saw that 4 and '4' are different, and then breezed through the round. But she didn't learn anything at all about strings vs. integers or even variable types as a concept. She learned that, arbitrarily, when numbers are in inverted commas they should be concatenated when a '+' sign is used instead of added together. She didn't feel like she'd learned anything either. And without already knowing about types, about integers and strings, it is impossible to teach this concept intuitively because it is not intuitive. Someone taught that 4 + 2 = 6 and that '4' + '2' = '42' might very reasonably think that '42' - '2' = '4'.Next was variable assignment order:
She got the "rule" of last-assignment-counts pretty quickly, but again, didn't get what the variable was actually doing. She just learned to ignore the first line and add the last two numbers together. The idea of 'a' being a variable wasn't communicated to her.Then there's a huge jump to functions, with
After some trial and error, she worked out how to answer these kinds of questions as well, but with no understanding at all of what the function was, what the return statement was, the idea of functions having arguments, etc. She just learned to add the two numbers at the bottom, and later to perform an operation on the two numbers at the bottom using the operator from a few lines higher. The process became "find the numbers, find the operator, ignore everything else".Up to this point I had been completely silent and just watched, but now she began to give up, and we talked about how she'd found the experience. She didn't feel that she'd learned anything and didn't like the lack of feedback and explanation.
The next questions were about about length:
I really don't like this. So far, the user has only been exposed to functions, and the syntax and structure will still be unfamiliar in the best-case-scenario. From there, it's a huge leap to properties and the implied existence of objects. This problem is just so arbitrary without an understanding of what's going on. Why is there a period between 'a' and 'length'? Why does length not have '()' after it like hello() did a few problems earlier? We know the answers to these questions, the intended audience will not. This is another huge leap, and it's a bit odd because it introduces arrays in a problem that doesn't really indicate anything at all about what an array is or what it's for. It's also a bad question because the user might add together the length of '9', '4' and 'w' and come up with 3, the correct answer, and then think to get the length of an array you just add the length of every element in the array.I'll stop there. I admire the execution and the ambition of the project, but in its current form I really don't think it works well at all if the intended audience is people who don't know anything about programming. Users learn superficial patterns to get the correct answers without understanding the problems in any real way or learning anything about the structure or function of code.