DEV Community

Dan Garland
Dan Garland

Posted on • Edited on • Originally published at dangarland.co.uk

Learn Coding to Break Your Programming

Kryten is my favourite Red Dwarf character. He's logical, collected and responsible, the sardonic guardian without whom the hapless crew would certainly fall apart.

He wasn't always the sage, scientific know-it-all, who would be called upon to devise escape plans, analyse trajectories through supernova and decipher alien technology. His first job was sanitary droid aboard the Nova 5, responsible for cleaning the ship (too much for its crew - they were killed as a consequence of his meticulous cleaning of the ship's computer with soapy water). And importantly, he was programmed to never question authority.

There is a terrific backstory behind his character, where Lister encourages Kryten to break his programming and become more generalised. Rather than just cleaning, he was inspired to try other things too; and it turns out that Kryten is as capable of handling space shuttles as he is a mop.

I relate to Kryten's character, because he tells me that I too should never accept being labelled as performing one function, nor seek to specialise in one role. As humans we are evolved to improvise in circumstances and arrive at creative solutions to problems that machines would not be able to deal with. Yet all too often I hear people talk and act like robots, who identify with one singular function, whether their job, their role as a parent, their talent or their passion.

What do you do for a living?

It would be easy to overlook Kryten's talents, if he described himself as the sanitary droid. Although when people meet a new acquaintance, they often ask: "What do you do for a living?". This notion of being identifiable from one's job is a very limited view on the plurality of human endeavour. Our job comes with a description and expectations that stem from that; and often these expectations place limits on us and what we are expected to do.

Of course, it would be unworkable for a doctor to spontaneously provide the catering at her hospital, or the caterer to spontaneously provide the surgery. When organisational politics and hierarchical management play out, our roles are constrained further. Hence our energy is channelled into performing that one role, at the expense of our creativity.

Fortunately as a coder I find that the nature of my role is considerably more pluralistic. A good web developer needs to know about marketing, accessibility, business operations, user interface design, algorithms, data design, network protocols, security, deployment, administration, automation, testing and quality assurance. If you're self-employed, add to that list accountancy, law, tax, network building, public speaking and human resources. When I consider that I work in various industries: tourism, music, health, e-commerce, law, education; and for companies big and small, learning to code was the single most important thing behind breaking my programming; turning me into an active, creative generalist. I am widening my scope and learning new things all of the time. I am making my own mistakes, and learning from those too.

Being a generalist has meant I've run a hotel business whilst running a bootcamp. I've debugged responsive CSS bugs to display the same page on a mobile or a desktop site. I've normalised data to make it more efficient to store and retrieve. I've created pipelines to deploy my website automatically when I commit to source control. I've written design patterns in Ruby to reduce code coupling between my classes. I've deployed apps in React whilst learning how it worked earlier the same day. It's hard to say therefore where my one strength lies - I'm a jack of all trades.

The Singular Role of Consumers

However I wasn't always trying my hand at new things. I was schooled and brought up to accept the role of a consumer. The extent of my economic participation was simply to choose products and services, and sell my time to earn wages in order to pay for them. A consumer is necessarily passive; because rather than envisaging and creating our own products and services, we can only choose from what is there already, or make very narrow personalisation choices. Think of choosing a colour of an iPhone, its background image, its ringtone - ultimately you're still consuming the same product.

If we limit ourselves to the role of a consumer, accept everything as we find it, and neglect to develop our creative sides, we are the sanitary droid aboard the Nova 5. We need to learn to code to break our programming!

To learn coding is to suddenly find the ability to create products and services that didn't exist, with ostensibly little or no barrier to entry, other than some cheap hardware, or any limitations (in the case of Open Source software). The LEAN methodology promotes starting a skeleton business, allowing you to test ideas before putting more time and energy into them. You can write software that generates personalised, data-driven webpages for your customers, allowing you to grow without hiring staff, machinery or premises.

In this way, coding is an opportunity to move beyond our passive role as consumers and to try our hand at producing products and services ourselves.

The Price of Creativity

If you Google for long enough on this topic, you'll doubtless fall into one of the clickbait A-B tests of the redoubtable Tim Ferris, who for many is a paragon of the LEAN business approach and globalisation. In his book The 4 Hour Work Week, he reveals how to outsource all non-essential aspects of life, focussing on the most important 20% of tasks. He achieves this mainly by delegating tasks to offshore workers in developing countries, who work for less pay then he does. In this way, he only focusses on those important tasks that promote his business, and delegates everything else. Given the vast inequality in incomes globally, it's cost-effective to outsource all manner of day to day tasks, and he even cites the example of tasking an outsourcing firm to send personal messages to his girlfriend.

Quite apart from the dubious ethics of this, the idea that pricing our time and delegating every task that is 'beneath us' is also short-termist and anti-creative; because we rob ourselves of a chance to learn and grow. Given the hourly rate that I charge for web development, if I followed such advice and delegated those daily tasks that I could pay someone less to do, then I'd never do any of the following:

  1. Look after my son
  2. Play musical instruments (let alone practice or write music)
  3. Learn new things about coding or business
  4. Cook
  5. Organise a day out with friends or family
  6. Pay attention to my business accounts
  7. Plan my exercise regime
  8. Walk or cycle anywhere
  9. Speak French
  10. Write this blog!

The point Ferris makes is that if I outsource all the unnecessary, boring tasks, I'd have more time for the tasks that are important to me. In practice, easily delegatable tasks, that are simple to convey and to verify the progress on, make up a very small part of my working week. But even if they didn't, I'm not convinced that arranging my working week so that I'm focussed on just one part of my job is necessarily desirable, even if it were feasible. I want to be a generalist, not a sanitary droid!

And which 20% of my job would I choose? Should I label myself as a front-end developer, and outsource the back end. Or, outsource the design, and just take care of the coding. Or, outsource the copy for my webpages and focus on the UX. With startup projects, learning how to write good copy and make good design choices is vital, and not something I'd want to outsource.

I'd rather try my best to deliver something, and iterate on the feedback. Whatever choice I make, by specialising I'm losing the chance to learn and become self-sufficient in others areas, and am becoming a consumer of other services instead.

So should we follow Kryten's example and break our coding? Definitely! Not just our code that we write (that's the fun part), but our ideas of who we are and the roles we play.

Ready to get started? Check out my courses!

Top comments (0)