9 ms·
The Elements of Computing Systems, Second Edition
- Tomte 6y agoIn July.
- davidkuhta 6y agoSunshine and Friendship. Computing literature published. A generation renewed.
- airstrike 6y agoJust pre-ordered the Kindle version
- Jtsummers 6y agohttps://www.nand2tetris.org/ https://www.nand2tetris.org/ The course is at the above website, in case you want to start working through it before this edition is released in July.
- mkl95 6y agoThe first edition is probably the book with the highest mind-expanding content to page ratio I have ever read.
- jpochtar 6y agoBuy this book if you're a programmer who wants to know how computers work. I read the first edition in high school, and if I had to choose either this book or my entire undergrad CS education, I'd pick this book.
- anyekwest 6y agoSeriously. After reading this book I realized that I didn't understand shit about computers before. Wondering what the second edition adds.
- kar1181 6y agoLogged in to say exactly this. I thought I understand computation after my degree, and this book, while far from perfect, did an incredible job of bringing fundamental computation to life in the readers mind. I'm looking forward to diving into the second edition and hoping the second half is better than the first edition.
- surajrmal 6y agoI feel like computer science degrees rarely get into much of the hardware beyond some basic assembly. You might have benefitted from taking some computer engineering courses which cover the topics in this book in much greater detail.
- mhh__ 6y ago> basic assembly Even some people actually working on compilers still talk about pipeline stalls in a ye olde pentium/RISC sense rather than the out of order monsters we have today.
- krisgee 6y agoInteresting my CS degree had a required introductory Computer Engineering course which itself had a pre-req first year course where we learned digital logic (among other stuff). We didn't go quite as far as this book seems to but definitly got a decent grounding in how computers actually do their thing before it was back to theory.
- trollski 6y agoevery programmer should know how computers work.
- ryanklee 6y ago"This second edition has been extensively revised. It has been restructured into two distinct parts—part I, Hardware, and part II, Software—with six projects in each part. All chapters and projects have been rewritten, with an emphasis on separating abstraction from implementation, and many new sections, figures, and examples have been added. Substantial new appendixes offer focused presentation on technical and theoretical topics." From the blurb
- abecedarius 6y agoWasn't the first edition also in two parts (hardware then software) and with an emphasis on separating abstraction from implementation? That's how I remember it.
- DubiousPusher 6y agoYes on the first account. Kind of on the second. Each project had you finish in a way that would allow you to put it in a box and take it as an abstraction into the next one. That part worked well. The part that was hard for me was that the book's language often muddled concept and implementation in the description of the project. This wasn't too much of a problem for myself as I went through this book several years after school. I had been working as a professional programmer for some time then and was used to disambiguating concepts and detail. I know a lot of people work through this book as an undegrad but I must admit I doubt I would have enjoyed as much had I less experience. I can't speak to how much they've improved this aspect obviously and otherwise I found the book's language unusually clear for a textbook.
- papandada 6y agoAs someone who programs without a CS undergrad background and always feels insecure about it, this sounds both very interesting and a very good deal.
- DubiousPusher 6y agoIf you are interested you should dig in. The very best thing about this book or at least its previous edition is that it is really really fun. The only other textbook I've enjoyed as much is PG's ANSI Common Lisp.
- mhh__ 6y agoWhen you've done that read Ulrich Drepper's piece on memory - it's tough but this is what sets you apart from a cowboy (not so much the section on DRAM pinouts, but the whole thing)
- JonathonW 6y agoThis book follows more along the lines of the coursework for a computer engineering degree than a computer science degree-- especially at institutions where CS lives under the math or IT department as opposed to the engineering department. There can be a lot of overlap between the two, particularly on the software side of things, but CS curricula generally completely omit the electrical engineering portions of a CE curriculum, and that's where ECS puts its focus.
- ROARosen 6y agoTheir video course [1] is supposedly based off the book. In the course they state that they are not focused on (nor do they have expertise) in the "electrical engineering" aspect of computer systems. In the first part of the course they focus on computer "hardware" but only on the logical aspects of it (i.e. logic gates etc.). So it probably is considered part computer engineering (though the second part does focus on software) but I wouldn't say it really overlaps with electrical engineering. [1] https://www.nand2tetris.org/ https://www.nand2tetris.org/
- de_nied 6y ago>This book follows more along the lines of the coursework for a computer engineering degree than a computer science degree > but CS curricula generally completely omit the electrical engineering portions Where in this book does it talk about electrical engineering?
- wrycoder 6y agoThe first half of the book is about digital design, which is part of electrical engineering. They call it "Hardware Land" in the book. From page 6 (1st ed.): Of course the layers of abstraction don't stop here. Elementary logic gates are built from transistors, using technologies based on solid-state physics and ultimately quantum mechanics. Indeed, this is where the abstractions of the natural world,as studied and formulated by physicists, become the building blocks of the abstractions of the synthetic worlds built and studied by computer scientists. 8
- 6y ago
- GrumpyYoungMan 6y agoI have both a computer engineering education and have read the book. My recollection is that it's good for what it is but omits[0] a heck of a lot of necessary background knowledge to apply the material outside of the limited context of the book. I'm not saying that it's not good, just be aware that it's not the whole picture, so to speak. [0] or perhaps it would be better to say "has no choice but to omit" or it would be ten times thicker than it is.
- DubiousPusher 6y agoComing from the pure CS side I definitely got this feeling. But the real value it provided me was to demystify a lot of what I was working on top of as a programmer. Not that I believe that working through this book has given me a complete understanding of the stack below where I work. I think a superscalar processor with a fat OS like Linux or Windows on top and several layers of drivers and firmware between is far far away from what this book teaches. But it did help me to stop thinking magically about a lot of what is going on. It's embarrassing to admit I once thought a lot of tools like debuggers and whatnot were doing some hocus pocus I couldn't hope to understand. This book really showed me that everything going on in a computer is capital D designed. From your first projects in CS you're sitting atop a huge stack of tech. My own education was fairly low level compared to most CS programs. Several assembly languages, C, debugging crash dumps, register watches, etc were all part of my curriculum. Even still there is so much down below where I work it is hard not to think magically. Just being given a toy model of how all this doesn't but might work was extremely helpful. This may be why you might find CS majors more fond of this book than CE or EE.
- markus_zhang 6y agoJust curious what curriculum gave a low level CS education? Did you deliberately choose courses such as Compiler thoery and Operating System? In my school(I'm in first semester but join as a returner as I got a Stat master yrs ago) they are both optional and we can skip many low level courses.
- 6y ago
- kolbe 6y agoI had sort of the opposite experience. The book was really fun, but it felt a lot more like I learned how to play some abstracted low-level game. It just didn't do much to actually inform me about how a modern CPU actually works.
- DubiousPusher 6y agoI think that is nearly exactly the purpose of this book though. It is not to teach you how modern computers work. That may even be an impossible task (as in I'm not sure any one person could hold all of that in their head at once). But by giving you a version of a computer you can completely understand, you can begin to relate to how various pieces of the technology you work with on a daily basis might work. For example, the portions on virtual machines do not explicitly show you how the JVM works but they give you an idea for the conerns involved such as managing object lifetimes and whatnot.
- bennysonething 6y agoThat's good to hear. I completed all but the final chapter of this book. I don't have a CS degree. A colleague told me I seemed to know a lot more about computing than his computer science class mates. I do wish I'd at least done data structures and algorithms in uni. Catching up now on coursera. next I want to through the book computer systems a programmers perspective
- seibelj 6y agoThis is one of the best books you can read as a software engineer. Lessons can be done over weekends and they teach you so, so much. I recommend this to everyone when discussing CS books. Absolutely incredible work - and concise too.
- cosmic_quanta 6y agoI have the first edition. It was such a great read. I practiced the concepts by building a 4-bit ALU in Minecraft back in the day (~2013). I thoroughly recommend this book.
- jgwil2 6y agoGah! So mad I just bought the first edition!
- Jtsummers 6y agoDon't be mad. I've done that before with some books I really liked. Work through the one you've got, then optionally pick up the second edition when it's released. I usually throw the "oops, they released an update a month after my purchase" editions onto my wish list and get it within a year as a birthday or Christmas gift.
- potta_coffee 6y agoI did the same thing. This book has been on my radar and I bought it about 3 months ago.
- Koshkin 6y agoI have seen books suffer from the "second-system syndrome." http://www.neilgunton.com/doc/?o=1mr&doc_id=8583 http://www.neilgunton.com/doc/?o=1mr&doc_id=8583
- Jtsummers 6y agoI wonder what might be some good examples of that. IME, it's mostly been college textbooks which suffer from being refreshed for the sake of encouraging new purchases (killing the used market), often by someone other than the original authors and editors. Of course, some AD&D fans would say everything past 2nd edition might be an example of it.
- Koshkin 6y ago> past 2nd edition Case in point: the vomit-inducing colorful print of the 3rd edition of Axler's Linear Algebra Done Right.
- Jtsummers 6y agoHah. I actually had two linear algebra texts in college, both ostensibly by the same author (I can't recall now who it was so can't verify the later edition was actually by the same man and didn't reuse his name). One was my mother's in college some time in 1976-1980, the other was mine from some time in 2000-2004. If it weren't for the exercises, I'd have only used hers because it was a much clearer text, it was also less than half the size (overall smaller in every dimension: shorter, narrower, and thinner).
- kar1181 6y agoAs others have commented, the original book was one of those little gems that once you read, you realise how blind you were before, and it is extremely accessible. Often material is either too abstract or far too detailed, ECS managed to find the perfect balance where someone with a CS background can drill down to transistors and come back upwards again and really understand where they are going on that journey.
- AtlasBarfed 6y agoI didn't use this one, but my Computer Organization class which did gates -> circuits -> cpu -> microcode -> assembly was the lightbulb that allowed me to attempt to deconstruct everything to at least the gate level if I had to and made me much more comfortable with computer science and software in general. The only thing that rivaled that lightbulb was aspects of Theory of Computation with undecidability, turing machine vs stack machine vs state machine powers that theoretically limit Von Neumann architecture. I'll have to pick this up to see what is new, what would really be nice is if they can get a bit into SSDs and modern superspeed networking, I/O, and multicore that wasn't as prevalent back in the day.
- bogomipz 6y ago>"The only thing that rivaled that lightbulb was aspects of Theory of Computation with undecidability, turing machine vs stack machine vs state machine powers that theoretically limit Von Neumann architecture." Might you or someone else have a title that you would recommend for this that is the equivalent of a "Elements of Computing Systems" style book?
- jgwil2 6y agoI would add that I like Michael Sipser's Introduction to the Theory of Computation. It provides an introduction that explains a lot of the mathematical concepts and notation, which is helpful for self-study. Covers all the material mentioned, as well as time- and space-complexity and some other topics. However, it is basically a math textbook, so it doesn't have any actual code that you can run (you might code up the theoretical machines as an exercise). Rather, it mainly consists of theorems and their proofs.
- limitedmage 6y agoHow similar is this book to CODE by Charles Petzold? I loved that book because it progressively builds up an imaginary computer using very easy to understand concepts. Even non-technical people can read it to understand how computers work internally.
- jhbadger 6y ago"Elements of Computing Systems" is more detailed and involves you actually creating (virtually) a working computer starting from NAND gates. CODE is much more introductory.
- Jtsummers 6y agoThe Elements of Computing Systems is a project-based course, starting with transistors going through building a computer and then an OS and software on top of it. Code goes deeper into the history leading to modern computers, but doesn't offer this project-based experience from the transistor level up. IMO, the two books offer a nice complement to each other.
- kyting 6y agoAs a reader of both books, I couldn't agree with you more.
- Zelphyr 6y agoI read CODE before reading The Elements of Computing Systems. I felt like the former provides details that you actually implement in the latter. Highly recommend both and in that order.
- GrumpyYoungMan 6y agoPetzold's Code is a popularization aimed at non-technical readers, as you said. ECS is a textbook aimed at college-level CS and Comp. Eng. students and goes into sufficient technical depth for the reader to build their own digital computing systems.
- bmitc 6y agoI love this book (the first edition), project, and course. It is incomplete, but I thought I would share my implementation of the software stack in F#. Currently, only the assembler is implemented, but in my personal opinion, I think it showcases the beauty of F# for domain modeling. When I return to the project, I hope to restart the VM implementation and continue adding to the FPGA implementation as well. My eventual goal is to have the entire software stack built using F# that can than be run on an FPGA implementation of the CPU. https://github.com/bmitc/nand2tetris https://github.com/bmitc/nand2tetris Types to model the instructions and source file expressions: https://github.com/bmitc/nand2tetris/blob/main/dotnet/Nand2Tetris/Assembler/Types.fs https://github.com/bmitc/nand2tetris/blob/main/dotnet/Nand2T... The full assembler, mainly consisting of the parser and translator: https://github.com/bmitc/nand2tetris/blob/main/dotnet/Nand2Tetris/Assembler/Core.fs https://github.com/bmitc/nand2tetris/blob/main/dotnet/Nand2T...
- protomikron 6y agoDoes anybody know something about the main differences to the first edition? Is it the same HACK computer (and stack, with assembler, high-level language, etc.), or did they change that? The original architecture had some caveats - e.g. no external interrupt capability, so IO was implemented using busy polling and inspection specific IO-mapped memory regions (I don't blame them, as it made the book more concise and you can not cover everything) and there has been discussion about a HACK-2 from the community, so it would be interesting if somebody knows more.
- bmitc 6y agoI emailed the authors a while back when I found out about the second edition, asking about the differences. They stated that the hardware platform and software stack specifications are unchanged.
- deleted 6y ago[deleted]
- deleted 6y ago[deleted]
- bcheung 6y agoI wonder what is different in the Second Edition. I own the first and absolutely love it. Also loved the nand2tetris course.
- miobrien 6y agoCourse is available for free on Coursera: Part 1 - https://www.coursera.org/learn/build-a-computer https://www.coursera.org/learn/build-a-computer (hardware projects/chapters 1-6) Part 2 - https://www.coursera.org/learn/nand2tetris2 https://www.coursera.org/learn/nand2tetris2 (software projects/chapters 7-12)
- bmitc 6y agoThe downside is that part two is the software stack and the software grader only supports Python and Java.
- rbanffy 6y agoIt's reasonable to support one great programming language along with Java, which is kind of a market standard.
- bmitc 6y agoI didn’t say it wasn’t reasonable, but it is a downside for those wanting to do something different. I’d prefer they tested emitted code, that way you can use anything you want.
- rbanffy 6y agoThey'd need to maintain trusted sandboxed environments for every supported compiler/interpreter. That's a lot of work.
- fantod 6y agoNot when I took it! I did most of those assignments in Haskell (a choice I came to regret). Double-checking and it seems the grader supports the following languages: C, C++, C#, Elixir, Erlang, Go, Haskell, Java, Lua, Node.js, Perl, PHP, Python 2.7, Python 3, Ruby, Rust, Scala, Swift.
- bmitc 6y ago
- roperzh 6y agoThe first edition is a great book, I completely recommend the first ~4 chapters, after that the ROI is not as good. Personal opinion: I have found "Computer Systems: A Programmer's Perspective" to be a better introduction to the same set of topics.
- Jtsummers 6y agoDifferent books, different aims. Elements is suitable for both self-study and a 2-6 week (depending on time and level of students) survey course for high schoolers or college students in non-EE/CMPE degree programs. The material is freely available (for the 1st edition, I assume the 2nd will be as well). The print version is 1/4 the cost of Computer Systems, which seems to be aimed at college students (to be covered over an entire semester) or more experienced programmers for self-study. The neat thing about Elements is that, despite being shallow in parts, it provides the full map of the subject with projects building on each other. Someone who's gone through it can more easily approach deeper treatments to fill in the details as they know where it's going, which also aids in motivation (removes the "what's the point" question when faced with seemingly esoteric topics).
- cadr 6y agoI just want to add to what everyone else here is saying. I recommend this book to everyone. Very excited to see how they've updated it.
- crispyalmond 6y agoIs there any place to purchase a digital copy of this? I want to read it, but don't like paper copies. Besides the kindle edition, I'm looking for an ePUB or PDF mostly.
- Jtsummers 6y agoThe current edition can be read for free, check the "Projects" section, at https://www.nand2tetris.org/course https://www.nand2tetris.org/course. There is also the Kindle version of the current edition.
- crispyalmond 6y agoThis is awesome. Thanks for sharing!
- michaelmrose 6y agoIs there any plan to offer the work in progress as an eBook prior to release?
- de_nied 6y agoBetter alternative: https://pages.cs.wisc.edu/~remzi/OSTEP/ https://pages.cs.wisc.edu/~remzi/OSTEP/ It's also free. Does not cover discrete math and assembly afaik.
- ottod 6y agoMy girls, then aged 10 and 12, made it through the Coursera ECS first course. They are not geniuses, but the material is stellar. I helped them in a couple of assignments. They enjoyed it, even tough not one of them went the STEM route. They became the smart artsy young women that make art and music with computers.
- zarkov99 6y agoThis is an amazing book, the engineering, bottom-up counterpart to the equally marvelous, but top-down, mathematical SICP. Between these two a serious student can get a wonderful foundation in CS and a deep and hopefully enduring connection to the beauty in it.
- rudedogg 6y agoHow does this compare to "Digital Design and Computer Architecture" by David and Sarah Harris? Can anyone who has read both comment? I've been wanting to learn more about the fundamentals of how computers work. I'm also interested in exploring FPGAs.
- sunsetSamurai 6y agodo you need any external resources to go through this book?
- gshubert17 6y agoThe webpage https://www.nand2tetris.org/software https://www.nand2tetris.org/software has a link to a file, nand2tetris.zip, which contains projects and tools which are all one needs to go through the book (explained on this page). This open source software can be run on Windows, Unix, and MacOS. I've worked through most of the book on my Mac.
- sunsetSamurai 6y agothank you!
- jzer0cool 6y agoAs a side note: It is quite fascinating how computers are really just bits of 0's and 1's. What a magical machine built upon a layer of boolean logic. What an incredible feat.
- gmadsen 6y agoHow does this compare to the NAND to tetris course?
- turing_complete 6y agoIt's the book to this course!
- shaya 6y agoI had the pleasure to be taught this course by Prof. Schocken and also implement https://www.nand2tetris.org/ https://www.nand2tetris.org/ It's very important to know that Prof. Schocken is a true hacker - he speaks a lot with his students about hacking and curiosity, which is far more important than academic grades.
- wly_cdgr 6y agoI love this book. At the same time, isn't the whole point of abstraction to make this knowledge irrelevant for people who build applications on top of it? Like, the knowledge should only have utility insofar as the abstraction designers and implementers at the levels below yours did a bad job, unless you have a use case they didn't design for