First, thanks to Schocken and Nisan for an excellent book and for sharing the class materials online. The tools suite, online project docs and course materials, and online slides were all helpful in getting me organized and provided additional perspective from my own materials.
My students particularly loved the class, and it absolutely meets its goal of filling in the gaps of the typical CS curriculum. My students who had taken "Computer Architecture" and "Programming Languages" loved how the light bulb finally came on for them in a tangible way. Those students who couldn't fit any basic EE (eg, "Logic Circuit Design") classes into their schedule loved the hardware portion of the class. Logic chips, CPU control circuitry, stack frames, call/return protocol, stack machine, and the Jack-to-VM virtual memory management were probably the highlights of what was eye-opening. (Unfortunately we didn't have time to finish the last chapter regarding "Operating System.")
In addition, the versatility of implementing the software stack in the student's language of choice was a big win. Students used Python, Java, Ruby, PHP and I even had one implementation, from a non-CS graduate student, in Delphi.
When I have time I'll post screenshots of some of the games that were created in Jack.
This class is absolutely approachable for non-majors who have at least a small amount of programming experience. One of my students, a gifted high-school student, took the class with minimum programming experience and was very successful.
Many of my students felt the class was incredibly fun, a "great capstone class" and should be a required part of the typical CS curriculum.
If any of you have questions about implementing the class in your own department, feel free to post questions here.
This summer I have been teaching a 3-week intensive summer class to 12 - 15 year old "gifted" children, and I opted to try to use TECS for this purpose. This has meant condensing each week of material into each day (students have 6 hours of instruction per day). So far, this has actually been successful... but we've only just finished the hardware.
Only two students successfully implemented the CPU entirely on their own; two others were successful with some assistance. The rest were, frankly, quite lost. As of today, I have decided to take a short detour before building the assembler in order to teach them the basics of programming (building the assembler will be way to daunting for the majority of children that have no programming experience). To this matter I have chosen to use Processing (using this book) to teach them variables, control structures and classes. The point is to get them to sit from the top of the abstraction stack first, then go back to assembly language and the assembler and fill in the gap from there.
I doubt the students (one or two excepted) will be able to succeed in the software projects without a large amount of assistance. But we'll see how it turns out. I will instructing them to use Ruby for the programming assignments after a day's worth of introductory exercises on Ruby.
I'll report back on the results in a couple weeks.