There are several important skills that are needed to succeed in second year. This repository contains several tutorials on how to pick them up. It is recommended that you spend some time learning the basics below as the year goes by. Some are relevant for the IAC lab (Linux, Git), so check them out before the first lab.
Feel free to create a pull request.
- General Advice
- C++ and OOP
- Intro to JavaScript
- Data Structures and Algorithms
- Using the Shell
- Scripting
- Git
- Docker
- Cloud
- Vim
-
Start your internship hunt early (like right now). Use a popular CV template such as Jake's CV Template.
-
Learn some LaTeX - will come in handy for report writing, as many will have realised in the first year project.
-
On Algorithmic Exercises which may be tested as part of job interviews (i.e. Leetcode): learn the big picture first (what are the patterns - see here, what are the data structures you need - queue, linked list, stack, hash map, array, and many more, what are the algorithms you need - DFS, BFS, sorts and many more) and then use a programming language of choice to implement and tackle these problems. C++ may not be available on every assessment site while Python should be available on all of them (not to mention easier to code out - think about how'd you implement a dictionary and a hash map in C++). That said, C++ is mandatory for certain job roles which require high-performance, so if you are targeting those roles do brush up on C++ as well as C++ internals (standard library, memory management). Do Neetcode 150. Computational Thinking takes time, and is something that you can't brute force overnight. But, more practice certainly helps.
-
The one thing that you will need to pick up yourself before some 3rd year Modules at the DoC would be Operating Systems. Some basic concepts (virtual memories and page tables) are covered in IAC, but you will need to read the rest yourself (scheduling, more in-depth virtualisation and file systems). The notes over here are quite useful; there's also the famous Operating Systems: Three Easy Pieces. Some modules might also assume a functional programming background (langauges like Haskell, OCaml and F#).
Refer to the table below to find out what languages / frameworks you will need to learn:
Modules | Technologies |
---|---|
ELEC50006 Discrete Mathematics | Python |
ELEC50011 Mathematics for Engineers IIA/B | NIL (Math) |
ELEC50014 Software Systems | Python, SQL |
ELEC50002 Communications | LabView |
ELEC50004 Control Systems | MATLAB |
ELEC50003 2nd Year Project | Depends on your subsystem. Command - React, Node.js, AWS, Control - MATLAB, Drive - C++, Vision - FPGA/C++, Power - C++, Integration - RTOS. |
ELEC50009 Information Processing | Depends on your subsystem. If you're doing the FPGA part, you need to know how to use Quartus, C, SystemVerilog and UART (so Python). If you're doing a game, probably Unity/C# (some people used common webdev stacks too). Cloud/Databases - AWS, SQL, Python. |
ELEC50010 Instruction Architectures and Compilers | Autumn part - SystemVerilog, C++. Spring part - C++, Flex, Bison (brush up on OOP) |
Thanks to the following people for contributing to this repository:
- Clemen Kok (MEng'25)
- Hrishikesh Venkatesh (MEng'26)
- Aranya Gupta (MEng'25)
Feel free to submit a PR!