Computer Science in 5 mins – #2 Core Curriculum

April 6, 2019


Welcome back to Computer Science in 5 minutes series. In the previous video, we talked about math classes in a typical computer science curriculum. In this video, we'll talk about the core computer science and engineering classes.

Let's start with a very basic class in every CS curriculum: Introduction to programming. Back in my time, it was more common to start programming with C and C++, but today many colleges offer this class in Python. Python is pretty intuitive, has a clean syntax, and is easy to learn, whereas C++ helps you better understand how things work at a level closer to the hardware. Eventually, you'll probably learn them both. So, no need to worry whether your program teaches Python or C++ or some other language first. Another programming class you might have is object-oriented programming, which is almost always taught in Java.

Let's move on to one of the most fundamental courses in any CS degree: data structures and algorithms, a.k.a. how to pass coding interviews 101. Many tech companies, especially the big ones in the San Francisco Bay area, have an obsession with data structures and algorithms at an unhealthy level. I won't discuss whether this is the best way to hire or not, but that's the reality today, so better be prepared. Some universities offer data structures and algorithms in two separate classes. Some call it just algorithms, but the contents are more or less the same. They teach you about data structures, such as lists, stacks, queues, trees, and graphs. They also cover algorithms to manipulate those data structures, such as searching and sorting algorithms. One thing that is particularly important is the algorithm complexity. Make sure to pay extra attention to the big O notation, which is usually used to measure algorithm complexity and express how fast a function is growing in terms of execution time.

Given the skyrocketing salaries that companies pay software engineers, you probably wonder what they teach in a Software Engineering class. It's probably not what you think it is. It's not even a coding-heavy class. If your school offers a class named software engineering, it'll probably cover useful strategies for software design and project management. You'll get to know about software life cycle models, such as waterfall and agile. I don't think the waterfall model is still being used though. Everybody nowadays uses agile techniques such as Scrum. You might also get a bit of object-oriented programming as a part of a software design project.

Let's talk a bit about hardware classes: circuit theory, electronics, and digital logic design. Honestly, I don't remember much about these classes. Circuit theory was more of a physics class than computer science. I remember computing the current and voltage at a particular junction in a circuit. Electronics and logic design was more interesting. We learned about using logic gates such as AND, OR, and XOR, and to implement certain functions on a physical breadboard, such as an adder that adds two numbers.

I don't know if it's still a part of the core curriculum, but computer architecture was also an interesting class. I remember when I took this class, I had an epiphany and came to realize how computers actually work. Before that, I was like, ok, there's this code I write, and there are circuits and stuff in the computer, and somehow it magically runs when I click compile and run. Computer architecture class demystified all of that and closed the gap between the hardware and software in my head.

If you have a theory-heavy program, you might also have automata theory in your curriculum. All I remember about automata theory is that anything that runs on your computer can theoretically run on a Turing machine, given an infinite amount of tape and patience. Yes, theoretically, even GTA5 would run on a Turing machine, but it would be incredibly hard to implement and would take forever even just to render a single frame.

Different schools might have different names for these classes or lump some of them together in one class or split them into two, but the topics that are covered are more or less the same. For example, concepts like process scheduling, storage and file organization, network abstractions, data communication protocols, and distributed and parallel computing can all be taught as a part of classes like Operating Systems, Database Systems, Computer Networks, Data Communication, and Systems Design.

Alright, that's all for today. In the next video, we will talk about the electives and which ones you might want to pick before you finish your degree or learn by yourself. If you liked this video, please subscribe for more videos. And as always, thanks for watching, stay tuned, and see you next time.