Soft(ware) Skills

Many of today’s computer science students are leaving education insufficiently equipped with the fundamental skills needed for professional coding. They may understand algorithms, data structures and everything around how to design code very well, but less so what is involved in bringing a project to fruition.

Software development is unlike most professions, because developers have to both design and build. Increasingly, coders are getting involved further and further down the technology stack to get their wonderful code into a user’s hands. The so-called adoption of “full stack” development means they have to master, at least to some degree, a wide ranging of skills beyond Ruby or JavaScript. It’s like asking construction architects to also be skilled at brick-laying, plastering and welding.

There’s a dirty little secret that rarely gets discussed in public, let alone in universities: coders sometime have to fix bugs! (Obviously, not in their own code which is always perfect). Whether a solo or team project as part of course module or final dissertation, the work almost always starts as a clean project. Code can be beautifully structured, regularly re-factored and unencumbered by requirements for audit trails or security tests. Besides the usual pressures of deadlines, students are never interrupted by a stressed manager insisting they drop everything to address a bug in a live system that was built 10 years ago. They never have to beg to some systems administrator to apply “a simple little fix that’s going to be fine, honest.”

The real world is a messy, noisy and, often, frustrating place.

Many courses offer the chance to take internships or placements with businesses as part of their courses and students returning from them have a much richer understanding of the pressures and reality of real world coding. In my conversations with students and course leaders, they frequently talk of how much more mature the student is when they return. This exposure to the pain is usually a positive experience although for some it’s a chance to realise that perhaps their dreams lie elsewhere.

Read also: Why coding skills are not enough for a developer to get hired

Is it possible to make courses more relevant for the real world? I do not claim to be an educationalist nor someone who has ever written a syllabus, but based on what we see in the industry, here are some areas where computer science tuition could improve.

Problem-solving skills – this is one of the biggest challenges facing most people entering the world of work and that includes software developers. During their education, their coding experience was probably based around assignments focused on teaching a single lesson or skill. Picking up an existing body of code, forensically identifying and fixing bugs, validating the changes and running through integration and deployment stages could more accurately simulate the kinds of challenges students will face later.

Collaboration and communication – developing software is like being part of a sports team, with multiple contributors who together have the skills and roles to deliver a final product. Software development courses often include some group working where people get experience of coding alongside other students, but anecdotally, we hear that too often the bulk of the work is carried out by one or two individuals.

The exception to this observation is curricula that focuses on games development, because learning how to be a team player is so fundamental to that environment. Graduates from these educational establishments are frequently well-versed in basic Agile development principles and task-tracking, making it easy to slot them into development teams.

Read also: 6 secondary skills for software developers

However, students who end up working in more mainstream enterprises or the public sector will equally benefit from learning to be team players. Also, developers need to learn how to communicate what they are doing, not just with each other, but to customers, who may be colleagues in other, non-technical departments. Being able to articulate their work, what they need from the customer or what roadblocks need to be overcome is an essential part of software developers’ roles.

So courses need to focus on three further elements: one, encourage ‘team player’ mentality; two, task every individual to contribute to a project in a definable, transparent way; and three, communication skills, which is most definitely not something that can be learned in isolation.

Understanding someone else’s code – learning how to read and decipher other people’s code is an important skill to acquire, since much of a developer’s typical daily role is about modifying existing code that was written by someone else.

The problem is that course homework is usually focused on an individual composing their own code. This isolated approach can encourage evolution of coding behaviours that are not conducive to working with other team members. For instance, unnecessarily creative indenting strategies could be obtrusive and downright annoying for future peers.

So what’s the answer? Encourage the use of placements and provide support to students chasing the limited places available. This is a call out to employers as well – placement students are not an expensive drag on your time (nor are they cheap labour) they are an investment. They’re also a chance to bring modern, up-to-date thinking into a team that may be long out of university. Many of the most talented programmers I’ve worked with started their careers at the company as students on placements. Long-term group projects will help students to learn how to interpret someone else’s work, especially when involving pre-existing, “legacy” code. Another option for this is to encourage students to use or modify open source libraries that expose them to other coding styles, to explore other development tools outside the curriculum. Playing with APIs will to not only expand students’ overall knowledge, but also teach the process of learning and working with new technologies. This is a useful skill that will pay dividends for years to come.

Read also: Learn to code, it’s harder than you think

Obviously, there is no substitute for real-world experience, but the educational process can go a long way to helping prepare software development students to be ready for the world of work, looking beyond technical expertise to more ‘soft’ skills, such as project management , team-playing and communications. Tackle those and tomorrow’s professional software developers will be better equipped not just to design but to also construct beautiful code.