[plt-scheme] Great books on algorithms?

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Thu Nov 8 10:52:00 EST 2007

Marco, I understand your argument(s). The true question is always this:

  given a limited amount of space and time, what do you include?

The conclusion that I have come to is that students in general are  
better off with a version of the course/book that emphasizes scaling  
programs up and remaining functional over staying with design in the  
small and going imperative. We will therefore drop VII and VII and  
replace them with 'project materials'. Of course, these chapters will  
remain on-line and we will suggest that instructors who have enough  
time use them. This may be a part of semester 1 or semester 2.

More generally, you can ask how colleges should allocate the  
following goals and what constraints affect the design of a curriculum:

  [1] when to teach program design?
  [1a] when to use abstraction? as in a function that can do the  
original task for many different instances
  [1b] when to introduce state? <--- this is our question

  [2] when to introduce type systems as sound and cheap theorem  
provers?   [plus run-time contracts?]
  [3] when to introduce the idea that garbage collection isn't  
available in all languages and its lack seriously affects modularity
  [4] when to introduce abstractions beyond the procedural  
abstraction? this includes classes and modules/functors.
  [5] when to introduce stress tests and how? [replace the easily  
designed algorithm with a complex one that performs better]

If I could prevent students from creating 'commercial' apps for 2  
years and feeling like they can do it, I would re-order the  
introduction of these concepts dramatically. For example, I would  
introduce types (and probably run-time contracts) separately from  
classes and earlier than classes. As is, HtDC follows HtDP and  
introduces both.

BUT, as you are well aware -- and everyone else here -- the world  
says that every 'idiot' can create 'Facebook' style AJAX programs in  
'24 hours' or less. [Just in case: the quoted terms are trademarks of  
certain publishers and companies. They do not have the usual English  
meaning. Don't take this as an insult or anything.]

Our students see this as well as everyone's. So we compromise.

-- Matthias

On Nov 8, 2007, at 10:00 AM, Marco Morazan wrote:

> On 11/8/07, Shriram Krishnamurthi <sk at cs.brown.edu> wrote:
>> There are *lots* of things I want students to know before they step
>> into grad school.  Should we teach them *all* of that in their first
>> semester of programming?
> No, not all of course.
>> I'm still trying to make sense of your posting.  It doesn't even  
>> begin
>> to compute.
> It is simply a matter of vocabulary and introductory notions. I think
> that the use of the terms mutation/mutatble structures/mutator and
> their corresponding semantics in HtDP is nicely done and I, for one,
> would not like to to see that "out." I feel that HtDP introduces
> mutation at the right place and that this material is appropriate for
> beginners.
> I have had advanced undergraduate students that have been more capable
> of digesting some classical research articles by being familiar with
> these terms. Students that were not exposed to these terms struggled
> more. This is just an observation from my little corner of the world
> and based on it I would not like to see these terms and their
> treatment dropped.
> I would also point out that most textbooks do not use the mutation
> lingo (they use the term assignment) nor do they do a good job of
> explaining what assignment is. HtDP does a nice job at the right level
> for the intended audience. I am simply arguing for keeping mutation as
> a term students are exposed to in HtDP.
> Cheers,
> Marco
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.