The compsci class I’m in right now is called Intro to Computer Systems. Different from the first two intro classes I took, it talks about computer architecture, the line between hardware and software.
My first two classes discussed functions and variables (and related stuff) in C, which was basically my conception of programming. So computer architecture seemed like a curveball–having to look at actual computer diagrams, different types of memory holding machines, the arithmetic and logic unit (ALU), all seemed irrelevant.
Quite the opposite. (Of course, professors planned out the course sequence so it couldn’t be wrong right?) Unless all you use CS for is front end, graphic designish stuff, (and even then you’ll probably encounter it eventually), computer architecture is critically important. Here’s some of the uses I’ve found so far:
– Program efficiency. Looking at how different parts of the computer communicate gives you insight on how to write better, faster programs.
– Adaptability between systems. Understanding architecture means you know the what is unique to a certain type of computer, and what is shared. The current operating systems may change, such as the arrival of powerful phones, but fundamentals are forever.
– A general big picture understanding. As an ex-math major, there is a beauty in seeing all the pieces connected together. Pure math is to applied math as computer architecture is to programming (a little rough analogy but close enough). You get to see why things like commands to allocate memory happen in C, but don’t happen in Java. Or like why we have multiple programming languages at all. Or like why PC programs can’t run on a Mac. All the little things that you sort of took for granted, will be fully explained with a foundation in computer architecture.
With that said, I’ll be writing about interesting tidbits that I learn in class! My current posts are below.
Instruction Set Architecture: The Bare Minimum
A little intro to the sharp line between software and hardware.
Page picture from https://www.classes.cs.uchicago.edu/archive/2017/spring/15400/slides/lec01-intro.pdf