UNSW CS Improvements

A couple of days ago, I received the results for my final semester in my undergrad Computer Science journey. The program was great but I felt it was lacking certain ‘real world’ skills that I would consider important in the industry.

Attending Level Up at ThoughtWorks today helped put things in perspective. They claimed that there’s a gap between the skills required in the industry and the skills students are taught. I realised universities in general weren’t doing so well in equipping their students with the necessary software development skills. Although my university does introduce us to these technologies, I feel that there is still room for improvement.

Unit Tests

Throughout my program, there was only one course that had emphasis on unit testing. In this course we were introduced to Test Driven Development from the start and had to include them in our submissions. This was a second year course, we weren’t taught in the first year on how to write tests. The only tests we did was to run the program with the appropriate inputs.

Introducing unit testing early on in the program would teach us that programs could be segmented into components and each one of them tested, rather than hacking away at the entire code base. It’s much better to verify that each function produces the correct output for it’s inputs and combine them together to get the final product.

On top of unit tests, there are also a bunch of other tests that should be introduced. Integration tests, BDD, etc, would be very useful to learn.

Comments and Documentation

We were never really taught how to comment our code. Assignments just said that we had to. I initially thought that commenting was really silly. The code can’t lie, it is what it’s doing. Why should we write what it’s doing in English just above it? In a couple of my assignments, I got marks deducted because I didn’t give comments explaining what is going on. It was an easy assignment with about 5 lines of code per question that didn’t really need any comments. Anyone reading the code could easily tell what it does.

It makes more sense to comment why this piece of code is required rather than what the code is doing. As such quality and relevancy should be a high priority. Comments can go out of date when there comes a crunch time to update the code or fix bugs.

How to write good documentation should be something to improve on. My program did get us to create these documents that were essential to software development, but it whould be great if they also taught us best practices that go along with it.

Collaboration

Most of the assignments were individual exercises. You almost never work by yourself in the industry. There is usually a team of developers working together at any point in time. Working as a team will help students to think of and architect solutions that is modular so they can work on the problem together.

It also helps to teach the importance of writing clear code that focuses on maintainability instead of just getting it to work. I know that I’m guilty of that because at the back of my head I know after I submit the assignment, no one is going to have to work on it anymore, no additional refactoring or optimisations.

In the industry, it benefits everyone to write code that is maintainable as it is likely that there will be other developers working on that code base even after you leave that job.

Version Control

I’m quite surprised how little emphasis was placed on version control. There are many benefits to version control for both individual and group work. I’ve seen groups use Dropbox or even Facebook Groups to collaborate on their code base. I’ve had friends refactor their code and couldn’t revert the changes because they didn’t use version control. It would have be great if my tutors and/or lecturers could look through my git history to see my thought process and guide me along the right path if I had any problems.

Students should definitely be introduced to version control early on in a CS program.

It is not all bad

Everything else that you would expect from a Computer Science education would be taught. I wouldn’t consider these topics to be under the CS umbrella. Although they would be highly relevant things that a professional engineer would know.

The return on investment from covering these topics in the curriculum is very high. It greatly improves the performance of a fresh graduate as he/she can hit the ground running.