Functional, HCI, Law, and more
Outside of the more traditional modules, I have also taken more varied modules as part of my course. These cover
areas of computing such as functional programming using Erlang, Human-Computer Interaction theory, computing law,
professional ethics, pure computing algorithms, networks and hardware, first-order logic, and
I believe that having a broad range of skills is a crucial advantage as a software developer. Understanding a wide
set of computing (and non-computing) disciplines allows a developer to approach problems with a greater understanding
of user's needs, appropriate coding styles and techniques, and hidden requirements (for example, relating to obeying
laws). It also allows more innovative solutions to be developed by combining ideas from different areas.
Feature - Deadlock and Social Network
HCI - HCI was my favourite module in first year. Learning principles and rules of human vision, psychology and perception
in order to be able to create a usable product is a vital skill in my opinion, and has definitely affected my
approach to software design to make me much more user-aware. I frequently notice user-unfriendly design
decisions in real software, from colour schemes to error messages, and I believe that developers should have more
of a sense of awareness and duty to make user-friendly software.
Law and professional ethics - The law and professional ethics module, despite being optional at my university, was an essential course to
take in order to be a responsible developer. Understanding the laws the UK has in place regarding cyber crime
is important, but the discussions around professional ethics were truly eye-opening, and highlighted the
power which developers have without even realising it. I was shocked by some of the mercenary attitudes
displayed towards development, where people would do anything for money without considering the consequences,
as well as the inability of the courts to prosecute anyone in many cases where consequences were
life-changing or even fatal.
Algorithms - The algorithms module taught us many of the essential computing concepts which can be applied to problems
in all areas. We covered concepts like linked lists, trees, graphs, priority queues, different types of
sorting and big O notation.
Hardware - We have covered the fundamental components of computer hardware, the architecture of operating
systems, and have also created our own original projects using an Mbed and FRDM system.
View Mbed video >
Computing-related maths - We have learnt various areas of maths, including matrix operations, statistical analysis, first-order
logic, and finite-state machines.