Testing: The Art & Science Asking Questions

 

enhanced-buzz-30755-1393521047-12.jpg

Why are we so keen to ‘get the answer’ and not ‘ask the question’?

I’ve been told, for most of my learning life, that I will be rewarded with gold stars and good jobs if I can answer questions.

All my life I have learnt to pass tests; spelling tests, maths tests, GCSEs, A-Levels then finals at Uni.

Life is geared towards ‘getting the answer’ – few of us think to ask whether the question being asked is the right question to ask and hence worth answering.

There are no gold stars awarded for opening your exam paper and writing 10 alternative new questions then answering those instead.

enhanced-buzz-1766-1320788504-9.jpg

 

enhanced-buzz-29239-1320788651-9.jpg

In fact, you’d probably get a big fat FAIL.

enhanced-buzz-18339-1320787267-115.jpg

And so, whilst we’re all pretty good at deploying our knowledge to answer questions, most of us are shit at asking good questions. We kind of skip to the ‘important’ bit where you answer the question and get the gold star.

However, the art of asking the right questions (a.k.a “Testing”) is just as skilful, if not more, than answering questions. As these exam answers show – there’s a lot of room for misinterpretation.

enhanced-buzz-23347-1431370121-7

enhanced-buzz-18339-1320787242-113.jpg

 

There’s even more room for misinterpretation when you’re testing a computer.

Coding is a bit like trying to direct a blindfolded person with a very very limited vocabulary, who is standing in a different room to where you are standing, to a sit on a chair that neither of you can see. You’re trying to speak to them in a language you don’t really understand and all you have is a vague map of the room next door, but you don’t even know if you’re holding the map the right way up and you might be having trouble understanding what the symbols on the map mean.

This is why you need tests.

To test if you’ve got the map the right way up.

To test if your blindfolded person heard you, then understood you when you asked them to move right.

To check they actually moved right.

To check didn’t walk into the wall in the process of moving right (if they had you might have had the map the wrong way up…).

To check that, in the end, the person ends up sitting on a chair and not a beanbag.

It’s kinda like something from the Crystal Maze. Wow, what a show. I hope it comes back soon.

hqdefault.jpgimgres.jpg

Coders are Testaholics.

They have entire theories and concrete working practices for testing your code to find out if it’s doing the right thing.

They have banter about testing code.

They have programs with mental names that you can use to test your code.

Screen Shot 2016-01-19 at 17.51.19.png

(I took the screen shot above from here – honestly, this is what it said. It made me hungry until I remembered that I don’t like rabbit food, which cucumbers, gherkins and spinach undoubtedly are.)

They get high off green lettering.

Red lettering negatively impacts their mood.

n08A8NO.jpg

When you learn to code, developers’ intense focus on testing can be super counter-intuitive.

Like, really fucking odd.

Not only have you been taught for most of your learning life that getting the answer is more important than asking the right questions, but also, when you first start coding you write code in a way that is totally unaware of testing.

You’ll probably have more flow, writing one-liners of method piled onto method that get you to your answer. Stuff like this:

 

string.split("").each {|x| x*2}.join(" ") 

Writing code will make you feel like you’re being a bit of a whizz when it passes when you run your program from the command line to…

… test it.

So, actually, you have been testing stuff already, you just didn’t realise it.

When you run your program from the command line, you are actually testing whether it is ‘behaving itself’. You know, playing ball…

BDD (Behaviour Driven Development)

This is when you test that your program behaves in the way it is expected to. This is the ‘above the hood’ stuff – like when you flick a light switch, the light turns on.

Tests that do this are called ‘Feature Tests’ or ‘Acceptance Tests’. They’re kinda results-driven. A sort of, “if I put in x will I get out y?” scenario – they’re less concerned with how x became y. Some nutters might call it testing the “outside” of the program, because you’re not testing the stuff ‘under the hood’, but just the stuff that a user can interact with.

I’m not convinced programs can have outsides when they exist inside computers.

