There's a scene in the film "Happy Gilmore" where the eponymous Mr. Gilmore, having discovered by surprise a talent within himself to hit a golf ball infeasibly far, is reluctantly entering a tournament.
"Hi I'm a hockey player but I'm playing golf today."
This about sums up how I've felt ever since I started working professionally in software.
When I was quite young, I received a gift. I can't remember whether it was a birthday or a Christmas present, or who gave it to me. It was a "30-in-1 electronics project lab", the first of many such toys. I loved electronics from that moment onwards, my passion only briefly tempered by a four year degree in electronic and electrical engineering which almost managed to suck the fun out of it.
Two or three years after that, I received another gift, this time from a family friend. It was a Sinclair ZX Spectrum with 48K of RAM, and it came with a book. The cover depicted a beautiful deep orange sky, the sun peeking through some clouds, and a kind of abstract cityscape floating above it. The title was "ZX SPECTRUM BASIC programming" and it was the first of many, many software books I would read over what has become a more than twenty year career in an industry I never expected to find myself in.
As far as programming languages go, BASIC was my first love. She wasn't the prettiest language, neither was she that well thought of by others, and after a while it became apparent that the relationship wouldn't last forever, but boy did we have fun while it lasted!
My first job in software was when I was 16 years old. I worked every Saturday for a small local company, contributing to the codebase of a client/server application written in Microsoft Visual Basic. I didn't enjoy it that much, but it gave me a little pocket money and my first experience of commercial software development. While I was there I wrote a basic substitution cipher which encrypted a license key to protect the software from being casually pirated. When the owner hired a permanent developer and the time came for him to tell me that my help on Saturdays was no longer required, I spent an awkward couple of hours carefully explaining and re-explaining to a man at least twice my age exactly how a substitution cipher worked!
My planned career as an electronic engineer was punctuated a few more times over the next few years as I moonlighted building websites in PHP but when I finally graduated I was ready to leave software development behind and get on with a real job.
I interviewed with a few different companies, in a number of different roles and, against all expectations, took a software job for a small startup company in the telecommunications sector. I thought it would be a temporary step until I found what I really wanted to do.
Except...I never did.
Instead, I thrived. First as a software developer - later a development manager - then a brief stint as a scrum master, and then a product owner. I stuck with the company for nearly ten years through two acquisitions and learned an incredible amount from some incredibly talented colleagues about how software teams tick.
When I finally decided that I had learned all I could, I made the brave leap to offer my services as a consultant. I wanted to pay back all the learning I had received by helping others build and maintain software teams in tech startups. Since that moment I've had even more fun, met and worked with even more incredible people and am proud beyond measure to have been part of so many startup journeys.
Not bad, considering I'm not really a golfer.
Who this book is for
One thing I've noticed over the last twenty years is quite how radically careers in software have changed.
When I first started out professionally, our development tools arrived on CD-ROMs in the post every few weeks. There was no GitHub or NPM or Docker Hub. Although there was a rudimentary internet, for most consumers and small businesses it wasn't fast enough to download large binaries (better to wait for those CDs in the post). Conversations between software professionals happened over email, IRC, or BBS / Usenet technology (not to mention magazines!), but it would still be over ten years before StackOverflow would allow software developers all over the world to freely and openly share knowledge on a daily basis.
In my first job after university there was this brand new thing called "Extreme Programming", which was a radically new way to approach software development, on the forefront of a growing movement which over time became known as "Agile". Despite the new wave of progressiveness, I still got my job because my employer was only considering applicants from the top two technical universities in the country. Software development was apparently an exclusive profession.
A friend of mine who is a bit older than me and used to work in the software industry told me that when he was hired, his company (an insurance firm) only hired Oxford and Cambridge graduates, and specifically not those who had studied Computer Science, which was apparently considered too vocational. He had a Classics degree (the study of Greek and Roman literature) from Cambridge.
Today the tables are turned. Software powers every imaginable part of our lives. Most of us walk around with at least one smartphone permanently in our hand - often with another in our pocket or bag. Recent estimates suggest that the Internet uses over 10% of the total power consumption of the planet. Demand for people to write and maintain software has never been higher, and it's hard to imagine this situation reversing any time soon. Instead of picking from a select pool of Oxbridge Classicists, companies are falling over themselves to find developers as soon as they hit the job market. Organisations calling themselves "bootcamps" have been set up, promising that a three month intensive course is all that stands between an aspiring developer and the kind of salary it took me years to gain enough experience to earn. People in their thirties, forties or older are deciding that now is the time to retrain, sometimes borrowing substantially to fund their career change. Recruiters are falling over themselves to get in on the race to hire. Big companies like Google and Facebook steal away the most intelligent and ambitious with eye-watering compensation packages. It is - in short - not a bad time to be a developer.
But although the sun may be shining now, not everyone is making hay. Although the supply/demand equation might currently be out of whack, it will eventually rebalance, and when it does we'll be left with the same problem we had when this whole crazy rollercoaster started running down the track - producing and selling software is hard. Really, really hard. If one developer can build one small software program in one month, how many months will it take one hundred software developers to build one giant software system for a company whose increasingly spoiled users are constantly demanding new features, whose competitors are constantly finding new ways to undermine it, whose developers are constantly being tempted away by the next cool technology at the next cool company...
Sooner or later, the dust will settle, and hiring companies will be able to discriminate once more. In a market now oversaturated with overpaid and underqualified developers, the ones who were making hay all this time, honing their skills, pushing their limits and building their professional profiles - these savvy professionals will find themselves calling the shots. The others will be left behind.
If this sounds bleak, I don't mean it to. I think this wave of optimism, this incredible surge of interest in development skills, this levelling of the old playing field is a wonderful thing. But sometimes when the crowd rushes forwards, it's the most vulnerable who get trampled, and it would be a shame if that were to happen, because these moments of playing field levelling don't come up too often.
This book, then, is for anyone who has already taken the first step on their journey as a professional software developer and cares about the next one...
Whether you've gone through a bootcamp, or just graduated; or perhaps you've been working for a few years but are getting worried you're not growing...
If you already know your
ifs from your
whiles and your Reacts from your Angulars; but now everyone's talking about Elm and Rust and you don't have a clue what they're on about...
Or maybe you've been interviewing for that new job but you keep getting turned down and can't figure out what you're missing...
Take it from someone who's been around the block a few times: every company says they want developers, but they don't. Anyone can call themselves a developer now. Companies want people who are more than developers, they want people who are part-engineer, part-product manager, part-UI designer, part-tester, part-entrepreneur, part-consultant, part-architect, part-visionary. In short, they want un-developers.
I'm going to show you how to be one.