The value of college education in general is a hotly debated topic these days, especially in the US. I’ll focus here on computer science education. There is little question that the average (and even most of the less than average) comp sci graduates will have no problem landing a job right out of school. The shortage of good software engineers is getting more urgent as more and more of our world is run by software. So, economically it may be a good decision to pursue a comp sci degree, although many vocational programming schools have popped up and apparently place most of their graduates.
But, how much value does the comp sci education provide to the aspiring software engineer once they’re out of school and successfully land their first job? How much value does an organization derive from the academic training of a college educated software engineer?
In my opinion, not much at all. I have a computer science degree. My son just started a comp sci program. I interview a lot of software engineering candidates with and without degrees.
The curriculum hasn’t changed much since my days (more than 25 years ago). The material is appropriate academically and computer science is a fascinating field, but what is being taught has very little bearing on the day-to-day tasks of a software engineer.
The real world is super nuanced. Take, for example, the very important issue of performance. The performance of a system has so many dimensions and can be improved in myriad ways: changing the requirements, improving perceived performance, providing approximate results, trade off space vs. speed vs. power, trade off flexibility vs. hard coding, selection of libraries, how much security and debugging support do you throw in, selection of file formats and communication protocols, hardware, caching and more. Then, there is of course algorithmic complexity, but even then, most of the time, it is about intelligently mixing together existing algorithms and data structures. In all my years in the industry, developing high performance production systems and working with other engineers who developed low-level code and inner-loop algorithms, I don’t recall a single case where formal analysis was used. It was always about empirical profiling, identifying hotspots and making appropriate changes.
Note, that pure computer science is very important for advancing the field and it is applied by a very small number of people who do basic research and core technology. It’s just not especially relevant for the day-to-day work of the vast majority of software developers.