What Most Schools Don’t Teach…

Posted by & filed under , , .

iStock_000013471133XSmallIf you work in IT, you have probably by now have seen the famous video on YouTube labelled “What most schools don’t teach” — where Mark Zuckerberg, Bill Gates and a few other prominent figures are talking about how easy it is to program, and how only 10% of the USA schools teach programming. It goes on more to bombard the viewer with some scary figures about how 1,000,000 jobs or more will go unfilled because there are not enough coders — I’m guessing as a motivational message to inspire people (kids?) to start programming.

The thing is, watching the video, I cannot but cringe at the hypocrisy employed in making this video! If the purpose of this message is to increase education efforts (at school level or individually) in the programming sector, then I’d say it probably does it job — in a very lame way, but it sort of does. If however this is intended to be a call to arms for “everyone” to start programming and either change their jobs to a programming job or if they are at the beginning of their career, to set their career path to be in programming, then I’d say the message is a hypocritical one. Even worse, it is setting up the targeted audience for a harsh comedown!

Here’s the thing: the message of this video is that programming is very easy to pick and you know, most of these guys, even though we all know of them and the companies they created, they are not geniuses, it’s simply because programming is easy to pick up — and look, here’s their testimony: they started doing this since they were 12 or 13! And it only requires a few simple things too — easy-peasy!

The hypocrisy in this comes from the fact that this message is conveyed by people running organizations with probably some of the toughest criteria when it comes to recruiting their programmers! I dare anyone to turn up in Facebook having learned the basic blocks of programming (I’m talking about loops, conditionals, assignments) and see if you get past the first (phone) interview!

(Full disclosure: I have interviewed before with Google and Amazon, to name 2 of the big companies who set the standards when it comes to computing nowadays; I haven’t interviewed with Facebook — I don’t even have a Facebook account! Nor did I ever interview with Microsoft, though both Facebook and MS have approached me in the past. As it happens, I was not good enough for Google — Amazon must have thought I was ok since they made me an offer, however there were other things which prevented me from joining them at the time.)

Getting back to the original video I was talking about, I feel the message is hiding a lot from the audience. Here’s the thing, it’s easy to learn how to program — because in most cases you’ll be dealing with the same basic building blocks: loops, assignments etc. However, it’s the eternal problem about learning a (programming) language and being able to program in that language! And this video hides away the latter from the audience.

Take for instance, Java as a programming language. To “learn” it you are required to learn about 50 keywords, that’s it. After that you can say you know Java… however, you don’t! To really do something useful with that you need to get acquainted with the I/O concepts (streams, readers, etc), if you want to step into web development, you need to learn about web containers, servlets, jsp’s — the maybe step into taglib’s, spring, mvc and so on. You need to understand the inheritance model — which means you need to learn the concepts of OOP — you need to look at interfaces versus abstract classes versus classes. Then there’s unit testing and JUnit, mock objects and the likes of Mockito, database persistence layers like Hibernate, annotations or config file, maven or ant and so on? By the time you are actually able to write some code that does something useful and be able to get a project off the ground (I’m not talking “Hello world!” here!), you will find out that you need to know so many new things, that the list can be daunting! Even more, you need to keep up to date with how these frameworks and technologies are advancing, keep an eye on alternatives and switch to them if needed.

Then on top of that you need to be pretty versatile with things like design patterns, algorithms, maths and a whole lot. I agree partially with quad regarding his blog post on the same subject, he focuses his views on the maths side of things — this could be because his work in computing focuses a lot of maths modelling, or could be as I said because of the high standards of the likes of Facebook. I feel personally that’s only part of the story — and I’m focusing here on the many other things outside maths/theory that one needs to assimilate in order to be able to actually become a programmer. As I said before, simply turning up in say Google having just learned the 50 reserved keywords in Java for an interview will set you up for immediate failure. They will hammer you on algorithms and optimizing code, things that you need to study for years and try your hand at to start mastering them. You turn up for an interview in a startup for instance, they want you to be able to get code off the ground quickly — so they will focus a lot on frameworks, libraries, tools etc you have used or they need you to have used to slot right into their setup and be able to hit the ground running.

All of these which the above-mentioned video doesn’t mention whatsoever! It’s like saying: come on, it’s easy to figure out the components of car: it has 4 wheels (hopefully!), an engine, steering wheels, doors — see? it’s that easy to become an engineer and design cars and engines!

They even go to depict this “rapper lifestyle” (Will.i.am states so boldly that “coders are today’s rappers”!) where everything is given to you — but they miss out to mention that this only happens mainly in the Silicon Valley area and only for a few selected companies there! Ok, ok, there are a few exceptions in Seattle and a couple of other spots — but for most of others, you will get just a decent pay, a boring boss, deadlines that keep sliding, boring meetings and bug fixing 50-80% of the time with maybe the occasional glimpse at playing with something cool every now and then!

So if this is supposed to motivate the audience to start programming, then I’d say it paints a pretty wrong picture here, sorry! The fact that 1 million or more jobs will go unfilled doesn’t even make a strong argument, I feel: after all, 1 milion is nothing really! Think about the fact there is a yearly demand of 4+ milion retail sales people — is that justified enough so everyone hurries up in your nearest Best Buy or Safeway to apply for a job?