« Smerity.com

No magic: why everyone should program

In recent years I've been part of two programs that aims to teach any interested student to program. This was well before the "everybody should learn programming" meme. In fact, NCSS had already begun (under a different name) before I was born. So will I listen to Jeff Atwood's plea to stop telling people to learn programming? No.

Why learn to program if not to program?

Jeff Atwood seems to indicate the only reason one should learn to code is to enter into it as a profession. I don't think that.

Most of the students I help teach won't become professional programmers. This is not a failure however as all of them end up with a far greater understanding of computers and programming.

They know when a task should be automated.
They know when a task can't be accomplished by a computer.
The computer is no longer magic to them.

Think of all the problems you've had as a programmer.
Now think of how many of those could have been lessened if people had a better understanding of what's happening rather than trying to remember the incantation you just recited.

Advances in many fields have come by harnessing the power that computing provides. This is why teaching everyone to program, and thus to understand where programming can be used, is important.

What are these programmes and why do they work?

The two programmes I've been involved with are National Computer Science School (NCSS) and INFO1903, both at the University of Sydney. Whilst both these initiatives focus on teaching high school or university students to program, there's no reason this can't be applied to more established domain experts as well. NCSS accepts IT teachers who refresh their knowledge on programming. INFO1903 has introduced to older non-comp-sci professors and interested students from industry.

Note:  Over the years I've helped both NCSS and INFO1903 as a tutor however I don't speak in an official capacity.

NCSS aims to give high school students a first taste of programming -- if they don't know how to program, they learn to build a simple search engine, CMS or social network in less than 10 days. If they do know how to program, it'll be the first time they're introduced to more diverse topics such as asymptotic complexity, parsing and compiling.

Would I suggest you deploy the code they end up producing live to the Internet? No (though some have with extra help from the tutors). We do teach them about SQL exploits, XSS attacks and so on -- but the point is not to end up with a working product.

The point is to introduce them to programming. To give them the ability to communicate about computer software in a knowledgeable manner.

INFO1903 aims to introduce first year Sydney University students to programming, covering a wide range of topics: the Unix command line, data mangling, Python programming and SQL databases.

Everything a scientist needs to know in order to compute their results using machines instead calculators.

Do you really want to see a future where people still think computers are magic?