What is lacking in Computer Science university programs
Sharing some opinions based on my experience in academia verses as a professional
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 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.
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.