What is lacking in Computer Science university programs

Sharing some opinions based on my experience in academia verses as a professional

What is lacking in Computer Science university programs

I'm going to preface this post with a disclaimer, I'm not writing this as some sort of authority on the subject. I'm simply writing about my experience when going from university to the work place. This will not be an exhaustive list of problems. Simply some observations that I've made when transitioning to a work environment and then having to hire recent graduates.

I graduated over two years ago from my Computer Science program. I learned a lot in university that I probably wouldn't have thought to look into otherwise. Like complexities of ranking scientific papers, technical writing, algorithm optimization, design patterns, and the list goes on. But there are some things I found the work place requires that I wasn't taught at university. I would like to highlight some of those here.

Clean Code

Clean Code is one of the biggest concepts that I wasn't taught in University. Clean Code is more than just readable code. Code should be written in a way so that it is understandable by someone who is completely unfamiliar with it. Unfortunately writing clean code is not a priority in university. As long as it works, it doesn't matter what the code looks like. This worked against me in the work place because there is not only code that I had to go back to after months, but also others not being able to understand my code properly. And if your work place does code reviews, then writing ugly code will also cause you much grief.

I did eventually learn to write clean code on my own. Mostly working with NodeJS, the following helped me a lot. But these concepts can cap be applied to any language you want to use.

Frameworks

This is one category that universities are really behind in. Academia still insist on teaching vanilla versions of all the languages they teach. Except for those that require the framework such as C# and .NET. Java, PHP, Javascript, and C++ are all taught without the relevant popular frameworks. Springboot for Java, Laravel for PHP, Node Js for Javascript, and Qt for C++ are perfect examples of frameworks that could be taught. These technologies are what the work force is looking for rather than someone who cam code vanilla Java or Javascript.

Programming rather than Language

Learning various languages is fine. It teaches different principles about the language. But a course that compares and contrasts the different languages would be, in my opinion, much more useful. A course where, given sudo code, you'd have to write that in various languages to learn about the nuances of a particular language. This course should also teach about how to pick up different languages based on they're documentation and sample code. There would most likely be other topics in this course, one being clean code from earlier.

The biggest problem

The biggest problem the academic world has when it comes to computer science is that the field is just too rapid. The professors don't have enough time to keep up with the latest frameworks for a language or the latest language itself. So they teach what they are familiar with, vanilla code and limited number of languages.

This is a tough problem to solve. I've heard suggestions ranging from, don't teach any language, just programming concepts, and the students would learn the language on an internship, to having longer programs to learn more of these topics.

I personally think a self paced online program works best for this kind of industry. But that's not the case for everyone and not a possibility for others. In which case I would prefer to be taught the concepts of clean code, algorithms, data structures, and so on, ahead of learning languages. And language courses should come with an accompanying popular framework. I think that's a nice middle ground for rapid growth problem.