Computer Science Degree Optional - Part 1, Skillset

FEB 28, 2017 • Written by Nickie McCabe

A commenter on dev.to recently posed the question, “What should someone without a computer science degree focus on learning?” As someone who was lucky enough to know I wanted to study computer science as an 18-year-old, I thought I’d weigh in on the topic. I had some ideas floating in my head about what I considered most important, but also decided I’d poll my colleagues to get their opinions.

David was one of the first to weigh in:

  1. Testing
  2. Testing
  3. Testing
  4. Version Control
  5. Objects/Encapsulation/Classes
  6. Testing

Reading his reply literally made me laugh out loud. While I learned a good deal about the basics of object-oriented programming, in my four years as a computer science major, I never used a version control system and my testing tended to cover a maximum of three “happy path” scenarios and nothing else. As I began to write my post about what computer science concepts someone without formal CS training should learn, my mind kept circling back to this: you don’t need a computer science degree to be a great developer.

At my previous employer, we always had a handful of college interns work with us each summer. At the end of the summer, they’d each give a short presentation to the entire team detailing what projects they’d worked on over the past three months and what they’d learned. I distinctly remember when one of my favorite interns stated in her presentation that she’d learned more about programming in her three months with our company than she had in her three years of computer science classes at a highly-rated engineering school. Thinking back to my first few months out of college, I completely agreed.

Though I think many computer science degree programs are changing, and have likely changed greatly since I was in school, much of what I learned was either incredibly low-level computer logic or theoretical. While classes like Discrete Mathematics and Theory of Computing were often extremely interesting, and certainly provided good context and value to my general computer science knowledge, the number of times I’ve needed this knowledge in my professional work is very rarely, if ever (I did once find a real-life use case for the pigeonhole principle and was completely beaming at the realization).

While I did learn a lot in my undergrad program, I think it’s very important to again note some of what I didn’t learn:

  • DevOps (DevOps? Did I even know what that meant when I graduated?)
  • Using a version control system (Unless appending incrementing numbers to all of my file names counts?)
  • Thorough testing and test-driven development (No one ever has an apostrophe in their last name, right?)
  • Debugging in a production environment (The issue is only happening in production, but I can’t actually make any changes in production?)

And the list goes on! But I point this out, because so much of what goes into making a great developer CAN and often MUST be learned on the job. In a field too often plagued by one-upmanship, it’s important to remember: your diploma (or complete lack thereof) doesn’t define you. While having a background in mechanical engineering, or English, or psychology does mean you don’t have a background in computer science, most importantly, it means that you bring an additional skillset and a different point of view to your development team. Diversity, especially diversity in thought, helps drive innovation and is vital to successful development teams.

As someone who often struggles with confidence in my own development skills, I know that this post alone won’t lessen any feelings of computer-science-related imposter syndrome. Still, I think it’s good to remember that your skills as a developer are not dependent on a specific undergraduate degree. The depth of your skillset is truly in your own hands.

And as for “What should someone without a computer science degree focus on learning?” I think there are a number of more traditional computer science topics that all developers should be aware of. And I’ll be sharing those in my next post. Stay tuned!