In 2015 I was working in a completely unrelated field - as an ‘investigator’ for the UK Civil Service - when I decided to change careers and become a software developer. I quit my management job, went part-time, and taught myself how to program. Nine months later I got my first job as a software developer.
At the time I was 32 years old. I had good A-Levels in maths and science, and I studied physics at university, where I had done a little programming in Matlab. After university I worked as a police officer for six years and the Civil Service for two years, so I was essentially starting from scratch.
Although I came into it with a little background in maths and science, it isn’t necessary. Except for a basic understanding of simple algebra, you don’t need any prior knowledge in order to learn how to program. That being said, if you’re not the kind of person who enjoys solving logical problems and understanding complex systems, you probably won’t enjoy programming that much. Although you don’t need much prior mathematical knowledge, if you hated maths and science at school you probably won’t enjoy programming. Undoubtedly there are exceptions, but I believe this is generally true.
I went part-time at work in order to find time to study and I did it in nine months, but the timescale will be different for you depending on your circumstances. The method described here worked for me, but there are no doubt other paths to the same goal. Overall, these are the three areas to concentrate on:
Learning fundamental computer science
Making personal projects to show to employers
Using social media to showcase your projects
Step 0 - Take CS50
I was very lucky that the first thing I did was take CS50 - Harvard University’s Introduction to Computer Science and the Art Of Programming. I’d go as far as to say it’s the best course I’ve ever taken, and it’s the first thing I recommend now to junior programmers.
So how do you get into Harvard University? Well, this is the 21st century, and you’re in the exceptional position of having the opportunity to take courses from top universities around the world for free. You can take CS50 through a platform called edX, for free. You get exactly the same content as the students on-campus, and you can really feel the atmosphere of the course and the campus while you’re taking it.
This is a proper computer science course. You’ll learn computer science fundamentals such as low-level programming, algorithms and data structures. You’ll also learn how to program in C, and you’ll know at a low level what’s going on ‘underneath the hood’ of the computer. This will put you ahead of most ‘self taught’ developers, who can program in a language like Java but don’t actually know what’s going on inside the machine.
I cannot emphasise enough how good this course is. If you only take one thing from this post, take this one. I’ve done many online courses since and nothing had come close. I’d say that this one course is 75% responsible for my current knowledge and ability. I’ve written more about CS50 here.
I did this course in the same timescale as the on-campus version: roughly three months.
Step 1 - Learn how to use Git and Github
If CS50 puts you ahead of most self-taught developers, this will put you ahead of most new graduates. Git and Github are essential tools in the world of work, and employers will be delighted if you come already knowing Git. Take this course on Udacity, and stick to using the command line rather than a Git GUI (Graphical User Interface). When you get your first job you may find that experienced developers are using a GUI - stick with the command line, you’ll look cooler (and it’s better).
Step 2 - Get social
Open a Twitter account. If you already have a personal account that you use to rant about football and Brexit, open a seperate one; this is your professional profile and you’ll use it to connect with other developers and employers. You don’t have to be tweeting all the time - I’m not much of a tweeter myself - but start using it to make connections, explore the world of software development, and start to document your learning progress.
Open a StackOverflow account, and start to get involved. When I landed my first job my boss said that just having an account put me ahead of the majority of applicants. Don’t get too hung up on trying to earn reputation points; it can be difficult as a newbie to earn your first points. Over the next few months you’ll naturally start to earn reputation. Think quality over quantity.
You’ll already have a GitHub account from Step 1. Put your CS50 problem sets and final project on there. From now on, any time you work on a new course or project, use Git to track your code and put it on Github.
Read The Jargon File. Get a feel for ‘hacker’ history and culture, but don’t take it too seriously. Although you may recognise some traits of J. Random Hacker in yourself, take it as the tongue-in-cheek stereotype that it is. Programming is no longer the domain of geeks in their basement, and you don’t have to be a Star Trek fan or a social outcast to be a programmer (although it probably helps). In fact, if you have good social and communication skills you will stand out to employers, as those skills can typically be hard to come by in the field.
I also had a LinkedIn profile at this stage, although I don’t have one anymore. I found that I mostly connected with recruitment agencies rather than directly with decent companies. I may write more about this in a separate post on applying for jobs, but in short my experience was that recruiters advertised fake jobs just to get more applicants on their books, and the jobs that were genuine were low-quality and low-paid. Recruiters are probably useful at a later stage of your career, especially if you want to get into contracting, but I’d avoid them at this stage.
Step 3 - Make a portfolio site
This is where you’ll showcase all the projects that you will eventually make - in fact the website is a project in itself. Take this course on Udacity to learn HTML, CSS, and responsive design. A decent portfolio will get you an interview and, believe it or not, just by having a portfolio you will be ahead of the majority of other applicants. Most graduates have spent the last three years doing the minimum that their classes demand, and they haven’t built anything that they can actually show to an employer. I haven’t yet worked with a single other developer who has their own portfolio site. Don’t use a site builder like Wordpress or Squarespace; stick with a few pages of HTML and CSS that you’ve written yourself.
For now, you can put your final project for CS50 on your portfolio. It’s likely that your final project was web-based, so get a working version on your site, link to the source code on Github, and write a little about it. You’ll have more to showcase soon. Add links to your Twitter, StackOverflow and Github accounts.
I didn’t blog on my site at this point, although I did write briefly about each project. If you were to blog, it would definitely be a plus, but you’d also have to learn about Content Management Systems or static site generators, which, although they’re not difficult to learn, you have bigger fish to fry.
Step 4 - Make stuff
The goal here is to take short courses that include a decent project that you can make along the way. The best provider of this kind of course is Udacity. Everything on Udacity is modern and relevant to employers - that’s their whole ethos - so you can be sure to gain industry-relevant skills.
You can pay to take their ‘nanodegree’ courses, but you don’t have to, and I didn’t. Nanodegrees are just a series of short courses that you can alternatively take for free, but if you pay you get mentoring, a course certificate, and features that connect you to employers. If you have the money, it might be worth it, especially if you are in the US as a lot of the features that connect you to employers seem to be for US students, but I took the courses for free. I wouldn’t worry about not getting a certificate - none of your prospective employers will know what Udacity or a nanodegree is; the important thing is that you have projects and code to show them.
I’d recommend following whichever ‘track’ you’re interested in. For instance, you can follow the front-end developer courses, full-stack developer, Android developer, etc. You can even take courses in machine learning or self-driving cars. Don’t think that you’re specialising too early - you’re not specialising. You might complete courses in iOS development, but end up getting a job doing web development; what matters is showing that you know the basics of programming and can learn new things. That said, if you do have your eye on a particular job, it makes sense to take courses that relate to it, but I wouldn’t worry too much about it.
As you complete each project, put it on Github, stick it on your website, and tweet a link to it.
Step 5 - Contribute to an open source project
This is a quick step to complete, but it can be tricky to find a suitable project. It only needs to be something simple - I reorganised some CSS for instance - but it shows two things to an employer, both of which will put you ahead of most other applicants. It demonstrates an interest in making software in your spare time, and it shows your ability to read some documentation, identify an issue, and contribute a fix to a real-life codebase - exactly the same as you would in a job.
You now have:
More computer science knowledge than non-computer science graduates
More modern, industry-relevant projects than computer science graduates
A social media history that verifies and documents your learning journey, and gives employers a sense of your personality
Evidence of initiative, interest in the field, and an ability to teach yourself new things
It’s difficult to know what standard you need to be at when you’ve had no experience in the industry, but you’ll probably find that you’re underestimating your ability at this point. I certainly did - I thought that I was applying for jobs a little early, but in the end I was offered all three jobs that I applied for.
There’s a worldwide shortfall of programming skills, and even if (like me) your nearest city isn’t a ‘tech-hub’ , you’ll be surprised just how many software jobs there are out there and how few applicants. My current employer for instance recently advertised for a mid-level Java developer, and they simply couldn’t find one. If you happen to live in a city with lots of tech jobs, such as London or Manchester in the UK, you’ll have your pick of several high quality companies.
I plan to write a part two to this that deals with applying for jobs and preparing for the interview, but for now let me know in the comments if you’ve done something similar, or connect with me on Twitter.