Skip to content

Instantly share code, notes, and snippets.

@naiquevin
Last active December 18, 2015 03:08
Show Gist options
  • Save naiquevin/5715540 to your computer and use it in GitHub Desktop.
Save naiquevin/5715540 to your computer and use it in GitHub Desktop.
Little Schemer Foreword
In 1967 I took an introductory course in photography. Most of the students (including me) came
into that course hoping to learn how to be creative-to take pictures like the ones I admired
by artists such as Edward Weston. On the first day the teacher patiently explained the long
list of technical skills that he was going to teach us during the term. A key was Ansel Adams'
"Zone System" for previsualizing the print values (blackness in the final print) in a photograph
and how they derive from the light intensities in the scene. In support of this skill we had
to learn the use of exposure meters to measure light intensities and the use of exposure time
and development time to control the black level and the contrast in the image. This is in turn
supported by even lower level skills such as loading film , developing and printing, and mixing
chemicals. One must learn to ritualize the process of developing sensitive material so that one
gets consistent results over many years of work. The first laboratory session was devoted to
finding out that developer feels slippery and that fixer smells awful.
But what about creative composition? In order to be creative one must first gain control
of the medium. One can not even begin to think about organizing a great photograph without
having the skills to make it happen . In engineering, as in other creative arts, we must learn
to do analysis to support our efforts in synthesis. One cannot build a beautiful and functional
bridge without a knowledge of steel and dirt and considerable mathematical technique for using
this knowledge to compute the properties of structures. Similarly, one cannot build a beautiful
computer system without a deep understanding of how to "previsualize" the process generated
by the procedures one writes.
Some photographers choose to use black-and-white 8x10 plates while others choose 35mm
slides. Each has its advantages and disadvantages. Like photography, programming requires a
choice of medium. Lisp is the medium of choice for people who enjoy free style and flexibility.
Lisp was initially conceived as a theoretical vehicle for recursion theory and for symbolic
algebra. It has developed into a uniquely powerful and flexible family of software development
tools, providing wrap-around support for the rapid-prototyping of software systems. As with
other languages, Lisp provides the glue for using a vast library of canned parts, produced
by members of the user community. In Lisp, procedures are first-class data, to be passed as
arguments, returned as values, and stored in data structures. This flexibility is valuable, but
most importantly, it provides mechanisms for formalizing, naming, and saving the idioms-the
common patterns of usage that are essential to engineering design . In addition , Lisp programs
can easily manipulate the representations of Lisp programs-a feature that has encouraged the
development of a vast structure of program synthesis and analysis tools, such as cross-referencers.
The Little LISPer is a unique approach to developing the skills underlying creative program­
ming in Lisp. It painlessly packages, with considerable wit , much of the drill and practice that
is necessary to learn the skills of constructing recursive processes and manipulating recursive
data-structures. For the student of Lisp programming, The Little L ISPer can perform the same
service that Hanon's finger exercises or Czerny's piano studies perform for the student of piano.
Gerald J . Sussman
Cambridge, Massachusetts
-----------
[Note: I am sharing this publicly this way because I need to provide context for a quote taken from
it to my friend. I am aware about a possible copyright issue, in which case I shall readily delete it]
@axansh
Copy link

axansh commented Jun 6, 2013

Thanks for sharing.

Will surely try Lisp :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment