In software careers, as in life, there are many paths to choose from, and very often, where one winds up is as much a result of luck or chance as it is intention. In the software industry, there is a widespread belief that there are only two major career paths:
- Become a technical specialist
- Become a manager
However, in reality, there is an often-overlooked third choice:
- Become a technical generalist
This is the career path I’d like to address, since I find it to be under-appreciated.
On Specialization, Management and Generalism
Specialization is, surprisingly, often the default direction a career path takes. You graduate from college, get your first job, and before you know it, you become good at something. You get better and better at it, until one day, you are the designated point person for all things related to your particular niche. That is, if someone has a problem related to your area of expertise, you are the first person they bring in to help out.
There’s nothing wrong with this situation! Some people really enjoy being the go-to person for very specific problems. In fact, at a firm I used to work for, I was once specifically told by my manager, “Simon, the way to get ahead here is to be “the guy” for something. James (names changed) is the Curves Guy, and Mark is the Vol Guy. You need to pick something, and be the guy for it.”
I was terrified – I didn’t want that at all. I had once been the Time zone Guy, and it was the worst. (As an aside, it is quite important to do time zones correctly, and once you realize this, it’s very frustrating to run across code where someone hasn’t. However, I did not want to spend the rest of my life fixing other people’s time zone code. But I digress.)
If you want to be a manager (rather than having had this role thrust upon you), very often you must actively groom your personal and political skills to make the transition into this basically completely different career. It takes active intervention on your end to become a successful manager. Indeed, there are many, many books and blogs devoted to making this transition.
The technique to becoming and staying a generalist, however, is a little less clear. The good news is, it’s just as simple; whenever you find yourself getting too good at something, do something else. Regrettably, this means you’ll never be the best at anything, but then, that is the Faustian bargain we strike.
Personally, I must focus on continually learning new things; this is what keeps the boredom at bay.
Focus on Learning
There are, broadly speaking, three major areas of knowledge which go into the practice of software development:
- Computer Science theory and Mathematics
- Techniques, languages and execution/processes
- Domain knowledge
At any point in time, I am probably reading research related to one of those three areas, and at various points in my career, each of them has been a major focus of improvement.
For instance, while in New York working for Bloomberg, I was largely focused on broadening my domain knowledge of finance, specifically derivatives pricing. This boiled down to reading books and papers and completing the CFA and CQF programmes. However, while there, my group started working in OCaml, and that seeded my interest in functional programming. A couple of years later, regrettably after I had left, the seed grew into a full-blown interest, despite it having only a glancing relevance to my day-to-day work. I decided to learn Scala, which necessitated learning Haskell, which required understanding the theory of functional programming, which then surprisingly re-ignited my passion for programming in general. That, in turn, has lead me to read more of the seminal papers from which functional programming is derived, and took me back full-circle to pondering how this body of thought could inform my actual day job.
And so it goes, with me continuously flitting between the areas above, researching theory, practice or domain. For me, it boils down to one thing; sustaining my passion for software development, while avoiding my tendency for boredom with doing things that I already know how to do. A former manager once told me, “Simon, you are either stressed and happy, or you are bored and angry.” I have since refined his diagnosis; what makes me happy is learning, and when I was stressed, it was because I was out of my depth and, as a side-effect, learning under pressure. Nowadays, I find I can do without the fight-or-flight deadlines, but I still much prefer being out of my depth to being master of a craft. The secret to staying out of your depth is continually learning from new fields, as deeply as you care to invest the time. Every day I discover more and more things about which I know nothing, and I find that very inspiring. On balance, I vastly prefer being the dumbest, most ignorant guy in the room, as it means I have the opportunity to learn something new.
Passion, and the Joy of Software Development
As I write this, I am on a flight back from Strange Loop, an absolutely wonderful conference held every year in St. Louis. For its diversity of topics and passion of attendees, I think it might be unparalleled. Strange Loop basically boils down to a bunch of enthusiastic tech people talking about random cool stuff, whatever is currently inspiring them. People have said, “it’s the conference of whatever Alex (the organizer) thinks is cool,” and as it turns out, Alex has excellent taste.
Conferences like this recharge my general passion for software development, and I think it’s very important to sustain one’s passion. It is sometimes hard, when you are up to your neck in alligators, to remember that your job is to drain the swamp. Similarly, it’s very easy to fall into a rut, repeatedly doing what you are good at, and wondering why you are getting bored. For me, the following quote from Albert Einstein offers some great advice:
"If you always do what you always did, you will always get what you always got."
Especially for those of us who are worried about being pigeon-holed, we must work every day to learn something new, and we must take the time to do so.
People say that professional software development is very different from being a technology hobbyist. This is true, but it doesn’t have to be such a drag. We still have one of the most creative, challenging, and intellectually stimulating jobs in the world. We build things with our minds. Take some time and appreciate just how cool that is. If you find yourself getting bored, go read an academic paper; find your local chapter of Papers We Love. Go to a meetup, or a conference, about something with which you are unfamiliar. Contribute to an open-source project. Change departments within your company or, if you must, change your job.
Passion is a delicate flame, and you have to nurture it – burnout is a real thing, and it takes years to recover from, if you manage to at all. Don’t let anyone burn you out, and if you are a born generalist, don’t let yourself get specialized. Sometimes you might envy your specialist friends, perhaps because specialists are structurally rewarded in our society, but generalists have an important role to play; like wild bees, those unsung and endangered heroes, and the world needs jacks-of-all-trades too, to pollinate between teams and help everyone in their silos bear fruit.
Besides, there are far too many cool things to learn to leave it to the experts.
Check out FINCAD’s listing of open job opportunities to see if anything interests you. We’re in an interesting space with plenty of challenges, and we are always looking for friendly, talented folks who share our passion for quantitative finance.