How Scheme Can Train the Mind: One Reason that MIT Should Reinstate Scheme and 6.001
(This content of this post is substantially identical to the content of my post [1] entitled “[semi-OT] possible benefits from training in Scheme programming in patent translation” on the USENET newsgroup comp.lang.scheme.)
Today, I came across an interesting phenomenon in which exposure to Scheme programming helped with technical translation of part of a patent specification.
Since the material is classified, I can only reveal the structure, and not the content, but basically, there was a document containing a “claim” (a sentence in a specification which specifies what is being claimed in the patent being applied for) which somebody had slightly mis-translated from English to Japanese, and which was being amended.
The original English clause in the claim had the following structure:
“… an A in communication with a plurality of B, said A configured to generate a C signal, configured to cause at least one of said plurality of B to output a said D, said C signal based at least in part on said E signal.”
Unfortunately, whoever translated that clause from English to Japanese apparently left out the “said A configured to generate a C signal” portion.
Then this mis-translated Japanese translation of the original English clause was amended, but was never translated back to English.
Then this amended Japanese clause was re-amended, and I was asked to “apply” the re-amendment to the English original. The re-amended Japanese clause then had the following structure (after I finally figured out the structure):
“… an A in communication with a plurality of B, said A configured to generate a C signal, configured to cause the C coupled to said F so that a positional relationship, for the E which has sent the E signal, corresponding similarly to a positional relationship between the E which has sent the E signal and the G of said plurality of B to output a said force associated with the strength detected by the E, said B signal based on said E signal.”
The first aspect that I noticed was that the previous amendment had never been translated, requiring me to fill in the details.
However, then I noticed that this previous amendment had itself been based on a mis-translated original.
In order to figure out which portion was missing from the translation of the original clause, I needed to map portions of the original English clause to their Japanese equivalents, but since the structure itself was not written to reflect the structure of the original English clause, I then needed to break up the original English clause into its structural components.
At first, this process seemed very tedious and difficult, until I noticed that treating these structural components in the clause as if they were S-expressions in a Scheme program, and then mapping equivalent components of the English clause to semi-corresponding components of the Japanese (mis-)translation speeded up and simplified this process greatly, even though the correspondence was not exact.
For some reason, I have discovered that this kind of mental equivalence seems to proceed much more smoothly between S-expressions in Scheme programs and claims in patent documents than between other kinds of expressions in other functional programming languages and the same claims in patent documents. For example, I have not had similar experiences with finding equivalences between expressions in even Haskell programs and the claims in patent documents; Haskell expressions seem to be more equivalent to mathematical equations than to claims in patent documents.
Therefore, it seems that exposure to the Scheme programming language, in particular, can help in training non-programmers to think structurally in analyzing expressions in natural language, which can have benefits in translating claims in patent documents in such a manner that they can be more easily and clearly amended.
Perhaps MIT should reinstate Scheme and 6.001, and get rid of Python and the new C1. Somehow I feel that MIT is risking creating a new generation of idiots by getting rid of Scheme and SICP from their curriculum just for the ostensible reason that the recursive style of programming does not reflect the way that programming is actually conducted in industry. Students do not learn programming just to program; learning programming also has important ramifications for the structural thought processes underlying other technical fields, even those that do not seem superficially related (such as patent translation), and it seems that watering down a core programming course for such ostensible reasons undermines the crucial patterns of thinking which are cross-applicable to such other technical fields as well.
[1] Russell, Benjamin L. “[semi-OT] possible benefits from training in Scheme programming in patent translation.” Online posting. 19 Aug. 2009. 19 Aug. 2009. <news://comp.lang.scheme>. Also available at <http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/4590474ce458597c#>.
Trackbacks & Pingbacks
- Thinking in Scheme and Checking a Patent Claim: A Cross-disciplinary Application of Scheme-based Reasoning « Monadically Speaking: Benjamin’s Adventures in PLT Wonderland
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 – Hckr News
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 – News about world
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 – Latest news
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 - EYFnews
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 – Golden News
- New top story on Hacker News: One Reason That MIT Should Reinstate Scheme and 6.001 | World Best News
- One Reason That MIT Should Reinstate Scheme and 6.001 (2009) – Hacker News Robot
I’m an mit student who loves SICP, but is part of the “new curriculum” (i.e. took python stuff).
I think the new curriculum is a step in the right direction. Most people who lament the “death” of 6.001 do not realize that Prof. Sussman has a class called “Adventures in Symbolic Programming” that is very much Scheme, and very much in the spirit of SICP.
I feel like 6.001 as a class was trying to take on two monumental tasks: 1. teach programming, 2. do large scale programming, which gave it the appearance of being a massive time-sink, a difficult class, and ultimately left people with a distaste of “all things scheme”.
A similar split took place with 6.170 aka “Java death lab” which is now replaced by a class that teaches OO abstractions, and patterns and such (6.005), and several large classes where you can use them.
I don’t know where i’m going with these thoughts, but I guess the only change as I see it is that new eecs students are not forced to program in scheme, but rather program in python.
>I think the new curriculum is a step in the right direction. Most people who
>lament the “death” of 6.001 do not realize that Prof. Sussman has a class
>called “Adventures in Symbolic Programming” that is very much Scheme, and
>very much in the spirit of SICP.
Thank you for pointing out this class; I’ll take a look at it and see how it compares to the earlier 6.001.
>I feel like 6.001 as a class was trying to take on two monumental tasks: 1.
>teach programming, 2. do large scale programming, which gave it the
>appearance of being a massive time-sink, a difficult class, and ultimately
>left people with a distaste of “all things scheme”.
Your description reminds me of how students used to describe CS 221, the precursor to CS201: Introduction to Computer Science (for majors), the equivalent course at Yale, which was also taught using SICP and Scheme. One student once described the former class, which was taught by Alan Perlis, as “unbelievably difficult,” and told me that I was lucky to have been taught CS 201a (the fall semester version) instead (this was in fall of 1990)
(Incidentally, my professor at the time was Drew McDermott, who was then Chairman of the Department of Computer Science; the first time I visited his office to ask a question back in September of 1990, when I didn’t understand his explanation quickly enough, he told me, “I don’t think you’re cut out for computer science.” This comment made me furious, and I then spent the remaining four years (including a one-year leave of absence) in studying computer science and discrete mathematics just to prove him wrong. Four years later, I approached him at a CS department graduation party, and asked him what he thought of my graduating with a degree in CS; he replied, “Well, since you kept at it, I thought you’d eventually get there.” This was perhaps the only time in my CS education at college when I felt momentarily happy, and had the feeling that I had truly achieved something.)
It is odd that students “are not forced to program in scheme, but rather program in python”. Aren’t they “forced” to program in python now as they were “forced” to program in scheme prior? Or did all students somehow unanimously choose python?