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

Reply via email to