Introduction to Computer Science
We recommend you complete these courses before moving on to any other topics.
CS50 - Introduction to Programming
Introductory course to programming, providing a high-level overview of several languages and Computer Science concepts. CS50 lays the foundation for more advanced topics later on.
- Institute: Harvard
- Prerequisites: None
- Duration: 10 weeks
- Effort: 10-18 hours per week
The Unix Workbench
Unix-like operating systems (e.g. macOS and Linux) and their tools are ubiquitous in Computer Science. This course introduces basic Unix concepts, and teaches some tools that will become staples of your programming workflow.
- Institute: John Hopkins University
- Prerequisites: None
- Duration: 4 weeks
- Effort: 4-6 hours per week
The Missing Semester
Teaches some of the most common tools used by Computer Scientists and programmers. There is some overlap with 'The Unix Workbench', however this course is intended to be a 'drop-in, drop-out' for specific topics, which you can revisit throughout your studies.
- Institute: MIT
- Prerequisites: The Unix Workbench
- Duration: 12 weeks
- Effort: 2-3 hours per week
Programming
Programming is one of the core skills of a Computer Scientist. It enables us to use computers as tools to solve complex problems. We recommend you take these courses in parallel with the Theory section.
Python for Everybody Specialisation
Teaches the fundamentals of programming using Python in five discreet modules, each focused on a different area of programming. The first module is optional if you are confident with basic Python scripting (e.g. variables, functions, loops, if statements).
- Institute: University of Michigan
- Prerequisites: CS50
- Duration: 5 months
- Effort: 7 hours per week
Web Developer Bootcamp
This comprehensive course covers everything you need to know about Web Development, including an extensive overview of HTML, CSS, and JavaScript. After finishing the course, you will be able to create full-stack web applications.
- Institute: Colt Steele on Udemy
- Prerequisites: CS50
- Duration: Self-paced (10-12 weeks suggested)
- Effort: 6-8 hours per week
Functional Programming in Scala Specialisation
Introduction to Functional Programming—an alternative to traditional OOP—and the Scala programming language, taught across five modules. Learning a new paradigm can be challenging, but will help you become a more effective problem solver. We recommend you continue with other sections and return to this course towards the end of your studies.
- Institute: EPFL
- Prerequisites: Python for Everybody Specialisation
- Duration: 7 months
- Effort: 7 hours per week
Theory
Algorithms and data structures are the building blocks of all computer programmes. Understanding the underlying theory of computing is key to becoming an exceptional Computer Scientist. For that reason, tech companies rely heavily on these concepts for their technical interviews.
Introduction to Discrete Mathematics for Computer Science Specialisation
Provides an introduction to important concepts that are commonly applied across Computer Science disciplines. Importantly, this specialisation teaches the mathematical ‘language’ used in the scientific field of computing.
- Institute: UC San Diego & HSE University
- Prerequisites: CS50
- Duration: 6 months
- Effort: 5 hours per week
Algorithms Specialisation
Covers elementary data structures and basic algorithms used to solve ‘classical’ Computer Science problems across four courses. Teaches the larger context in which the algorithms and data structures exist, while providing low-level visibility into the mathematics and implementation.
- Institute: Stanford
- Prerequisites: Introduction to Discrete Mathematics for Computer Science Specialisation & Python for Everybody Specialisation
- Duration: 4 months
- Effort: 4-6 hours per week
Cryptography I
Cryptography is used across computer science to keep information protected; from sending messages across the internet to storing data securely. This course has some overlap with the Algorithms Specialisation, but focuses on existing real-world applications and some of their mistakes.
- Institute: Stanford
- Prerequisites: Introduction to Discrete Mathematics for Computer Science Specialisation
- Duration: 6 weeks
- Effort: 3-5 hours per week
Machine Learning
The quintessential course on Machine Learning, covering different kinds of learning and the theory behind them, as well as some best practices. Students learn to implement ML techniques through case studies and practical exercises.
- Institute: Stanford
- Prerequisites: Introduction to Discrete Mathematics for Computer Science Specialisation
- Duration: 10 weeks
- Effort: 6-8 hours per week
Systems
Computers incorporate several layers of technology, each building on the mechanisms of the layers beneath it. Computer Scientists need to have a complete understanding of the systems they use and develop; from the physical components to the operating systems.
Build a Modern Computer from First Principles: From Nand to Tetris
This course will guide you through the process of building a computer system from it’s most fundamental components. Through increasingly complex projects, you will learn about computer architecture and how basic programmes are used to instruct a computer’s hardware.
- Institute: Hebrew University of Jerusalem
- Prerequisites: None (Intro Section and some Discrete Mathematics recommended)
- Duration: 6 weeks
- Effort: 6-8 hours per week
Build a Modern Computer from First Principles: From Nand to Tetris Part II
Building on the content of ‘Nand to Tetris Part I’, this rigorous course guides you through the process of building a modern software hierarchy, designed to execute high-level programming languages on the virtual machine built in the previous course.
- Institute: Hebrew University of Jerusalem
- Prerequisites: Build a Modern Computer From First Principles: From Nand to Tetris
- Duration: 6 weeks
- Effort: 12-14 hours per week
The Bits and Bytes of Computer Networking
Computer networking enables the modern internet. This course provides an overview of the technologies computers use to communicate with the network and other computers, as well as some services they enable.
- Institute: Google
- Prerequisites: None
- Duration: 6 weeks
- Effort: 4-6 hours per week
Applications
In this section, students will learn how to integrate different topics and technologies to create complete applications, either individually or as part of a team. This section bridges the gap between programming and the way those skills are used to create and deploy applications.
Web Application and Software Architecture 101
Quick overview of the kinds of architectural styles used to create web applications and software. The course provides frameworks to choose the correct architecture and technology stack for different use cases.
- Institute: Educative
- Prerequisites: Web Developer Bootcamp
- Duration: Self-paced (1 week recommended to avoid additional charges)
- Effort: 10 hours
Software Testing
Testing is a crucial way to improve the quality of software. Through different testing methods, students will learn how to spot bugs and write code that doesn’t fail. Students can put this intro practice by attempting to break other student’s code.
- Institute: Udacity
- Prerequisites: Python for Everybody Specialisation & Algorithms Specialisation
- Duration: 1 month
- Effort: 5-6 hours per week
Software Engineering: Introduction
Introduces engineering principles which teams use to design, build, and test larger software systems. Experience building at least one full-stack project is highly recommended before starting this course.
- Institute: University of British Columbia
- Prerequisites: Programming Section
- Duration: 6 weeks
- Effort: 8-10 hours per week
Further Study and Additional Resources
While all of the listed resources are optional, we recommend you practice your coding throughout your studies and find a community or two that share your goals.
Practice Your Coding Skills
Like any other skill, programming requires practice in order to improve. We recommend you spend a small amount of time every day practicing in your preferred language. The linked website (HackerRank) is a popular platform, but many others are available.
The format of coding practice platforms closely resembles the one of technical interviews at most large tech companies. Being comfortable solving these problems will be crucial for students looking to get a job in the industry.
Join a Community
There are endless online communities focused on different topics, such as: learning programming, working on open‐source projects, or building a startup. Finding a community that shares your objectives is a great way to stay motivated and make your studies more enjoyable.
The linked website, Indie Hackers, is for people building small but profitable projects. However, there are many other resources available depending on your goals; Reddit is usually a good place to start.
Learn New Technologies
Computer Scientists are always learning new things as the industry evolves and new technologies are developed. If you are interested in learning a specific technology (e.g. Deno) or a more general skill (e.g. Deep Learning), the linked resource—hackr.io—allows engineers to list and vote on their favourite resources to learn different topics.
Prepare for Coding Interviews
Technical interviews are difficult. The only way to stand out is to be thoroughly prepared. There are many resources available that break down how to approach these interviews. We have linked one such article, but we highly recommend you spend some time researching and learning about other people’s experiences.
Dive into Web and Mobile Development
Modern full‐stack application development leverages several advanced frameworks and languages, such as React and TypeScript. These technologies help build more complex projects, and are used by some of the largest companies in the world.
The linked course (Full Stack Open) covers the most popular web technologies, relying almost exclusively on JavaScript. This is a good option for students looking to develop their own full‐stack projects.
Learn to Deploy to the Cloud
Managing your own servers used to be a major part of deploying your projects. Nowadays, engineers can use Cloud services such as AWS and Azure to deploy and manage their code.
The linked course focuses on AWS, which is a great option for larger projects or when you want fine‐grain control over your servers (and its costs). Other companies offer services that are easier to set up, such as Heroku or Digital Ocean, but don’t offer as much flexibility.
Specialise in Game Design and Development
The gaming industry is a common destination for Computer Scientists. The linked specialisation teaches the necessary skills to build your own games using Unity. This is a great option for anyone that loves games and is looking to launch a career in the industry.
Become a Data Scientist
Data Science is a popular alternative to Software Engineering. To become a Data Scientist, student will need a more extensive knowledge of statistics than the one offered in this curriculum. The linked specialisation is a good option to bridge the gap, however more statistical education is recommended.
Kaggle is one of the most important communities for aspiring Data Scientists and students looking to learn more about Machine Learning. We recommend joining some of their competitions to get practical experience (and maybe get noticed by an employer or two).