The Elements of Computing Systems: Building a Modern Computer from First Principles

Category: Hardware & DIY
Author: Noam Nisan, Shimon Schocken
All Hacker News 25
This Year Stack Overflow 2
This Month Reddit 2


by josephkern   2020-12-10
EoCS is a modern classic in computer science and engineering, I am very excited to see a second edition.

First edition on amazon:

Second edition pre-order on amazon:

by bmitc   2020-12-03
I don't think there's an easy answer to this question. Software engineers still don't know how to exactly or even efficiently communicate with each other. It's still an evolving field and process. In general, it is helpful to understand software development as a sub-field of systems theory and design, so any book that discusses systems should help one better understand software development.

In general, I do also echo some of the other comments. If you are helping to design the app, you shouldn't necessarily need to understand the implementation details. In my experience, clients, whether they be external or internal or colleagues, getting too involved into what they think the implementation should be is usually a disaster. It puts pressure on the system to conform to how they think it should be, which is usually not necessarily how it should be, and it basically adds unnecessary constraints. The real constraints should be what the software should do and specifications on that, including how the software is intended to be maintained and extended.

Some thoughts on some specific courses and books that I think would be helpful to better understand the goals of software development and design and ways to think about it all:

Programming for Everyone - An Introduction to Visual Programming Languages:

The Pattern On The Stone: The Simple Ideas That Make Computers Work:

But How Do It Know? - The Basic Principles of Computers for Everyone:

The Elements of Computing Systems: Building a Modern Computer from First Principles:

by notdan   2020-10-09
If you want to do the lite version of this there is a book called “From NAND to Tetris” that is an instructional book for a similar class and walks through doing much of the same thing. It helped me connect the dots between “I know how a transistor works” and “I know how assembly language works” that I have never learned otherwise. Even if you just skim the book without doing the project you will likely learn some things.

The Elements of Computing Systems: Building a Modern Computer from First Principles

by eterps   2020-08-09
Yeah, I guess it depends on what legacy you're willing to part from.

Something like is not hard, but it's arguably a toy system.

IMO Project Oberon starts from the same principles and builds up to a productive enironment including text processing, a compiler, very basic hypertext, basic networking and hardware to run it on.

by potta_coffee   2020-04-10
I'm also self taught, some books I feel have been really helpful to me:

Elements of Computing Systems

Writing and Interpreter in Go

by matco11   2020-02-20
One of my favorite books on subject is The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan
by create_a_new-account   2019-08-24

by salamanderoil   2019-08-24

The Elemennts of Computing Systems, aka Nand2Tetris. The book's blurb (from Amazon):

>In the early days of computer science, the interactions of hardware, software, compilers, and operating system were simple enough to allow students to see an overall picture of how computers worked. With the increasing complexity of computer technology and the resulting specialization of knowledge, such clarity is often lost. Unlike other texts that cover only one aspect of the field, The Elements of Computing Systems gives students an integrated and rigorous picture of applied computer science, as its comes to play in the construction of a simple yet powerful computer system.
>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.
>Designed to support one- or two-semester courses, the book is based on an abstraction-implementation paradigm; each chapter presents a key hardware or software abstraction, a proposed implementation that makes it concrete, and an actual project. The emerging computer system can be built by following the chapters, although this is only one option, since the projects are self-contained and can be done or skipped in any order. All the computer science knowledge necessary for completing the projects is embedded in the book, the only pre-requisite being a programming experience.
>The book's web site provides all tools and materials necessary to build all the hardware and software systems described in the text, including two hundred test programs for the twelve projects. The projects and systems can be modified to meet various teaching needs, and all the supplied software is open-source.

by levelist_com   2019-05-24
Check out the following:

The Elements of Computing Systems: Building a Modern Computer from First Principles

by rzzzwilson   2018-11-10
There is a book "The Elements of Computing Systems: Building a Modern Computer from First Principles"[0] that is often called "From NAND to Tetris". This has you building a computer simulator from the ground up (NAND to Tetris). There is a website[1] and a Cousera course[2]. And a TED talk[3].





by anonymous   2018-03-19

There are no arrays in HDL. In section 1.3 of the nand2tetris companion book, he says

Since we already know how to implement the elementary versions of these gates, the implementation of their n-ary versions is simply a matter of constructing arrays of n elementary gates, having each gate operate separately on its bits. This implementation task is rather boring, but it will carry its weight when these multi-bit gates are used in more complex chips, as described in subsequent chapters.

So besides writing a trivial script in Python to avoid all that typing, you're not missing anything.

by anonymous   2018-03-19

There's a great textbook called The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan and Shimon Schocken, which serves as the basis for a university course taught by the authors called Workshop In Computer Construction - From NAND to Tetris in 12 Steps. This course is also taught at other universities under different names.

There's a 10 minute introduction on YouTube and a 1 hour Google TechTalk on Google Video, both by the author himself.

The official companion web site is

Don't let the title "Computer Construction" fool you. By "computer", the author does not just mean the rectangular plastic box on your desk, he means the entire computing system, from the individual logic gates up to highest-level application programming.

The book/course teaches you

  • how to create your own individual logic gates
  • how to build your own logic circuits
  • how to build your own CPU
  • how to program in machine code directly
  • how to program in your own assembler (which you wrote in machine code)
  • how to write your own virtual machine
  • how to design, implement and program in your own high-level language (which you wrote in assembler)
  • how to write a bootloader
  • how to write an operating system
  • and ultimately how to write a simple game
by bogomipz   2017-08-20
>"Part 2 didn't exist when I worked through the book and watched the Part 1 lectures a couple years ago, so presumably this is new."

Thanks for the confirmaton, I didn't remember seeing this either.

"The book, btw, is a masterpiece ..."

Agreed. The paper back is a nice format and reasonably priced for a technical book as well:

by pankajdoharey   2017-08-20
I think Implementing a 6502 is a good example for an architecture implementation. Since it has already been done in numerous NES emulation projects, A lot of us have a good understanding of the CPU. Plus it is the part of a history which many kids could relate to. The video game era and genesis of personal computing era was almost entirely based off of this single CPU. It isnt small but definitely a stepping stone towards understanding a modern CPU. anything lesser makes it just a toy. For a toy, I like the one described in "Elements of Computign systems" here
by bediger4000   2017-08-19
Are you thinking of "The Elements of Computing Systems: Building a Modern Computer from First Principles" < by Noam Nisan and Shimon Schocken?
by seibelj   2017-08-19
I recommend the associated book[0] to everyone who asks me about programming book recommendations. The book arrives, and you are shocked at how small it is, just a few hundred pages. If you follow all of the exercises, you get an understanding of how logic works inside of processors (logic gates, adders, etc.), how machine code drives them, how assembly maps to machine code, how a basic virtual machine language (like the JVM) can compile to assembly, then how a higher level language is designed and compiled to the VM.

After doing all of this, you make Tetris in the high level language. It's a badass book, super well-written, and what I consider an essential text.