I decided to teach my niece how to program at the age of 10 as well. She had already just naturally gotten the hang of the computer since she was about 6 (though I had to reverse the mouse buttons because originally her small hands couldn't left click). At 10 years old she was already telling my sister-in-law how to do things, was a near master of google-fu and had all the game sites she liked bookmarked. I wanted to show her what else was possible, without it seeming 'sciencey' (apparently that is the new equivalent of 'nerdy').
I knew her weakness was video games - so I got her using DS Game Maker (http://dsgamemaker.com/) which allows you to to create games for your Nintendo DS. I had already set her up with a flash cart, so getting the games on there was a breeze. She started off with some real simple things, but as she learned how to do more and more (with some help from me on getting jump 'physics' going in Dynamic BASIC) and she eventually had a little game with her dog as the star in a 30 room game that each had puzzles to solve.
It's amazing what someone so young can accomplish - sadly her interest has dwindled and she is now on track to become a fashion designer. We shall see ;)
As a programmer with absolutely no interest in fashion, I found "Project Runway" to be the closest thing to watching a programming reality show. They talk about design and construction, and how they interrelate. If you can get past the obvious shortcomings, there was some interesting problem solving being done by the most talented contestants.
Ditto for cooking shows, but it's easier to judge the results of fashion because I can't taste the cooking show results.
Well - it's pretty interesting that you mention the technical aspects of fashion design. A friend of mines wife works as a technical designer for one of the big fashion companies - her job is to take the designs made by designers, and redesign them for mass-market so that they can be machine made.
I made it a point to tell my niece (just this last weekend) that she should pay attention in school because with that knowledge she can do anything and become anything she wants. If she wants to do fashion design, she will still need to know math because it is important (giving her an example of how me and my 6 year old nephew obviously don't wear the same size shirts - so how would they figure that out?). I just want her to do good in life no matter what route she takes :)
The other day, out of the blue, my young niece starts telling me about Scratch (online visual programming site), and how she's written some stuff on it. She then proceeds to start telling me about other people, how they had done things wrong, and how she knew how to fix them.
I was so freaking proud. I had never tried to teach her to program because she's as hardheaded as I am. Trying to force it on her was doomed to failure. But because she discovered it, she bit in pretty good. She's playing at being a cheerleader now, but I can't help but think the experience will help her later, even if she never programs again.
My niece, also 10, has been bugging me to teach her how to make computer games of her own. After thinking about this for a couple of months the Raspberry Pi came out so I ordered 2 (one for her, one for me!) and set her up with Scratch. While waiting on the RasPis to arrive, I bought her a copy of Loren Ipsum[0] and read it first to make sure it was good for kids and had the right kind of information (it does!).
IMHO this might be the best way to introduce kids to programming. The book teaches fundamental concepts (she was blown away by the infinite string being less than 2 inches) without bogging them down in jargon and syntax (fuck semicolons...). On top of that, Scratch has really great visual logic and design pieces that fit together like a puzzle and let kids explore the concepts themselves, again without all the nitpicky syntax. This keeps things fun an interesting while they learn.
She is now a Scratch wiz and loves making stuff. Since she is an avid reader, she likes to create characters from her books and make them do crazy stuff. During the months I considered how to approach her education, she has amassed an impressive amount of design notes on her first game, including characters and levels. She is now working out the story to go with it and will begin putting it all into scratch soon. I can't wait to see what she comes up with!
I am continually amazed at the capabilities of kids. Their ability to understand whats presented to them is astounding. I really think one of the problems with the education system is we have this idea that everyone must progress in all areas at the same rate, and we stop teaching kids new things until they understand the set of things they "should" know for their age.
In a structured school system she wouldn't be allowed to program a computer until she learned the right amounts of geography and english.
Or maybe we're expecting too much of the school system when it should be the responsibility of parents to teach their skills valuable skills. School isn't the solution to all our problems.
So as a parent why can't I demand a system I pay for to provide that kind of service to my children ? In the realm of computers its ok, I know computers, and can fill in , but what if my child takes an interest to chemistry ? As a society we can ( and should ) be able to provide the depth of education to our kids that they will be able to absorb.
You can: send your child to a private school. Or do it on the cheap, send to a government school, and get the mass produced education that's a poorer fit.
I think that there are plenty of options that have yet to be explored in education.
I'm honestly not surprised that there have not been groups of parents with children around the same age getting together to "time-share" teaching their collective group of kids skills according to their abilities as adults. It's a very different experience to learn something from somebody with a passion for subject X than someone who is paid to teach subject X. Were I a parent, I would rather find 5-10 other talented/smart/skilled parents that each have unique passions and share in the effort of teaching my kid and theirs whatever it is that is in my ability to share.
The good teachers in school are those that are passionate enough that you as a student forget that they are being paid to be there and impart knowledge upon you.
TBH, the closest thing we have to such an arrangement today is Boy Scouts and Girl Scouts. It would be great if a similar program arrangement occupied 6-8 hours of a kids day.
Because I'm passionate about what I do for a living and want to practice it daily. I'm also passionate enough to share it with others. But when sharing it with others becomes a full-time job, you no longer get to practice it. 80% practicing, 20% sharing is a pretty good ratio in my book.
Plus being a teacher has become an institutionalized career, full of needless bureaucracy that in many cases sucks the fun out of what is fun about that job.
I think Google could try something out in this space as a way to attract more talent, maybe by allowing employees who are parents to set up a school taught by other Googlers in their 20% time. If I had a kid already, I would definitely want to join Google if it meant my kid would be taught by the really smart people that work there.
FWIW, I worked as a teacher for 1.5 years. English language teaching to ~11 year olds for 6 months and presentation skills to graduate students for 1 year.
Agreed. By definition, school has to cater to the average. It's meant to provide a baseline for society. There are no rules that education must be contained within the school grounds. The way I see it, they handle the boring stuff like geography so I can spend time on teaching fun stuff like computing!
As long as we cater to the average, we are allowing the average to be brought down by underachievers - we need to draw a line somewhere. Moving to the US from Europe to start my Sophomore year of high school was a real shock - even with any language and cultural barriers I was being taught things that I had learned years before that. I ended up dropping out, not because I couldn't keep up, but because I was actually bored in school and just couldn't stand not learning something new. I regret not having a real diploma and just a GED - but other than that I have no regrets. It hasn't hindered my job prospects and I have come far enough on my own.
Back to my original point; I think the education system needs to raise the bar slightly above average and attempt to make children reach for their goals.
I agree, but I do wish there was a better way for school to get out of the way when parents decide to do that. I moved to America when I was in middle school and had already learned to program from my brothers and was years ahead of my American peers in mathematics. I was placed in a slightly-less-behind "advanced" mathematics class, but I was required to keep submitting homework assignments for all the mathematics classes I was "skipping". I had more than double the busy-work and I still felt held back on the subject matter.
A better approach? Admit that the school was holding me back and allow me to pursue an alternate course of study with my family, without the burden of additional work for classes that aren't at my level. In a lot of places, doing that isn't nearly as easy as it should be.
> I am continually amazed at the capabilities of kids. Their ability to understand whats presented to them is astounding.
One thing that children have going for them when it comes to learning is that they've not done very much learning, i.e. they've yet to realise that certain kinds of things are "hard" to learn or that they "are no good" at a particular subject.
Children approach new things with a complete lack of intellectual fear, whereas older kids (and adults) have had years of experience of trying and failing to do things.
Older kids and adults also have to risk more intellectual credibility when learning something new. Once you're somewhat socially established it may not be rational to attempt to learn how to do something which may be beyond your capabilities - your friends may laugh and call you stupid.
I respect the efforts the author put in to teach kids how to program. That being said, I really don't think HTML/Javascript is the right choice for kids. The web stack is even considered messy from professional web programers' perspective.
My son will turn seven soon. I did some research on programming languages/kits for kids around that age. I finally settled down on Robomind, which is more or less of a modern variant of LOGO. Instead of the well-known turtle, you have a Robot that hovers around. We tried it the first time last night, the boy seemed intrigued. I hope Robomind can warm him up and make him ready for the more advanced kit like Lego MindStorm, which I promised him as the birthday gift.
The big upside with starting with web pages is it is SUPER easy for the kids to show off their work. All kids are motivated differently, but for my son at least being able to get encouragement from friends at school and family members was a big motivation.
But good luck with Robomind and if that doesn't click, try something else (took my son like four different languages until he started to find some that really worked for him)
The web stack is only messy once you get beyond the basics and want to make it cross browser. As a teaching tool it doesn't need to have a modern design, look the same to everyone and work in IE6.
I had similar thoughts to jbattle. Giving kids the ability to do something, put it online, and make it instantly accesible to their friends and the world is huge. It also helps open their mind to how accesible their creations can be.
That said, Robomind does look pretty cool. I'm sure I would have enjoyed it when I was a kid.
You and jbattle do have a point that web stack is more accessible and easier to share the results. After playing with Robomind (a Java GUI app) last night, I did wish it were a web app.
The programming environment on my C=64 was messy, too. But kids are pretty smart, and they can be especially determined when they see they can make a real computer program.
That's a reason I like Javascript. It's not the best language, but you can write something that looks just like any real webpage.
As a kid I never liked software that was kind of like a game with a little programming environment inside: they weren't good games, and they weren't good programming environments.
I honestly think the differences between any starting tech is negligible. The only thing that matters is the child learns that she has the power to create (or figure out how to create) things that she wants that did not exist before she created them.
I've always thought that you'd have to worry about "technical elitists" dismissing HTML/JavaScript as "not programming", since that's what I experienced when I was growing up.
On the other hand, Khan Academy CS chose JavaScript because it made it easy to share the results with others. So... nowadays I wonder.
Haters are going to hate. It doesn't matter what field/discipline you're in. JavaScript is as much a proper programming language as Python or Ruby or Lua. They're all high level scripting languages that do roughly the same things. Only one of them is natively in every browser (JavaScript). JavaScript turns out to be fairly forgiving (you can intentionally or unintentionally leave out semicolons and it will generally still run as intended).
I wouldn't worry about "technical elitists". It's really the Dunning-Kruger effect at play more than anything. The less someone knows, the more they think they know, and the more likely they are to be outspoken about people they think are "below" them. There's also a fair amount of disdain between people in different programming paradigms (OO vs Functional, Low-level vs High-level languages, etc). NONE of that matters though. Build cool stuff and keep getting better. Let the "technical elitists" spend all their time worrying about what is or is not proper programming while you get on with your life, build cool stuff and continue to get better.
It's a lot different these days where so much is on the web and undeniably Javascript-driven. While there are always going to be purists who refuse to recognize Javascript as anything more than a dinky toy, their opinions aren't exactly relevant or prevalent anymore.
I suspect Khan Academies decision was more motivated by implantation details. It is far easier to right an interperater when you can ask the browser to interpetat for you.
I first learned to program back in the '90s with Adventure Simulator and World Builder, which made old-school adventure games.
Adventure Simulator was buggy as crap and would crash pretty regularly with about a 33% chance of corrupting your data when it did so, but I still learned a lot from it.
World Builder was much more solid, but I think most programmers would still consider it fairly awkward. A lot of things (non-static maps, even basic animation) required some weird hacks, and it had a bunch of separate bins that your code went into that all interacted but which you couldn't view at the same time.
Despite the fact that modern programmers (and probably most "real" programmers of the time) would view both of these tools as difficult and limiting, I still thought it was a great, fun way to learn that kept me motivated.
I started, alone, with a C64. Oh, and I didn't read English. I could only read the code in the manuals and type it in to see how it worked. Trust me, HTML/JS is ten times easier than that. My take is that language is not as important as having a mentor. I did not have a mentor, and that made me waste a lot of time with the basics.
Its so great that you are involving your son with robotics. Really awesome. You should definitely keep working on that. In fact, keep me updated on how you guys progress along. My email is in my profile.
Being an architect and developer for the last 14 years I should confess that I would not want my kids or anybody I love to choose software as a career. The job can become repetitive, alienate yourself from social circles and you may loose all zest for outdoors. It is a job that can work for people of certain temperament (which I believe I am one of), but rarely the best thing you can do in life. Having a great life is important than developing software.
> Being an architect and developer for the last 14 years I should confess that I would not want my kids or anybody I love to choose software as a career.
Learning to program doesn't mean you have to choose software as a career. A lot of jobs will become more productive and interesting if the people involved could program in addition to their specialized knowledge - finance; almost all sciences do simulations, machine learning etc; basic data crunching...
I want her to discover science and technology. If she becomes a programmer then thats her choice. But the focus is in expanding her horizons and showing her that she has undiscovered skills and abilities.
I personally dont find software repetitive, or even alienating. In fact, I just ran a national 5K race last Sunday. Had a lot of fun doing it.
Construction workers get outdoors, but I bet plenty would love the sortware developer life. Your kids will have cellular connections and all day batteries, so they won't be chained to a desk.
Has there ever been a serious study which tries to determine at what age children are able to grasp programming constructs? (loops, functions, etc) We were all once little children and I know my own personal timeline, but I can't say I've ever seen a large collection of data points analyzed.
Not that I know of, but I would say that teaching "loops" and "functions" is almost definitely going to bog them down. Loops are not interesting on their own, but rather in terms of what you can do with them. So teaching them how to count (which is easy for children to grasp) is the proper beginning, followed by repetition (do something n times). They will learn loops, but only in terms of fulfilling a purpose. Things like functions come in later, as they are initially unnecessary. When they start to write the same lines of code over and over, you can point out the idea of reusing parts of code that get stuck in something called a function. Abstraction is thus quite easy to get them to understand (I speak only from experience, not a studied truth).
Basically, you teach them what they need in order to accomplish a specific task. Are arrays really useful to teach at first if they don't need serialized access to data? Better to wait until they need something like that. The goal is to give them problems that require those concepts and see if they ask for it. Initially, they might make 20 variables (where an array would do), and complain that it gets tiresome. Perfect opportunity to explain an array, while the interest is at a peak.
I haven't seen a serious study, but I've taught Scratch programming to kids in the 6-10 age range and found that they were all able to grasp loops if presented in an appropriate way. Similarly, we didn't talk about functions exactly, but each Sprite in a Scratch program can have multiple blocks of functionality triggered by different things.. i.e. functions. By the end of a year-long course, all of the students understood at least the basic idea and several of them had a pretty deep understanding.
This is great. I'm working with a local elementary school teacher this fall to teach kids (9-10 year olds) programming. We plan to use Scratch as it gives immediate results and demonstrates many core programming concepts (variables, loops, conditionals, etc). If they take to it very quickly, we may try a real programming language.
If anyone has experience teaching kids this age programming, or if you know of any resources available, please let me know. This is a new experience for me.
It's been tested to work pretty well with middle school children, so it seems right up your alley. John Resig (creator of jQuery) made it happen, his blog post on it: http://ejohn.org/blog/introducing-khan-cs/
I would absolutely love to be involved in a project like that one. Been wanting to develop one locally, and this might be the push I needed. Good luck with the project, and keep me update on how it progresses. My email is in my profile.
Are there plumbing pages where people teach their children to plumb, or dry-walling speciality sites where folks discuss how to get their kids into plasterwork? Is this just a few cases, or is there something about programming that makes people think it should be done by everyone? I recall not so long ago a thread about how programming should be taught at school alongside English (read "mastery of relevant language" for non-English speaking nations) and Maths.
Are there plumbing pages where people teach their children to plumb, or dry-walling speciality sites where folks discuss how to get their kids into plasterwork?
That sort of thing is quite popular with Boy Scouts and the like. You can get a special magazine for fun father&son activities like The Joy of Spackle. Totally not joking.
Meanwhile, there's little need for toy drywall compound. We have Play-Doh, better in many ways, or for the older and wiser there is papier-mâché or real modeling clay or, well, drywall compound. It's not that dangerous except to your furniture and carpets.
Have we talked to any actual five-year-olds while constructing this metaphor? The ones who are obsessed with Bob the Builder and Thomas the Tank Engine and Wallace and Gromit (tinkerers, ya know) and who own little toy plastic toolboxes and squeal at the sight of construction equipment? Is it only my friends' kids who are like this?
Is it possible for you to expand on this? To give just one example, plumbing is far more fundamental to civilisation and we're happy to have a trained cadre of plumbers, and for most people to go their whole lives with no knowledge of it. Do plumbers wander round shaking their heads and wondering why nobody else knows how to do it?
Programming is a much more general skill than plumbing. Don't just think Java enterprise apps for a Fortune 500... programming is fundamentally about learning how to use computers to their fullest. The ability to explore and create with computers is a powerful skill that complements most of the potential careers that a child may pursue in the future. Pretty much any science or engineering field will benefit from programming experience. Increasingly other fields are starting to move in directions that will make those skills more valuable.
Computers are just at the very beginning of revolutionizing the way that human society interacts. Why would you not want your children to have an edge?
Programming is a fundamental concept like arithmetic or persuasive argument. It is about turning abstract human thought into machine-executable algorithms. Children who learn to program will grow up smarter and more productive than those who don't, even if they never code for their job.
In addition, the number of jobs that requiring programing skills is exploding and will continue to grow. The basic idea of automating information tasks is useful for many, many tasks.
I'd say for a number of reasons they're different. Plumbing, while probably useful at some point in your life, is just one activity. Programming is NOT just one thing. It's closer to woodshop (which I hope is still in schools...). Another difference I think is that you can create something bigger with it, something that scales. Last but not least, I think it's inherently fun and fulfilling to create something out of nothing, but I'll admit that it's not for everyone. But neither is woodshop or gym class. I'd also say that teaching some programming along side math could have some benefits to learning and motivation.
We already have a subject taught for that. Maths. As an aside, to the extent that when we're hiring fresh grad programmers, their maths ability is a better indication of future quality than their programming ability. We find it easier to teach people who can think how to program than the other way around.
It's different than the classical/non-algorithmic sort of math taught in schools, it's more like "maths in motion" which can be very exciting and give early rewards in the feedback loop of learning, when kids see their creations actually do something. It also requires a different sort of thinking than the study of classical/non-algorithmic math, IMO. It's a very exciting time to be involved in the borderland between mathematics and computer science, with languages like Agda giving a whole new take on constructive mathematics.
Kudos to you, good sir. As a woman in Computer Science, I applaud all efforts to get girls interested in programming at a young age. It makes the university CS department much less intimidating to know beforehand what you're getting yourself into.
"What will I teach her next? We are going to build her own little startup."
This does reinforce the post that was on here a few days ago about the liberal use of the term "startup"...
Thank all of you for the amazing response. My focus with the post was to get people motivated towards teaching children about science and technology. That has been my focus with her. We have had many fun projects, including a pressurized water bottle rocket, and a baking soda propelled boat.
She has agreed to ship her first software project. We will be working on it during the weekend. Expect an update in the coming days. Why do I want her to ship something so fast? Because I want her to design and build her own thing. This will allow her to see that she has the abilities and skills to change the world for the better. She also agreed to talk about her experiences with programming. Something that I'm sure will be of interest to all.
Thank you * infinity.
PS. Keep posted to my blog @ orangethirty.blogspot.com for our updates.
I stopped reading after that line. Someone with such a skewed view of the world shouldn't be teaching children.
But really, what kind of statement is that? Who/what is a "normal" person? How elite does the author think his/herself to be claiming to be above "normal" people who clearly don't care about technology? (For an answer: read the author's "Why you need to hire me" page, which begins with "I deliver.")
Reading this story about a 10 year old who doesn't know what a computer is and what it can be used to do, I had to check the date of the article. To me, it doesn't seem like a plausible scenario in this day and age.
In 1986, my grade school classroom had 4 Acorn computers [0]. Each student could use the computers for one hour every day — to program in Basic, do word processing, and play educational games. It was an era when most people did not own personal computers, but even back then, they would at least know what computers were.
Another great resource for teaching kids programming that I haven't seen mentioned in the discussion is Scratch (http://scratch.mit.edu/). My daughter (just turned 11) has been playing with it for a couple years now and it's pretty amazing the stuff she can create. The best part is that the scratch website hosts projects for free, so she can share them with friends and family. It's a great introduction to programming concepts.
As far as learning HTML/JavaScript, my daughter also liked Codecademy, and went through several tutorials there. She would get bogged down a little on syntax (Scratch is very visual), but I can't imagine an easier way to learn HTML/JavaScript.
I'm about to do an multi-week after school "Intro to Programming" session at our local elementary/middle school in Scratch in Baltimore city. 8-10 weeks for 5th to 7th graders. It is an urban school with quite a range in the kids' abilities and not all kids have working computers at home. It'll be a challenge but I think the kids will surprise me.
Last school year I taught 2nd graders a little bit using Scratch and many of them got it and with a bit more exposure this year they could be creating programs on their own.
Oops .. sorry about that - and thanks for following up with the correction. Did you try LOAD81? I really love it as a way of getting started with Lua hacking, and I'd love to hear others experiences too ..
It isn't a counter, but it makes it clear that print is happening for each part of the word. Then you can write programs using arrays and other counters.
I knew her weakness was video games - so I got her using DS Game Maker (http://dsgamemaker.com/) which allows you to to create games for your Nintendo DS. I had already set her up with a flash cart, so getting the games on there was a breeze. She started off with some real simple things, but as she learned how to do more and more (with some help from me on getting jump 'physics' going in Dynamic BASIC) and she eventually had a little game with her dog as the star in a 30 room game that each had puzzles to solve.
It's amazing what someone so young can accomplish - sadly her interest has dwindled and she is now on track to become a fashion designer. We shall see ;)