Hello! I’m Richard and I’m a first-year Computing student from Singapore who is trying to adjust to life in London. I like to read, play sports and go to the gym in my free time. I live in Southside halls and I’m part of the Imperial College Singapore Society. As I am revising for my summer examinations in May, I would like to take this opportunity to give a breakdown of the courses we took in the first year to give incoming undergraduate’s a better idea of what is to come and for those who have experienced it to reminisce about the good times. Note that Programming is structured differently so it will be covered in another post.

**Logic **

**In One Sentence: **

How to express ideas in a precise and systematic way to avoid ambiguity.

**Thoughts: **

It started off pretty rough as we had to get used to the many different notations quickly. Turns out logical reasoning is a very important basis for other subjects. Honestly really fun at times when solving logical equivalences and natural deduction as it felt like solving a puzzle.

**Discrete Math **

**In One Sentence: **

How to construct a rigorous, thorough proof on discontinuous mathematical objects.

**Thoughts:**

Struggled hard in this one as constructing proofs was something that was very new to me. In addition, almost everything was expressed in logical notation which meant I found it really confusing at the start. Ultimately it really opened my eyes to how the mathematical knowledge we take for granted every day had to be proven from very basic axioms.

**Math Methods **

**In One Sentence: **

How to analyze sequences and series and matrices

**Thoughts:**

This course is split into two parts, Analysis, and Linear Algebra. The analysis was quite manageable as it built on previous knowledge from my A-levels. Linear Algebra was a different beast with its technical terms and never-ending content, the most difficult course for me in the first year.

** **

**Computer Systems **

**In One Sentence: **

How to design computer hardware to achieve intended functionality while minimising cost, space, and computational time.

**Thoughts:**

Quite manageable content. Other than basics about number representation and logic gates, basically just about minimising Boolean expressions using Karnaugh-maps. Heavily linked to Computer Architecture.

**Computer Architecture **

**In One Sentence: **

How to connect high-level abstraction at the programming level to the low-level implementation of hardware.

**Thoughts:**

Basically, a more abstract Computer Systems where we learn how hardware is used instead of the details of implementation. The first part is on how clock cycles and control signals are used to perform simple tasks on the computer. The second part is on reading assembly code and how a compiler optimises higher-level languages like C and Java.

** **

**Reasoning about Programs **

**In One Sentence: **

How to reason about the correctness of programs in Haskell and C

**Thoughts:**

There was more focus on the application of skills. Basically, I had to learn the many different subtleties when reasoning about different programs, heavily built on knowledge and skills from Logic.

** **

**Graphs and Algorithms **

**In One Sentence: **

How to solve problems and algorithms relating to graphs and their complexity

**Thoughts:**

This course was what I thought a Computing degree was all about before entering University. Really cool to formally learn concepts that drew me to Computing like MergeSort, P = NP and Breadth-First Search.

**Introduction to Databases **

**In One Sentence: **

How to construct, manage, maintain, represent and utilise databases

**Thoughts:**

This might be the course with the most hands-on learning. Instead of learning proofs and theories like other courses, we learnt very practical knowledge that we had to constantly apply to sample problems.