3
1.1
RATIONALE
Traditionally, the subject material within computer science has been divided into these topic ar-
eas (disciplines) for the pragmatic purposes of teaching at universities. Hence, a student will study
Operating Systems as one particular subject, Networking as another, and Programming as another. This
model works well in general, and has been widely implemented as a means of structuring learning in
this field.
However, there are many aspects of computer systems which cut across the boundaries of several of
these disciplines, and cannot be fully appreciated from the viewpoint of any single one of these disci-
plines; so to gain a deep understanding of the way systems work, it is necessary to study systems holis-
tically across several disciplines simultaneously. One very important example where a cross-discipline
approach is needed is the development of distributed applications.
To develop a distributed application (i.e. one in which multiple software components communi-
cate and cooperate to solve an application problem), the developer needs to have programming skills
and knowledge of a variety of related and supporting activities including requirements analysis,
design, and testing techniques. However, successful design of this class of application also requires
a level of expertise in each of several disciplines: networking knowledge (especially protocols, ports,
addressing, and binding), operating systems theory (including process scheduling, process memory
space and buffer management, and operating system handling of incoming messages), and distrib-
uted systems concepts (such as architecture, transparency, name services, election algorithms, and
mechanisms to support replication and data consistency). Critically, an in-depth appreciation of the
ways that these areas of knowledge interact and overlap is needed, for example, the way in which
the operating systems scheduling of processes interacts with the blocking or non-blocking behavior
of network sockets and the implications of this for application performance and responsiveness and
efficiency of system resource usage. In addition, the initial requirements analysis can only be per-
formed with due diligence if the developer has the ability to form a big-picture view of systems and
is not focussing on simply achieving connectivity between parts, hoping to add detail subsequently
on an incremental basis, which can lead to unreliable, inefficient or scale-limited systems (a problem
that tends to occur if the developer has knowledge compartmentalized within the various disci-
plines). This is a situation where the whole is significantly greater than the sum of the parts; having
segmented pools of knowledge in the areas of operating systems, networking, distributed systems
theory, and programming is not sufficient to design and build high-quality distributed systems and
applications.
There are in reality no rigid boundaries between the traditional disciplines of computer sci-
ence, but rather these are overlapping subsets of the wider field. The development of almost any
application or system that could be built requires aspects of understanding from several of these
disciplines integrated to some extent. A systems approach addresses the problem of topics ly-
ing within the overlapping boundaries of several subject areas, and thus potentially only being
covered briefly or being covered in distinctly different ways in particular classes. This can have
the outcome that students don’t manage to connect up the various references to the same thing,
or relate how an aspect covered in one course relates to or impacts on another aspect in another
course. Mainstream teaching will continue along the traditional lines, fundamentally because
it is an established way to provide the essential foundational building blocks of knowledge and
skill. However, there is also plenty of scope for integrative courses that take a systems approach
to build on the knowledge and skills provided by more traditional courses and give students an
understanding of how the various concepts interrelate and must be integrated to develop whole
systems.