The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan (PDF)

5

 

Ebook Info

  • Published: 2005
  • Number of pages: 344 pages
  • Format: PDF
  • File Size: 2.80 MB
  • Authors: Noam Nisan

Description

A textbook with a hands-on approach that leads students through the gradual construction of a complete and working computer system including the hardware platform and the software hierarchy.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.

User’s Reviews

Editorial Reviews: Review A refreshingly new way of looking at computer systems as a whole by considering all aspects of a complete system in an integrated manner.―Jonathan Bowen, Times Higher Education Supplement About the Author Noam Nisan is Dean of the School of Computer Science and Engineering at the Hebrew University of Jerusalem.Shimon Schocken is Professor of Computer Science, and Founding Dean, Efi Arazi School of Computer Science, IDC Herzliya, Israel.

Reviews from Amazon users which were colected at the time this book was published on the website:

⭐This book is an unparalleled companion in explaining, piece-by-piece, how you can build a somewhat realistic computer from the ground up in a way that is tremendously satisfying. However, it does kind of fall apart at the end, and it’s difficult to finish without outside resources. Still, as a concise guide, it is unparalleled, and I am extremely happy I went on this journey, even if it kind of runs out of steam at the end.This book is simply a guide to the project on the website of the same name. Completing the project is the primary intellectual profit of this book.In chapters 1-5 you build up the hardware of the computer, from logic gates to CPU and RAM. These chapters are a breeze and take maybe 5 hours max. Easy and enjoyable.In chapters 6-11, you build up the compiler to translate from a high level language (Jack) to machine code. The difficulty rapidly ramps up at this point. The assembler (chapter 6) probably took me 3 hours, but wasn’t difficult. Chapters 7 and 8 (the virtual machine translator) are where it gets really hard. Each chapter took me 10 hours, since you’re translating from VM code to assembly. Programming in assembly is a pain in the ass no matter how easy you make the assembly language. In chapter 9-10, you build the lexer and parser of the front-end of the compiler. At this point, the book gets even harder. It gives you almost no theory on how to actually build it. I needed to refer to a compiler book to help me along. I would say chapter 10 took me 20 hours alone.Finally, chapter 11 (where I stopped), it gets nasty. You’re writing a syntax-directed translator compiler. You now write the code generator from jack to VM, and there’s a lot of OS functions that it keeps calling whose functionality hasn’t even been explained yet. After writing a skeleton translator (in about 10 hours), I figured I’d gotten most of what I can out of the book and stopped.In chapter 12, you write a whole bunch of OS library functions in jack. There’s very little guidance.Overall, even though things fell apart for me at the end, I still learned so much, and I don’t know where else I could have gotten this experience. It was fun (and frustrating), but I feel like I understand computers so much better now.Highly recommend. I would estimate it takes 10 hours to read the book and 50+ hours to do the project (to the point that I did it, chapter 11).

