What is Computer Science ?
Computer Science is a diverse and broad subject: it covers topics that range
from the design of computer hardware through to programming that hardware to
do useful things, and applications in areas such as Science, Engineering and
the Arts. A modern Computer Science degree will often see students study
topics that could be described as applied Mathematics (e.g. cryptography),
applied Psychology (e.g. human-computer interaction), or applied Biology
(e.g. bio-informatics). As a result, it can be hard to capture what Computer
Science is really "about". This web-page is an attempt to do this
by providing resources and links which we think will help. In particular,
we've developed a range of material that explains various topics in Computer
Science at an introductory level. You can think of these as "mini"
lecture courses: if you find them interesting, the chances are you will be
interested in studying Computer Science at the University of Bristol.
Please note there is a mistake on page 12 of "Artificial Intelligence
through Search: Solving Sudoku Puzzles". Instead of "putting a 4 there
forces the use of a 4 in cell L" it should read "putting a 4 there
forces the use of a 1 in cell L in order to make the row
valid". Thanks to Ram Narasimhan for pointing this out.
What is Computer Science - An Information Security Perspective
An extended set of notes at the same introductory level, but focused
on information security can now be found for download at
Frequently Asked Questions (FAQs)
- Why are you doing this ?
Recruiting students to do Computer Science degrees is quite hard work.
Partly this is because school subjects such as ICT can give the wrong
impression of what Computer Science is about at University. These
documents are an attempt to explain what Computer Science is and motivate
you to be interested in it. Of course, summing up such a broad subject is
difficult; our approach is to showcase specific topics, demonstrating how
they relate to other subjects (such as Mathematics) and how they solve
- I've got a question or comment.
We'd welcome any feedback, experience or comment on these documents
both as a way of improving and extending them; to get in contact, email
- Can I use these documents for something ?
We are distributing these documents under the Creative Commons Attribution License.
This is a fancy way to say you can basically do whatever you want with
them (i.e. use, copy and distribute it however you see fit) as long
as correct attribution of the original source in maintained.
- Why are all your references to Wikipedia ?
Our goal is to give an easily accessible overview of a topic, so it didn't
seem to make sense to reference lots of research papers. There are two
reasons why: research papers are often written in a way which makes them
hard to read, and although many research papers are available on the
Internet, many are not (or have to be paid for). So although there
are some valid criticisms of Wikipedia, for introductory material on
Computer Science the articles seem a good place to start.
- Material in one document duplicates others from the series !
This is true, but isn't because we are lazy ! Each document is intended
to be fairly self contained; obviously there will be some overlap between
topics so there will inevitably be some repetition.
- Is there anyone else doing a similar thing ?
There are some excellent books which fall into this catagory:
More generally, this is an issue that is important to most Universities
so several similar efforts exist. This is defiantly a positive thing:
the accessibility of material like this has a lot to do with how it is
written, so people may prefer one description or topic rather than
another. Examples of work from elsewhere include:
Staff from Bristol have helped with several articles for CS4FN:
- Why don't the examples include much programming ?
Our goal is to focus on interesting concepts rather than the mechanics
of programming. So even when we include example programs, the idea is
to do so in a way where the meaning is fairly clear. For example we'd
rather use pseudo-code algorithms or reuse existing software tools than
complicate a description by including pages of C program. Even more
attractive are interactive environments, for example BASH and Python
shells, which allow easy demonstration of intermediate results of small
programming steps rather than the monolithic result of a large program.
If you are interested in introductory programming languages the following
may be of interest:
- Kids Programming
Language is a system aimed at 12-16 year olds. It enables
quite elaborate and complex programs (including graphical games)
to be built up quite quickly whilst at the same time teaching
concepts used in proper languages.
is system built at Oxford University with the help of NAGTY; it
aims to help explain important concepts in computer programming.
The system produces Escher like pictures using a functional
- The MINDSTORMS
NXT system offers a way to program LEGO robots by
"drawing" programs as flow-diagrams rather than writing
them using a conventional language.