[plt-scheme] Re: HTDP - evidently not for everyone.

From: Benjamin L. Russell (DekuDekuplex at Yahoo.com)
Date: Fri Feb 19 19:28:33 EST 2010

Jos Koot wrote:
 > I have always thought of 'The Little Schemer' as a book about recursion
 > rather than programming. This is clearly stated in the preface.
 > Nevertheless, for me it was the first introduction to Scheme/Lisp as
 > well. But more importantly, a very good primer before studying Lambda
 > Calculus. Thanks Daniel and Matthias!

You are right:  The stated purpose of TLS, IIRC, is to teach the reader 
"how to think recursively"; nevertheless, TLS uses Scheme as a tool for 
doing so.  When I used to read TLS while back at NYC, I used to take 
along my old Handspring Visor Deluxe with a portable folding keyboard 
with me to Kinko's at 3 AM or so, when everything was quiet, and to take 
breaks from studying relational databases by typing out my solutions to 
the questions from the dialogs in TLS on my Visor.  However, I also 
wished I could actually try out my solutions in a Scheme interpreter, 
preferably on a laptop (I wasn't aware of Scheme interpreter for the 
PalmOS, such as LispMe (see http://www.lispme.de/lispme/index_en.html) 
at the time, partly because I didn't have a laptop at the time with 
which to surf the Internet, and was trying to save money by not using 
the computers at Kinko's).

Of course, had I had a laptop, I would have probably discovered LispMe, 
and worked out the exercises in that Scheme interpreter on my Visor.

Let me provide some background for my reason for reading TLS.  The whole 
point of reading TLS as a motivational tool for self-study to become 
better at programming, not because I wanted to learn programming for a 
job, but because I felt that certain kinds of programming were fun. 
When I was in college in the Computer Science major, I was continually 
surrounded by majors in that discipline who were much better programmers 
than I, and I always had what may be deemed a kind of inferiority 
complex toward their ability in programming.  My forte had always been 
in English writing, especially English poetry, and my writing professor 
had even been sufficiently impressed with the poetry I had written to 
accompany me to the library to recommend that I apply for graduate 
school in English; however, my main interest was in computer technology, 
especially multimedia applications, and most particularly virtual 
reality, but I lacked the linear algebra background to take a course in 
computer graphics.

However, there were no courses in such areas at my college, where the 
focus in most areas was in theory and research.  Many topics were highly 
mathematical.  The closest approach to my interests was the Computer 
Science major.  My parents would not allow me to switch to a different 

I had the misfortune of starting my study of the topic with an 
introductory course in programming in Pascal.  Programming in Pascal 
felt like running in a straitjacket:  Pascal encouraged writing a 
plethora of functions all operating on one data structure, rather than 
writing a myriad of data structures, and felt extremely inflexible.  I 
then struggled through Common Lisp at first in the Introduction to 
Computer Science course, and then discovered Scheme.  Scheme encouraged 
writing many different data structures flexibly to suit the purpose 
without having to memorize an entire library of functions:  I felt as if 
the straitjacket had been replaced by a gym suit.

I did somewhat better in the following Data Structures and Programming 
Techniques course, also in Scheme, then took about two years away from 
programming (including a year-long LOA) to prepare for a required course 
in Design and Analysis of Algorithms.  My favorite programming language 
was Scheme, although I also enjoyed studying Haskell.  My least favorite 
languages were Pascal, Common Lisp, and C, in that order.  I enjoyed 
functional programming and tended to dislike C-style imperative 
programming, except when the programming involved Scheme-style 
recursion.  (Except for weekends and holidays, I usually only slept for 
about four hours or less per day, and frequently went without sleep at 
all just before submitting problem sets or taking examinations.  I was 
continually sleep-deprived.)

During this period, I managed to conquer mathematics phobia, eventually 
conquered algorithms, and even went on to advanced algorithms, but my 
lack of practice in programming resulted in my almost bombing a systems 
programming course in C.  This resulted in my never proceeding on to 
operating systems or compilers and interpreters, and not seeking a job 
in programming after graduation, but eventually becoming a patent 
translator focusing on topics related to the field of computer science, 
but I have regretted my not taking those courses ever since, considering 
myself only 1/2 (or less) of a full programmer.  (By "full programmer," 
I mean "a student who has successfully completed the full expectations 
of a Computer Science major, including such core courses as compilers 
and interpreters and operating systems, and mastered linear algebra at 
the undergraduate level or above, and who feels confident enough in 
his/her own computer science/programming/mathematics abilities and 
knowledge to write significant applications, such a compilers, 
interpreters, operating systems, or cryptography programs that require 
knowledge of all these subject areas, preferably with flair and ease.)

A course in Compilers and Interpreters for Computer Science majors is 
like a course in Group Theory for Mathematics majors, or a course in 
Advanced Writing for English majors:  It is where the nuts and bolts of 
a core portion of the major are taught.  I still do not feel that I have 
truly properly completed the Computer Science major, even though I did 
graduate with a Bachelor of Science in that major, because my education 
is missing certain crucial core components:  compilers and interpreters, 
operating systems, and linear algebra (my professor for the course in 
discrete mathematics covering that subject was a visiting professor who 
spent only two weeks on that topic, which was not enough to master it; 
although I know such elementary operations as matrix addition and 
multiplication, I have not yet mastered eigenvectors, eigenvalues, or 
determinants).  However, I did learn such topics as formal semantics 
(including the lambda calculus, one of my favorite topics), recursive 
function theory, first-order logic, recursion equations (domain theory), 
and the above-mentioned advanced algorithms, including the analysis of 
running time of sorting using Fibonacci heaps--a fascinating data structure.

I have not given up on pursuing such topics, even though sixteen years 
have passed since I graduated, and am still pursuing my own studies in a 
subset of programming language theory at my own pace while working 
professionally as a patent translator.

I maintain my own programming language theory blog, "Monadically 
Speaking: Adventures in PLT Wonderland" (currently at 
http://dekudekuplex.wordpress.com/, which I'm in the progress of 
migrating to http://dekudekuplex.sakura.ne.jp/blog/en/), where I 
occasionally describe discoveries on such topics as continuations in 
Scheme, monads in Haskell, and morphisms in Category Theory.  Eventually 
I plan to master the remainder of linear algebra, and, with luck, 
proceed on to Hilbert spaces and quantum computer science on day.

I feel that there is an intersection between the vast power of the the 
quantum computer and the vast requirements of a highly immersive virtual 
reality generator.  Study time is very limited, especially since the 
study is almost completely unrelated to my professional work; 
nevertheless, I feel that I have a duty to myself to complete my full 
education in the major of Computer Science, no matter how long it should 
take; otherwise, I somehow feel that I have not truly completed my 
major, despite my diploma, and won't be able to move on to more exciting 
topics, such as virtual reality generators and quantum computer science, 
as described in such books as _The Fabric of Reality_ (see 
by David Deutsch.  (In particular, Deutsch interweaves "The Four 
Strands" of Karl Popper, Richard Dawkins, Virtual Reality, and Quantum 
Computation, which are  also coming together in my self-studies as they 
branch off to Squeak and Croquet.  Squeak is an implementation of 
Smalltalk, which was inspired by _The Selfish Gene_ (see 
by Richard Dawkins; Croquet (see 
http://www.opencroquet.org/index.php/Main_Page) is a tool for developing 
virtual world applications in Squeak.  Soon, I hope to find a 
collaborator with whom to develop a virtual world application within 
which users could live most of their entire lives without having to 
leave to go to school or work each day or perform most daily errands; 
having to log out each day and go to work in a boring office surrounded 
by workers who are not interested in discussions related to computer 
science or virtual reality is such a pain, especially most of the 
discussions of these coworkers seem to be focused to such mundane topics 
as food, money, or the opposite gender; personally, I'd rather be 
studying continuations in Scheme.)

TLS fits into this overall schema as a great motivational work.  It is a 
kind of spice for the field of computer science:  It projects an 
Alice-in-Wonderland atmosphere over the often dry study of the field of 
computer science with its dialogs, implicit puzzles, and illustrations. 
  The problem is that this element of story-telling is often missing 
from many computer science textbooks.  It is no accident that one of my 
other favorite computer science textbooks, _Compared to What?: An 
Introduction to the Anaylsis of Algorithms_ (see 
by Gregory J. E. Rawlins, also features the same Alice on its cover and 
motivates the study of each algorithm with a story of the process 
leading to its discovering, adding a human element to the discussion.

TLS is one cornerstone is a quest to learn the art of programming as one 
part of a complete Computer Science major.  Although the eventual aim is 
to master the remainder of the spectrum of the field of computer science 
at the undergraduate level (which I feel that I had missed), programming 
is one part of it.  A laptop is a useful tool for self-study and 
practice of programming, motivated by TLS.

-- Benjamin L. Russell
Benjamin L. Russell  /   DekuDekuplex at Yahoo dot com
Translator/Interpreter / Mobile:  +011 81 80-3603-6725
"Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^

Posted on the users mailing list.