The start of the Fall semester brings with it new sleeping schedules, lots of coffee, and the potential for learning. Getting back into the swing of things after a lengthy Summer vacation takes its toll, but the excitement is all that counts. This Fall marks my 3rd semester as a Computer Science student, and I’m nearly done with the required CS courses for transfer. It’s also right around the time I decided to start the Junior Dev website, so I figured it would be a great time to write a sort of “unboxing” of my Computer Architecture course. I’ll talk about the first chapter of the text book, Computer Systems (5th Edition), and follow that up with a recommendation for Code: The Hidden Language of Computer Hardware and Software, which is honestly the best primer I could have hoped for. After that, I’ll give you my first impressions of the curriculum, and what I’m looking forward to in this course. About mid-semester, I’ll update you with a status report and tips on understanding the subject matter covered in Computer Architecture.
Computer Systems: A Work of Abstraction
Computer Systems was written by Stanley Warford from Pepperdine University, a school in Malibu California, on top of a hill overlooking the Pacific Ocean. I like to think the location and general atmosphere of Malibu rub off on this ~800-page text. It’s informative, while also hinting at subtle drops of wisdom that help the necessary abstraction seem manageable. It’s navigable through use of well-placed illustrations and convenient notations. Like Malibu, it curves along the unknown, acting as a contact point for novel ideas and the flow of information (and psychedelics if you know where to look).
As you might have guessed, I’m quite impressed with the ideas and information contained within Computer Systems. Ideas, mind you, that I once believed I would never be able to comprehend. All of this “low level”, “abstract” stuff seemed unapproachable to me a mere 18 months ago. I was certain that I would forever remain unaware of what goes on under the hood. Like many others, I felt that I probably didn’t even need to know what a CPU actually did, or how RAM works, or how these modern marvels called computers could turn DC voltage into information, globalization, and this soap box we call The Internet.
Warford understands that higher levels of abstraction come with novel ideas, which become relatable and comprehensible in the art of study. Since higher levels of abstraction are generally ‘easier’ to understand, the mind of a budding Computer Scientist need not dive directly into Boolean Logic and Machine Code. I really enjoyed the 1st Chapter, which does the equivalent of taking the reader along the journey of an operation we all know so well:
i = j + 1;
This innocuous assignment builds atop quantum physics, binary encoding, boolean logic, a CPU, system bus, RAM, compiler, and a programming language. Yet it is infinitesimal in comparison to the world’s data, and perhaps one of the easiest tasks a programmer can do. This is the beauty of abstraction; this is the evolution of information processing; all accessible to anyone with a machine and a mission. Warford delivers this insight swiftly and early in the text, to guide the reader’s mind down the right mental path. I believe this effort is worthwhile, and I can say it has definitely worked for me.
I won’t get further into the weeds with this post, if only for the sake of brevity. I can say that this book has my praises, as the first chapter alone has already provided me with so much valuable information. If you aren’t a CoSci student but are considering learning about Computer Systems and Architecture, this book is both approachable and salient. If long textbooks aren’t your thing, though, the following recommendation might be a far better choice.
Code: A Primer
“What do flashlights, the British invasion, black cats, and seesaws have to do with computers? In CODE, they show us the ingenious ways we manipulate language and invent new means of communicating with each other. And through CODE, we see how this ingenuity and our very human compulsion to communicate have driven the technological innovations of the past two centuries.”
Code: The Hidden Language of Computer Hardware and Software
Code is a book that I literally cannot stop recommending to friends and family. My copy is currently on lend to a friend, and I plan on buying a few copies as gifts for the coming Holidays. If there is any book I would recommend to CoSci Majors, it is Code. Instead of giving you a bunch of technical details, Code approaches the topic of information processing holistically and in more ‘human’ terms. It reaches back in time and engages with the characters and events that led to our modern computing devices. It starts with a hypothetical situation in which two friends who live across the street from each other use flashlights (or candles) to transmit encoded messages. This hypothetical situation quickly morphs into the story of braille, morse code, electric relays, transistors, binary code, and the C programming language.
I purchased Code at the beginning of the Spring semester and decided to read it over the summer (2017). After the first hour of reading, I was absolutely hooked; I devoured the book in only two days time. The book is heavy with insights and rational explanations that make the overarching topic approachable on so many levels. It connects disparate themes in Computer Science in a very elegant way, and allows the average Programmer or CS student the opportunity to learn “closer to the metal”. My review honestly won’t do this book justice, so if it’s something you’re interested in, I highly recommend picking up a copy.
Sitting in on the lectures for this course has been a bit underwhelming for the most part. There seems to be the assumption that students have no clue about computer systems, which I suppose I should expect from an introductory course. Because I read Code before entering the course, however, I feel more than comfortable with the subject matter. This offers me the luxury of being able to skip ahead of the rest of the class in terms of reading and research. I’ll be fair to our professor and leave my review for later, once we discuss topics of greater substance. For now, Computer Systems is keeping me fairly entertained and eager for more learning.
One of the things I’m really excited to try is the Pep/9 Software that accompanies the text book. Pep/9 is an Assembly and Machine Code Simulator, which allows you to create and execute code without the potential to corrupt data or destroy your computer. There are plenty of examples and tutorials on the website, so you can actually play with it for free without having to be enrolled in a course. I’ve been a pretty big fan of compiler explorer for a while now, so I’m quite eager to try my hand at the Pep/9. (Side note: Compiler Explorer is a free website that shows you the Assembly code that your compiler produces when you enter in some C++ code).
If you’ve taken Computer Architecture before, I’d love to feature your advice in an adjoining column on this post. If you’re considering taking Computer Architecture, or are simply interested in learning it outside of school, make sure you subscribe to this blog to get updates on my progress and the inevitable tips-and-tricks I’ll be posting in the future. Either way, hit me up, I’d love to make this a two-way conversation rather than the ramblings of a CS student!