Are Computer Science and Engineering Programs Preparing Graduates for Success?

one week ago by Sam Holland

Throughout the last decade, the availability of jobs involving programming skills has steadily grown.

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.

Languages like Java, C++, and Python are all popular tools used as part of university modules because of their relative permanence when it comes to the tools used in the industry. However, these tools represent only a small subset of the available technologies that professional developers use on a daily basis. Other choices, like JavaScript, aren't well represented when it comes to university courses.

According to the 2019 stack overflow report, the largest percentage of respondents classified themselves as either full-stack (54%), back-end (50%), or front-end (33%) developers. All three of these positions overwhelmingly use JavaScript as their tool of choice, however, universities rarely offer comprehensive courses on this technology.

Out of several of the largest European universities, the University of London is the only one to offer a module that includes JavaScript, and even then it is part of a larger module dedicated to general web development.

This apparent oversight is most likely due to several factors—including JavaScript's relative youth, when compared to other programming languages; the more recent growth in web technologies; and academia's general sluggishness.

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.


Software Craftsmanship

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.