Coders turned children’s writers

Last week I discovered a wonderful blog by programmer Jeremy Kubica.  Computational Fairy Tales teaches computer science concept though ingenious charming fairy tales.  My favourite is Hunting Dragons Through Binary Search, but Kubica is extremely prolific and seems to have tale for everything from recursion to parallel algorithms.

He’s not alone.  Today Wired Enterprise published a feature on Carlos Bueno a engineer who works for Facebook, but has just  written a children’s book, Lauren Ipsum, aimed at kids as young as 5 and as old as 12.  The article puts the book in the context of programming education initiatives like Scratch and Codecademy.  As Bueno explains, hands on coding is only part of the process. Metaphors are a key part of teaching computer science. They are the original code. “Stories are distilled knowledge taught through the ages,” he says.

This is good news for families learning to code.

The Dragon Eggs of digital literacy hatching!


Three Ways Learning to Code Would Make Michael Bloomberg A Better Mayor

Earlier this year, this post was included in Should You Learn To Code, a collection of posts put together by Hyperink Press.

Thanks to Jeff Atwood’s provocative column Please Don’t Learn To Code, the debate about whether or not the average person should learn to code rages on.  The Wall Street Journal weighed in yesterday with this Atwood  quote:

To those who argue programming is an essential skill we should be teaching our children, right up there with reading, writing, and arithmetic: can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder? It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job, for that matter. But understanding variables and functions, pointers and recursion? I can’t see it.

I’m not a crack Java coder, or anywhere close.  But even after five months of programming lessons I feel that I can confidently come up with at least three ways that Michael Bloomberg would become a better mayor without even becoming a crack coder.  In fact, he could remain a crap coder, and probably still come out of the experience as a better mayor.

1. He might learn just enough about programming to start considering all the different kinds of operating systems there are now.  Maybe he starts having daydreams about switching to Linux, and starts thinking about all the ways a thriving metropolis like NYC might save money from switching from Windows to Ubuntu.  Probably he doesn’t, but he instructs a few minions to at least start researching more open source software that the city could use.  Every once in a while he starts nagging his education department to see how they could improve school budgets and efficiency by using open source where appropriate.

2. He finds himself walking into a meeting and without realizing it, thinking about problems in a totally different way. Instead of spending hours debating all kinds of solutions he asks himself and the people around him: “what is the smallest, most significant, repeatable action we could take right now to solve this problem?”  A few months of coding has nudged his brain in a different direction and before he knows it, he’s cutting through hours of wasted time with more creative and efficient solutions.

3. He’s still having those switching to ubuntu fantasies. Oh, he’s too old.  But what the hey, he decides to send every child in NYC a RaspberryPi, the $25 dollar, credit-card sized, Linux computer that has just started shipping out of London.  Instead of wasting hours playing video games some of these kids learn how to make their own damn games. One day a critical mass of those kids grows up to become crack coders and change the world in ways we can hardly imagine.

So there Jeff Atwood.  You asked, I’ve explained it to you.

Now can everyone just get back to their codecademy lessons in peace!

Six Reasons a Non-Computer Nerd Might Want to Learn to Code – Technology – The Atlantic Wire

Six Reasons a Non-Computer Nerd Might Want to Learn to Code – Technology – The Atlantic Wire.

This is something of an analysis of the “everyone should learn to code” meme.  Except that it explores only the reasons why people might want to learn to code, which is not exactly the same as why they should learn.

Don’t get me wrong, I’m not trying to take the fun out of coding by turning into a moral imperative.  And the last thing any parent should do is  turn this into educational equivalent of vegetables.

But if we’re going to list the real advantages, and get into arguments with elite  programmers who keep telling us that newbies are wasting their time, we need something deeper than “it’s useful.”

