[plt-scheme] Re: HTDP - evidently not for everyone.
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
college.
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
http://www.qubit.org/people/david/index.php?path=The%20Fabric%20of%20Reality),
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
http://books.google.com/books?id=WkHO9HI7koEC&dq=%2B%22The+Selfish+Gene%22&printsec=frontcover&source=bn&hl=en&ei=gyd_S7W0NYq7rAfauOCbDw&sa=X&oi=book_result&ct=result&resnum=4&ved=0CBgQ6AEwAw#v=onepage&q=&f=false),
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
http://www.amazon.com/Compared-What-Introduction-Algorithms-Principles/dp/071678243X),
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
http://dekudekuplex.wordpress.com/
Translator/Interpreter / Mobile: +011 81 80-3603-6725
"Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^