Lead Software Engineer
A lot has been written about the debate over a degree as a requirement for becoming a working programmer. At first, the question was whether entry-level programmers need a computer science degree. It has slowly morphed into do they need a degree at all? More people are latching on to the code camp or online learning models. Fewer people are arguing for degrees. More people are arguing against.
I have been thinking about this for a long time, five years or more. I actually have a CS degree and have had a long time to consider whether or not it has benefited me. I also double-majored in college because I was indecisive and before I knew it, I only needed to attend one more semester to earn both. My bachelor’s degrees are in Computer Science and English with a Writing Emphasis.
After college, I decided I didn’t want to be a programmer. You’d think that would make me anti-degree. At any rate, I couldn’t find any jobs doing what I wanted to do, which was technical writing. So I took my first job in IT because I thought it would be good way to stay customer/people-focused. I learned a lot from that job about how people see and use computers. I learned that people of all ages fundamentally don’t understand computers. Some do, but really using a computer to its potential at the time (and maybe even now, if we’re honest about it) required greater than average intelligence.
Even in that non-programming position, I programmed. Before we discuss whether programmers need a computer science degree, we have to understand that all kinds of people program who aren’t programmers, and that to get anything real done on a computer, you still have to write code. The moment someone learns they can write “SUM(A1:A9)” in Excel, they are making a function call! They’re writing code! They might not know it, but they are.
From that context, it’s easy to understand and sympathize with the point of view that programmers don’t need degrees. I agree with anyone who says that writing code doesn’t require a degree. But that’s different than making software.
Let me share some more of my personal story. After that initial position, I changed my mind and moved into programming. I just dived in and programmed for about five years on a variety of large enterprise systems, based both in Java and .Net. It turns out it’s a very painful experience. Even having a computer science degree, it was painful. I shared some of my experiences in How I Learned Thousands of Ways to Write Bad Code in Just Ten Years. There are way too many gotchas and traps waiting in front of the unsuspecting programmer. Any time the audience of a piece of code is that large, and they expect a professional product, you better really have some idea of how things can go wrong.
Or you just learn the hard way, like me.
Not to say that it was all bad. It was actually quite rewarding both subjectively and objectively. One of the products I worked on was launched with coverage in The New York Times and other national publications, and won an award. Perhaps the best part was that the more curious I was, the more my mind sponged up knowledge, the more there still was to learn. Paul Robinson observed that “coding for a living is learning for a living.” That’s so true! I think that’s the single largest reason why I’ve stayed in programming.
Now, this experience of programming by the seat of my pants in front of a large audience actually resulted in something I never expected: going back and earning a master’s degree in software engineering.
Yes, that’s right. I have actually moved toward degrees rather than away from them. I have about fourteen years experience in tech now, over ten of which has been spent as a working programmer. I feel that degrees are valuable, worth the loans (do your own cost/benefit analysis though), and that they benefit the working programmer in rich ways.
But, I don’t feel that computer science degrees are necessary. There will be value in a variety of degrees. Over my career, I’ve already worked with programmers who held math, biology, and philosophy degrees to name a few. They were all excellent programmers and they always made my team better and the software we produced better.
But rather than just express my opinion that a programmer should have a degree, I want to illustrate why degrees are helpful with a common interview question, and an example from the other week on the job. The interview question is as follows:
Given an array of unsorted, positive integers, find the two indices of the earliest occurring values that add up to a target sum.
This question requires both general critical thinking skills and knowledge of data structures. I’ve discussed a possible solution from a computer science perspective in depth in a past post at my blog.
But from a critical thinking perspective, this problem requires the ability to see nothing but a series of numbers and yet develop a deterministic series of steps that always results in the right answer. And it requires that someone have a rich enough problem-solving background to figure out the gotchas in it. One of these gotchas occurs when the two earliest occurring values that add up to a sum are duplicates (e.g. 5 + 5 or 10 + 10). This snafu throws a lot of proposed solutions awry.
Now, this is exactly the kind of thing that students are being challenged to solve in a university degree all the time. When I took the GRE, it was full of questions like this — questions that require a base set of knowledge as well as an ability to apply that knowledge to a real-world scenario. This isn’t inherent in most people nor does it come easy.
Now, a lot of people are saying that these types of problems aren’t really that relevant to the programmer’s job. Some people have satirized the software industry’s interviewing process with comics like this one:
And a lot of software development feels that way. A lot of times, human needs are simple and direct. The login button should be in the corner, the text should line up. You don’t need a degree to know that, but there are also times on the job where a university degree is directly applicable.
One of them happened recently for me. We were thinking about queue sizes in a web service. We knew that, in certain scenarios, larger batches of messages would drop immediately into the queue, rather than slowly filling it up. The queue might be full with one batch. Then there would be so many minutes until the next batch. And we knew we had a certain number of connection pools with X number of connections each, and that the rate that these connections could send the messages along downstream might vary. I had to figure out if the proposed queue size was acceptable to prevent overflow and message loss.
So the question was, for given queue sizes, how fast would the downstream services have to be, and how large should the queue be, to keep up with the volume. You can see how that type of question requires a bit more thought and skill. And you might think, hey I just want to do front end development, I don’t think I’ll ever need to do something like that! You’ll soon find, though, that you care about page load time. And since you care about page load time, you start to think about all the factors that affect page load time. And before you know it, you are working on a problem as complex as my back end problem.
The moment you ask what you think is a simple question, you end up with a problem that could use the background of a university degree. Etsy asked the question, “is it worth improving the user experience of broad search queries (queries that aren’t very specific)?” and it gets complex fast as demonstrated in their blog entry about it.
And I think that gets at the heart of why I am for degrees. Sure, you can muddle your way through in the tech world without a degree. But it’s going to be painful! And there’s already so many elegant (and easy) ways to get an answer to these questions, it’s worth just spending a few years to build that base.
And on top of that base, a lot of other things besides work become easier, from personal finances to trip planning. I just don’t see the benefit in skipping the degree. It sounds, to me, like a recipe for learning the hard way, and if you’re a lazy programmer like me, or you want to be, you know that you want to learn the easy way.
So, go find a good degree that you really care about, and keep programming on the side until you graduate, and then come work with the rest of us programmers on all the exciting stuff we’re doing! I think that you’ll feel the way I do in retrospect, that a degree is worth every penny, even when you’re still paying off that loan. Good luck!
Create your free account to unlock your custom reading experience.