Found in 40 comments on Hacker News
The two online courses at Coursera are based on the First Edition of "The Elements of Computing Systems: Building a Modern Computer from First Principles": https://www.amazon.com/Elements-Computing-Systems-Building-P...

The most recent edition of this book is the Second Edition: https://www.amazon.com/dp/0262539802/

To quote from the Preface concerning what the difference between these two editions is:

"The Second Edition

Although Nand to Tetris was always structured around two themes, the second edition makes this structure explicit: The book is now divided into two distinct and standalone parts, Part I: Hardware and Part II: Software. Each part consists of six chapters and six projects and begins with a newly written introduction that sets the stage for the part’s chapters. Importantly, the two parts are independent of each other. Thus, the new book structure lends itself well to quarter-long as well as semester-long courses.

In addition to the two new introduction chapters, the second edition features four new appendices. Following the requests of many learners, these new appendices give focused presentations of various technical topics that, in the first edition, were scattered across the chapters. Another new appendix provides a formal proof that any Boolean function can be built from Nand operators, adding a theoretical perspective to the applied hardware construction projects. Many new sections, figures, and examples were added.

All the chapters and project materials were rewritten with an emphasis on separating abstraction from implementation—a major theme in Nand to Tetris. We took special care to add examples and sections that address the thousands of questions that were posted over the years in Nand to Tetris Q&A forums."

manu3000 · 2023-07-02 · Original thread
Hard to beat the scope of "The Elements of Computing Systems: Building a Modern Computer from First Principles": https://www.amazon.com/Elements-Computing-Systems-Building-P... The website is here: https://www.nand2tetris.org/
pipes · 2023-04-18 · Original thread
https://www.amazon.co.uk/Elements-Computing-Systems-Building...

I did 11 of the 12 chapters of this. Each chapter is has a practical exercise. You do need some programming experience. Really teaches you how a computer works buy building on in a high level description language (processor, memory etc all from nand gates). Then you build an assembler for it. Then a compiler.

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

First edition on amazon: https://www.amazon.com/Elements-Computing-Systems-Building-P...

Second edition pre-order on amazon: https://www.amazon.com/Elements-Computing-Systems-second-Pri...

bmitc · 2020-11-30 · Original thread
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: https://www.edx.org/course/programming-for-everyone-an-intro...

I think this course should be taken by managers, designers, and even software engineers. The primary result is that you'll come out of it knowing state charts, which are an extension to state machines, and this will be very useful for thinking about software and organizing what the software should do. Handling state is one of the primary problems in software, and you might notice that all of the various paradigms (OOP, functional, imperative, actors, etc.) in computer programming relate to the various ways people think about handling state in a computing system.

How to Code: Simple Data and Complex Data:

https://www.edx.org/course/how-to-code-simple-data

https://www.edx.org/course/how-to-code-complex-data

https://www.edx.org/micromasters/ubcx-software-development

These courses are taught by a designer of the Common Lisp language and based upon the excellent book How to Design Programs. It is essentially a language agnostic course that uses Racket to build up design paradigms that teaches you how to sort out your domain problem and designs into data and functions that operate on that data. The courses are part of a MicroMasters program, so if you really want to get into Java, that is taught in the follow-on courses.

Based upon your last comment, here are some book suggestions on how computers work:

Code: The Hidden Language of Computer Hardware and Software: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

The Pattern On The Stone: The Simple Ideas That Make Computers Work: https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...

But How Do It Know? - The Basic Principles of Computers for Everyone: https://www.amazon.com/But-How-Know-Principles-Computers/dp/...

The Elements of Computing Systems: Building a Modern Computer from First Principles: https://www.amazon.com/Elements-Computing-Systems-Building-P...

eterps · 2020-08-06 · Original thread
Yeah, I guess it depends on what legacy you're willing to part from.

Something like https://www.amazon.com/Elements-Computing-Systems-Building-P... 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.

potta_coffee · 2020-04-07 · Original thread
I'm also self taught, some books I feel have been really helpful to me:

Elements of Computing Systems

Writing and Interpreter in Go

https://www.amazon.com/Elements-Computing-Systems-Building-P...

https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=st...

matco11 · 2020-02-17 · Original thread
One of my favorite books on subject is The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan https://www.amazon.com/Elements-Computing-Systems-Building-P...
levelist_com · 2019-05-21 · Original thread
Check out the following:

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

https://www.amazon.com/Elements-Computing-Systems-Building-P...

