This has pushed more and more students into computer science and computer engineering university programs, each looking for a leg-up on the competition when the time comes to enter the workforce. But, are these programs really providing graduates with the skills that they need once they begin working in the real world?
The Knowledge Gap
The skills that developers need when leaving university can differ greatly from the topics that are focused on as part of their curriculums. The fast rate of change in technology, the increased focus on targeting newer platforms like the web, and programming industry trends ensure that, at best, students will have practical skills with only the longest-lived tools.
While this may save students from ultimately studying concepts based on trendiness, the fact of the matter is that graduates who are not exposed to these technologies are at a disadvantage both in their job search and after being hired.
Another core aspect of professional software development is the focus on software craftsmanship. This is a broad concept, but many of its aspects boil down to the idea that software developers are responsible for precision, predictability, measurement, risk mitigation, and professionalism, among other things.
Image courtesy of Bigstock.
The idea of craftsmanship also pushes developers towards continual improvement and growth in a bid to better practice their craft. These are values taken from other professional engineering disciplines, but most university curriculums focus instead on the science of computing rather than these professional values.
While they are otherwise capable of constructing software, many graduates lack these auxiliary skills that professional developers cultivate on the job. Though it is partially the responsibility of older, more experienced developers to impart these ideas onto the next generation of graduates, the reality is that the software developer workforce is extremely skewed towards younger, less experienced developers.
If universities do not focus on software craftsmanship, then graduates are more often than not left with very little understanding of this important aspect of professional software development.
While modern technology and software craftsmanship are areas where universities are lacking in focus, there are some important skills that graduates have over other software developers without a university education. Computer science and engineering graduates very often have a good intuitive knowledge of fundamental programming ideas that developers educated on the job may lack, for example.
A firm grasp of the fundamentals can go a long way in providing enough context for a junior developer to know what questions to ask, and provides a valuable perspective on solutions to an entire catalogue of problems such as efficient sorting algorithms, runtime complexities, and other issues that their peers may not be able to resolve.
While university graduates do have several skills that can give them a leg-up once entering the workforce, there are other areas where many graduates will be underprepared.
Specifically, university programs do not offer much in the way of providing instruction on modern web technologies or the idea of software craftsmanship. Any student looking to fill the gaps in their education would be well-served spending some time improving these skills, and universities trying to provide a more well-rounded curriculum would benefit from bolstering modules focused on this content.