One of the authors of TECS intended to reply to this comment, but he was not a member of the mailing list, and he said it was okay for me to put it here on his behalf. I've hidden his email for him since he didn't comment on how he wanted to be contacted, but you can find his email by Googling it.
On Mon, Jan 3, 2011 at 11:03 AM, John Zabroski <johnzabro...@gmail.com>wrote: > Its a classic book. It is up there with Turbak and Gifford's Design > Concepts in Programming Languages. > > The trouble with these classic texts is most good programmers only find out > about them after they've already learned the subject from an inferior > source. > > --- On Wed, 1/5/11, Shimon Schocken <EMAIL+HIDDEN> wrote: From: Shimon Schocken <EMAIL+HIDDENl> Subject: Fwd: The Elements of Computing Systems To: johnzabro...@yahoo.com Date: Wednesday, January 5, 2011, 4:36 AM John hi: Sorry to write you out of the blue, but here goes. I've tried to write a post on the fonc mailing list (thread "The Elements of Computing Systems") but was rejected since I am not on a member. If you find the text below relevant please feel free to post it on my behalf. Thx -- Shimon ---------- Forwarded message ---------- From: <fonc-ow...@vpri.org> Date: Wed, Jan 5, 2011 at 11:24 AM Subject: Re: The Elements of Computing Systems To: shi...@idc.ac.il You are not allowed to post to this mailing list, and your message has been automatically rejected. If you think that your messages are being rejected in error, contact the mailing list owner at fonc-ow...@vpri.org. ---------- Forwarded message ---------- From: Shimon Schocken <EMAIL+HIDDEN> To: <fonc@vpri.org> Date: Wed, 5 Jan 2011 08:27:12 +0000 Subject: Re: The Elements of Computing Systems Sorry to barge uninvited into this exchange but will appreciate the opportunity to say a few words about the motivation that led us develop the TECS book and the companion software tools and computer system (AKA "Hack"). I've been teaching CS for many years and was always frustrated by the students inability to grasp the big picture and see how HW and SW work together, as one enterprise. And, most of the CS professors I knew seemed to exhibit the same ignorance. So, Noam Nisan and myself decided to design a computer system that will be as simple as possible, meaning that an average CS student can build it in one semester, but not too simple, meaning that it will be sufficiently powerful and fun. And, by "sufficiently powerful and fun" we mean that it should be such that a student could program it (using our Jack language) to run interactive games like Tetris, Snake, Space Invadors and so on and see them execute on the screen. This was one goal. A second goal was to give the students a hands-on understanding of basic hardware design. Remember -- these are CS students, not EE students. Their world evolves around Java, not FPGA. If you'll scan through the HW chapters in the book (chs. 1-3) you will see that all the elementary HW functionality and design is standard. But, the students get to actually build it using a simple HDL dialect and a HW simulator supplied by us. The ALU design is not standard but, in my humble opinion, extremely elegant (Noam developed it). The overall computer architecture is Harvard since, after experimenting with several other models, we chose the one which was easiest to build. 5 years later, I am pleased to report that any intelligent person can build and play with this computer (HW only) with almost no previous knowledge of anything. E.g. many high school students and self-learners build it off the web (the text, software tools, and projects are all open source and freely available). And now to the software side. Our goal in this part of the project was not to teach programming skills or cool languages. The goal was to expose the students to the most important ideas in writing a compiler for a typical OO language. Why? Because for most CS students nowadays, Java, C++, or C# is the main programming language of interest (at least in Israel). So, we've designed the Jack language with three goals in mind: (1) that it will be sufficiently simple and painless so that a CS student could learn and un-learn it in 1 hour, (2) that it will look and feel like a very simple version of Java, without inheritance, and (3) that one could easily write a compiler for it. The latter goal explains why Jack has some ugly syntax like "let x = 0;" -- it's much easier to compile this statement than "x = 0;" (in other words, the Jack compiler is LL(1)). It's important to note though that we discuss all these compromising design decisions openly in the book, so that the students can learn from them. In fact, every book chapter ends with a "Perspective" section that points out all the shortcomings, simplifying decisions, and non-standard features of of the material discussed in the chapter. The compiler that the students build is two-tier. In chapters/projects 7-8 they learn a stack-base VM abstraction and language and then build a VM implementation that translates VM programs into Hack assembly, and in chapters/projects 10-11 they build a Jack compiler that generates VM programs (Chapter/project 9 is writing a Jack program). Once again, all this is done to illustrate the inner working of a Java-like world, which is where our students spend most of their time. Also, most of the simple OS that we build is actually a basic class library extending Jack, akin to Java's class library. Overall the project has been very gratifying. Thousands of students took the course and many more are building the machine off the web. We get many emails from happy campers claiming that they finally have a hands-on understanding how computers work. -- Shimon Shimon Schocken
_______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc