Teaching Universal Design in Computer Science
Damian Gordon,
School of Computing, Dublin Institute of Technology,
Abstract
Creating software is a complex skill to learn, and typically students are concurrently taught the skills of both developing computer programs, and designing computer programs. There are a significant number of software design approaches, ranging from the early "Code & Fix" approaches to the more modern Agile methodologies. These approaches focus on the design of the overall system, including the user interface.
Universal design in ICT tends to focus on the user interface element, as it can easily be appreciated in the context of ideas like User Experience (UX), Human-Computer Interaction (HCI), or Visual Design (which uses Wizard of Oz prototyping). User interface design considers how a user will experience the software, and recommends that programmers ensure that the interface is as simple and efficient as possible, in terms of accomplishing the users' goals. The ISO standard for the ergonomics of human-computer interaction, ISO 9241, recommends seven dialogue principles: (1) Suitability for the task, (2) Self-descriptiveness, (3) Controllability, (4) Conformity with user expectations, (5) Error tolerance, (6) Suitability for individualization, and (7) Suitability for learning. It is clear from this standard why the principles of Universal Design are a good marriage to the user interface elements of software design.
An often overlooked element of universal design in software design is to consider the software itself, on how it is built, and how it is formatted, using the lens of universal design. It is worth considering that typically when software is being modified or updated, the developer who alters the software will not be the same one who originally developed it. The new developer may have very different circumstances than the original developer when trying to comprehend the purpose of the code. The new developer may not have the same type of computer screen (and therefore would have different display settings) as the original, the new developer might not have English as their first language, the new developer may have visual impairments, the new developer may have a different type of printer (and therefore code will look different on the printed page). Given that the reality is that most code will be modified by a developer who may be unknown to the original developer, it in important that code is designed (both in terms of build and format) in such a way that it is future-proofed and therefore universally designed.
The notion of universal designed code finds good parallels in existing approaches, for example, defensive programming (or secure programming) focuses on improving software and source code under three principles: (1) General quality, (2) Making the source code comprehensible, and (3) Making the software behave in a predictable manner. These principles agree well with the universal design principles, and highlight the importance of ensuring design for all not only in the user interface, but also in the code design itself.