Matt Jones Feb 06, 2018
It was midday on the day I was meant to be skulking away from the office early to jump in the car to head to a job interview in London. I was sitting at my desk, IDE open, a sensation of terror slowly rising from my gut through my chest and into my mouth. I was looking at a small, fairly simple C# challenge on a coding website, and I was petrified. I had no idea how to even get started on the task, let alone what single thing I could do as a step towards a solution.
The interview later that day was to be a pair-programming exercise; you sit with one or two other devs from your potential new employer, you consider a task they describe and then set about working towards a solution together, all the while they are assessing your approach and way of thinking. I hadn't really done much pair-programming for my day job; my employers up until that point had never really been sold on it, and every time I had ever coded with anyone looking over my shoulder, my fingers (normal top speed of 60+ wpm) turned into frozen sausages.
I'm a self-taught dev; as a kid we always had a BBC model B/Vic 20/Spectrum machine in the house because both my parents were programmers, starting their jobs in the days when that meant arranging holes in punched tape. Lacking any kind of hand-eye coordination I never really enjoyed playing games on computers so I mainly wrote small programs. 8-bit machines became PCs; BASIC became VB6 became OOP and finally C# and .NET. I never, ever thought I'd make a living out of it, and that developing software would feed and clothe me very satisfactorily for nearly 20 years. I truly have fallen on my feet, and I am terrifically grateful for everyone who has placed trust in me despite having absolutely no qualifications for the work I do.
Not having any kind of degree, let alone at CS degree, I feel I have missed out on much of the academic approach to the subject that my formally-educated colleagues have. Without referring to a model implementation, I cannot write a binary search method, complete the tenpin bowling game TDD kata or any of the other bread-and-butter tasks you'd expect from someone with nearly 20 years in the biz. I wasn't even sure what bits, bytes, unsigned integers and floating point numbers meant until (relatively) recently. This is like a bricklayer not knowing what a trowel is, or a doctor not knowing what a bone is.
I'm also ham-strung by how learning resources have changed utterly; when I was learning on the job there was no Stackoverflow and very few online code examples. The only resources were books; great clumsy hunks of dead tree, containing wisdom that was probably correct at the time of printing, but whose subject matter evolves every single day. Nowadays, model implementations and example code is EVERYWHERE - you only have to type a few keywords of an exception message or method signature into Google, and up comes the wisdom of those kind souls who've already been there, done it and left a breadcrumb for the next traveler. This leads to an existence that feels almost parasitic; I take other people's code, adapt it to my own ends and chuck it in the pot. This isn't learning as we used to know it, and certainly it isn't personally satisfying.
That's not to say I've learned nothing over my career; I have a deep reverence for clean, simple, object-oriented code. I believe passionately that the value of quality code is not just to "MAKE COMPUTER DO STUFF" but also as a matter of courtesy to the next girl/guy who has to take it forward, or indeed to myself six months down the road. I believe TDD is the key to "just enough" development and therefore to reduce waste and Vanity Monuments. I believe learning is the only way to get to be a more confident person, let alone a developer, and as much as I want to learn from those who've been down this road before, I want to be that person for those that come after me as well.
What I need to learn is the very act of learning, not just finding. I need to practice these simple exercises and respect them as a journey, rather than dismiss the destination itself as trivial. I need to learn not to be phased or panicked or bored because I can't work it out for myself. I need to learn how to think slowly, one step at a time, and forget the rest of the complexity until we get there.