So you want to be a software developer?

The classic route is to take a computer science, software engineering, web development, or similar university degree. But perhaps you are already working and don't want to go back to university. Or maybe you've done such a degree, but you're still finding it hard to land your first software development job. Read on.

The key skills you need to demonstrate in order to land a software development job are:

Learning and coding

It's worth building up a portfolio of coding projects (sometimes known as “side-projects”) in the area you want to apply for. (If you don't know what areas there are, take a look at the resources at the end of this article.) So, if you want to do web programming, you'd build your own web app. Similarly for mobile app development. If you choose some technologies you haven't used before, this will give you opportunity for some fast learning.

Store your portfolio somewhere it's easy to access such as github, bitbucket, codeberg, or similar.

Talking of which, a valuable piece of learning would be to work through a book or tutorial on the git distributed version control system. Make sure you understand how to commit changes, create and merge branches, and push to and pull from a remote git repository.

A general approach to fast learning is to ask yourself questions:

Read about Richard Feyman's technique for learning and teaching if you want some more ideas.

Problem solving

To practise problem solving, doing gradually harder and harder coding challenges, such as codewars, would be one way, although that's a bit artificial compared to solving problems in your own side-projects.

In particular, you need to experience getting stuck and then finding ways to solve the problem and get unstuck, because that's what software developers spend a lot of their time doing.

You might even want to read a general book on problem solving, such as Solve It!: The Mindset and Tools of Smart Problem Solvers.

One general approach to problem-solving us to narrow down the cause of a problem. Sometimes the symptoms of the problem give a clue as to where the cause of the problem is. Sometimes searching the internet for the symptoms and/or the piece of software causing the problem can turn up others who have experienced similar problems. From them, you can often pick up debugging techniques or sometimes even solutions.

On the other hand, if the problem is you can't figure out how to do something, then another general approach is to generate lots of potential solutions by using idea generation techniques such as brainstorming, forced relationships, and so on (see the resources below for more), and then to try the most promising solutions until you find a way forward.

One last problem-solving tip: take a break! Get some exercise, do something else, or simply take a coffee break. You'll be surprised how often “the penny drops” when you are doing something else.

(If you have done any mathematics in the past, it would be worth brushing up on predicate logic and set theory as these give some nice ways of thinking about programs and data. Also, doing exercises in these subjects is a good way of developing problem solving skills. If you don't have any mathematics, don't worry – many programmers get by with minimal knowledge of mathematics and pick up what they need on the job.)

Team work

Getting experience of working in a team can be tricky. You may be able to find a suitable open source project which you can contribute to. But any teamwork in another setting, such as sports or social activities, is a good start. Programming is far from a solo activity and learning to work well with others is really important.

Conclusion

Finally, to land a software job, you'll need to demonstrate a genuine desire to work in programming by devoting quite a bit of time to developing your skills – I guess maybe 10 hours a week or so. By honing your coding, learning, and problem-solving skills in your spare time, you'll also get a better feel for whether this is the kind of thing you want to do as a job.

Resources

#software #softwaredevelopment #softwareskills