Software engineering should be its own major

By Nico Jimenez

The explosion in popularity of coding bootcamps has proven that it’s possible to have real-world-ready skills after just a few months of intense study. So… is getting a degree in Computer Science still worth it?

I recently had a conversation with my cousin who was considering leaving a top tier university to attend a coding bootcamp in the Bay Area. I asked him about the social aspects of college, but it didn’t seem like he cared much about them. I asked him about math and algorithms - not interested either. All the kid wanted to do was write code. Considering the fact his parents are paying quite a bit for him to pursue a BS in CS, I could image why he had a great deal of stress.

Apparently, some people would rather go to work and make money than hang out for 4 years studying things they aren’t interested in. Who knew?

For most budding software engineers whose parents cannot comfortably afford college tuition, it may be wise to consider the alternative to college for software engineers: coding bootcamps.

Education Cost ($) Cost (time) Avg. salary
CS Bachelors 100K-500K 48 months 82K*
Coding bootcamp 10-20K 3 months 71K**

Given that the cost of a degree in CS is equivalent to a seed stage investment in a startup, perhaps parents should considering sending their sons and daughters to coding bootcamps, and giving them some startup cash.

Our modern economy values differentiation, and differentiation sometimes requires making unconventional bets. The idea that a college degree is necessary for employment is an outdated concept. In fact, most of the tech giants have removed their undergraduate degree requirement for developers.

The difference between CS and Software Engineering

CS is a scientific endeavor whose aim is to understand the math that underlies useful computation.

Software engineering is a practical endeavor which is to write useful programs that work as expected.

CS and Software Engineering are different in the same way that Chemistry and Chemical Engineering are. Chemical engineers need to know some chemistry, but ultimately most chemical engineering leverages chemical transformations that are already well understood.

CS is all about solving mathematical problems inspired by real world scenarios. If you write an algorithm that solves a problem with the best worse-case complexity, you’ve won. On the other hand, software engineering is all about solving users’ problems. Analytical ability still matters, but the most important thing in software engineering is taste. Taste in how specs are written, what features to include, and what features to leave out. Taste in deciding who does what on a software team. Taste in how the thing works.

The difference between CS and Software Engineering boils down to the difference between analysis and judgment.


Given the huge difference between specialized CS and Software Engineering careers, it makes no sense to combine both fields into one major. It does a disservice to those who want to learn large-scale software engineering but don’t care about linear algebra and to those who are interested in studying algorithms but are not interested in object oriented programming in Java.

Having two separate disciplines, one theoretical and the other practical, allows people to specialize rather than waste time learning things they aren’t interested in. Universities should be concerned that for some the financial ROI of coding bootcamps is higher than college tuition. By having a separate major for software engineering, universities can stay ahead of the curve, and justify the high price tag to students who want to work in the software industry.

Ryan Dahl, creator of Node JS perfectly illustrates the ethos of software engineering:

I hate almost all software. It’s unnecessary and complicated at almost every layer. At best I can congratulate someone for quickly and simply solving a problem on top of the shit that they are given. The only software that I like is one that I can easily understand and solves my problems. The amount of complexity I’m willing to tolerate is proportional to the size of the problem being solved…

Those of you who still find it enjoyable to learn the details of, say, a programming language - being able to happily recite off if NaN equals or does not equal null - you just don’t yet understand how utterly fucked the whole thing is. If you think it would be cute to align all of the equals signs in your code, if you spend time configuring your window manager or editor, if put unicode check marks in your test runner, if you add unnecessary hierarchies in your code directories, if you are doing anything beyond just solving the problem - you don’t understand how fucked the whole thing is. No one gives a fuck about the glib object model.

The only thing that matters in software is the experience of the user.