What I didn’t learn in my in CS degree

Chip Keyes
Helpful Human
Published in
6 min readMar 23, 2017

“Someone please save us, us college kids!
What my parents told me is what I did.
They said go to school and be a college kid,
but in the end I question why I did”

— Relient K

Relient K opens their song College Kids with these lines, and they continue on making comical jabs at the romanticized view we often have towards education and academia.

While the song is meant to be a joke, and I’m incredibly grateful for both my biochemistry undergrad and my master in computer science, I thought the lyrics seemed right to kick off a discussion on the challenges of the gap between formal academic coursework and “real life” work.

Twice now I’ve completed a formal degree and entered into a full-time position in the field to which my degree pertained. In both cases, I discovered that while I was capable of fulfilling the role, there was a significant gap between my coursework and the knowledge that I needed to learn to be successful.

Now, it’s certainly not a profound breakthrough that coursework does not —and cannot — give us all the information for every possible scenario. That’s why we have programs such as boot camps, continuing education, online training and, of course, on-the-job experience to allow specialization and expansion of our knowledge base. It was, however, a surprise to me that so many of the courses started out flawed and left me wanting more.

Hopefully, my thoughts on this experience will give students some insight on how to get more of their courses, and teachers insight into how their courses could be more valuable to their students.

The Problems

Learning Yesterday’s News

I’ll be the first to say that there is a huge benefit to understanding the history behind methods. There are certainly timeless lessons and dismissing them because they are ‘old’ or ‘outdated’ is a sure sign of naivety and immaturity.

That being said, one of the biggest disconnects between my academic courses and the real world was their adherence to old practices and their slowness to adopt new methods.

I actually took a web development course that spent only a single unit looking at Javascript and had us building our entire web application with Java and JSP…in 2015.

Bottom line? If we want students to learn how to work with today’s tools, we need to teach them today’s industry standards.

Learning Contrived Scenarios

Another challenge facing formal education is the lack of experience students receive working on real life projects. To be fair, I think this is a problem within many facets of learning, including online, tutorial, and formal.

If all of our tutorials and courses go through how to build a Todo application…guess what? We’re going to have a lot of great Todo apps and not much else.

The advantage that modern boot camps are giving to their students, which the academic courses seem to be overlooking, is the experience working as close to real world examples as possible.

It was common for my courses to have a project that extended the length of the course and while it was nice to have the continuity from module to module, I often found the projects very contrived. As someone that learns by example and carries those examples over to other use cases, this made it hard for me extrapolate the overall concepts into other more useful scenarios.

On top of this, the courses tended to breeze over some of the more useful topics as they were deemed “too complicated” to go into for the course. We built a very thorough Todo application in a Ruby on Rails project, but used a library to extract away the very useful concept of OAuth and session management — a topic that comes up in almost every project and that I still struggle with today.

Bottom line? If we want to train students so that they can quickly jump into an industry position, then we need to teach them how to solve industry-like problems.

Which leads me to my next point…

Theoretical reality

Piggybacking right on top of contrived scenarios, is teaching students with a firehose of theory and expecting them to pick out the droplets of practical examples for use in real projects.

This is a big one, as it starts from day one in Introduction to Algorithms and Data Structures. It hurts me a little to call this one out, as I’m someone that would be perfectly content just studying theory.

But at some point, my more practical side says, “Wait, is it really important to understand the theoretical proof of why a specific algorithm is bounded at O(lg(n)²+k/2 )?”

In most cases, the answer is no, even if you do use that algorithm.

I understand that many professors would argue that those questions are very important and I would agree…to an extent. I started a course on machine learning hoping to apply some of the principals to some real problems. After about a month, I realized we would spend the entire course reading scholarly articles and machine learning algorithms and would spend zero time applying any of that knowledge to real data. I ended up dropping the course, deciding I could dive into some more practical tutorials and reading on my own.

Sure, I was able to pull out some valuable lessons from these highly theoretical courses, but I believe reading scholarly articles and deriving mathematical formulae makes you really good at — you guessed it—reading scholarly articles and deriving mathematical formulae.

You don’t become an Olympic athlete by sitting in a classroom learning the correct way to swim a butterfly stroke. You become an athlete by doing that activity over and over and having other experienced athletes perfect your theory on the go.

Bottom line? If we want students that can apply good theory to real world problems, we need to incorporate good theory into real world projects, not the other way around.

To the Students —

As I progressed through my curriculum and found that finishing a course on a topic did not instantly make me an expert on that subject, I began supplementing my learning as much as possible with my own “curriculum”.

I adopted a mentality towards soaking up as much information in my area of study as possible.

In fields that change rapidly, to the point that even one-year-old technologies are out of date, you must be vigilant to stay on top of new topics and emerging technologies.

If you find yourself unwilling to devote energy to external learning, are content with current technologies, or are afraid to change the status quo, then you are already miles behind the times.

To the Professors —

Keeping curriculum up-to-date is not an easy feat, especially when the subject matter is in a rapidly changing field. It’s impossible to expect a course to always stay in sync with the latest languages, frameworks, techniques, etc.

Furthermore, just because something is new doesn’t mean it should be automatically incorporated into a course, or that the previous curriculum is outdated or no longer valuable.

However, these are not excuses to remain tied to a course that was designed five or more years ago simply because it was a good course back then or because it requires a complete overhaul. Regardless of the value of the older material, students are expected to be familiar with new concepts when they enter the workforce.

Just as those students have a responsibility to push beyond what they learn in the classroom, professors must push beyond what they taught in the classroom in years past.

As a final note, I want to reiterate that I am very grateful for my education and I hold a great amount of respect for my professors.

I only mean to highlight where, in my experience, my education seemed to be lacking. Those gaps are as much on me as they are on the program or any one course.

As both students, professors, and, ultimately, industry leaders, we must take responsibility for our field’s education, including where it falls short and what we need to do to fill that gap.

--

--