James Thinks

writing is a kind of thinking

A lot has changed in the last few years and as a result many people are reconsidering their career options. I have a few years experience as a software engineer and my wife made a career change from law to software a decade ago with my encouragement. If you're considering a move into software engineering, I have some ideas that you may find useful.

What kind of person makes a good software engineer?

I say "Software Engineer" rather than programmer or coder as there is more to the job than coding. As well as writing code an engineer will need to understand customer requirements, collaborate well with other engineers and explain any issues in non-technical terms. Not all engineers are good at all of this, so teams need to have diverse skills.

As a result, good software engineers must have good communication skills and be generally well-organised. Being organised is of course useful for any job, but disorganised engineers make hellish, unmanageable code very quickly. There are tools to help with this, but they still require some discipline to use properly.

The coding itself requires attention to detail and some patience. You do not need to be a mathematician to be a good coder unless the domain you're working in is inherently mathematical, like integrating the inputs from aeroplane wing sensors. Some mathmeticians do make very good coders and so do some linguists.

You do need to keep learning as you go. Software development doesn't stand still. Even if you get a degree in software engineering, which isn't necessary to be good at the job, you'll still need to learn new technologies as things develop.

An inquisitive mindset

One word of warning before trying some coding: Code almost NEVER works first time. You type it in, you think you've done everything right and it falls over in a heap.

For a newbie this can be very disheartening. However it is part of the process; those of us with more experience still don't write working code first time, we just get used to it failing. I have more than 20 years experience and it's rare that anything I write works first time. It still causes imposter syndrome sometimes. But debugging broken code is a big part of the job. If you can view it not as a personal failure, but an intriguing mystery to solve, then you have mastered an important skill.

Coding is not the same job every day. It's not repetitive, handle-turning labour. It's thinking through how something should fit together. How should it be named so that the next person understands what it does?

Sometimes finding and fixing a bug requires diving into a rabbit hole of unfamiliar code. You'll be checking values at various points to eliminate possible causes along the way. Gradually you can narrow down the problem to a couple of lines. Sometimes, only then can you see the problem. Often hours or days of investigation result in a one-line fix.

If you see all that as an exciting geeky whodunnit, then you'll probably love software engineering.

Again, being organised, using the best tools and having your code fully covered by unit tests makes all this a lot easier.

What language should you learn?

This question might seem really significant and difficult to answer without causing controversy. Every coder has their favourite languages. If you've learnt three programming languages you can probably read any programming language. There is much more similarity between them than there is between natural languages. For example, you could learn five European languages and it wouldn't be much help understanding Chinese. But if you learn some C++ and Python, then Java is going to be easy to understand.

If you're at the stage of considering a career change, it matters more than you try some coding in any language, to see if you like it. Rather than picking one at random and aiming to become an expert, I'd suggest finding some beginner tutorials online in a handful of languages so you can compare. The similarities and differences will help you understand what coding is about.

You can look up on the web which languages are most used in the real world so you don't pick something utterly obscure that isn't at all useful.

My suggestions to try would be any of Python, SQL and JavaScript. At least one of these languages is likely to be found in 95% of software engineering jobs.

Python is often recommended as a beginner's language and it's used seriously in industry from healthcare to NASA. It's easy to automate tedious tasks and get things done quickly and Python runs on a wide variety of platforms.

SQL, pronounced either "sequel" or "ess-kew-ell" (life's too short to argue about which is correct), stands for Structured Query Language and is widely used to access and manipulate data in databases. That's all it does though, it isn't a general-purpose language.

JavaScript runs in nearly every web browser and is responsible for controlling the dynamic aspects of web pages. To make easier to create complicated user interfaces as seen on social media sites, there are a number of frameworks which sit on top of JavaScript like React, jQuery and NodeJS. This give a lot of features, but are another thing to learn and re-learn when it is updated.

I may be biased, but my favourite is Python. I think it is one of the easiest languages to learn while being useful in the real world in many different situations.

Some links if you want to give Python a try:

  • Dive Into Python is a free online book, good as it tells you how to install Python from scratch, but doesn't have videos, etc that some people like for learning.

  • Codecademy is a bit more course-like structure to hold your hand through the early stages, but shouldn't take too long.

  • If you get through that and are hungry for something more with some kind of certificate to show for it, then Coursera has lots of good stuff (often for free) with videos and exercises, but it takes a lot longer.

Category: technology
Mugshot of James cycling on a road in the sunshine.

James Bradbury

I write about whatever is on my mind. I do so mostly to help me think more clearly. If other people find it interesting that's good too. :-)


Good software engineers must have good communication skills and be generally well-organised

Code almost **NEVER** works first time.

Coding is not the same job every day. It's not repetitive, handle-turning labour.