deepaksurti · 2019-05-04 · Original thread
One of the best ways would be to build a computer yourself. For that I haven’t found anything better than ECS [1]. Please try to build your own extensions to ECS and don’t forget to burn your computer to FPGA.

Follow that up with Computer Systems A programmers perspective.[2]

My review of ECS [3]

[1] https://www.amazon.com/Elements-Computing-Systems-Building-P...

[2] https://www.amazon.com/Computer-Systems-Programmers-Perspect...

[3] https://www.amazon.com/gp/customer-reviews/RZ4ME4QH22JML/ref...

Hackwar · 2018-09-13 · Original thread
I loved this book: https://www.amazon.com/Elements-Computing-Systems-Building-P...

Creating your own programming language is more a side effect, but that is the book that taught me about computers and compilers.

rzzzwilson · 2018-04-10 · Original thread
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].

[0] https://www.amazon.com/Elements-Computing-Systems-Building-P...

[1] http://nand2tetris.org/

[2] https://www.coursera.org/learn/build-a-computer

[3] https://www.ted.com/talks/shimon_schocken_the_self_organizin...

teacpde · 2018-01-05 · Original thread
I highly recommend http://www.nand2tetris.org/ and the The Elements of Computing Systems book https://www.amazon.com/Elements-Computing-Systems-Building-P...
mevile · 2017-07-30 · Original thread
This is really neat! Also if you want to learn to build a computer from scratch without hardware, just to learn how computers work, The Elements of Computing Systems is a great book to check out. It's used as a text in some CS programs but it is very readable and easy to follow and the software is free and online.

https://www.amazon.com/Elements-Computing-Systems-Building-P...

http://www.nand2tetris.org/ is the website for it.

bogomipz · 2017-06-11 · Original thread
>"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:

https://www.amazon.com/Elements-Computing-Systems-Building-P...

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 https://www.amazon.com/Elements-Computing-Systems-Building-P...
My choice for bottom-up book: The Elements of Computing Systems: Building a Modern Computer from First Principles https://www.amazon.com/Elements-Computing-Systems-Building-P...
seibelj · 2016-08-22 · Original thread
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.

[0] https://www.amazon.com/Elements-Computing-Systems-Building-P...

oumua_don17 · 2016-05-04 · Original thread
>> "no one has time to learn everything" - especially at the beginning of their career.

I wish I had this book at the beginning of my career. http://www.amazon.com/Elements-Computing-Systems-Building-Pr.... Makes you design the hardware, then the software for that hardware.

Should not take more than 8 - 12 weeks with school work/day job.

deepaksurti · 2016-02-15 · Original thread
Why not learn just one of these: - programming languages with different paradigms (Functional, Imperative, Logic etc) - Data structures and algorithms (implement a few in each paradigm) - Compilers - Digital electronics - Operating systems - Networking - Math for CS - Orthogonal: Art of debugging, collaboration, technical writing for documentation

Learning the fundamentals, becoming better at these will help one see through the 'stack of tons of languages, tools, frameworks' and yet be able to handle all of these with relative ease.

I wish 'Elements of Computing systems'[1] were there when I started as a programmer.

[1] http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

bediger4000 · 2016-01-22 · Original thread
Are you thinking of "The Elements of Computing Systems: Building a Modern Computer from First Principles" <http://www.amazon.com/Elements-Computing-Systems-Building-Pr... by Noam Nisan and Shimon Schocken?
earleybird · 2015-09-16 · Original thread
It seems Amazons recommendation system has acquired 'irony' - it's recommending http://www.amazon.ca/Elements-Computing-Systems-Building-Pri.... If I acquire it, I will then have to hide it from my son lest he build something and show it to his high school teacher.
notdan · 2015-07-07 · Original thread
This sounds similar to another book/course/project I've seen that was quite interesting to work through:

From NAND to TetrisBuilding a Modern Computer From First Principles

http://www.nand2tetris.org/

http://www.amazon.com/The-Elements-Computing-Systems-Princip...

adamnemecek · 2014-09-28 · Original thread
If this is something that tickle's your fancy, you should check out 'The Elements of Computing Systems' http://www.amazon.com/The-Elements-Computing-Systems-Princip....
waterfowl · 2014-08-20 · Original thread
it's free online and great, but I also enjoy my hard copy(it was like $20, so so so cheap for what it is)

http://www.amazon.com/The-Elements-Computing-Systems-Princip...

edit: $30 I guess, still worth it.

