I started working as a developer in 1998 and I have worked with a reasonably wide set of technologies and companies. Based on that experience I have tried to list the skills I have seen required during my work, and many of the job posts I have seen etc. - and some of the topics I think it would have been useful to have, looking back.
I made this list because I have been receiving many questions over the years from less experienced developers about what they should learn to improve themselves. At the time I did not really have a good answer - but now I can start by pointing to this list, at least.
Not a Recruitment Baseline
This list is NOT intended as a recruitment baseline - meaning a list of skills recruiting organizations should demand that developers know to apply for a job with them. Here is why:
First of all, not all of these skills are necessary in order to start a job as a developer. Some of them a developer may not even need in the given job. For instance, if you are hiring for a backend developer position, that developer does not need to know about usability, UX and information architecture, for instance. Similarly, a frontend developer may never need to know about databases, SQL, performance optimizations, algorithms etc.
Second, the list of "essential" skills is long. I believe that most developers (including I) do not have deep knowledge about every single topic on this list - and, as explained above, they don't need it to do their jobs well. It is not realistic to demand that a new hire know all of these topics in depth.
Inspiration For Developers Looking to Expand Their Core Knowledge
The list below is intended as inspiration only. If you are new in a job - I would advise that you start by learning what skills are necessary to do your new job well - and wait with this list. Once you can do your job well, you can then look at this list for inspiration about how to improve your skills and knowledge.
Essential Developer Skills
Here, I list the essential skills I believe most, or a lot at least, of developers can benefit from knowing. I have broken the list up into "levels". The levels are an attempt to indicate approximately which are more basic (and thus good to learn earlier), and which are somewhat more advanced (and thus maybe better to learn after the basic ones). However, those levels are only there for guidance. You don't have to follow that order. You can jump around the list as you see fit.
- Level 0
- Level 1
- Computer architecture basics
- One or more programming languages - the core features at least.
- Structured programming
- Core web technologies
- Level 2
- Object oriented programming
- Functional programming
- Level 3
- Error handling
- Level 4
- Design patterns
- Data structures
- Aspect oriented programming
- Test driven development (TDD)
- Behaviour driven development
- Code quality
- Software quality (outside the code itself)
- Usability and UX
- Information Architecture
- Agile methodologies
- Deployment of code to its runtime platform
- Level 5
- Performance optimization core principles
- Technical writing
Advanced Developer Skills
Once you feel you know enough of the essential skills you can continue into more advanced areas, such as:
- Application development
- Toolkit development
- Data science
- Game development
- Cloud architecture
- IT architecture
- Embedded software development
These are not the only advanced fields out there - but they are some of the more commonly known fields. There is a lot to learn in each of these fields - so it's common to learn primarily within the field you are currently working with - or a field you want to work with in the future.
Having said that, it can be fun to study other fields than what you work in - purely for hobby purposes. I do not work with game development, but I am still playing around with it in my spare time, from time to time. Same with data science. It's not my main occupation, but I play a bit with that too.
The world of tech is not static. As technology evolves - so will the perception of what is considered essential skills and advanced skills.
If you feel something is missing, feel free to tell me, e.g. via Twitter or LinkedIn, or some other channel.
As developers we constantly have to learn new technologies, techniques, tools, processes etc. Learning can be fun, exciting and interesting when the learning materials are easy to understand. But learning can also be frustrating when the learning materials are hard to understand, or lacking in details, or maybe even missing.
To deal with the situations where learning is hard, frustrating or stressful, I have adopted a set of learning strategies to help me through those hard periods. I have shared my learning strategies here: