Computer Science is a rapidly advancing field that although younger than many, has some founding theories more than a century old (notably Boolean Logic in the mid 19th century and the designs of Charles Babbage in the late 18th century). Modern Computer Science (CS) is a diverse field and although debatably distinct from IT, exactly where the line is drawn is something of a gray area. Subjects most commonly falling under the banner of CS are Artificial Intelligence, Artificial Life, Computer Graphics, Computer Vision, Encryption, Computer Modelling and generally any of the more mathematical or 'low level' aspects including the underpinnings of networking theory, computational logic , compiler design and operating systems. Generally, the term IT is applied more to higher level implementations of the CS disciplines, as well as management of computing projects and higher level programming techniques (databases, web-development, GUIs etc).
While many universities now distinguish between CS and IT degrees, it is worth investigating what end of the spectrum a particular department's courses are biased towards.
Other related fields of study include Cybernetics (which adds formal control and systems theory and generally includes some robotics) and Robotics (which combines with Electronic Engineering and Cybernetics to apply much of CS theory to physical entities - even so far as Artificial Life).
Computer Science departments can often have strong links with psychology and medical departments, as the latter like to analyse the effect of CS related systems on humans (for example, haptic devices for retraining stroke victims), while the former appreciate the feed of information on how humans process information as well as the challenge of processing information garnered from medical scanning techniques (for example interpreting MRI scans).
Universities Offering Computer Science
You can use the UCAS course search to find a full list of universities offering Computer Science as an undergraduate subject either on its own as a single subject or in combination. It is often available as a joint honours course with Mathematics.
Preferred A-level Choices
A2 Maths is generally considered essential for Computer Science applicants. Usually studying Further Maths or Physics is desirable and the other natural sciences are also helpful. Computing or Computer Science is not necessary although it will help cover some of the course material in the first year. It does, however, give you the chance to see if programming is for you. Since Computer Science is a very multi-faceted, problem-solving oriented subject, the majority of A-levels can be justified and used to your advantage (e.g. analytical skills and interest in artificial intelligence with social science subjects).
Grade requirements vary significantly across universities, but top universities usually ask for AAA-ABB.
The following chart may someday list: Course -- University -- BTEC Accepted -- BTEC Grade req -- A-level req -- Preferred A-levels -- Times rank -- Guardian rank
UCAS Form & Personal Statement
TSR has a library of Computer Science Personal Statements, which can be used to give you an idea of the sorts of things that admissions tutors are and aren't looking for in a personal statement.
- If you're new to programming, it's recommended that you pick up a language to gain an understanding of what's involved. A generally accepted good programming language to start with is Python because its structure teaches good habits. Although I think - and plenty agree - that C++ is the best language to begin with; despite its reputation as one of the harder languages, it will teach you to program in several different ways (programming paradigms), reveal some of the underlying hardware intricacies and all using a syntax that has been used in several other common languages. Most universities teach using a wide variety of languages (C, C++, Haskell, Java, Pascal, etc) and often claim that you won't be disadvantaged if you have no prior experience.
- The New Turing Omnibus is a good source of background reading, containing problem solving questions which apply maths and computing knowledge.
- The Pleasures of Counting
- You may also be interested in The British Informatics Olympiad, which is a national competition involving problems to be solved using programming.
In this section we shall introduce some of the more or less interesting subject areas that could be encountered within a CS degree course. (Others are very much encouraged to add to this section ). One institution can have a very different CS syllabus from another, and potential students are very strongly advised to find out what the institutions they are considering actually teach over the duration of the course, including what is compulsory and what is optional, and how that relates to what they want to do at the end of it.
- All CS courses will require some programming, and most will teach at an introductory level in the first year. Fashionable language of the moment is Java, though some will start with their own in-house teaching languages, others will throw C/C++ at you straight off, and some may use the ever effective Pascal/Delphi, or functional languages. Unlike schools that still consider BASIC to be a suitable language for teaching, most CS researchers will mock any knowledge of the language, largely based on its history. Most courses will involve you learning more than one language, in an attempt to demonstrate that they have their individual strengths and weaknesses. While Alan Turing proved that all 'Turing complete' languages can be used to perform any algorithm, some make particular ones much easier than others.
Algorithms and Data Structures
- This is the nuts and bolts of all the other aspects of computer science. This covers how to store and process data as efficiently as possible, as well as considering ways in which to approach the problem at hand. As an undergrad you would expect to cover basic things like linked lists, sorting and recursion in the first year, adding more interesting concepts like trees, divide and conquer strategies, hashing, greedy solutions, graphs and optimising data arrangements in memory before the end of the second year. A strong understanding of these abstract concepts can greatly improve your ability to program effectively.
- The increasing use of multiple processors in the same system means that ensuring algorithms are able to cope is now more important than ever. Some algorithms benefit from being used on more than one processor simultaneously, whereas others suffer - sometimes to the point of failure. What was once limited to incredibly expensive supercomputers is now relevant to the phone in your pocket.
Principles of Computer Hardware
- A fundamental concept in computing is of course the hardware that you operate on. Most courses will include some discussion of processors, memory, machine code, assembly (even if there is little practical implementation of this) and more than likely, Von Neumann and Harvard architectures and similar. Generally, this will also include concepts such as how data is stored in memory, (ASCII coding, floating point encoding/maths, fixed point maths/encoding...) and what the processor is actually doing when it executes a program.
- It's worth noting that IT degrees can gloss over this level of the machine. Modern languages do permit a certain abstraction away from the underlying system, though many CS graduates would argue strongly about the merits of such action.
Compilers and Operating Systems
- Without compilers and operating systems, using a computer would still be a very unsavoury task. As such, an understanding of these concepts is fairly fundamental to a CS degree. Compilers take programs written in high-level languages (such as C) and convert them into a form that the machine can read. Operating systems manage the various pieces of hardware in the system, and allow the user to get on with doing what they want to do without thinking about moving the heads on the hard drive to the right location - in other words, they guard the user from the hardware (or the hardware from the user... :)
- The designs of compilers and operating systems are interesting in and of themselves, but these can be "marmite" courses - you either love them or you detest them.
Artificial Intelligence and Artificial Life
- AI is a famously hyped field, and AL is its slightly less famous cousin. Both are involved with solving large, complicated problems using computers and clever algorithms. Well known "buzz words" include neural networks, genetic algorithms and expert systems. Although this is another case where differentiating between the fields is not obvious, AL could be said to use small, simple systems and study the complex behaviours that emerge, while AI uses complicated symbol systems to achieve specific behaviours.
- A good phrase that sums up the activities of an AI system is "reasoning and representation". The aim is to take any problem and determine some means of representing it within the constraints of a typical computer such that some process can be applied - some reasoning - that extracts a suitable solution.
- Related and of some interest to some readers here may be the links to philosophy via the Computational Theory of Mind and the ongoing debate as to whether or not we as humans are little more than computers. Particularly entertaining and stimulating debate on this can be investigated via the "Chinese Room" argument.
- This heavily mathematical field starts with theories for the representation of colours and ends up with Toy Story and Half-life 2. Knowledge of the physics of light and materials is a must, as well as the maths of homogeneous matrices and a god-like knowledge of data storage, representation and manipulations. One can only expect that a slight touch of artistry and a keen eye can only aid in the development of algorithms and techniques to further the realism, quality or effect of the final result.
- ( Sometimes Computational Vision, and often used as a catch all for Machine Vision and Image Processing )
- Another heavily mathematical field, this one pulls in concepts from AI and AL as well as more IT like areas such as databases and information management and depends heavily on mathematical modelling techniques and statistics. In simplistic terms, the purpose is to "make computers see", which is a phrase that both sums things up and leaves out everything. CV is exploring a particularly difficult field of study, trying to deal with huge quantities of very noisy information, often at real-time.
- Applications of this field span control of industrial equipment up to automated surveillance with a wide variety hidden in the middle.
- Yet another heavily mathematical field, this attempts to create proofs that systems are 'correct' and do not contain any bugs. Using almost any commercial software will show how popular and successful this is outside academia and some safety-critical control systems.
Software Development and Testing
- It has been said that all non-trivial programs contain bugs. These areas of CS attempt to remedy that. For example, testing may include development of test data, automated testing, ensuring all areas of the program are tested, and finding regressions (where a new version fails in something it could previously do).
- Or, 'Codd is not a sort of fish!' :) The efficient - both in time and programming effort - storage and retrieval of data by a program is important almost regardless of the program, especially when there is too much data to hold in fast memory and it needs to work with data stored on a disc or over a network.
Life As A Computer Science Student
As computers are being used more and more by organisations, the people behind the technology become more valuable. The analytical and problem solving skills taught in computer science are largely transferable and the teaching is often fundamental enough for you to be able to quickly learn new programming languages.
There are a lot of graduate positions within in the computer industry, such as semiconductors, systems implementation and the video games industry. Other fields such as professional services and banking are also popular.
- If anyone can add an interesting story about what they have done with their compsci degree (or plan to do with it), it would be most appreciated
Frequently Asked Questions
What is the difference between a Computer Science and IT/ICT Degree?
- IT/ICT concerns the use of computer systems, whereas Computer Science concerns the creation of the systems and theories behind computers.
- IT/ICT is to Computer Science what using a lift is to mechanical engineering.
I hate maths. What mathematical concepts will I be expected to understand on a CompSci course?
- Like it or not, computer science is based on a lot of mathematical concepts, many of which need to be at least partially understood to get the most out of the machine. You should expect your course to cover simple Boolean logic, discrete maths and set theory. Many will also teach statistics (which are very powerful for later modelling and data analysis/interpretation/representation), and most introduce linear algebra (especially those with graphics/vision/robotics courses) and at least some calculus. Full understanding of how any program or algorithm works often depends on a good grounding in the mathematical formalisation that it is based on.
- Note however that IT courses can ignore the theory in favour of more "hands on" or practical subjects, and as such, the interesting maths can be glossed over. This is a debatably dubious practice as it leaves many students without a real understanding of what's going on.
I am a girl. Will I be stared at in disbelief if I chose to do computer science?
- See Here for a thread on TSR about this
Am I expected to have any programming experience prior to starting a CompSci degree?
No but it helps, and will obviously give you a little more insight. However, not everyone has the right mindset to be able to program. If you go into a computer science course with no experience, and you don't pick it up quickly, be prepared to transfer onto a more suitable course. Some universities claim they prefer people without prior experience, because they haven't had the possibility of picking up bad programming habits.