bra-ket · 2014-05-07 · Original thread
good idea, I would buy two kinds of books 1) one which aggregates all the "How do I write an OS from scratch" info under links below into one coherent whole. and 2) a tutorial on how to build a domain-specific OS, say OS that only knows to run a web-server, or OS for FPGA or Raspberry Pi, or a mobile OS that knows messaging and nothing else

1. http://www.quora.com/How-do-I-write-an-operating-system

2. http://www.quora.com/If-you-were-to-write-a-new-operating-sy...

3. http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/...

4. http://www.amazon.com/The-Design-UNIX-Operating-System/dp/01...

5. http://www.amazon.com/The-Elements-Computing-Systems-Princip...

6. http://www.returninfinity.com/baremetal.html

An adder in functional Verilog:

a + b

Best go with structural if you want to actually learn something. This book ( http://www.amazon.com/The-Elements-Computing-Systems-Princip... ) is very good and I think still stands as the best introduction to this type of stuff I've seen. It's also presented in a straight forward enough way that it's good enough self-study for anyone with some programming experience.

kqr2 · 2012-12-20 · Original thread
I would also recommend The Elements of Computing Systems: Building a Modern Computer from First Principles

http://www.amazon.com/The-Elements-Computing-Systems-Princip...

http://www.nand2tetris.org/

eterps · 2012-03-26 · Original thread
These are my favorite resources:

Compiler Construction: http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf

The Elements of Computing Systems: http://amzn.to/GQycqj

MetaCompilers: http://www.bayfronttechnologies.com/mc_tutorial.html

How to Create Your Own Freaking Awesome Programming Language: http://createyourproglang.com/

Bootstrapping a simple compiler from nothing: http://www.rano.org/bcompiler.html

erwan574 · 2012-02-29 · Original thread
A few books exist that try to restore some sort of "complete understanding" :

Software programming starting from assembly language under linux : http://www.amazon.com/Programming-Ground-Up-Jonathan-Bartlet...

A study going from chip design to high level programming :

http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

IHMO this "problem" of "incomplete vision" started when device drivers where introduced in general purpose OS. Professionnal application developpers started to target API instead of hardware. A milestone in this trend for me is Windows 3.0 (1990). This also marks the demise of fixed hardware computers that the hobbyist favored so far.

eterps · 2012-02-28 · Original thread
And even though the STEPS project above is about software, The Elements of Computing Systems [ http://amzn.to/xMTkWX ] proves that hardware can be understandable as well. Of course that architecture is far too simple to be useful today, but there are still a lot of opportunities that we are missing today: http://bit.ly/ySQf25
abbasmehdi · 2011-09-18 · Original thread
Look through this book, I graduated with a degree in ECE 5 years ago, and this book blew me away: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
shawndumas · 2011-02-28 · Original thread
The Elements of Computing Systems: Building a Modern Computer from First Principles[1][2]

----

[1]: http://www1.idc.ac.il/tecs/

[2]: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

jamii · 2010-12-08 · Original thread
> ... working knowledge of the inner workings of computers ...

I'm a big fan of 'The Elements of Computing Systems' - takes you from NAND gates to pong.

http://www.amazon.co.uk/Elements-Computing-Systems-Building-...

eterps · 2010-11-23 · Original thread
I really love this book, wish more books were like this. I can also recommend: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
shaunxcode · 2010-09-17 · Original thread
Get a copy of "The Elements of Computing Systems"

http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

http://books.google.com/books?id=THie6tt-2z8C&dq=the+ele...

which will seriously take you from logic gate/chip design all the way to scripting languages and an implementation of tetris on a java-esque language/vm. Totally awesome!

You can download the simulation software which is used in the book here if you want to play w/ logic gates/HDL etc. more http://www1.idc.ac.il/tecs/

jgg · 2010-06-19 · Original thread
UrLicht · 2010-04-26 · Original thread
A little known gem: The Elements of Computing Systems

http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

This book takes you from logic gates to writing your own (extremely simple) virtual machine, programming language, etc. It's a bit fast paced and project based, but it'll run you through a very high level overview of the whole gamut.

stcredzero · 2008-08-13 · Original thread
A job that needs breadth: CIO.

If you want to develop knowledge in depth, this is a good place to start:

http://www.amazon.com/Elements-Computing-Systems-Building-Pr...

Buy the book, download the courseware for free, and learn how computers work from NAND gates up. Implement your own OO language on the hardware you've built and write your own OS in it. Then write games for the resulting system. This will put you ahead of most coders out there.

Fresh book recommendations delivered straight to your inbox every Thursday.