Skip to main content

Prerequisite Courses for Career Changers to CS

Recently, some students have reached out to me about career changing to CS and finding internships. I noticed that their undergraduate majors are typically Math/Statistics/EE, and they want to transition to CS during their graduate studies — ideally earning a CS degree (MSCS, MCS, etc.).

This article will discuss the prerequisite courses you need to take from the perspective of applying to an MSCS program (using UIUC's undergraduate curriculum as an example).

Programming Languages

As everyone knows, every CS student learns at least one programming language that machines can execute, such as C++, C, Java, etc. When transitioning to CS, you can start by taking a C++/Java course. Java course: CS 125 - Intro to Computer Science

Core CS Courses

The CS department has many courses, such as Databases, Computer Networks, Operating Systems, Computer Architecture, Data Structures, Parallel Computing, Software Engineering, Machine Learning, etc. Below, I'll discuss which courses are essential and most useful from an application perspective.

One-line summary: Databases + Computer Networks + Operating Systems + Data Structures/Algorithms

Data Structures: CS 225 - Data Structures (after completing this, you should be able to comfortably do LeetCode grinding) Databases: CS 411 - Database Systems (after completing this, you should be proficient in MySQL and understand concepts like MySQL indexes, or be able to build a database from scratch) Computer Networks: CS 438 - Communication Networks (after completing this, you should understand what happens behind the scenes when you navigate to a URL in a browser) Operating Systems: CS 423 - Operating Systems Design (after completing this, you should understand the difference between processes and threads, and be proficient at debugging C++ memory-related bugs)

If you have extra bandwidth: (the following are optional — take them if you have time, skip them if you don't) Computer Architecture: CS 233 - Computer Architecture (after completing this, you should understand how the CPU and other components of a computer interact) Software Engineering: CS 427 - Software Engineering I (build a real production-ready project) Compilers: CS 426 - Compiler Construction (build a simple compiler) CS 425 - Distributed Systems (implement a distributed key-value store)