Reading material

In addition to the textbook, there is more required reading as well as suggested reading. The material below are meant to enhance appreciation for computer architecture, reveal specific topics worth further study, and also offer an entertaining perspective in the topic.

Suggested reading

  • The Pattern on the Stone: The Simple Ideas that Make Computers Work, by W Daniel Hillis. This is a computer architecture book written in simpler terms than a typical college textbook. It explains how computers are designed and built with every day examples and analogies. The author is a pioneer in the field of computing. In the 1980s, Hillis founded the Thinking Machine Corporation and produced some of the most formidable massively-parallel computers of its era.

Reading assignments (required)

In the course we’ll use C to write programs that take us closer to the hardware than other, more modern, languages. The best way to learn C is to read Kernighan and Ritchie, cover to cover and practice everything in it. If you do not want to commit to this book, you may want to use some of the resources available to you at no cost from the O’Reilly library.

I have assembled a few textbooks that can help you learn C. Any of the first three books in this collection can help you along the course. You will need to login with your LUC email address to access the material in this collection. The last two books in this collection are a bit more advanced. They are very useful if you’d like to learn a bit more C.

Weekly assignments

Week 02

For week 02, the reading assignment is Chapter 2 from the book. It’s massive, but manageable if you focus on the following parts, skipping any practice problems not explicitly mentioned below.

  • 2.1.1 Hexadecimal notation (work on practice problems 2.1 and 2.3)

  • 2.1.2 Data Sizes, but only the first two paragraphs

  • 2.2.2 Unsigned encodings

  • 2.2.3 Two’s Complement encodings (work on practice problem 2.17); skip the “Aside” boxes about “More on fixed-size integer types” and “Alternative representations of integer numbers”.

  • 2.3 Integer Arithmetic; skill any “Aside” boxes and derivations. (Work on practice problems 2.29, 2.34)

  • 2.4 Floating point (work on practice problem 2.47); up to and including 2.4.5

The assignment above requires 2-3 hours of reading. Have a notepad to write things down as you practice examples and problems from the reading. You should complete the reading by the end of this month.

Friday’s take-home assignment will focus on the readings above (the assignment will be due 2/2/24.

At the end of class this Thursday (1/25) and this Friday (1/26) we’ll take about 15 minutes to conduct an in-class assessment. The assessment will focus on conversions between binary and decimal, both signed and unsigned. For example, what is -13 in binary? Ans.10011. What is the unsigned decimal value of 10011? Ans. 19; etc.

If you have an extended time or quiet environment accommodation, you can make arrangements with SAC. If you wish to try the in-class assessment, you will only need to complete the first half.

These are low-risk assessments – because of ungrading, any mistakes you make cannot impact your grade severely. The important thing is to show that you learn something from making mistakes. If you do better in a similar assessment next week, you’ll be fine.

If you have any questions, please let me know.

Week 03

For week 03, the reading assignment is from Chapter 3 of the book; specifically:

  • 3.1 Historic Pespective

  • 3.2 Program Encodings. Notice that the examples I use in the class are not the same as in the book. Please try the book examples on your C environment, preferrably in Replit, to verify that you can write and compile C programs, and that you can inspect the executable’s contents using objdump with the -d option to disassemble to machine code. You may skip 3.2.3.

  • 3.3 Data Formats

  • 3.4 Accessing Information. This is a rather dense chapter and a bit challenging at first. We’ll discuss it in class, extensively. You may skip 3.4.1. And you may stop at 3.4.4 (no need to read 3.4.4 and beyond, for now).

It is also time to look at some material about C pointers. In the collection of C books I have assembled for you, there are two good readings: either chapter 10 of Slobodan Dmitrović’s Modern C for Absolute Beginners or chapter 10 of Stephen G. Kochan’s Programming in C.

Week 04

Make sure you read the material for week 03, listed above, and also read chapter 3.4.4. Work on practice problem 3.5.

Week 05

Chapters 3.5 and 3.6 up to but not including 3.6.5 and beyond.

Optionally 3.7 (we’ll cover the topics in 3.7 (and 3.8) in the course later anyway, so this is good upfront reading).