The Elements of Computing Systems: Building a Modern Computer from First Principles
All
Hacker News 25
This Year
Stack Overflow 2
This Month
Reddit 2
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...
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.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...
The Elements of Computing Systems: Building a Modern Computer from First Principles https://www.amazon.com/dp/0262640686/ref=cm_sw_r_cp_api_i_yH...
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.
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...
https://www.nand2tetris.org/course
https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=ed_oe_p
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.
The Elements of Computing Systems: Building a Modern Computer from First Principles
https://www.amazon.com/Elements-Computing-Systems-Building-P...
I would personally recommend this book . (There’s also an associated coursework available at EdX I believe? You can also check out the book’s site at www.nand2tetris.org)
A link?
Yeah the book I used for my computer architecture class also used a super simplistic C-like language for the compiler, and it also used a super simplistic CPU (it only has one register iirc) which is fine because the book walks you through the creation of the CPU from logic gates, but it also makes things really hard when it’s time to program the damn thing, and that’s why I never managed to get any further than writing an assembler for it :(
You might want to look at The Elements of Computing Systems , also known as "nand2tetris", It will start you out with nothing more than a
NAND
logic gate and you'll build the whole stack, from ALU to CPU to compiler to simple OS. Quite fun and kept reasonably simple.[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...
There are no arrays in HDL. In section 1.3 of the nand2tetris companion book, he says
So besides writing a trivial script in Python to avoid all that typing, you're not missing anything.
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 http://nand2tetris.org/
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
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...
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...