⭐I wanted to learn some programming languages and concepts to make my Technical Writer resume meatier. Problem was, any attempt to learn Python, SOAP, or MySQL just lead me to ask a million questions about how this stuff actually worked beneath the straightforward, high-level application stack: How does this code interact with the OS? How do lines of text get turned into binary instructions? How does all this abstract graphics, text, and data actually meet up with electrical signals and semiconductors? It has to at some point, right? It’s not magic, right? (And so on).I grabbed this book because working from the bottom up, from NAND gates to a functional OS, sounded like the best process to learn. I’m on Chapter 6 right now (about half way through the book), and I know I’ve made the right choice. The best part of this course is that you actually build every single layer of the computer architecture using their free suite of visualization tools. This means that, every time you start a new chapter and take the next step up the ladder of the computer hierarchy to the place you actually live in (i.e. an operating system with a graphical user interface), you understand exactly why you’re building what you’re building–and how exactly it relates to all the layers beneath it.I’m not a mathematics guy (I spent seven years in college studying literature; hence why I need this book!), but with some perseverance, several hours spent with a constantly furrowed brow, and a not insignificant amount of cursing, I’ve been able to puzzle through every single one of the tasks set out by the book so far. If you have some natural curiosity and critical thinking skills, you’ll be able to get through this book no matter how non-technical your background is. What’s especially helpful is that there are resources outside the book itself: The online forums for this book are (as of April 2014) very active, and you can either wait a day or two to have an expert look at your code and see all the various ways you’re screwing up, or you can search to see if your particular question has already been answered (it usually has).It’s not all wine and roses, of course. The UI of the software suite is pretty rough, with a few apparent bugs (I’m using them in a Mac OS, so that might be the root of some of the problems). Also, the hardware description language (HDL) you use in the first half of the book often seems unnecessarily finicky (I hope you didn’t put “and” instead of “And” somewhere in your 100 lines of code…). And, though the book mostly follows a path straight up the latter of abstraction, Chapter 4 jumps up to the software (assembly code) level, then follows with Chapter 5, which drops back down into the hardware of the CPU and memory. This structure actually kind of makes sense once you get through both of these chapters (there may be no other way to do it, now that I think about it), but it’s pretty disorienting trying to get through the lower layers of software when the hardware is still sitting around in pieces, only half explained. Some context/additional explanation at the beginning of Chapter 4 would have helped with this.Also note that, when you hit Chapter 6, you’ll need some prerequisite high-level coding/scripting experience. It doesn’t really matter what language you know; you just need to know one. If you’re completely new to coding, I would recommend learning some Python via Codecademy; it’ll probably be a month or two detour from the book (depending on how fast you work), but it’ll be worth it.In summary, I can’t think of a more efficient way to get a thorough overview of Computer Science than this book. Any shorter of an explanation won’t really make sense; any more in-depth of an explanation would probably lose everybody but the people getting college degrees in this stuff. For new students to the field, or for amateurs with an interest, this book hits the sweet spot.

⭐Had a hard time understanding how the Facebook and my toaster worked, felt left behind by these kids nowadays with their TikToks and their NFPs or MFTs whatever they are called, but this book brought me up to speed ! Gotta keep learning in these changing times.

⭐Building a computer from the ground up….sounds like science fiction! Ultimately it enabled me to see machines, not as these “black boxes” that do “magic”…I felt like I was taken through a journey that gave enough theoretical background to get you going and then left you to the implementation whilst they hold your hand. It was much, much harder than I expected, especially the later chapters, which in fairness I had to cheat a little but it was the first half of the book that was the magic for me. It is a brilliant read and I would recommend it to anyone with a technical background.

⭐The book is absolutely fantastic, written in down-to-earth style, for humans. It would be nice if the implementation code is in the book, but then it would probably double in size, so I understand why the author provided only the essential code.

⭐Great if you like a challenge, opens your eyes to the foundations of computing. It is a bit tricky when you get stuck though, but you have to persist or just come back to it later with fresh vision.

⭐Having just done the excellent free Coursera Nand 2 Tetris course, part one of which uses the first few chapters of this book, this was the perfect way to continue learning.

⭐Excellent! From the very basics to a full(ish) computer. One of the best ways to learn and understand the fundamentals

Keywords

Free Download The Elements of Computing Systems: Building a Modern Computer from First Principles in PDF format
The Elements of Computing Systems: Building a Modern Computer from First Principles PDF Free Download
Download The Elements of Computing Systems: Building a Modern Computer from First Principles 2005 PDF Free
The Elements of Computing Systems: Building a Modern Computer from First Principles 2005 PDF Free Download
Download The Elements of Computing Systems: Building a Modern Computer from First Principles PDF
Free Download Ebook The Elements of Computing Systems: Building a Modern Computer from First Principles

Previous articleComputers in Chess: Solving Inexact Search Problems (Symbolic Computation) by M. M. Botvinnik (PDF)
Next articlePrinciples of Modern Digital Design 1st Edition by Parag K. Lala (PDF)