I certainly support your efforts in developing the HtDCH curriculum. The workshop you held in Summer 2004 was an excellent introduction to a sound collection of simple design techniques that are appropriate at all academic levels.
I regularly teach CS-1 and Data Structures in the fall semesters. Since we do not use Scheme or HtDP in our intro courses, I need to make adjustments to adapt HtDCH for my CS-1 course. However, the basic principle of design recipes is an integral part of my course. Thus I combine HtDCH with the more standard textbook, IDE, etc. approaches which unfortunately brings along some excess Java baggage but HtDCH techniques still have an important place. In particular, the three step process for designing classes, and the design recipes for methods have become standard practice in my CS-1 course.
I also use these techniques in Data Structures. Students may have developed other design habits by then, so I still emphasize the significance of the techniques mentioned above and how they can simplify software design. One example I particularly enjoy is to cover a traditional approach to linked lists following the typical textbook implementation. Then show the students the recursive list approach done in HtDCH. It never fails to leave a lasting impression on a class to see a complete list implementation easily developed in one class period with so little code. Later in the course I have the students develop a binary tree implementation similarly, and the task is much less intimidating. I do strongly endorse the HtDCH approach and fully support your efforts to further refine it and spread the word to the masses.
January 19, 2006
e-mail to SIGCSE listserv
I am one of the enthusiastic adopters of design recipes (in Java). They're simple. They're straight forward. They work. I encourage anyone teaching software design at any level to check them out. But be forwarned, you may need to abandon a lot of Java baggage at first. It can be traumatic to ignore public, private, static, etc. and just concentrate on learning to do good object oriented design with minimal Java related overhead. But even if you can't ignore the Java realities, give the design recipes a try. I've used them in my data structures course this semester, where the students have already had a year of Java knowledge. It was really fun to first present linked lists in the typical text book way, and then tell them that we were going to look at a different implementation - a Lisp/Scheme like (functional) definition that is much simpler and takes a fraction of the time to explain and implement.
November 14, 2004