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.
