Please make sure that you have read the official
course description.
Here is some information that complements it.
Below are the Intended Learning Objectives of the course.
The home page of the course is here.
### What is it all about?

*Coding theory* is not about writing computer code, and is not about cryptography.
The purpose of coding theory is to generate mathematical ideas and methods
that can be used to *transmit information* more reliably. The main
concept of coding theory is *error correcting code*.
### Why does one need error correction?

When information (message)
is passed from a sender to a receiver, there is
a chance that some parts of that message are changed or lost.
This is often due to random noise -
think of atmospheric noise interfering with
radio transmision, gamma-ray bursts affecting
satellite feed, crosstalk in Ethernet cables, scratches on a DVD, etc.
One would like to recover the original message
after it has been affected by noise.
### How can one possibly correct errors in the transmitted messages?

One wants to design
messages in such a way that they are "far" from each other.
Then, if a message is changed slightly,
it still does not coincide with any other message, and can be recovered.
### What mathematical ideas are used to design codes?

We will use *algebra* and, to some extent, *geometry* and
*logic* to do this, and will have to work with
vectors, matrices and projective spaces over finite fields,
polynomials and the Boolean algebra. We will prove general facts
about codes. We will also see some codes which were
used by NASA to transmit messages to the deep space missions, and codes used in
modern telecommunication networks, alongside
more peculiar historical applications of codes in
sports betting.

The precise meaning of "far" can be formalised in terms of *Hamming
distance*, but here is an easy example.

Suppose that we want to transmit one of the two messages:
0 (No) or 1 (Yes). If we send just one bit, 0 or 1, it can arrive corrupted
so that No changes to Yes and vice versa - there is no way to know
that an error occurred.
We will transmit the *codeword* 00000 for No and the codeword
11111 for Yes. That way,
because it is much less likely that more than two bits will change in a
transmitted codeword due to noise, the received word 01000 can be fairly safely
interpreted to mean No.

We have just seen an example of an error correcting code
called *repetition
code*, which is quite inefficient: we had to send five bits instead of one.
In the course, we will see how to design much more efficient codes.

It should be noted that, while the above serves as a background or motivation to the study of codes, all the examinable material in this course is purely mathematical. Students' knowledge of electrical engineering or sports will not be assessed.

- state and prove fundamental theorems about error-correcting codes given in the course;
- calculate the parameters of given codes and their dual codes using standard matrix and polynomial operations;
- encode and decode information by applying algorithms associated with well-known codes;
- compare the error-detecting/correcting facilities of given codes for a given binary symmetric channel;
- design simple linear or cyclic codes with required properties;
- solve mathematical problems involving error-correcting codes by linking them to concepts from elementary number theory, combinatorics, linear algebra and elementary calculus.