If you’re a software engineer whose primary source of work is software manufacturing then yeah, there’s not much motivating you to preach to the masses to learn how to make software.  If, however, you’re a more politically minded programmer devoted to creating a more efficient world or let’s say more open source software that might massively reduce government and educational spending, then it’s more than just “useful” to have a citizens who know what you’re talking about.  It’s essential.

Because nothing is going to change until a critical mass of the population understands enough about computer science to pressure their respective government or administrations into making the significant changes that have all kinds of economic and social advantages.

So there.  A reason we should learn to program: because it might inspire others to do the same, and then maybe we’ll have a society that is better able to function as a more participatory democracy.

But don’t tell the kids that just yet.

Computer Science Unplugged:The Show

Last week Ben and I watched a bit of Computer Science Unplugged: The Show.

It’s an ingenious piece of educational theatre that introduces students to basic concepts.  The mantra of the show is computer science is as much about computers as astronomy is about telescopes. 

It’s a great way of showing students, and reminding adults that computers are just tools.  That it’s the coding and computational formulas that run them, and these are, and will always remain the domain of humans.

Although the students don’t actually know this as they’re being led through a series of entertainin interactive demonstartions, they are being introduced to the basics of error detection, divide and conquer algorithms, encryption protocols, data compression, number representation and human computer interaction. 

There’s a companion manual to the show, which I haven’t looked at yet.  But here’s the show for those who want to check it out:

RosiePy: 12 year old programmer from U.K

I firmly believe that 10-12 years old is the best time to start learning how to program.  But I just found out that it’s also an awesome time to starting teaching programming.  I don’t know much about RosiPy, yet.  I only discovered her yesterday when she liked my post on parent programmers.  I wouldn’t be suprised if I start hearing more about her.

She’s a twelve year old girl living in the U.K. who started a youtube channel a couple of weeks ago, teaching kids how to program Scratch.

Here you go, check it out for yourself.  Ben loved it, and who knows maybe it’ll inspire him to start teaching a little JavaScript sometime soon.

RosiePy’s blog.

The Parent Developer

I’ve actually been coding for a long time, without realizing it.

If we remove all the syntax of computer language and look at what the bare bones of coding is, it’s just using logic, reason and simple commands to create repeatable behaviours.

This is what parents do with children.

They start with small instructions,  baby steps and repeated routines,  appropriate to both the child’s abilities and the parent’s still developing skills as a programmer of babies.  Then as the child  starts to develop cognitive abilities, the parent sets up a system of conditionals: acceptable choices the child can make that will not include choices that will  bugger up their lives.

Figuring this out is a frustrating challenge, but it will probably work well enough while the child is still not much more than a new Object in the parent’s mind, something that in theory should inherit  all her workable (and perhaps not as workable as she’d like) methods.

But at a certain point the child hits  the age where he now has the abstraction abilities and the independence  to start programming his own life.  And this is where the real problems start, because the parent is  no longer the programmer with a child Object.  The parent is now dealing with a junior developer.  And if the  parent does not know how to establish her position as senior developer, there will be blood.

That’s why I think this is such a great time for Ben and I to learn how to code.  Because even if no one in the family ever becomes a professional programmer, we’re still regularly working together on solving problems with commands and the kind of simplification skills that  inevitably spill into our lives.  Ideally this will help us solve problems in ways that are more neutral and productive than what usually happens between adults and teenagers.

Obviously Ben will not stay a junior developer in this family for long.  This is the law of life and technology. Coders move on. But for now it’s still my responsibility to instill good thinking, writing, and commanding habits.

It’s all about those transferable skills.


Many people may disagree …

From the thoroughly brain charging article Coding for Success by Andy Young

Many people may disagree that learning to code is for all or should be compulsory. “Why bother?” they may say – “We don’t need that many coders, most wouldn’t use the skills – it’s not that useful.” But it’s critical to understand what learning to code is not. Learning to code is not learning C++, or Ruby, or HTML. Learning to code is not learning architecture, or security, or memory allocation. Learning to code is not training to be a professional programmer.

