[racket] Question

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Wed Sep 5 18:10:36 EDT 2012

Rüdiger Asche wrote at 09/05/2012 04:53 PM:
> Regardless, for the sake of the excercise, it's kind of enlightening 
> that your solution actually reduces to the naive approach - when I was 
> in school (before the last ice age if I recall correctly) , we'd 
> probably be asked to come up with an elegant *algorithmic* solution 
> (which means, for example, something like a tower of Hanoi type 
> circular swap which naturally beats the naive approach in the general 
> case) -

> if the choice now is between two approaches that actually do the same 
> thing only on two different abstraction levels - does that imply that 
> the student is already so familiar with the syntactic expansion 
> mechanism that he or she "looks behind the macro" at first glance and 
> is able to identify both as based on the same procedure and only takes 
> the macro approach for better readability -

CS undergrads are still taught algorithms and algorithmic efficiency, 
and some of them also learn a bit about lower-level stuff in an OS or 
compilers class.  But I wouldn't expect the average CS undergrad using 
Racket to have much idea how the "match" form is implemented, nor its 
performance characteristics.

Overall, I'd say that a smaller percentage of developers nowadays have 
awareness of how to write efficient code, than did a couple decades 
ago.  There's less need for it.  The computers are faster, the typical 
languages are higher level, and the barrier of effort required to do 
satisfactory software seems lower.  (A lot more stuff, such as in Web 
development, can be done at the skill level of what used to be MIS 
clerical workers, although the nature of the work is a little different.)

Learning efficiency is also harder now, when your program is fast 
regardless of how you write it, and you can't just count machine code 
instructions or use simple rules like "function calls and malloc are 

The people who can do work in which efficiency still matters -- OS 
internals, embedded systems, large scalable systems, scientific 
computing, etc. -- still exist, just like they used to.  Some of them 
are even developing Racket or using Racket.

Neil V.

Posted on the users mailing list.