I love that the kids are having fun with this. Sometimes, in the argument of whether NoSQL is better than RDBMS or if Backbone.js is too little for too much, it seems like we collectively forget the joy that it is to program :)
If there is one thing that I would attribute the popularity of Ruby and ROR to then it is that Ruby has been made exceptionally accessible to younger people learning how to program. Other language proponents should take a leaf out of this book (and that of the tobacco industry as well as a lot of organized religions): 'get them while they're young'.
Congratulations on a really neat project, if there is one thing I love doing it's teaching kids about computers and programming, and this inspired me to go and do some more of that.
Even more exciting than these kids learning Ruby is that they're learning programming. After they have a grasp of the concepts of how to program a computer, they can expand to other languages (or stay with Ruby ;-)
I think programmatically controlling hardware (like robots and Lego) can be very attractive to kids, too.
Absolutely, but contrasted with say 'logo' the power of ruby is that it is not a 'toy' language, you can build just about anything other than hard real time systems in it.
That's a pretty powerful tool to master. The only other languages that I can think of that are that accessible to children are Logo, Basic and SmallTalk and none of those is as well established as a starting language for kids to use and as powerful at the same time.
The lego robotics kits are nice and well thought out but there is no stepping stone between there and say making a website or some other non lego-related program.
Robots and turtles are cool in that they allow control of real-world objects from a programming environment.
I wish someone had introduced me to code at 10-years-old. I had computer lab, but we just practiced Mavis Teaches Typing and played Oregon Trail. The closest I ever got to this was a circuit board, and I can remember how proud I was at the end--I practically slept with it. I wish I'd built more things as a kid. You know, figured out how stuff works. I think sometime in high school I must have decided there'd always be someone else to solve my problems. And when I got to college, we talked more about the depth and various dimensions/degrees of problems than about fixing them. Now I'm stilted. I have bookmarks and bookshelves of HTML, CSS, and Java tutorials and I can't bring myself to even read the Table of Contents.
It's not easy to overcome that inertia without the passion for programming itself. I have two suggestions:
1. Start small
Don't start with Java. Find something simple as hell, like QBASIC[1], or easy as hell (to begin with) like Ruby or Python. Play. I repeat: Play. Play. Play. Play with the language. Let it be fun. Let yourself be childlike about it. Focus on messing around and seeing what you can do. At some point, you'll realize that you're six layers of "I wonder if..." deep, and at this point, I officially declare you to be a Programmer.
2. Start big
Find a problem you want to solve. Here are some examples:
- "I can't believe there isn't an iPhone app for tracking what kind of burgers you eat."
- "I hate how I never know when a Hacker News post involving Tim Ferriss has been submitted."
- "Wouldn't it be great if I never had to e-mail myself a file again?"
Footnotes
[1] - Renowned computer scientist Edsger Dijkstra would opine that any programmer whose first language was in the BASIC family tree is forever warped in the most vital parts of their brain. I cannot confirm nor deny this, but my potentially-warped brain has served me quite well.
Many of these types of problems already have answers, like the third one (the answer is Dropbox). But the practice of researching them and finding existing answers is just as much a part of programming as is the writing of code.
I know it's been 10 hours, but can I just say thank you? I left a random musing as a comment and signed off, and someone took the time and liberty to personally address it. One of the many reasons why I love this community.
You're welcome; and thank you in turn for being so appreciative! I hope it helped a little.
Edit: FWIW: I was introduced to code at age 10, but I honestly believe that there is no "best" age. As kids, we have the inbuilt zen-like child mind that lets us delve into the vicissitudes of even the most simple toy; a programming language is even more fascinating. It is the nature of adults to lose instant accessibility to that mindset, but it is by no means unachievable. Conversely, discovering code as an adult has its own advantages beyond general experience and improved cultural context: The adult mind possesses a vast array of existing systems, analogies and frameworks to aid in the understanding of higher-level concepts.
I guess what I'm saying is, it's easier for kids to motivate themselves to learn programming, but it's easier for adults to learn programming. I'm sure there are fine arguments to the contrary on both points, but there is undeniably something interesting going on there.
It's never too late. I'm in my mid-thirties and just started seriously learning html & css in the past year. My hope was to leverage my background in architecture into a new sphere of design, opening up new career opportunities.
About a year into it now, I can say it's been one of the best decisions of my adult life. Learning the rudiments of even just a markup language was a real struggle, but the benefit to my 'left brain' has been tremendous. The greatest benefit however has been gaining a sense of hope from becoming even minimally skilled in a growing, relevant and potentially lucrative field.
Absolutely agree. I think programming forces anyone at any age to think critically and logically about their decisions. It also is a great way to understand how logical decisions can adapt and build on each other. For example, instead of saying "I think X and Y makes Z" you say "My first guess is that X and Y makes Z, but let's script and test if it is true". It becomes a combination of what you learn in math and science class -- which rarely cross paths in grade school.
This looks like an interesting project, but I don't see how it can teach kids how to program. I clicked on the lesson 1 screencast and saw that, even before trying to run a single line of code, it dived into importing 2 modules, subclassing and defining 3 methods, and running a GUI. It's hard to grock inheritance if you haven't been introduced to variables and operators. If you actually want to teach kids programming in a way they'll understand, I recommend Zed Shaw's book Learning Python the Hard Way (http://learnpythonthehardway.org/index).
LPTHW by Shaw is my pick for raw beginners, because it assumes nothing: not even how to use an editor and how to run a program. It's very good for the rote learning of basic programming that a child (or someone who has never done any programming) would need.
However, I'll find it amusingly ironic if this catches on, even though Zed's book contains no profanity and is just fine for the kids.
This is great. I think teaching kids would be a lot of fun. I'm sure this kind of thing is not very common though, any ideas for similar projects I could get involved with? Computer summer camps maybe?
I love that the kids are having fun with this. Sometimes, in the argument of whether NoSQL is better than RDBMS or if Backbone.js is too little for too much, it seems like we collectively forget the joy that it is to program :)