26: To Generalize, or to Specialize, that is the Question... Part One
Published 3/11/2015
Should you be a generalized programmer or a specialized programmer? Generalized programmers learn a wide range of languages and/or frameworks, while a specialized programmer becomes an expert in something very specific. There are pros and cons to both, and in this episode, we'll discuss both.
Transcript (Generated by OpenAI Whisper)
Hey everyone and welcome to Developer Tea. My name is Jonathan Cutrell and today I'm going to be talking to you about the differences and the pros and cons of being a specialized developer versus being a generalized developer. A friend of mine here in Chattanooga who is also a developer, asked me this question. He and I are friends, his name is Justin and Justin considers himself a generalized programmer. He says that basically he's been kind of he's kind of had to be a generalized programmer in the jobs that he's been because he's been a smaller organizations and he's found that these smaller organizations need a wider set of skills and they don't have the resources. The resources to hire somebody to do each and every skill specifically full time. And I found myself in similar situations and even at whiteboard, I am still considered probably a generalized programmer. So I totally understand the situation that Justin is in. If you work at a larger company, it's likely that you've experienced the flip side of this, which is basically that you are kind of more specialized in a particular area, whether that's you are only writing in one language or maybe you're only using one subset of tools. And this is a huge subject. This is a really important one, especially for people who who are beginners or people who are looking for jobs in development. Being a general programmer versus being a specialized programmer changes the way that you work immensely and it will change the place that you work immensely, most likely. And so we're going to talk a little bit about the pros and cons of each of these. But first, let me say that being a programmer requires kind of a base set of knowledge. So whether you are a general programmer or a specialized programmer, it is absolutely essential that you know how to strike a balance in your code of quality, maintainability and performance. And those are the three things that you have to focus on when you're writing code, regardless of if you are a specialized programmer or a general programmer. Now, it might be that your job is to do prototype code where you are less, you're less focused on performance or maintainability. And instead, you're fully focused on some sense of quality or a subjective sense of quality. And that's fine. There is nothing wrong with that being your specialty. But to be a good programmer, you must have the knowledge of these things. You must know that when you are doing a prototype that that can not go to production, for instance, simply because it's a likely not a maintainable or performance solution that would need to be created in order to go to production with. So that's one of the cons, I would say, actually of being a specialized programmer is that no matter how specialized you are, no matter how deep your knowledge goes in one particular thing, you will still need knowledge of how to write clean code. You will still need knowledge of what it means for a computer to run quickly and the fundamental ways to write code that is faster versus slower. Now, it's less important, like I said, for some people than others, but having that base level knowledge in my opinion is essential to the practice of programming. So let's back up. I want to go through these kind of in blocks because that's how I have it written out. I think you will be able to follow this a little bit easier if we do it that way. So we're going to start with the pros of the general programmer. The first and probably the most obvious is that if you're a general programmer and you're looking for a job, you are more adaptable to a market. Right. So more people need at least some of the skills that you already have if you are a general programmer. If you can, for instance, if you know how to create a web application from top to bottom, we talked about this on a previous episode, the concept of the unicorn. It is still incredibly important and valuable for those kinds of people to exist where you have the full stack in your skill set. So that is a general programmer. That would be a general programmer is somebody who can develop for the full stack. So you're more adaptable to the market, which means that you're more likely to get hired at more places. If those places are looking for deep skills in a particular thing that you only have shallow skills and then you're less likely to get hired, but the truth still remains that you still have some skills in that particular thing. And many, many, many, and many employers are willing to bring somebody on and allow them to learn what they need to learn over the course of like an evaluation period or a training period to get deeper skills in particular sets of technology. So that is a huge pro for general programmers is you already have your foot in the door with a lot of different technologies and that helps you in the hiring process and probably also in the in the getting the raise process. So if you have a larger set of knowledge, then it's very likely that you will be able to fill the company's needs in a particular area more easily. So you are also able, and that kind of speaks to the second pro that I have here, you're also still able to grow in certain areas and become a specialist or a pseudo specialist where you have more skills in a few things, but you still have the general skills of many things. So this is how I would, I would see myself right so I have most of my skills set is in web development. Most of my skills are in Ruby as you guys already know I'm a Ruby programmer, but I'm also a pH I also work in PHP and CSS JavaScript full stack right. So I have had to deal with some systems levels things like systems level things like you know, sis admin stuff right very simple usually, but the fact that I have a little bit of experience in that whenever our server for instance gets hacked, which it did somewhat recently I plan on doing a show about that. Whenever our server gets hacked at whiteboard, I have the ability to go in figure out what the hacker has done what the vulnerability was on the server and fix it and avoid it in the future. Now, if I didn't have that ability, whiteboard would have to hire somebody or rely on another person inside of the team to be able to fulfill that security sis admin position, but we don't have the money. To hire a full time sis admin, I guess the better way to put that is we don't really need a full time sis admin we are getting hacked constantly. And we don't have sites that we've built that are getting the kind of attacks that would need a full time sis admin so many of our sites are relatively simple in terms of configuration and we can totally handle that and that's a general programmer's job is to be able to handle the things that you don't necessarily have to have a deep amount of knowledge in, but you do need to have some level of understanding it. So for this reason, it is possible that a general programmer could command a high a higher salary or as high of a salary as a specialized programmer. And this one's kind of up in the air, it depends on the company, it depends on the needs, and it depends on whether or not the fact that you know a little bit of sis admin is actually even valuable to the company. It could be like whiteboard that we absolutely need that extra knowledge or it could be that that extra knowledge is just kind of there right it's not going to be utilized it's just kind of in your mind, which is as valuable as you know underwater basket wave it's useless in some ways. That's a con right the tool set is huge for general programmers and it's growing and it's constantly changing what's crazy is that pro for general programmers are tool set is is huge constantly changing it's constantly growing things that we have already learned are changing underneath our feet so for instance look at get get head is running an older version of rails than the current version and you would think well that's that seems crazy get hub is like the place where all the code is wouldn't they have to run a new version of rails and the answer is no the answer is no because get hub doesn't need to run the newest version of things in order to have a working system. But that's that's aside from the point the cons of being a general programmer is to keep up with things it seems like the tool set is somewhat overwhelming to managing what things we do need to be keeping up with and what things we don't need to be keeping up with can be a little bit of a struggle and it's kind of difficult to do. So that's about all the time we have for the first part of this conversation I know that I normally don't split up the episodes that I do that are not interviews into two parts but I felt like this particular conversation is a really important one and I felt like it deserved a second episode and I don't want to take up too much of your time as you know that that's the point of the show is to keep it short and keep it sweet. I hope you have enjoyed this conversation and I hope that you will enjoy the next part of it as well if you have questions if you want to start a conversation if you want for me to cover a topic on this show please connect with me on Twitter at at Developer Teaou can also email me at Developer Teaa gmail.com or you can contact me via the form on developertea.com you click the contact link in the header of the website there. If you would like to support the show please head over to developertea.com front slash donate and that's a way that you can support the show monthly really small donation like less than a couple of tea but it makes a huge difference and I will personally thank every single person who does that you are just the best the best audience and I'm so thankful that you listen to the show and until next time enjoy your tea. Enjoy your tea.