What does it take to be a Software Developer?

I’m going to try and debunk what it really takes to be a Software Developer.

Firstly, some myths:

  • Looking at the documentation helps you be a developer
  • It’s easy to be a developer
  • It’s just some code, how hard can it be

I’m going to be really critical now. Thinking that all you need to do is learn some code and then you’ll magically be a developer is going to end in frustration and annoyance. It takes something significantly different to be a developer.

The best analogy I can give here is that expecting to be a developer by looking at documentation of a language, API or framework is like expecting to be able to speak French by reading a dictionary. It’s never going to work.

Honestly, the code is the easy part, it’s the simplest part, it isn’t what makes you a developer. Interestingly many people look at code and thing “Ahhhh, complicated, complex gobbledigook that I can’t understand.”

So, if Software Development isn’t about the code then what the hell is it about?

It’s about thinking. Moreover it’s about the way you think, the way you see the world. (Wow, this just got deep, I just want to be a developer not a f**king philosopher). Hang on with me here. I know this sounds all kinds of newagey and all that crap, but it is honestly the truth.

I suppose it’s worth looking at some characteristics of a good developer. What can they do? How do they think?

A good developer is a developer who is able to deconstruct a problem into small blocks of tangible stuff. The easiest way to go here is down the whole animal, mammal, cat and dog route. They are easy to visualise and can be a great stepping stone to visualising and conceptualising more abstract components. I think this is probably the most difficult thing for a person to learn to do.

A good developer is a developer who is able to rapidly learn something new. The ability and desire to learn is something that every developer needs. When going into a new project a developer needs to be able to learn the structure, domain and framework very quickly if they are to be of any use. There is the added complexity of new features and languages coming out all the time which if a developer doesn’t keep on top of then they will become obsolete. I think this is the next most difficult thing for a person to learn to do.

A good developer is a developer who is self aware. What I mean here is that a developer needs to review what they are doing, and figure out ways they can improve. A developer who can’t look at themselves honestly and openly is a developer who will never improve. I don’t mean a developer needs to be negative about themselves, but I mean they need to be content with a life of continually discovering new things about themselves and improving themselves.

For the last point I want to really emphasise how positive it is to do this. I find that my life is incredibly fulfilling precisely because I continuously feel like I am growing and improving. I love the idea of finding out new things and discovering better ways of doing things. It makes life feel like an adventure and I feel like I am constantly in pursuit of and achieving better levels of living. I think sometimes many people get caught in the negative side of this which is the “it’s never good enough, I’m always a failure”. I like to think “wow, I’ve achieved so much and I’ve learnt so much. I can’t wait to see what new and exciting things I learn and achieve in the future which enrich my life and bring me a genuine sense of fulfillment.”

I think we’ve established 3 key traits of good developers:

  1. Visualise and conceptualise abstract components
  2. Rapidly learn new concepts and ideas
  3. Self awareness and desire for self improvement

So, what can you do to establish these traits? Firstly, I subscribe to the nurture over nature idea presented in science which means that whilst a persons nature can influence their starting ability with certain things and how rapidly they are able to learn certain things, ultimately if a person is nurtured correctly then this can overcome any initial tendancies towards or against certain abilities from birth. This therefore means that I think that there must be a way to establish and develop the above traits. I also suspect that these traits are common amongst scientists. I think that a person who learns to question the world around them critically is a person who learns to visualise and conceptualise increasingly abstract ideas. I think this also encourages rapid learning in the continual face of new information from questioning and challenging assumptions and preconceptions. I then think it is a very small step to apply this way of thinking to oneself as well as the external world around you.

I feel that we have here a recipe for building the ability to be a good Software Developer, start learning science, start questioning the world around you and start applying the scientific process and allow the evidence you find to influence you and change how you act and behave.

I’ll be honest, this feels somewhat underwhelming to me, I’m not sure why. Personally I love science and it wasn’t really my intention to end up with this conclusion (I didn’t really have a specific conclusion in mind tbh). I tend to write as my thoughts evolve so what you see here is a stream of my thoughts in the order that they occur in. I find it fascinating to have come to this conclusion and underwhelming that this is the current conclusion.

If you want somewhere to start with the whole getting interested in science thing then I can recommend a few different routes, audio books, especially some of the Richard Dawkins ones as he has a fantastic way of breaking things down into easy to digest pieces and then rebuilds the argument to much more complex situations, plus there are a couple of fascinating books below which I found incredibly easy to visualise: