I have started studying Computer Science at University more than 10 years ago. Now, with Bachelor’s and Master’s degrees and a few years in the industry, I look back reflecting at the value of these degrees.
Are Computer Science degrees worth the effort?
Before going into details of what I wish I knew before going into the world of professional software development, I want to address the most commonly asked question, whenever the topic of degrees comes up:
Computer Science degree – Bachelor’s or Master’s, from a good university is definitely worth the effort.
This is not to say that you can’t make it in this industry without the degree! You definitely can, but this is not the question.
I see the major value in degrees coming from these main points:
- You will have many more door open for yourself from the start. Some companies will not talk to you if you don’t have a degree unless you have some exceptional experience.
- You learn broad fundamentals of computer science (and often mathematics) that will serve you well.
- You get exposed to academic rigor when having your work judged- the value of that comes mostly with any degree (not necessarily a Computer Science one).
- Finishing your Master’s (or Bachelor’s) may be one of the first large projects you get to finish.
- It can teach you much more than just computer science if you stay open-minded.
- Many more that may differ per university and per individual.
With that thought out of the way, let’s look at what most university courses don’t teach you.
Software development practices
One thing that is not taught nearly enough at universities is how software is actually made. I assume here and throughout the article, that one of the goals of Computer Science degree is to teach you how to make software.
I don’t think you should necessarily learn details of Scrum, but on the other hand why not? You learn Java or some other languages of choice, why not learn a development framework? These things are way more important that you may assume after getting a degree (if it is anything like mine).
Maybe this is something that is genuinely better taught with practice, and many universities do a “year in industry” kind of programs that cover this well. Even taking this to account, it feels that your standard university workshop and set of exercises will make you think that software development is not so heavily collaborative.
Moving on from Scrum and Agile in general, it would be good if things such as Code Review or Source Code Control (perhaps with Git) were explored more.
Are these topics too concerned with working the actual job of a software developer to be part of Computer Science degree? I think there is space for such topics. Let me know your opinion in the comments.
The importance of frameworks
You spend three years using Java (or some other language of choice), acing all the classes and you think that you are ready for the real world… Then you join a company and you are hit with Enterprise Java, Spring, Grails or whatever else is popular these days!
I certainly don’t advocate for universities to start teaching frameworks, but maybe framework design class would be a good idea? Many of us learned how to write a compiler, but hardly anyone learned how something like Spring gets written.
Even if you are not going to be learning about frameworks, understanding their use and importance in modern software development is important. Many new graduates have the urge to write things from scratch and are shocked looking at dozens of frameworks being used in enterprise architectures.
Perhaps the answer would be to teach how to learn these things? This is something that most developers naturally pick up in their careers. The more you know the easier it is to learn and understand how these things fit together.
When it comes to the massive importance of backend and frontend frameworks and how universities should approach this subject- I have more questions than answers! Perhaps, that’s why it is not addressed very well at the moment.
Software development career
Another area where people may disagree with me. Some may say that universities should not be teaching about career… Why then do they provide industry placements, CV classes, and career workshops? It seems that people running computer science departments all around the world are understanding the importance of that!
I think universities are doing what they should already, but many students underestimate the importance of these things.
Some of the things worth knowing before entering the world of professional software development:
- Differences between small and large companies
- Difference between startups and established organizations
- Backend or Frontend development? Should you specialize in one or both?
- How to negotiate a salary.
- How to be a good team member and how to provide feedback well.
- Should you learn many programming languages? Which ones? Does it matter?
- What are the other roles that you can do when it comes to software? Testing, Business Analysis, Design, Management? How do you get there?
- Many many more.
Overall, there are tons of interesting questions that I did not even consider when attending a university.
If you are fresh out of university or have never considered these questions before- think about them, do some research. It may help you a lot!
The goals behind Computer Science degrees
I don’t want people to misunderstand what I am saying here. I don’t criticize universities for not teaching everything possible about Computer Science and the job of Software Developers. I want to highlight things that you may be missing if you don’t have much experience beyond the degree itself.
I think the important goals of Computer Science degrees these days should include:
- Teaching fundamental computer science
- Teaching how to program in some languages
- Getting students started at writing some software
- Getting students ready to pursue a further academic career if desired
- Getting students ready to pursue a software related career if desired
Most good universities do well on all these points. Bachelor’s or Master’s degree only gets you started on your career- there is more to learn.
Overall I really enjoyed the time I spent at the two different Universities I got my degrees from. I think it was a valuable and well spent time, where I learned a few languages, a lot about core Computer Science, Machine Learning, OOP, Functional Programming… and yet got surprised by the realities of writing software in the real world!
Clarification: I hold Bachelor’s degree in Mathematics with Computer Science and Master’s degree in Computer Science.