Learning to code is learning to use logic and reason, and express your intent in a consistent, understandable, repeatable way. Learning to code is learning to get under the skin of a problem and reduce it to it’s simplest form. Learning to code is learning to harness power external to yourself and provide instructions to realise your ideas – whether that be directly to a computer, to delegate to one or more professional programmers or even a human team that work for and with you in any dicipline. Learning to code is ultimately a fantastic way to gain a multitude of transferrable skills.

Published in The Kernel, January 23rd, 2012

Family 3.0: A Manifesto

Alright, I’m ready to call it. If the 90s was the decade of the brain, and the 2000s, the decade of impossible to categorize millennial upheaval, this decade is going to be the decade of digital literacy. Or at least that’s what it should be.

When I say digital literacy I don’t mean this is the decade when everyone finally figured out how to use Twitter.  I mean during the next ten years society is going to accept that computer science can no longer remain a field reserved only for specialists.  It needs to become a core subject in schools, as important as math or english. And it needs to be something that all citizens are learning at whatever pace is realistic for them.

There are so many reasons for this, but the most  important, every day we’re  uploading more and more of our personal, professional and financial data into a cloud. If we don’t understand at least the fundamentals of how that cloud works, we’re leaving ourselves and our children vulnerable to all kinds of manipulation, surveillance and violation that we’re not even conscious of. 

Some people will choose to gate themselves off with strict parental controls. But the Internet has the potential to be one of the greatest incubators of creativity, knowledge and social connection in the history of  human civilization.  Who wants to gate their kids off from that?  Or more realistically, how long will you even be able to?

The best way to turn kids into good digital citizens, able to protect themselves and each other, is to direct them towards the knowledge and skills they need to make informed decisions consistent with good values.

Learning to program is no longer about learning how to make  robots.  More and more it’s going to be about learning how to stay human. As Douglas Rushkoff started pointing out last year,  we are  increasingly being faced with the choice of  being the programmer or the programmed.

So how to start? We can call for massive educational reform, like they’re doing in the U.K.  In January the Ministry of Education  announced a huge overhaul of the teaching of information technology in schools. Last month The Observer ran a week-long series called “Why All Our Kids Should Be Taught To Code”  It covered all the best reasons why computer science needs to become a core subject, and why information technology needs to be less about teaching kids how to use software and more about understanding how it is made (there’s an especially great article on why girls need to start learning it early, before puberty when  they start to become more vulnerable to peer pressure.)

Enough with the  stale back to basics testing. Incorporating computer programming into core courses will bring education alive. Fooling around with the functions that make a computer do your bidding, for example, calculating every multiple of three up to 10,000 in under 10 seconds,  is empowering and makes math fun.  Bringing some HTML or CSS into a research project is like mixing a magic graphics potion from twigs. These are challenging skills, but they’re skills with big, immediate payoffs.  Most kids are smart enough to figure that out.

But do we have the time to wait for this educational reform?  If you’re a parent there are great reasons to  simply start learning to code on your own. There are few professions left in which knowledge of code won’t help your career dramatically. Do you really think you can’t learn something that can be taught to eleven year olds? If you’ve cut back from work to raise children, or your college degree is going to be gathering dust for a few years before you head into the work force, learning to code will keep you brain sharp and your skills fresh. And you can use these skills now to build games and projects with your kids. Literacy begins at home, whether it be analog or digital.

Nobody needs to learn enough to become a senior developer.  But just spend  an hour dipping your feet into one of the free coding education programs  that have popped up in the last year. One of the first things you’ll learn is how to create a confirmation box.

In JavaScript that’s as simple as writing this sentence:

>confirm (“Do you like my awesome confirmation box?”);  

Run that in a browser console.  Spend an afternoon hacking that box with a kid.  Make up some nonsense choices.  Another hour and you can learn to prompt some default choices.  For fun try to force each other to make  decisions that lead to embarrassing results. That confirmation box will never again have quite the same unquestioned authority for either of you.

