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 PerspectiveAn 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 real-world problems.
- 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 email@example.com.
- 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:
- Computer Science Unplugged from the University of Canterbury, New Zealand.
- CS4FN from Queen Mary, University of London, UK.
- 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.
- GeomLab 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 programming language.
- 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.