Teaching Computer Organization

Posted on December 7, 2025 -

This semester I taught a “new” course, Computer Organization, and there is about a month left before it ends. I call it new because most of the topics in the syllabus were unfamiliar to me. As an undergraduate, I took a course with the same name taught by Professor Zhang Youhui, using CSAPP. Starting with my cohort, we no longer “built a machine” (the well-known “three-week battle to build a computer”), but instead used Y86 on a simulator. Strictly speaking, CSAPP is more about “computer systems” than “organization,” so preparing this course has been extraordinarily difficult.

As the semester approaches its end, the lectures are being delivered more or less as scheduled. I am grateful for Professor Liu Hongwei’s videos from Harbin Institute of Technology — without them, I honestly would not know how to finish teaching this course. But the experience has been genuinely painful. A while ago, I read a post on Xiaohongshu titled something like “There are serious problems in our computer science education at BUPT.” It was blunt and articulated many of the frustrations I had accumulated over time. Unfortunately I didn’t save it and can no longer find it.

In fact, rather than saying this is “a BUPT problem,” it is more accurate to say that computer science education in our country does have systemic problems. Aside from a few schools like Tsinghua (and even there I’m not entirely sure), most universities struggle to help students build a coherent understanding of how computers work. Courses such as Computer Organization, Computer Networks, and Database Systems too often degrade into collections of disconnected concepts. Students hear many abstract — sometimes incorrect — terms, cannot remember them, do not know how they relate, and certainly cannot piece together how a computer system actually functions.

Let me start with Computer Organization itself as the first target. I mentioned CSAPP earlier: it is a good book precisely because it builds a system view, which I believe is the core of computing education. The book I have repeatedly criticized this semester in my Channel and several chat groups is the Computer Organization textbook by Tang Shuofei, currently used by most CS programs in China. The book is dated, obsolete, and fundamentally mismatched with modern computers. Its outdated nature is already the “original sin”: students attend lectures and do homework based on models from decades ago, while the computers and phones in their hands operate on completely different designs. Beyond being outdated, the deeper issue is that it fails to help students form a system view. The author seems to have tried to include every piece of knowledge about computer organization she had ever encountered, then attempted to impose an “abstract yet seemingly complete” structure on top of it. Here are a few examples:

When explaining “number representation,” the author defines sign-magnitude format as follows:

$$[x]_{TF}= \begin{cases} 0,x & 2^n > x \ge 0\\ 2^n-x & 0 \ge x > -2^n \end{cases} $$

In reality, sign-magnitude representation is simply a sign bit followed by the binary of (|x|). Defining it this way is unnecessary and meaningless. It increases the cognitive burden for students and ignores the practical constraint that numbers must operate within the machine’s word size. Other representations are described in similar ways. This style reflects a long-standing issue in many of our textbooks: a tendency to wrap concepts that do not need mathematical formalism inside formal, abstract expressions, ultimately distancing students from how the machine actually works.

Here is another example:

The control unit coordinates the execution of an instruction by sequentially performing a series of micro-operations. Since different instructions require different numbers and complexities of micro-operations, each instruction and each micro-operation takes different execution time. The method of generating timing control for different micro-operation sequences is called the control mode of the CU. Common control modes include synchronous control, asynchronous control, hybrid control, and manual control.

  1. Synchronous control: every instruction and every micro-operation executes in a predetermined manner, all governed by a unified timing signal.
  2. Asynchronous control: no base timing signal exists; there are no fixed cycle rhythms or strict clock synchronization. Each instruction or micro-operation takes precisely the time it needs.
  3. Hybrid control: a combination of synchronous and asynchronous control.
  4. Manual control.

I did some research and found no evidence that any commercial control unit adopts a fully “asynchronous control mode” (aside from some experimental designs). It appears to be “completeness for the sake of completeness.”

If you ask what students truly need, I think the answer is still a system view — an understanding of which components make up a computer, the boundaries and interfaces between them, and the ability to imagine how an instruction travels from the compiler down to the hardware, from fetch to memory access. The book Computer Organization and Design describes the “Seven Great Ideas in Computer Architecture,” with abstraction being the central theme. These ideas form the backbone of the entire discipline. Unfortunately, such thinking rarely appears coherently in most courses, especially under the current curriculum structure. In recent years, many universities have been “cutting courses”: fewer required classes, lighter labs, more flexibility for students. But computer science is an engineering-first discipline. When the foundations are too narrow, the system view cannot grow. Ironically, it was courses like compiler principles, assembly, formal languages and automata, and embedded systems that helped me see the connections across layers and appreciate the elegance of the computer as a whole.

In the era of LLMs, this issue becomes even more pronounced. Today’s AI can already replace many instructors by answering questions they cannot; it can also replace students by completing assignments, especially programming tasks, far beyond what most students can do. But AI cannot build a system view for students — a system view cannot be obtained from text. It is a form of intuition developed over long practice: seeing real systems, running experiments, and making mistakes. That is precisely what teachers can still provide.

A computer should be a discipline full of logical and engineering beauty, yet it is often taught as a daunting list of terms. I still do not know how this course ought to be redesigned. We can change the textbook, the labs, and the assessments, but these are only surface fixes. Yet change is necessary. Otherwise, the next generation of students will repeat today’s confusion. After all, this course is meant to be the starting point for understanding how computers work — and if the starting point is wrong, it is very hard to walk steadily afterward.


Header image: black and gray dj mixer

Author: Erik Gazi