Welcome to the UCL Computer Science MSc programme! This guide is designed to help you succeed as efficiently as possible, focusing on optimising your experience to prepare for a career in software engineering. This is by no means an expectation for the Course; you could do well without any of it. But remember, you're competing against those with 4-year degrees, who've likely started programming multiple years before uni.
It's tailored to what we wish we had known before starting the course. Feel free to contact any of us if you have any queries!
2023 cohort
2024 cohort
Below, you'll find tailored advice for specific modules, job preparation, and essential programming skills.
2023
- Python Proficiency: Ensure you're comfortable with Python before the course starts. While it's not strictly necessary, you'll struggle to reach the level needed for job interviews if you can't learn it independently.
- Group Project: Your group will significantly impact your grade.
2024
- You will be taught fundamental principles applicable across all programming languages. Prof. Ghita is an excellent teacher, and her lessons are engaging. I highly recommend completing the entire w3schools Python course in preparation for this module. Begin Codewars exercises as soon as you feel comfortable.
- Group Project: Meet regularly and ensure your team communicates effectively. Start early—workload across modules is heavy, and this project should not be left until later when you're also juggling coursework and end-of-term tests.
- Exam: Ensure you understand Python syntax in a code editor (remember indentation!). Be prepared to write concise one-liners for tasks that would typically require multiple lines to maximise marks.
2023
- Binary Operations: Learn binary addition and subtraction beforehand, making the course easier.
- Assembly Language: You'll learn MIPS32 assembly. Practice is key, especially for exam preparation. Check out this MIPS practice resource.
- Practice: Treat MIPS like any programming language—practice frequently to master it.
2024
- This is a great course that moves at a fast pace, so be sure to stay up to date.
- Regularly practice binary operations and develop a strong command of the MIPS sheet. Similar to the advice above, practice MIPS regularly and understand its structure thoroughly.
- Exam: Focus less on theory and more on applying the techniques learned throughout the course. The exam covers almost all practical aspects, including LMC, binary, IEEE floating point, MIPS, operating system job scheduling, etc. Ensure you're well-versed in these mathematical concepts.
2023
- Pre-Course Preparation: Review Neetcode's algorithm course before starting. It offers good explanations and will help you grasp the material.
- Mathematical Foundations: If you lack a maths background, be prepared to put in extra effort. Understanding summations and their deconstruction is crucial.
- Theoretical Focus: The module is theory-heavy. While not directly useful for interviews, analysing and explaining worst-case time and space complexities (Big O notation) is important for technical interviews.
2024
- The above advice from 2023 still applies.
- NeetCode's algorithm course is highly recommended. Additionally, brushing up on mathematical principles beforehand is essential for the second half of the course.
2023
- Pre-Course Skills: Learn SQL, HTML, and CSS before starting. It will make the course easier.
- Group Project: We had a project involving PHP and SQL. This module is vital for system design interviews.
- Relational Algebra: Initially intimidating, relational algebra becomes more understandable during revision, especially with past papers.
2024
- The most challenging course of the term—I highly recommend learning SQL, HTML, and PHP beforehand. The content can be overwhelming, so be prepared for a lot of independent study.
- Exam: Check out previous exam papers on UCL Exam Papers to focus on the most relevant content when attending lectures.
- Group Project: The project also involved SQL and PHP. Work on it regularly and start in the second week of term. Do not wait to form a group—actively seek proactive students to collaborate with. There are essential requirements and stretch goals for the project, so prioritise wisely.
- ML Fundamentals: Familiarise yourself with basic ML concepts like linear regression, logistic regression, and k-nearest neighbours.
- Maths Preparation: Refresh your knowledge of linear algebra, limits, and calculus (differentiation and integration). While exam questions can be random, understanding the math will help with course material.
- Module Difficulty: This is a challenging but highly valuable module for a career in software engineering.
- Language: The module uses Miranda. Resources are scarce, but you can use this searchable docs website we made.
- Extra Effort Required: Be prepared to put in extra work, but it's worth it. Consider learning Haskell, as it has more online resources and is transferable.
- Group Project: This module offers one of the best project experiences if you have a good group. You'll do a lot of programming, reflecting real-world software engineering.
- Project Management: If you request a more difficult project, be cautious as it may lead to you becoming the team leader of a less experienced group.
- Focus on execution: Prioritise developing a well-rounded software product (frontend, backend, testing) and writing a strong report over gathering all requirements. Your grade depends on delivering quality work, as assessed by your lecturer, not the external client.
- Holiday Preparation: This module is after Christmas; use the holiday period to practice React and NextJS. Being proficient in these technologies will allow you to start coding immediately once the project begins.
-
When to Start?
- If you've used LeetCode before, start applying as soon as possible.
- If you're new to LeetCode, begin practising and aim to start applying around exam time in May. By then, you'll be well-prepared for interviews, especially if you come from a non-maths or non-technical background.
-
What to Do?
- LeetCode: Practise regularly.
- NeetCode: Follow NeetCode’s system design and algorithm course in order, and consider paying for premium access.
- Project Documentation: Throughout your projects, take notes on your design decisions, challenges you overcame, and effective collaboration. These will be useful for telling relevant stories during behavioural and technical interviews (using the STAR framework or similar).
- Be Vocal: Engage actively in projects, ideally as a group leader. These experiences will be invaluable for interviews, particularly if you lack prior work experience.
- CV: Your CV must be one-page max.
-
Application Strategy: Don't rush to apply before you're ready. Take the time to prepare with LeetCode and other resources to improve your success rate.
You should be proficient in the following areas before the course starts:
-
Python: Be very comfortable with Python.
- Minimum: Be able to code a hangman game (with classes, functions, loops, file I/O).
- Recommended: Complete some actual projects.
-
Web Development: Have a basic understanding of HTML, CSS, and JavaScript, along with a basic knowledge of how websites work (e.g., GET and POST requests).
-
Git and GitHub: Understand how to track your development progress and enable parallel development in a team.
- Git Basics: Know how to create a repository, clone it, stage changes, commit, and understand the differences between revert, reset, and rebase.
- Team Collaboration: Learn about local vs. remote repositories, branching, merging, pull requests, and handling merge conflicts. For a branch-merge workflow for teams, see this guide: https://playbook.rcpch.tech/developer/git/walkthrough/.
- Visualising History: Use tools like Git Graph in VSCode to visualise project history - really recommend!
-
SQL: Have a basic understanding of SQL.
-
Command Line: Be comfortable with basic command line operations.
Note: Don't wait until the course starts to learn these skills, as they are essential for doing well in the course and for interviews.