# Getting a head-start on 1st year CS

University is a completely new experience for everyone who’s going there for the first time. The summer before my first year, I spent my time trying to get ready for Uni, meet friends and get a head start in my first year.

The first thing I will say is that **you shouldn’t stress**. The modules in my first year were taught from the very beginning so even if you had **no knowledge of the subject, you’d be able to keep up with what is being taught.**

However, it can be nice to have some idea of what a lecturer is talking about before they begin so I have collated some resources and ideas for how you could **prepare for your first year of Computer Science**.

During my first year we were taught: **the basics of programming, useful mathematical concepts** and some **basics about how Computers work**.

My first suggestion for the summer is: **learn to code in Java**. A lot of the modules use the Java language for coursework and this is the language you’ll be taught in your first term (unless the department decides to make some major changes which I don’t think it will). Java is also a really useful language to know as a Computer Scientist as it is one of the main languages used. The great thing about coding is that there’s always something new you can try, so **keep experimenting**!

Some resources that you might find helpful as you start out:

- https://google.github.io/styleguide/javaguide.html – I DO NOT suggest you read this cover to cover but it’s a good document to reference now and then so that your code is written neatly and remains organised.
- https://www.codecademy.com/catalog/language/java – I love Codecademy and think it’s a great place to start learning a programming language, you can explore lots of different resources and courses.
- https://www.learnjavaonline.org/ – I’ve not used this myself but from a quick look, it looks like a really good resource for learning the basics!
- https://www.w3schools.com/java/ – another platform I highly recommend … W3schools! This website has really helpful tutorials on a range of coding languages and is well worth a look if you’re stuck on something in particular. But it also has a step by step tutorial for learning java!
- https://www.geeksforgeeks.org/java-how-to-start-learning-java/ – Geeksforgeeks can also be really helpful and this page contains a list of resources for learning java.
- Most importantly,
**just practice**. Have a go at coding different things and see what happens!

Another topic you might want to look into before term starts is data structures. **Data structures** are really important when writing code and making sure you choose the right one can **make your life so much easier** further down the line!

Some resources you might find helpful:

- https://towardsdatascience.com/8-common-data-structures-every-programmer-must-know-171acf6a1a42 – an article giving a brief introduction to commonly used data structures
- https://www.khanacademy.org/computing/computer-science/algorithms – Khan Academy is great, this unit may not be completely relevant to this particular module but will definitely help you throughout your time at Uni!
- https://www.geeksforgeeks.org/data-structures/ – Geeksforgeeks again but this time with some great resources as an introduction to data structures!

Computer Science actually involves a fair amount of **maths** and in my first year, we had 2 maths modules. If you took** A-level Maths**, I highly recommend not forgetting what you learnt and that’s even more important if you studied A-level **Further Maths** (sorry to everyone who was really looking forward to throwing their books straight out the door)!

As a rough guide, the content taught in the current maths modules include:

- Linear Algebra: Vectors, linear independence, subspaces, basis, dimension.
- Matrix Algebra: Linear equations, inverses, linear transformations, eigenvalues/vectors.
- Sequences and Series: Limit and convergence properties of sequences and series.
- Calculus: Limits, continuity, differentiable functions, differentiation of inverse functions, integration, logarithms, exponentials, Taylor’s theorem.
- Abstract Algebra: Introduction to some abstract structures such as groups, rings, fields and vector spaces.
- The axiomatic method: Basic concepts, axioms, definitions, theorems, finite and infinte sets, natural numbers, induction.
- Logic: Statements, truth values, Boolean operators, laws of propositional logic, predicates, quantifiers, laws of predicate logic.
- Sets: Connection between sets and predicates, operations on sets, laws of set operations.
- Relations: Relation composition and inverse, properties of relations, equivalence relations, equivalence classes, quotient sets, partial orders.
- Functions: Properties of functions, equinumerous sets, countable and uncountable sets.
- Graphs: Graph isomorphism, graph connectivity, Eulerian and Hamiltonian graphs.
- Probability: Definitions, conditional probability, Bayes’ theorem, expectation, variance, standard deviation.

I don’t know of any specific resources here but I’m sure a quick search will lead to many results.

Those are the main topics that I think would be useful to explore over the coming months if you want to. **Remember, you don’t have to learn anything as it will all be taught to you once you get to Uni. **There’s no point learning everything on the syllabus for your first year as you get will get quite bored, but having some idea of what is going on can be helpful.

**To recap: Learn a small amount of Java, discover different data structures and don’t forget all of the maths you’ve learnt!**

Oh, and one more thing … learning **Linux** would be useful as that is the operating system which the DCS computers run on. I found this course useful: https://www.codecademy.com/learn/learn-the-command-line but there are many more on the internet that you could use.

*Disclaimer: I have not looked at these resources in-depth so cannot vouch for the usefulness of all the content. Please use the resources as an aid in exploring the topics of Computer Science and not as complete guides.*

*Disclaimer 2: These suggestions are based on my experiences and opinions of learning Computer Science. The curriculum may change slightly making some suggestions irrelevant for first year study (although all topics are useful to know as a Computer Scientist). The Department of Computer Science was not involved in creating this list of resources and may create their own list for your use later on in the summer.*

Ok, so where was this golden post when I started uni? ðŸ˜€ So useful!