If you do just that, you’re already one giant baby step ahead.

Alan Turing to be featured on British stamp

Alan Turing

Thanks to Lisa Williams over at Life and Code, for the scoop on this.

I first found out about Turing when my mom took me to see “Breaking The Code,” a West End play in London, starring Derek Jacobi. Turing was considered one of the founding fathers of computational thinking, until the mid 1950s when he was outed and convicted of homosexuality. It didn’t get better. He committed suicide and the world lost a brilliant mind.

More at Life and Code.

Understanding The Password

Last week my eleven-year-old son’s yahoo mail account was hacked.  Ben’s on Facebook and doesn’t e-mail very much, so fortunately his list of contacts was small.  Because he doesn’t have any bank accounts or credit cards, I guess I’ve procrastinated explaining to him the importance of having a reasonably complex password you change often

If you’re a parent who hasn’t done this yet.  Do it now. Believe me, you do not ever want to see to see the look on an eleven year old boy’s face when he discovers his identity attached to thousands of e-mails offering to introduce people around the world to his “beautiful lady friends.”

One thing I discovered this week, however, is that I am a significantly different parent after three and a half months of coding lessons.

If this had happened last year, I probably would have shared my son’s sudden picture of the world as a cryptic, chaotic place filled with evil geniuses programming bots that inexplicably burrow their way into your private, vulnerable data.  I would have soldered up the parental controls, because that’s all I would have known to do, and I probably would have done everything I could to protect my son’s innocence and to continue doing it for as long as possible.

But because of our family Code Year pledge, I decided, instead, this would be a good week to review what we’d learned about randomization programs. From what we already knew, it was easy to see how someone with just elementary programming skills could spout out enough random letters or numbers in under an hour to crack the accounts of people who still believed that they could easily protect their data with a simple memorable word or a birthdate.

It was also easy to imagine how some of these simple hacking bots were being created by teenagers in poorer countries, taking advantage of the fact that they’re learning core-programming skills that are not currently being taught as a part of a standard high school education in richer countries.

I’m not talking about skills fundamental to a computer science degree.  I’m talking about skills so basic they can be learned by a middle aged mother and her eleven year old.

I didn’t have to go past week three, conditionals, to find a simple randomization project we could adapt to create our own superSecurePasswordCreatorBot.

We used the dice-throwing project. This elementary program throws a virtual set of dice to create a random score.  With just a few more lines of code, we could replace the numbers on each side of the die with six meaningful words and six meaningful double digits.  Call the program and we have a randomized, but memorable password that can be changed weekly. Add a third die, and we have a SuperDooperSecurePasswordCreator.  As Ben’s knowledge of Object Oriented Programming develops we can continue working on this so that we can easily and automatically store our passwords for easy retrieval.

The important thing at this moment, however, is not so much creating an impenetrable password in a family war against an army of alien grifter bots.  What’s important is that we’re engaged in a productive learning curve, not huddling together into some increasingly tiny information gated community.

Now I’m wondering if in protecting my son’s “innocence,” what I really would have been protecting was his ignorance, and mine.

We’ve grown up in a society that thinks that teaching people how to use software is digital literacy. But in the three months since I’ve started learning core-programming skills, I am being hit with the full on obvious truth that this is pretty much the same as if we were teaching people how to read without teaching them how to write.

Computers monitor and manage every aspect of our civilization.  We would never make math something that people only started learning in university, if they showed an interest.  Why are we doing this with computer science? 

How is this different from the days where monks wrote and priests read from illuminated texts? While the masses listened enthralled.

Our progress was never dependent on how well we memorized or used the illuminated text. It was always dependent on how well we understood that text and used it to illuminate the world around us.

In the same way, our progress as a civilization is not dependent on how well we use, or even how well we make software. It’s dependent on how well we understand how it is made and how this computational thinking helps us understand the world we live in.

That’s the password to the next level.