I’ve been asked this question a few times. Generally it goes as follows:
“I have a friend who want’s to become a software developer, what should they learn?”
Answering this question is tough - it largely depends on what in software you want to do; to simplify the question I’m going to assume they want to create software similar to what I’m involved in, in which case the best experience is work experience. That then leads to, well how do I get a job? I can only speak for myself here, and what I would look out for in new candidates. Here goes…
Generally when we interview candidates we are looking for developers that are passionate about creating great software. Assuming you are at the “I have no experience” end of the spectrum, here are the things I would be looking out for.
- Someone with great base fundamentals
- Someone who is a high collaborator
- Someone who is actively learning and can take direct feedback on areas to improve
In my experience, new programmers typically chase frameworks - interestingly, this is the last thing I look at when interviewing.
The core practices I look for are:
- Test Driven Development
- Clean Code
- SOLID Principles
- Refactoring skills
I would recommend the following books to help with this:
- Clean Code by Robert C Martin
- The Art of Unit Testing by R Osherove
- Code Complete by S McConnell
To get experience with TDD I find a CodeRetreat works best - there are meetup groups that do the global day of CodeRetreat that are worth visiting. Unfortunately this happens generally once or twice a year. Whatever you do, find opportunities to learn TDD.
Trying to guage technology knowledge when you are new is not that important. You can learn technology anytime provided you have the right mindset. For me this is actually more important than your current technical skills.
Books I would look at reading to give you a good foundation mindset would include:
- The Pragmatic Programmer by Hunt & Thomas
- Extreme Programming Explained by Kent Beck
I would also recommend having exposure and being comfortable writing code in at least 2 languages. Later down the road I would recommend being able to write and code in two paradigms (Object Oriented vs Functional).
I also want to see people that are comfortable working in multiple operating systems. If you haven’t already, look to work in at least linux and Windows and make sure that exposure goes down to the command line (i.e. know the difference between CMD / Powershell & Bash).
Finally, there are some basic skills I like to see. Because we type a lot, you need to be comfortable touch typing - if you struggle with this - focus on getting your typing skills to about 60 wpm.