Kid programmers?

Well, an interesting (Dutch) article was interesting enough for me to share my opinion about the topic. Commissioner Neelie Kroes suggests that all young children should start programming as soon as possible. Preferably at the same moment when they’re learning to read and write. And I like her and often agree with her opinion about these matters but this time I have some doubts.

I happen to be a “programmer” and I often compare the profession with that of carpenters. It is often quite simple but when things become more serious, you need better-trained professionals. You can give a child Lego blocks and they will build a castle with it. The same with programming. Give them a computer and teach them how to use notepad and they can create HTML and thus they can create their own web pages.

But what if they become overconfident? The carpenter child might decide to start building his own castle from wood. He would do what he did with his Lego and just starts building according to his own insights. And who knows? He might even make something very reliable. But often the result will be disappointing or even unsafe to live in. The use of the wrong materials, forgetting to add a door or window, forgetting to make things fireproof… There are many mistakes that even professional carpenters will make, but those kids are more likely to make them. They need a lot more training if they ever want to build their own house that way.

The same is true with programming. Anyone who is literate can learn to write programs. You just learn the proper syntax, the proper programming language and you start programming. And it will be fine for simple things like a personal website. But when they start thinking they can make some professional websites, a lot of things can go wrong because they’re not trained enough, they they have too much confidence in their skills because they were at the top of their programming class. They should be good programmers, right?

In my experience, knowing a programming language is not enough. Actually, the language doesn’t even matter that much. A good programmer knows how things work together, and knows what the risks are. Just like a good carpenter knows which type of wood and other materials to use, so does a good programmer.

You should first start thinking about what you want to make. Start designing it, documenting your wishes and often just work with pen and paper to get the proper idea and to list all your requirements. If you do this behind the computer, the computer might actually distract you too much into doing other things. (For example, you might already start writing code!) Don’t start writing code in this phase! You need a first design, no matter how simple it is.

The next step is making a risk analysis and specifying all the tasks that your design will perform. The risk analysis is important because your website will be attacked. You need to know how secure your site should be, considering the visitors it gets and the content that is on your site. You need to decide which server to use, which operating system, which hosting solution and most importantly: who will have access to which specific parts.

The tasks are important too, because they will relate to your visitor. Visitors will have specific roles and with every role there are a few tasks that can be executed. Some tasks can be done by everyone while other tasks require the user to log in. And some tasks will require the user to be part of the moderator or administrator role. You still have to think about this before you write a single line of code. Yet most inexperienced programmers have probably started to write their code at this point.

The next step is choosing the proper development environment and setting up environments for development, testing and (pre)production. This too is often forgotten, mostly because most programmers will just stick to the development that they know already. Not many C# developers would pick C++ with Eclipse on a Linux system to write their code. Yet any experienced programmer should not have many problems with this switch. If it provides the best solution then use it!

And now you can start writing code, designing the web pages and doing the fun parts of programming. And this is where I expect schools will fail. They probably start with the fun part so they teach those kids to start writing code before having taken the previous steps. Those kids will grow up and probably continue to work that way when they’re becoming more professional. They would then have to learn to slow down and start with the steps I’ve mentioned. And if they happen to work for a company that has more experienced programmers then they will indeed adjust and become very good programmers.

But our society is making people more independent and these young programmers might decide to start their own companies or start working freelance. The lack of insight in proper developer rules will hurt their career because their employers are likely receiving bad results from programmers who work too hastily. I’ve seen a few projects fail simply because the programmer did not think properly about the design. Fail enough times and no one will hire you.

So while teaching young kids to program seems to be a good idea, I fear it will generate a lot of bad programmers who think they’re good at what they’re doing. The result will be that a lot of bad projects will be published, like bad carpenters will produce a lot of bad furniture. But is this my biggest fear? Nope…

My biggest fear involves security. Good programmers start with thinking about security from the start. As I said, do a risk analysis and decide upon how to manage users, roles and anything related to this. Security always tend to be counter-productive but it’s like a log cabin with opening instead of a door and windows. Will children learn about from the start? Will they keep in mind that now everyone should have access to some more important functions? Will they realise that there are “bad people” out there who just want to destroy their work?

Just like the little boy making a sand castle at the beach, only to see a bully stomp it back into the beach, so are hackers destroying web sites made by those who don’t know how to protect them. Do they also learn about those bullies and how do you prevent these kids from becoming bullies (hackers) themselves? Because by teaching children to program, you also teach them how other programs work and that helps if you want to get access to those programs.

Already teens are using twitter, Facebook and 4chan to post bomb threads, announce their plans of killing people and to post nude selfies of themselves and their friends. The Internet is full with teens doing bad things online and teaching them to program teaches them to become better at that, too. Learning them to program will make it easier to find top talent amongst them but not all will be top programmers. Some will be top hackers. It’s a double-edged sword, cutting both ways.

Teaching children to program can be fun if they just learn to program devices. For example, Logo would be great for them, since they would learn how to program a computer to make interesting drawings. There’s this nice Interpreter for them to learn so all they need is a web browser that can handle HTML5. It could also be interesting to teach them about Arduino boards with additional hardware so they can make simple robots and learn programming using C++. But please avoid children making web applications because that is way more serious. It will expose them to hackers who will try and destroy their work. It will expose them to some influences that they might not be ready for at that moment.

So, I am in favor of children learning the proper way of programming and allowing them to start with small, simple things at first. Preferably things that are not on the Internet. The Internet is really a more adult environment, like a busy highway. Without proper supervision and guidance, things could go horribly wrong.

For example, your child might see her site replaced by a video of the beheading of some prisoner by some terrorist organisation. Or she notices a banner on their site leading to hardcore porn sites including bestiality and gangbanging. Hackers can and will do such things if they get a chance.