Good question! Even though we are Computer Scientists and should know this; when it comes to defining Computer Science, quite a bit of hand-waving often ensues. There are certain accepted definitions of Computer Science, and these help a great deal in clarifying what is now a very diverse field indeed. I shall use one such definition to help discover what the influences are on Computer Science curricula, hence reaching some conclusions about what is essential for a good Computer Science course. The definition that follows is from the Encyclopedia Britannica, and is long! (but don't worry - if you're really not interested in reading it - I've summarised it further on):
Computer science is the study of computers--namely, their design (architecture)
and their uses for computations, data processing, and systems control. Computer
science includes engineering activities such as the design of computers
and of the hardware and software that make up computer systems. The field also
encompasses theoretical, mathematical activities, such as the design and
analysis of algorithms, performance studies of systems and their components by
means of techniques like queuing theory, and the estimation of the reliability
and availability of systems by probabilistic techniques.
Since computer systems are often too large and complicated to allow one to predict the failure or success of a design without testing it, experimentation is incorporated into their development cycle. Computer science is generally considered a discipline separate from computer engineering, although the two disciplines overlap extensively in the area of computer architecture, which is the design (and study) of computer systems.
The major subdisciplines of computer science have traditionally been (1) architecture (including all levels of hardware design, as well as the integration of hardware and software components to form computer systems), (2) software (the programs, or sets of instructions, that tell a computer how to carry out tasks), here subdivided into software engineering, programming languages, operating systems, information systems and databases, artificial intelligence, and computer graphics, and (3) theory, which includes computational methods and numerical analysis on the one hand and data structures and algorithms on the other.
Phew! There is nothing revolutionary in this definition, although mentioning engineering principles is interesting, and is relevant to the essentials of a CS curriculum. We will see why this is important when we come to look at industry's expectations later on.
The definition that the Encyclopedia Britannica gives can be summarised to the following:
I don't think that any of you would doubt that an appreciation of hardware is important for Computer Scientists. Hardware appreciation allows us to ensure that software is designed appropriately, and that we have some idea of what to do when things go wrong, Admittedly we haven't seen too much hardware so far, but that is probably because the Computer Science course at Nottingham is software biased.
However much a course is biased in one way or another, the students will generally experience some of each of the points shown above. In our case we were given the low-level components as part of Digital Systems Design (the building blocks that make up computer systems, like RAM); whilst the more abstract features of this topic were covered by Computer Systems Architecture (how these building blocks are used to form computer systems - the Implementation layer). Because of this we had fairly detailed coverage of each (the current first year don't have as much of the low-level content since DSD is no longer compulsory).
Here's another core element where there is little doubt as to it's content. In case you are wondering why the last two items are in italics, well that's because they are undoubtedly major sub-disciplines of Computer Science, but aren't really essential for a good appreciation of Computer Science. It is not that I have anything against either (I do graphics btw), but they are a result of a combination of some of the four main software components of a Computer Science course (not italicised). A good feature of the course at Nottingham is that students have a choice to branch out into either section rather than having AI or graphics forced upon them.
This is the final essential component to the textbook definition of Computer Science. As you can see from the definition list above (and probably know already), there are three parts to the theory component. The first of these - computational methods is basically the material covered by Machines and Languages; i.e. automata theory, formal specification and so on. The second - numerical analysis consists of set theory, logical, numerical and algebraic reasoning, combinatorics, probability, graph theory and so on (covered by Maths for Computer Science 1 & 2). The final section here is algorithms and data structures, an undoubtedly important course, and one of the less abstract theoretical components of the Computer Science curriculum.
Good point. As far as essentials for the Computer Science curriculum are concerned, one would have a difficult time arguing against any of the above points since they form part of the definition of Computer Science. There is nothing really revolutionary in this definition, but it is nonetheless important to look at the definition since this forms the basis for most courses (usually at least 3 semester's worth of modules). As I am sure you realise, it is not just the definition of Computer Science that influences the content of Computer Science courses. There are many other considerations, one of the most important of which for us is industry (since most of us will go into industry). The next section looks at industry and it's influence.
|This page was created by Anthony Jaroslav Truhlar.
Last modified on Tuesday, December 1st at 23:59 GMT.