… And my job is to develop software. I have an IT-related degree, but not in Computer Science. I used to feel ashamed of this. But losing some brown hair and gaining some grey hair (and losing a lot of hair in general) has taught me that a CS degree doesn’t make you a good developer.
Some of the most brilliant software engineers I have worked with in my career have been art, history or philosophy majors. And with some hindsight, this makes total sense – Software and coding is mostly art and part science.
I’ve been known to get on a soapbox and tell others that I believe the majority of software developers today are digital plumbers. And I mean this as a great compliment. Real plumbers are talented, smart people who do very important work in our society. They also get paid handsomely for it, much like software developers.
The majority of modern web applications and mobile applications require using pre-existing frameworks and libraries that do a lot of advanced mathematical heavy lifting for you. If we go back to the plumber analogy: Guess what don’t plumbers don’t do? Make pipes. Qualified engineering firms do that. Plumbers are doing the work of installing pipes in people’s homes so they can have clean water. This is very important work.
As software developers, our frameworks and libraries are our pipes, and we are the plumbers making things happen for real people in real life. We all should be proud of this.
I am a firm believer that the majority of tech related work does not require advanced science or engineering degrees. Much like being a plumber doesn’t require a college degree, it requires a lot of hands on work and training.
In software, if you know the basics, you can be a wildly successful developer. My definition of “the basics” is the following:
- Data Structures (Lists, Linked Lists, Sets, Graphs, etc)
- Algorithms (including some basic Big-O analysis)
- Working knowledge of databases: Basic SQL and general knowledge of different database types and how to interact with them)
- Some object-oriented programming
- Some functional programming
- Working knowledge of the Linux (*nix in general) command line
- Working knowledge of a source control system (I default to Git here nowadays)
- Working knowledge of a scripting language (can’t go wrong with Bash)
You might have to start low on the ladder, but if you know these things you have the tools to work your way up.
If you want to work for a technology pipe-maker (e.g. working on new Machine Learning algorithms or other advanced tech), then yes – you need a Computer Science degree. And more power to you, my friend. Those people are extremely valuable in a different way. Plumbers can’t plumb without pipes, right?!
In most software developer jobs, perseverance, attitude and passion for the job are far more important than advanced CS skills. So is your desire to be part of a team and help others. So is your desire to build things of quality.
Possibly most important is your creativity and ability to break the mold of existing thought processes to simplify and make things easier.
I also believe that requiring these degrees when hiring is a form of bias. There are many qualified engineers out there with diverse backgrounds all tech hiring managers should be considering.
Related to this topic, please check out No CS Degree – This site contains a lot of interviews with people who have No CS Degree and share their story. It’s inspiring.
If you made it this far, thanks for reading, and I thought I would also take the opportunity to share my own story with having No CS Degree and the impostor syndrome I had for years:
After taking a few introductory Computer Science courses freshman year in college, I switched majors. I was not interested in learning how to solve math problems with C++ (this was 2001…). I went on to graduate with an IT degree, and really enjoyed my courses and learned quite a bit. The courses were much more practical and focused in terms of delivering results for businesses. In that degree program, I even took a few more programming courses. But I didn’t get the theoretical computer science and math background that many developers have.
For a long, long time I was ashamed of this fact. Out of college, my first couple of jobs involved gathering requirements for applications and also acting in “project manager-y” type roles (I wasn’t experienced enough to really be a project manager). I fell into coding when I got the chance to work on a team developing a small application. And I found that the handful of programming courses taught me more than enough coding to do well. And years later, I’m so happy I fell into it and am enjoying the confidence that comes with being older and wiser.
I have never worked on applications that require lighting fast searching of millions of web pages, or heavy mathematical lifting. I write web applications for modest amounts of users and the backends that support them. But even though those applications might not be Facebook or Google, they are important, and the systems are complex because of the amount of integrations with other systems they have. Keeping those complex systems as simple as possible (as well as the code within them), is a huge challenge in and of itself with a combination of communication and technical challenges. It’s the art, rather than the science of it, that appeals to me.
And I love all of it.