Specialists vs. polyglots – What kind of software developer are you?
Deciding on a programming specialty is something many developers will be reluctant to do. But it’s central to a successful career, says John Sonmez, author of Soft Skills, the software developer’s life manual.
This is an excerpt from Soft Skills – The software developer’s life manual by John Z. Sonmez, a Manning publication available here.
Have you ever had to hire a lawyer? What was the first thing you did? If you’ve never hired a lawyer, what do you think would be the first thing you’d do?
If you guessed that you’d need to figure out what kind of lawyer you needed, then you’re correct. You don’t want to just call any lawyer; you want to call a specific lawyer who deals in the area in which you have a problem. Lawyers have expertise and they usually make that expertise known from the start. There are criminal lawyers, accident lawyers, real estate lawyers, and so on.
You wouldn’t want to have a divorce lawyer represent you for a tax or real estate problem, so specialization is important. A lawyer doesn’t come out of law school and decide they just want to be a “lawyer,” but unfortunately that’s exactly what most software developers do when it comes to their profession.
Specialization is important
There are plenty of software developers out there who don’t have a specific specialization. In fact, most software developers will completely define their specialization by what programming language they program in. You’ll commonly hear “I’m a C# developer,” or “I’m a Java developer.” This kind of specialization is too broad. It doesn’t really say enough about the kind of software development work you can do. A programming language doesn’t tell me anything about what kind of developer you are and what you can actually do. It only tells me one tool that you use to do your job.
You might be scared to specialize in one area of software development because you’re afraid that you’ll become pigeon-holed into one specialty and that will exclude you from many jobs and opportunities. While it’s true that specialization will close you off from some opportunities, it will open many more for you that you wouldn’t have otherwise had.
Think about the lawyer situation again. If you became a lawyer and had no specialization, technically every person seeking a lawyer could be your client. But the problem is that very few people would want to hire a generalist lawyer. Most potential clients would seek to hire a specialist.
Even though it would appear that you had a bigger pool of potential clients, the reality would be that by being a generalist, you’d have greatly reduced your pool of clients to only those who weren’t savvy enough to realize they needed a specialist.
By being a specialist you have a smaller pool of potential employers and clients, but you become a much more attractive prospect to them. As long as your specialty is big enough and it’s not overcrowded, you’ll have a much easier time finding a job or getting a client than you would if you just called yourself a software developer.
Getting specific about specialties
If calling yourself a C# developer or Java developer isn’t specific enough, what is? This isn’t an easy question to answer, because the real answer is “It depends.” It depends on what you’re trying to achieve and how big the market is in that area.
Let me give you an example. Earlier in my career I billed myself as a software developer who specialized in printers and printer languages. This was a pretty specific specialty. I only had a handful of major employers that I could look for employment with. But can you imagine how difficult it is for a printer manufacturer to find a software developer who specializes in printers and printer languages?
My specific specialty made me very valuable to a small number of potential employers. These employers didn’t have a presence in most cities, so if my market was the entire world or even the United States, I had a pretty big market where my specialty would be very useful. But, if I didn’t want to move out of the place I was currently living, my market would have been too small for that specialty. (How many local companies need a software developer who specializes in printers?) Fortunately, at the time, I was willing to work just about anywhere in the United States, so the specialty worked out well for me.
Let’s go back to your situation. Suppose you’re looking for a job in your local area, and that you’re a Java developer. In most metro areas there’s a pretty big demand for Java developers, so you’ll start out with a nice healthy-sized pool—there are plenty of jobs you could potentially get. But you don’t need to get all those jobs, you only need one.
Let’s pretend, at any given time, that there are 500 available Java developer jobs in your area. Now suppose you decide to specialize to narrow down your market and give you a better chance at getting one of those jobs, so you specialize as a Java web developer. Perhaps this eliminates 250 of the jobs, but leaves you with 250 that you could potentially get. Still plenty, right? Remember, you only need one. Now you decide to specialize a little further, and, without getting into the details of Java web development stacks, let’s say that you pick a Java web development stack to specialize in. Perhaps this knocks your job pool down to 50 jobs. Still plenty of jobs to choose from, but now your chances of getting one of those 50 just went way up, because you now are specifically targeting those jobs with your skills and your message.
Kinds of specialties for software developers
There are many different kinds of specialties for software developers. Obviously there are language specialties and platform specialties, but there are also specialties in methodologies and specific technologies or industries.
One of the first things you should figure out, though, is what kind of software development it is you want to do. Do you want to work on the frontend of applications, creating and programming user interfaces? Do you want to work on the middleware of an application, implementing business rules and logic? Do you want to work on the backend of an application, working with databases or low-level operations? You can even pick all three and be a full-stack developer, but in that case you should definitely specialize in a specific stack of technologies. (For example, a full-stack web developer might specialize in creating ASP.NET MVC websites, using C# and SQL Server.)
You can also specialize in areas like embedded systems development where you work close to hardware devices and write code that runs on computers inside of a device. Embedded systems programmers have to deal with a whole different set of problems than web developers do.
Operating systems is another area of specialty, although not very important when dealing with web development. Many developers specialize in writing applications for a specific operating system, like Windows, UNIX, or Mac.
Mobile application development or even a specific mobile operating system is another potential area for specialization. There is a huge demand for iOS or Android developers who specialize in writing mobile applications for that platform.
Some developers specialize really deep and become experts in a very specific platform or framework. These developers have few potential clients, but they can demand a high hourly rate because of their specialty. You’ll find that low-level specialties are most common around very expensive software suites or frameworks. Consider the giant German software company SAP. Some very highly paid developers specialize in developing customer solutions to integrate with this expensive software system.
- Web development stack
- Embedded systems
- Specific operating system
- Mobile development
- Software system
Picking your specialty
Most software developers I tell about specializing agree with me, but I’m often asked about how to actually pick a specialty. Picking a specialty often can seem like an overwhelming task.
Here are a few tips to help you pick your specialty:
- What were some of the major pain points in your current or previous company? Can you become a person who specializes in solving those pain points?
- Is there a particular kind of work that nobody wants to do or that lacks skilled people? Become the person who is an expert in that area, and you’ll have plenty of business.
- What kind of topics most commonly come up at conferences and user groups?
- What kind of questions do you answer the most, either for coworkers or on sites like Stack Overflow?
Whatever you do, make sure you pick some kind of specialty. The size of your market will determine how specific it is, but try to make it as specific as possible. You’ll be in much higher demand in your specific market if you do so. And don’t worry; you can always change your specialty later if you need to. Obviously, I’m not specializing in developing software for printers anymore, and I know many other developers who have had great success moving around to different specialties during their careers. For example, a good friend of mine, John Papa, used to specialize in Microsoft Silverlight. After Silverlight went away, he changed his specialty to Single Page Applications (SPAs).
What about the Polyglot programmer?
Whenever I bring up the topic of specialization, I always encounter at least some resistance. I think it’s important to clarify that even though I recommend specializing and having a specialty, it doesn’t mean I think you shouldn’t also have a wide variety of skills.
Although those two things may seem contradictory, they don’t have to be. Being a well-rounded and versatile software developer is great. Being able to use multiple technologies and programs and many different programming languages can only help your career and can make you a much more valuable software developer than someone who only knows one specific technology or programming language. But it’s very difficult to market yourself as a jack-of-all-trades.
It’s nice to have a developer who can do anything on the team, but rarely do companies or clients set out to find that kind of person. Even though you may be awesome at all kinds of different technologies and know 50 different programming languages, you still will be better off picking some specialty—even if it changes from time to time.
Learn as much as you can and become as flexible as possible, but also have a specialty that makes you unique and stand out. If you have to choose between the two options, start with specialization and branch out later.
- List all the different kinds of software developer specialties you can think of. Go from broad to specific and see how specific you can get.
- What is your current specialty? If you don’t have one, think about what area of software development you could specialize in.
- Go to a popular job search website and look for jobs in your market for your specialty. Try to get an idea of whether or not further specialization would be beneficial to you or limit your choices too much.