I'll be posting some additional notes soon, but I wanted to share my experience in teaching my
CS498C: Elements of Computing Systems at the Colorado School of Mines.
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.