The two paths
Ever since I started my career as a software engineer I've always wondered at what specific path should I take? In my mind there was two paths: the specialization path, where I would become an expert at just one or maybe two specific things, like a programming language, framework or some other technology; and there was the generalist path (for a long time I didn't have a name for this path), where I would study a little bit of everything.
I've always thought that the correct path should be the specialization one, but I couldn't follow it. My way of learning and working in the software engineering world would always turn out to be studying a lot of different things, such as: databases, programming languages, computer networks, AI and data science, data engineering, project management, requirements engineering, web design, and so on.
I would only "specialize" and focus on some specific technology for a long time if I really needed, such as a job requirement or to solve a specific problem. But when I was comfortable with what I was studying, or when I solved the problem, I had the tendency to search another interesting technology to study or another side project to do (even before I would finish the previous one). I've always felt a little guilty of that, a little sad even. Like I was wasting my time and would never become as good as the specialists in my area in some technology.
Range: Why Generalists Triumph in a Specialized World
One day I was scrolling through my twitter feed and saw a post with a picture of some books. This person was celebrating the selling of his new book. I took a look in not only the cover of his book, but the other ones as well. When I looked at the bottom shelf I saw this cover:
You can get it on amazon here. I was instantly interested and curious about that title. Could this book have anything to say about this conundrum of mine?
I got the audio book version and started listening. I was hooked. It is full of fascinating stories and studies that show that when you only specialize you can become sort of trapped in this specific path or world view. You may have difficulties of coming up with creative solutions to solve problems of the "wicked" world.
Why should I be a generalist?
The world where we live and most of its problems that we must solve on our day-to-day life are sort of chaotic. Solutions you used in the past may not apply to future problems. Not only that, but feedback can be very slow or null. You will only find out if your solution was a good one after a long time. You may not find out at all. In this world, generalists have a higher chance of using knowledge of different fields and apply them to solve problems or coming up with solutions in a creative way.
In my opinion, this idea translates very well in the technology world. When you are a software architect or project manager, for example, you may be constantly dealing with new projects and problems that you must make some decision. What software architecture or patterns should I use? Should I use micro services? What is the best language to use for this new software? What are the activities that must be done so I can finish this project? What things are a threat to my project or can make it fail?
It is not always clear what the best solution/answer will be. Having a wide knowledge of different algorithms, programming languages, databases, domain fields, etc, may be very helpful. I'm only talking here about the technology field, but the book makes the case that having knowledge about totally unrelated fields may be helpful as well. Feel free to learn to dance, paint, draw, play guitar. These new skills may help you see things in a new way. How about learning a little bit of philosophy, biology, physics? Who knows, maybe other fields have used solutions that could help you solve your IT problems. Genetic algorithms and neural networks are both examples of algorithms inspired on things that are totally outside of the technology field.
I'm not saying here that specialization is a bad thing. We do need specialists. There are problems that can only be solved if you have a very deep understanding of some specific thing, and you do need to practice a lot to become a good programmer or to write better unit tests. All I'm saying is that fell free to have hobbies. Do not feel guilty to change projects or interests. The book even talks about some people that changed careers or jobs many times and they have benefited a lot from the different knowledge they acquired. Remember that interdisciplinarity is very important!
More and more we keep hearing that AI and automation will replace a bunch of jobs. There are even fears that programmers may not be very necessary in the future as well. So don't be exclusively focused on some technology or activity that can very well become obsolete or automated in the future. Be sure to have some "range" in your toolbox. Never stop learning.
Top comments (1)
Good read. Having skills in a T shape works really well for engineering teams these days.