When you start out, you’ll probably run these through IRB (Interactive RuBy shell – this is a ‘REPL’, Read Evaluate, Print and Loop ThingyMcbobbin that allows you to run your programming script more than once and feed in different commands.)

What you’re probably less familiar with is…

TDD (Test Driven Development)

This is when you test all the little tiny weeny steps that need to take place to get the program to behave in the right way. This is all the ‘under the hood’ stuff. This is like checking to see if the lightbulb’s filament has gone, or the wire coming out of the lightbulb hasn’t been chewed by the cat, or that the switch has been wired up correctly.

Tests that do this are called ‘unit’ tests. They’re kinda process-driven. They’re more interested in breaking down everything into tiny weeny steps to see if the steps were carried out as expected. They’re more interested in the route between x and y.

The point of this is that you can pinpoint exactly where things have gone wrong. It’s about identifying the weak link in the computer’s chain of command. It’s apparently super helpful to real developers and saves a lot of time when it comes to fixing bugs later on.

Imagine if a customer came to you and said “the lightbulb isn’t turning on” and you had no idea about how lightbulbs worked, or electricity worked, or how a switch worked. You wouldn’t be able to sort it out at all and would probably just end up bashing away at the switch angrily.

Unit testing is the most counterintuitive of all testing.

Why?

  • Because it’s so slow. So painfully slow. So unbelievably myopic and time consuming. Every little goddam thing needs to be tested. EVERYTHING. For somebody with ADHD, this is so freaking painful. LET ME WRITE PROPER CODE ALREADY! It’s forensic, it’s iterative, and it can be really frustrating because…
  • If you don’t know what your code is doing in absolute detail, you don’t know how to test it.
  • Rspec, the language used to write ‘tests’ that you run your code through, is written in a bastardised form of Ruby that is similar enough to lull you into a false sense of security about writing and reading it, but different enough to thoroughly screw with your head. Because of this, you’ll trust the code you’re meant to be testing more than the tests that are meant to make you trust your code more. Which makes you seriously question the whole notion of testing.

(I’ll come back to Rspec another day in more detail as I’m still not 100% confident with it and I haven’t thought of a nifty way to philosophize around it to make it more digestible.)

enhanced-26861-1446781535-1.png

But, the biggest headfuckery is writing the test first.

You have to write a test then make the code pass it.

You must fight all of your instincts and years of learning how to answer questions and say: NO! NO! I WILL NOT ANSWER THE QUESTION.

I WILL ASK THE RIGHT QUESTION.

Which is problematic, because you’re asking a question in a similar but different language to the language that you’ll use to answer it in your script code.

Ok. Let’s try this:

describe IHateRspec do

      it { is_expected.to respond_to(:brainmelt)}

end

You are meant to write the absolute minimal to get the Rspec test to pass. THE MINIMAL.

No racing ahead with the answer. No. You must stop.

class IHateRspec 

  def braimnelt
     puts "It hurts, it hurts" 
  end 
end 

Run Rspec from the command line.

RED? WTF?

I know my code is right. All I did was define a method. I didn’t even write the method.

I DIDN’T EVEN WRITE THE METHOD.

You start messing about with your rspec, which you assume is the culprit.

 

 

(2 hours pass)

 

 

Why can’t there be a test to test your tests?

 

 

(2 hours pass, you miss lunch)

 

 

Or perhaps your code is wrong.

(10 seconds pass)

Oh.

Typo in my code.

Goddamit.

 

 

 

Learning to code is like… London Transport

London.gif

Remember the dark old days before CityMapper and GoogleMaps?

Those days when your parents would warn of the perils of not taking a A-Z map in the car with you.

Those days when, before you would leave somebody’s house, there would be a lengthy discussion about which route would be the best to take on your journey home. These discussions could last anything up to 30 minutes, because, of course, whatever route you took to get there wouldn’t ever be the route they would take.

Those days when people took pride in knowing the best route without having to look it up and would laugh at tourists for standing gormlessly in front of the station tube map, frantically counting little notches between ‘here’ and ‘there’.

