I think that being a developer involves skills that belong to two categories. Hard skills and soft skills.
Hard skills
In this category I include things that requires logical thinking. Programming languages, frameworks, algorithms. Cloud services, database modelling, CI/CD, test frameworks, etc. Everything that involves math too, algebra, equations and geometry. Having skills in this category is cruicial if you want to be a developer who actually writes code.
Soft skills
And in contrast, in this category I include everything a developer does that is not in the category above. Collecting requirements, leading teams, taking notes, sitting in on meetings, giving advice and opinion. Some developers spend most, if not all, of their time in these kinds of tasks. Most developers I know, feel that things that belong in this category are a waste of time to some degree.
Work on improving what you are not working with
The past years I have tried to balance these two categories in such a way that whatever I work the most with, I try to keep the other side up-to-date, keeping my skills sharp. So if I have had mostly meetings and writing documents for the past months, I try to find a way where I get to work on some tasks that require harder skills or do it on my free time. And if I have been working on something that requires coding in solitude for a longer period of time, I try to keep in mind that this is an exception, eventually I will have to work in a team again with diffuse requirements set on the project.
Things I have personally done to sharpen my skills
Here are some random things that I have done, that might give you inspiration to get better in something too. Starting with the hard skills.
Write a NES emulator
For a long time I have wanted to write an emulator of some sort. The problem intrigued me, it requires skills in fields I have no previous knowledge of. I have never written anything in assembler, I don’t know anything about the 6502 CPU that powers the NES, and so on. So I decided to write one of my own in C#. Starting from scratch, knowing so little as I did, this turned out to be a massive task. I have been writing the emulator now and again during the past 2 years now, and it is maybe 50% done at this point. It has been a great journey even though it has taken a lot of time, I have learned many things that I would not have learned otherwise.
Participating in Advent of Code every December
Advent of Code is a great way to force yourself to code things that you wouldn’t otherwise code. You get a new task each day during december, and you need to think about how you solve it, otherwise you will issues with the solution taking thousands of years to calculate. The tasks are quite math-heavy, and after a couple of weeks you need to have some familiarity with the type of algorithm that is intended to be used to solve the problem, otherwise you will spend many hours on figuring it out. For people who don’t have a CS degree (like me), this is a good way though to see where your own weak spots are and work on them little by little. Since I’ve done AoC now for a few years I can now quickly see when they are describing a problem that requires a shortest path algorithm, and I have implemented the Djikstra algorithm a few times so I can just look at the solution of previous years.
Project Euler
Project Euler is another one of these sites that give you math-type coding challenges that you can solve any way you want. I’ve done just a few, but as with AoC, this is a good way to face your limitations when it comes to math knowledge. It’s incredibly rewarding to solve something that you didn’t know how to just moments before.
Try new programming languages/frameworks
It is easy to become comfortable and just use the language you know the best for everything. But this leads to stagnation. I find it helpful to sometimes write in some other language that belongs to a different paradigm of languages, or is just different in a substantial way. After writing functional code in F# for a while, and trying to write JS in a more functional way, I have noticed that I have started using the functional aspects of C# more, when it improves the code and feels like it makes sense. And since I very rarely have written any frontend code, I have avoided the new frontend frameworks pretty successfully the past decade. But since the line between frontend and backend has started to become increasingly blurry, it felt like I cannot avoid this any longer, and I need to know the different frontend frameworks going forward. I took on a project that was to be written in React, and after having worked on it for a year, it feels like I have now a much better understanding of frontend frameworks in general.
Participate in game jams
Unless you work the games industry, if you have any sort of interest in games, this is a great way to work on something you don’t normally work on. If you do mostly online forms and CRUD-stuff on backend, working on a game will be a very different experience. And the joy of having that quick feedback where you go from nothing into having a game that you can play is just great. It’s been a few years now since a personally participated in a game jam, but it was great fun every time I did it.
And ways to improve soft skills
Read books
Yeah, no surprise here. Here’s a list of good books that I recommend reading:
- Clean Code by Uncle Bob
- Clean Coder by Uncle Bob
- Mythical Man-Month by Fredrick Brooks Jr.
- Software Mistakes and Tradeoffs: How to make good programming decisions by Tomasz Lelek and Jon Skeet
- The Pragmatic Programmer: From Journeyman to Master
Listen to podcasts
Podcasts are a great way to listen to people talk about the work they do, without actually seeing any code. People can’t rely on copy pasting code blocks to explain what they mean, but instead they have to verbalize their ideas and solutions. Here’s a few that I listen to:
But there’s a million podcasts out there, try some out and see what you like.
Take up meditation
Meditation is a great way to unwind, learn how to not take small things too seriously, see problems from other peoples perspective and become a better human being. If you can face adversity with a smile, problems will feel smaller, and other people will look to you for strength.
I did Headspace for a couple of years and was very impressed with it. One thing to keep in mind is that meditation is like going to the gym, it is important that you do it on some sort of regular schedule, you can’t do one session every other week and expect results. Results take some form of commitment and time. I recommend doing it daily (10-20min) for a month before evaluating if it is something for you.