As an aside, I obviously include mathematics, the queen of the sciences, in my discussions – many developers have a maths background. It’s interesting how few biologists one meets in the field though.
An obvious correlation between studying science and becoming a developer could be made based on the course content at university. If the course contained elements of software engineering, then it would be natural that some graduates develop a taste for it and have some experience to put on their CVs when entering the job market.
Obviously computer science degrees will have lots of relevant course content. But other degrees may have modules or parts of modules which expose students to the world of software. My physics degree had software modules, and I also did a fourth year project which was heavily based on coding.
However, I don’t think this is necessarily the whole story. When I was part of a recruitment team which selected graduates, we weren’t only looking for relevant experience directly in computing. Some of the more subtle skills that are developed during science training are useful for developing software.
A Way of thinking
Technical degrees give you problem solving skills, and this is what’s required in software engineering – in design, development, testing, support etc.
Having good equation solving technique helps a lot. Knowing which equation to apply in each situation has a direct analogy with knowing the coding techniques to apply to produce some code that solves a problem. Equation solving teaches you to break big problems down into bite-sized chunks – small enough that you can solve each one in turn and then build them up to the whole solution. It’s the same in coding – keep breaking down the problems to be as small as necessary so you can get your head around them, then build them back up.
Pattern-recognition is another good, transferrable skill (although I freely admit, not one that is exclusively the reserve of science graduates). If you can see how the current problem has similarities to a problem that you previously solved, you might be able to apply a modified solution to the current issue.
The skill needed to solve difficult bugs is interesting. In my experience, it means carefully looking for evidence, and based on what’s gone before, trying something to build a new piece of evidence. This directed trial and error, where each experiment is built on the previous results, slowly reveals enough information from which to reach conclusions. Once all the evidence is assembled, the bug can be pinpointed. This is a bit like carrying out a series of experiments in a science lab, with each one designed once the previous one has revealed a new result.
Things we might be missing
This binary, problem-solving way of thinking is great for software development. However, people have different strengths and weaknesses and speaking very generally this means that coders aren’t so good in a few other business areas. For example, we can be accused of lacking creativity in certain situations.
Given our condition to think about binary outcomes, “fuzzy” thinking where there may be different ways to achieve an end or to have multiple outcomes may require us to go against our ingrained training.
Many technical people are accused of having below-par writing skills – possibly as a result of having to write less at university and of being stronger with numbers. A lack of practice may come into play too – as they concentrate on coding in their career, it’s less likely they’ll have the chance to sharpen their word skills.
Many science grads go on to be software developers, and there are many good reasons why this is a well-trodden career path. Breaking problems down, applying pattern recognition, and performing incremental experiments are just some of the skills that readily transfer from the study of science to the development of software.
Neil Tubman, Director, Terzo Digital. May 2015.