Those days when pretty much everybody would carry some form of tube map with them at all times but pretend they knew the tube map like the back of their hands, because they’re a “Londoner” and their DNA is composed of the Jubilee line helixed around the Northern line.

Those nights when you actually had to look at the letters atop of a bus stop pole.

Those days when you remembered street names and addresses and post-codes only seemed relevant when, well, you posted something.

Those days when people told anecdotes about getting lost.

Those days when you could use ‘getting lost’ as a failsafe excuse for being late.

Remember those dark old days?

Nobody gets lost any more.

Nobody.

Well, people who don’t know how to operate a smartphone may still get lost. But hey, they’re probably the kinds of people who like getting lost – the kinds who travel to Inner Mongolia specifically to ‘lose themselves’. People like Bear Grylls.

3-IMGP1346.jpg

For most of us, there is a certain fear of getting lost. It makes us anxious.

leaving-columbus-5.gif

Why?

When you’re lost you’re not in control. When you’re not in control, you’re at the mercy of ‘greater forces’ around you. When you have no say over how to get from A to B, the uncertainty of whether you’ll ever get to B can be a bit daunting.

Although people don’t get lost anymore, as is usually the case, something important has been lost in the name of so-called “technological progress” (and if you can’t identify what’s been lost, just demo whatever technology it is to your (grand)parents).

With the birth of GPS technology came the death of navigating uncertainty skilfully. 

Learning to code is all about navigating uncertainty.

When you start out, you don’t know anything. You don’t even know how to know more because you don’t know what you don’t know.

It’s all unknown unknowns and error messages at the beginning.

So here’s the tortured metaphor.

Imagine you don’t have a smart phone and you’ve moved to London.

The first day you’ll learn the route to your nearest shop. You need to eat, so you’ll figure this out.

The next week you’ll figure out the tube route to work and a few nearby eateries. You probably won’t know what’s en route to work, you just know this isolated ‘city island’ or ‘urban village’ cut off somewhere North, East, South or West to where you live.

At some point in the week after, your born-and-bred Londoner friend invites you for a drink. You get the tube there and you mosey around a bit. You have a mental picture of another isolated island somewhere in London, this time near to where your friend lives.

One day you get drunk and lose your Oyster card. You are forced to walk home from the pub near your work. You’re terrified because you don’t know the route, but you’ve lost your wallet so you can’t take a taxi (you may have also lost your job at this point if you’ve been this sloppy drunk whilst at a work pub-session just a few weeks after you started).

tumblr_mutt9ucK1V1r6ddxco1_500.gif

You ask people around you for directions, listening carefully to the sequences of lefts and rights interspersed with names of key landmarks and tube stops that they hope will orientate you. You walk past where you went for a drink with your friend the other night. You walk past a tall building that you can see from your house. You then realise you’ve been paying £5 a day to get a tube to get to work, when in fact, it’s a rather pleasant 30 minute walk.

No need for Uber trips like this anymore…

url-1.jpg

Because, all of a sudden, London doesn’t seem quite so big and scary.

Over the next few months you realise, the more you explore, the more you let go of your map, the more you trust you are walking in vaguely the right direction, the more you look for landmarks you recognise and attempt to join the gaps between A to B, the smaller and smaller London seems to get.

This is like learning to Code because…

‘The Knowledge’ is just for Cabbies.

images-1.jpg

If you get bogged down in having to memorise the entire map the more you realise that you simply can’t know all the street names in London.

Nobody expects you to know the entire Ruby Docs inside out and back to front. They just need you to be able to navigate between key terms and concepts, like navigating between key landmarks.

Some people may know the docs inside out and back to front. This is probably because they write/update it. A lot of it is specialist knowledge.

Trusting your sense of direction is vital.

Having a sense of direction, and, more importantly, faith in that sense of direction is vital.

This doesn’t mean that you ignore other people’s directions if you ask for them, but it does mean that if you don’t know all the street names they’re referring to, you pay close attention to them gesturing left/right or giving you distances between landmarks.

More importantly, you should trust that you’ll eventually get there. With this comes recognising that…

Getting lost can be productive.

If you become reliant on the tube route and never stray from it you’ll never learn faster ways of getting your code to process something from A to B.

Explore and experiment without fear of ‘getting lost’. Be a little bit curious. After all it’s just a computer. It’s not like you’re experimenting with open heart surgery.

Sometimes finding a way out of being lost is more productive than never getting lost in the first place.

url-2.jpg

You’ll join up points in your ‘code knowledge map’ when you accidentally wander off piste.

One day you’ll be the one giving directions.

And you’ll know how difficult it was for you when you were drunk, penniless and lost.

So be kind on the ignoramus Tourists.

Jargon

tumblr_m7l6z2h67h1r9i9jlo1_250.gif

Jargon: The biggest barrier to entry into code-land.

Like not speaking French : The biggest barrier to entry to living in France.

Here’s a Slack conversation I had with my mentor at Makers Academy this week:

Me: “I don’t understand, something seems to have gone wrong. There’s an error: blah blah Fixnum coerced blah blah…”

Actual Coder: “What’s your terminal stack trace saying?”

Me: * Googles terminal stack trace *

Wikipedia: “In computing, a stack trace (also called stack backtrace[1] or stack traceback[2]) is a report of the active stack frames at a certain point in time during the execution of a program. When a program is run, memory is often dynamically allocated in two places; the stack and the heap. Memory is contiguously allocated on a stack but not on a heap, thus reflective of their names. Stack also refers to a programming construct, thus to differentiate it, this stack is referred as the program’s runtime stack. Technically, once a block of memory has been allocated on the stack, it cannot be easily removed as there can be other blocks of memory that were allocated before it. Each time a function is called in a program, a block of memory is allocated on top of the runtime stack called the activation record. At a high level, an activation record allocates memory for the function’s parameters and local variables declared in the function.”

Me: * Mutters to self, rummages for pen and paper, draws a diagram with a box labelled stack and a box labelled heap *

Actual Coder: “Dude, what’s your stack trace saying?”

Me: “What’s a stack trace? The thing in my terminal window box thingy is saying I have a problem with Fixnum coercion. Does that mean there’s a problem with my stack trace?”

Actual Coder: * Sigh * “Those are the error messages in the terminal when you try to run code that has errors. Usually the main errors are Standard Error runtime error type error no method error initialised constant error.”

Me: “Oh. So I haven’t got anything wrong with my stack trace. My stack trace tells me what’s wrong.”

Me: “So what’s a “Standard error runtime error type error no method error initialised constant error?” Sounds pretty serious to me. Is that what I’ve got?”

Actual Coder:

tumblr_nprfcfY4pn1sap6dio2_500.gif

 

And this is why jargon is the biggest barrier to entry to learning how to code.

Because Jargon is code.

Jargon is just code about code.

Therefore, to learn to code, you need to learn the code used to talk about code.

2d60037a5d6c010e339b6b3b50d6add5.gif

I used to think that people who use jargon were mean or wanted to sound clever, that it was some sort of deliberate and malicious attempt to confuse, obfuscate and generally hinder my ability to understand what the hell is going on.

It used to be like this in advertising, where people would use jargon in boardrooms to protect their own personal “knowledge = power” equation. Jargon plays a powerful role in Adland when it comes to office politics.

It’s a way of shutting people out who they don’t want to know what they’re talking about in an ‘important conversation’ – A bit like how parents might spell out swear words when there are kiddy-winks around.

Conversely and confusingly, it is used by people who don’t know what they’re talking about when they want to give off the impression they know what they’re talking about.

07_summer.gif

It mainly came in the form of TLA’s (Three Letter Acronyms) and buzzwords.

“Can I get that wash-up by EOP today. I need key metrics like the PPC’s CPP and the CTR. We can find out the ROMI from that – that’s what the client is interested in anyway. Might be good to compare these with OOH figures. Inbox the deck to me.”

HUH?

I got so annoyed with buzzwords and jargon in Adland that I wrote a blog each week ripping into the buzzwords in a satisfyingly passive-aggressive manner. I wrote an article about a chosen buzzword, then put in blanks every time I used it. It got quite a bit of traction in it’s day.

At least in Code-land, unlike in Adland, the jargon is, well, freaking hilarious. There are some truly ridiculous words and phrases that get brandished around in all sincerity. I mean, ‘git commit’? Sounds like an order that a 35 year old unmarried woman says to her long-term boyfriend who still goes on ‘lads nights outs’.

But this isn’t the only difference between Adland jargon and Code-land lingo.

In Code-land jargon plays a very different role.  Although it seems downright unhelpful to ask what (you think) is a simple question about the code you’re struggling with and be answered in gobble-di-gook, it’s not because there’s some sort of conspiracy to prevent you from understanding what is going on.

There’s a very good reason so much jargon exists in Code-land.

It is this:

Code-land simply wouldn’t exist without jargon.

Let me explain:

Newness

At university, during my Art History degree, I got quite in to a branch of philosophy called Semiotics – the study of signs. Words are just signs that ‘point’ to concepts, just like in coding ‘variables’ are just words you give to things you want to refer to again.

my_age = 24

your_age = 33

age_difference = your_age – my_age

Here my_age just points to the number 24. Like your_age points to the number 33. Therefore age_difference points to 33 – 24.

Every time you want to ‘make’ something new, you have to give it a name. A new one usually.

logic.jpg

Makers Academy’ : The clue is in the name.

Computer programmers MAKE stuff. Every time they MAKE something they have to give it a name. This name is what you and I might call JARGON.

Abstract Concepts

Jargon is vital in Code-land because otherwise we would have to re-explain whatever mind-bendingly abstract concept we were trying to talk about every time we wanted to refer to it.

Code is the most abstract thing you can do. Even more abstract than a Pollock.

How the hell am I meant to explain what a ‘String’ is and does every time I want to make / use one?

Take 1 – Imaginary conversation with somebody I’m programming with:

Me: “So we need to basically tell that 6 figure number that we want to pretend it’s not a number for a bit, tell it to act more like a word or like a quote or something, so we can repeat it 3 times rather than getting the 6 figure number multiplied by 3.”

Actual Coder: “HUH?”

Take 2 – Imaginary conversation with somebody I’m programming with:

Actual Coder: “Hey, we probably need to convert that 6 figure number into a String so we can repeat it six times.”

Me: “Cool.”

Me: “What’s a String?”

Actual Coder: * Sigh *

Me: “Kidding.”

Me: * Googles ‘String’ quietly *

 

Clarity over Tools

Programs are just tools. You have to give each one a different name because they all do something ever slightly so different.

If you asked me to chuck you the “dust-cleaner-mcthingymcbobbin” and you were expecting a dust pan and brush, you might be a bit annoyed if I picked up a vacuum cleaner and threw it at you. Names help you to be specific.

henry-hoover-o.gif

Nobody had come up with a icloud-cross-linkedin-cross-googledocs for coders to upload their code onto for others to see and work on with them.

Until they did.

When they did, they called it ‘GitHub’. Not ‘iCloud for coders’. They called the files you had linked to ‘the cloud’ repositories (or repos). They called ‘saving’ ‘commits’. They called ‘uploading’ to the cloud ‘push’ and downloading ‘pull’.

Why?

You might need to talk about both uploading and pushing in the same sentence.

And boom. You have spawned a whole dictionary of jargon in order to ensure the things your iCloud for coders does don’t get confused with your standard iCloud features (like upload or download).

How to cope with jargon

adventure-time-dude-sucking-is-the-first-step-towards-being-sorta-good-at-something.gif

Swallow your pride.

Just say you don’t have a clue. Nobody cares how stupid you look whilst you’re still learning. Those who care don’t matter, and those who matter don’t care.

Don’t follow wikipedia around for the myopic ins-and-outs of the jargon you’re looking up.

If you need more detail, it will surface at some point in the future.

Try and translate the concepts that the jargon is dealing with into concepts you know and understand by using analogies.

Have a few favourite go-to analogy topics. Like football. Football can be used to explain almost anything. These analogies/metaphors may be really tortured at first, but then just explaining it to yourself in terms of football might make you realise that actually it might be better to explain to yourself in terms of gardening, or baking or something.

Laugh at them.

Sticks and stones may break my bones, but words will never hurt me.

smirk.gif

 

Preconceptions

“Never assume. It makes an ASS out of U and Me”

– Anon

Screen Shot 2015-12-30 at 15.43.28.png

Most people will tell you that preconceptions, prejudices, assumptions and biases are totally not cool. I prefer to think of them as educated and imaginative guesswork and part of a system of trial and error.

Assumptions enable you to make quick ‘near enough’ decisions when lacking the time to collate the necessary information to make a fully informed decision.

When I decided that I’d learn to code at Makers Academy, I relied on assumption and preconceived notions (coupled with a hefty dose of idealism and imagination) of what it would be like to be a computer programmer. After all, I had never been a computer programmer, so how could my decision to spend all my savings and the next four months of my life learning to do something I’d never done before be anything other than an ‘uninformed’ decision?

Here’s a post-rationalised list of the assumptions and preconceived notions I had of coding that informed my uninformed decision.

What coding is:

Everywhere.

Pretty much everybody has come into contact with something that has been programmed.

Magic.

Nobody seems to know how computers work. That I can access any information in the palm of my hand, whilst remaining entirely ignorant as to how and why, is pure wizardry.

Difficult.

Get your head around this.

You tap a small silver box with a black ‘U’ on your iphone, then tap a box labelled ‘set pick up location’ hovering above a map with a blue dot signifying exactly where you are and tap where you want to go on that map, then, within minutes, a nice person arrives in their new smelling immaculate car at exactly the point where you are standing to drop you off at exactly the point where you tapped on the map, then departs without having to ask you for directions or even money.

Imagine understanding how that worked.

Then imagine being the person that made that work.

I can imagine that’s what being a genius feels like.

When coders say “anybody can code”, this reads to me like a well-intentioned humble-brag. It’s well intentioned because it keeps the dream alive, reminding us that it’s not impossible. But at the same time, if it were actually easy then saying “everyone can code” would literally go without saying. Nobody would say “everyone can code” if it really were that obviously true – it would be like saying “everyone can breathe.”

Therefore coding is difficult, challenging and thus rewarding.

Objective.

Whilst few know precisely how their computers, iphones or PS4’s work, even fewer care – until the moment they cease to work. The programme either does what it’s meant to do, or it doesn’t. It either works or it doesn’t. The Uber driver either arrives at the right place, or he doesn’t.

Feedback is vital in ascertaining whether you have been successful at something. If you’re a performer, feedback comes in the form of applause. As a programmer, your code works or it doesn’t. And you know straight away.

One word: Dopamine.

Meritocratic.

In most other careers, success is based on being subjectively good at your job. Objective feedback is rare. Many succeed through navigating office politics seamlessly – which, don’t get me wrong, is a skill in it’s own right, but just not one I find as rewarding to develop. I can play politics, but it just feels a bit false.

Your computer doesn’t not like you if you don’t listen to the right music, or if you’re a smoker, or chew too loudly when you eat. It only likes you if you get the code right. Your boss will like you, first and foremost, if you get the code to work efficiently. Your boss may also like you if you laugh at their jokes, but, for some reason this feels less important for a programmer.

I feel that people accept that programmers might get along better with computers than real people – it seems to come with the job.  I only know two programmers, and this seems to be the main reason they like their jobs. They say there are some politics, but usually, when you’re one of the few with the pre-requisite knowledge to make things actually happen, people prize your knowledge over and above your personality.

I’ve sat in appraisals where my worth to the company has been based on pretty much everything other than my tangible achievements. Although they say “don’t take this personally”, given the lack of objective reasoning as to your contribution to a team, you can only ever take it personally.

In the rare occasion of your value to a company being more objectively assessed, it can feel like success is pretty much luck. Let’s face it, there is no exact science to knowing why people might buy one book over another, or why some people like some music and not others, or why some people believe renationalising the railways is a good idea and not others. You never really know why you’ve succeeded in doing your job ‘better’ because you don’t really know how much you, doing your job, has contributed to whatever metric of success you are being measured against.

You know if you’re getting better at programming because you can make more complicated things work, more efficiently, faster. And the computer will tell you. With no bias.

The better you get at programming, the more languages you can programme in, the more problems you solve, the more efficiently you solve them, then the more you’re worth and the more responsibility and money you’ll earn.

Who codes:

An insider club.

Coding feels like an insiders club. They have insider jokes (which I’ll dedicate a bit of my blog to, because they are just so brilliantly esoteric) and insider knowledge that bonds them together. They’ve connected across time-zones and continents, forming a tightly knit community with it’s own quirks and charms born from a common insatiable desire to solve problems.

Collaborators.

They use their own time and expertise to help others master coding, most of whom they’ve never met and will never meet, for free and for fun

They spend hours trawling through StackOverflow to answer other coders’ questions. I’ve never seen a troll on StackOverflow.

They make coding puzzles for other peoples’ enjoyment – www.codewars.com being my favourite.

They helpfully point out bugs, they collaborate on open source projects.

They make websites that they’ve clearly spent hours and hours working on to help people learn to code FOR FREE. https://rubymonk.com/  or https://www.codecademy.com/ or http://learnrubythehardway.org/

They defy the laws of behavioural and economic physics. They do all this work for free, to help other people, for free.

The humble.

Despite being an elite group of super-humans that not only understand the mysterious world of technology but actually built it, they never see themselves this way.

They are the unsung heroes behind some of man’s greatest achievements. You probably have no idea who Margaret Hamilton is – you definitely know who Neil Armstrong is. Despite being rockstars, they’re usually only ‘famous’ amongst other coders.

11825176_1603418429920793_1196420569297949286_n

There are a few reasons why only the humble can code.

  1. The more you know, the more you realise how little you know. It would be near impossible to know everything about coding, to learn every language. The more you know, the more you realise that there is much, much, much more to know. You never can feel like a know it all. You have to be happy about dealing with uncertainty and not knowing.
  2. Computers tell you ‘no’ all the time. There are no marks for ‘effort’, or ‘nearly there’ – you get nasty error messages in angry red type if you’ve screwed up. You have a man-made object telling you that you’re doing it wrong every few minutes, and you can’t dispute that it is ultimately your fault.
  3. You stand on the shoulders of giants every day. You didn’t make the Ruby coding language, you aren’t Alan Turing. You are NOTHING in comparison.

Often coders aren’t looking for fame or recognition. They just want the code to work – this is their reward.

The next generation.

I remember watching my Dad spend 45 minutes trying to send an email, muttering about how technology is meant to make things easier and angrily tapping away at his keyboard using just his index fingers.

In just a few years time, I will be like my Dad, unless I learn to code.

Coding is now being taught in schools.

There are pre-pubescent kids who have made millions from apps that they have programmed, all by themselves.

I refuse to be left behind.

Mostly men.

Women are chronically under-represented in coding. In fact, females in tech are considered such an oddity that the BBC felt compelled to make a documentary about young girls learning how to code. It was also the most patronising piece of guff I have ever watched.

I can’t see any reason why women can’t code or why this bizarre thought has even entered into discussion.

And neither can Makers Academy – which is why they give a nice discount to women taking the course. They want to make more female coders to dispel this awful myth that women can’t do it.

I’m the kind of person who will do something just because people think I can’t do it.

Bring it on.

Just Preconceptions…

At the end of my course at Makers Academy I’m going to come back to them and grade these preconceptions out of 10 for their varying levels of naivety, wishfulness and downright misguidedness.

Do let me know if I’ve got it all wrong in the comments below: