The JavaScript adaptation of Structure and Interpretation of Computer
Programs (SICP JS) was developed at the National
University of Singapore (NUS) for the course CS1101S. The course
was co-taught for six years and counting by Low Kok Lim, whose
sound pedagogical judgment was crucial for the success of
the course and this project. The CS1101S teaching team has included many
NUS colleagues and more than 300
undergraduate student assistants. Their continuous feedback over
the past nine years allowed us to resolve countless JavaScript-specific
issues and remove unnecessary complications and yet retain the
essential features of both SICP and JavaScript.
『計算機プログラムの構造と解釈』のJavaScript版(SICP JS)は、シンガポール国立大学(NUS)のコースCS1101Sのために開発されました。このコースは6年以上にわたりLow Kok Limと共同で教えられており、彼の的確な教育的判断がコースとこのプロジェクトの成功に不可欠でした。CS1101Sのティーチングチームには、多くのNUSの同僚と300人以上の学部生アシスタントが含まれています。過去9年間の継続的なフィードバックのおかげで、JavaScript固有の無数の問題を解決し、不要な複雑さを取り除きながら、SICPとJavaScriptの両方の本質的な特徴を維持することができました。
SICP JS is a software project in addition to a book project. We obtained
the LaTeX book sources from the original authors in 2008.
An early SICP JS tool chain
was developed by Liu Hang and refined by Feng Piaopiao. Chan Ger
Hean developed the first tools for the print edition, based on which Jolyn
Tan developed the tools for the first e-book edition and He Xinyue and
Wang Qian repurposed these tools for the current comparison edition.
Samuel Fang designed and developed the online edition of SICP JS.
SICP JSは書籍プロジェクトであると同時にソフトウェアプロジェクトでもあります。2008年にオリジナルの著者からLaTeXの書籍ソースを入手しました。初期のSICP JSツールチェーンはLiu Hangが開発し、Feng Piaopiao が改良しました。Chan Ger Heanが印刷版の最初のツールを開発し、それを基にJolyn Tanが初の電子書籍版のツールを開発、He XinyueとWang Qianがこれらのツールを現在の比較版のために再利用しました。Samuel FangがSICP JSのオンライン版を設計・開発しました。
The online edition of SICP JS and CS1101S rely heavily on a software system
called Source Academy, and the JavaScript sublanguages it
supports are called Source. Many dozens of students have
contributed to the Source Academy during the preparation of SICP JS, and
the system lists them prominently as Contributors.
Since 2020, the students of the NUS course CS4215, Programming
Language Implementation, contributed several programming language
implementations that are used in SICP JS: The concurrent version
of Source used in section 3.4 was developed by Zhengqun Koo and
Jonathan Chan; the lazy implementation used in section 4.2 was developed
by Jellouli Ahmed, Ian Kendall Duncan, Cruz Jomari Evangelista, and
Alden Tan; the nondeterministic implementation used in section
4.3 was developed by Arsalan Cheema and Anubhav; and Daryl Tan
helped integrate these implementations into the Academy.
SICP JSのオンライン版とCS1101Sは、Source Academyと呼ばれるソフトウェアシステムに大きく依存しており、サポートするJavaScriptのサブ言語はSourceと呼ばれています。SICP JSの準備期間中に多くの学生がSource Academyに貢献しており、システムは彼らをContributors
として目立つ形でリストしています。2020年以降、NUSのコースCS4215(プログラミング言語実装)の学生たちが、SICP JSで使用されるいくつかのプログラミング言語実装に貢献しました。セクション3.4で使用されるSourceの並行バージョンはZhengqun KooとJonathan Chanが開発し、セクション4.2で使用される遅延実装はJellouli Ahmed、Ian Kendall Duncan、Cruz Jomari Evangelista、Alden Tanが開発し、セクション4.3で使用される非決定的実装はArsalan CheemaとAnubhavが開発し、Daryl Tanがこれらの実装をAcademyに統合する作業を助けました。
We are grateful to STINT, The Swedish Foundation for
International Cooperation in Research and Higher Education,
whose sabbatical program connected Martin and Tobias and allowed
Tobias to work as a co-teacher of CS1101S and join the SICP JS
project.
STINT(スウェーデン国際研究・高等教育協力財団)に感謝します。そのサバティカルプログラムがMartinとTobiasを結びつけ、TobiasがCS1101Sの共同担当教員として働き、SICP JSプロジェクトに参加することを可能にしてくれました。
We would like to acknowledge the courageous work of the
committee of ECMAScript 2015, led by Allen Wirfs-Brock. SICP JS
relies heavily on constant and let declarations and lambda expressions,
all of which were added to JavaScript with ECMAScript 2015. Those
additions allowed us to stay close to the original in the presentation
of the most important ideas of SICP. Guy Lewis Steele
Jr., who led the first ECMAScript standardization, provided
detailed and useful feedback on some exercises of chapter
[4].
Allen Wirfs-Brockが率いたECMAScript 2015委員会の勇気ある仕事に敬意を表します。SICP JSは定数宣言とlet宣言、そしてラムダ式に大きく依存しており、これらはすべてECMAScript 2015でJavaScriptに追加されたものです。これらの追加により、SICPの最も重要なアイデアの提示において原著に近い形を維持することが可能になりました。最初のECMAScript標準化を主導したGuy Lewis Steele Jr.は、第
[4]章のいくつかの演習問題について詳細で有益なフィードバックを提供してくれました。
Martin Henz and Tobias Wrigstad
We would like to thank the many people who have helped us develop this
book and this curriculum.
本書とこのカリキュラムの開発を助けてくださった多くの方々に感謝します。
Our subject is a clear intellectual descendant of 6.231,
a
wonderful subject on programming linguistics and the lambda calculus
taught at MIT in the late 1960s by Jack Wozencraft and Arthur Evans,
Jr.
私たちの科目は、1960年代後半にMITでJack WozencraftとArthur Evans, Jr.が教えた、プログラミング言語学とラムダ計算に関する素晴らしい科目6.231
の流れを明確に汲んでいます。
We owe a great debt to Robert Fano, who reorganized MIT's introductory
curriculum in electrical engineering and computer science to emphasize
the principles of engineering design. He led us in starting out on
this enterprise and wrote the first set of subject notes from which
this book evolved.
エンジニアリング設計の原理を強調するようにMITの電気工学およびコンピュータサイエンスの入門カリキュラムを再編したRobert Fanoに大きな恩義があります。彼はこの事業を始めるにあたって私たちを導き、本書の原型となった最初の科目ノートを書きました。
Much of the style and aesthetics of programming that we try to teach
were developed in conjunction with Guy Lewis Steele Jr., who
collaborated with Gerald Jay Sussman in the initial development of the
Scheme language. In addition, David Turner, Peter Henderson, Dan
Friedman, David Wise, and Will Clinger have taught us many of the
techniques of the functional programming community that appear in this
book.
私たちが教えようとしているプログラミングのスタイルと美学の多くは、Scheme言語の初期開発でGerald Jay Sussmanと協力したGuy Lewis Steele Jr.と共同で発展させたものです。加えて、David Turner、Peter Henderson、Dan Friedman、David Wise、Will Clingerは、本書に登場する関数型プログラミングコミュニティの多くの技法を私たちに教えてくれました。
Joel Moses taught us about structuring large systems. His experience
with the Macsyma system for symbolic computation provided the insight
that one should avoid complexities of control and concentrate on
organizing the data to reflect the real structure of the world being
modeled.
Joel Mosesは大規模システムの構造化について教えてくれました。記号計算のためのMacsymaシステムでの彼の経験は、制御の複雑さを避け、モデル化する世界の実際の構造を反映するようにデータを組織化することに集中すべきだという洞察を与えてくれました。
Marvin Minsky and Seymour Papert formed many of our attitudes about
programming and its place in our intellectual lives. To them we owe
the understanding that computation provides a means of expression for
exploring ideas that would otherwise be too complex to deal with
precisely. They emphasize that a student's ability to write and
modify programs provides a powerful medium in which exploring becomes
a natural activity.
Marvin MinskyとSeymour Papertは、プログラミングと知的生活におけるその位置づけについて、私たちの多くの態度を形成しました。そのままでは正確に扱うには複雑すぎるアイデアを探究するための表現手段を、計算が提供してくれるという理解は、彼らのおかげです。彼らは、プログラムを書き、修正する学生の能力が、探究が自然な活動となる強力な媒体を提供すると強調しています。
We also strongly agree with Alan Perlis that programming is lots of
fun and we had better be careful to support the joy of programming.
Part of this joy derives from observing great masters at work. We are
fortunate to have been apprentice programmers at the feet of Bill
Gosper and Richard Greenblatt.
プログラミングはとても楽しいものであり、プログラミングの喜びを支えるよう注意しなければならないというAlan Perlisの意見に、私たちも強く同意します。この喜びの一部は、偉大な達人の仕事を観察することから生まれます。Bill GosperとRichard Greenblattの足元で見習いプログラマであったことは幸運でした。
It is difficult to identify all the people who have contributed to the
development of our curriculum. We thank all the lecturers, recitation
instructors, and tutors who have worked with us over the past fifteen
years and put in many extra hours on our subject, especially Bill
Siebert, Albert Meyer, Joe Stoy, Randy Davis, Louis Braida, Eric
Grimson, Rod Brooks, Lynn Stein, and Peter Szolovits.
We would like to specially acknowledge the outstanding teaching
contributions of Franklyn Turbak, now at Wellesley; his work
in undergraduate instruction set a standard that we can
all aspire to.
We are grateful to Jerry Saltzer and Jim Miller for
helping us grapple with the mysteries of concurrency, and to
Peter Szolovits and David McAllester for their contributions
to the exposition of nondeterministic evaluation in chapter
[4].
カリキュラムの開発に貢献したすべての人を特定するのは困難です。過去15年間にわたって私たちと共に働き、この科目に多くの時間外労働を費やしてくださったすべての講師、演習指導者、チューターに感謝します。特にBill Siebert、Albert Meyer、Joe Stoy、Randy Davis、Louis Braida、Eric Grimson、Rod Brooks、Lynn Stein、Peter Szolovitsに感謝します。現在Wellesleyにいる Franklyn Turbakの優れた教育への貢献を特に称えたいと思います。学部教育における彼の仕事は、私たち全員が目指すべき基準を打ち立てました。並行性の謎に取り組む手助けをしてくれたJerry SaltzerとJim Miller、そして第
[4]章での非決定的評価の解説に貢献してくれたPeter SzolovitsとDavid McAllesterに感謝します。
Many people have put in significant effort presenting this material at
other universities. Some of the people we have worked closely with
are Jacob Katzenelson at the Technion, Hardy Mayer at the University
of California at Irvine, Joe Stoy at Oxford, Elisha Sacks at Purdue,
and Jan Komorowski at the Norwegian University of Science and
Technology. We are exceptionally proud of our colleagues who have
received major teaching awards for their adaptations of this subject
at other universities, including Kenneth Yip at Yale, Brian Harvey at
the University of California at Berkeley, and Dan Huttenlocher at
Cornell.
多くの方が他の大学でこの教材を提供するために多大な努力をしてくださいました。密接に協力してきた方々には、テクニオンのJacob Katzenelson、カリフォルニア大学アーバイン校のHardy Mayer、オックスフォードのJoe Stoy、パデュー大学のElisha Sacks、ノルウェー科学技術大学のJan Komorowskiがいます。他の大学でこの科目を適応させたことで主要な教育賞を受賞した同僚たちを非常に誇りに思います。イェール大学のKenneth Yip、カリフォルニア大学バークレー校のBrian Harvey、コーネル大学のDan Huttenlocherです。
Al Moyé arranged for us to teach this material to engineers at
Hewlett-Packard, and for the production of videotapes of these
lectures.
We would like to thank the talented instructors—in
particular Jim Miller, Bill Siebert, and Mike Eisenberg—who have
designed continuing education courses incorporating these tapes and
taught them at universities and industry all over the world.
Al Moyéは、Hewlett-Packardのエンジニアにこの教材を教える手配と、これらの講義のビデオテープの制作を手配してくれました。これらのテープを取り入れた継続教育コースを設計し、世界中の大学や産業界で教えてくださった才能ある指導者たち—特にJim Miller、Bill Siebert、Mike Eisenberg—に感謝します。
Many educators in other countries have put in significant
work translating the first edition.
Michel Briand, Pierre Chamard, and André Pic produced a French edition;
Susanne Daniels-Herold produced a German
edition; and Fumio Motoyoshi produced a Japanese edition.
We do not know who produced the Chinese edition,
but we consider it an honor to have been selected as the
subject of an unauthorized
translation.
他の国の多くの教育者が初版の翻訳に多大な労力を注いでくださいました。Michel Briand、Pierre Chamard、André Picがフランス語版を制作し、Susanne Daniels-Heroldがドイツ語版を、元吉文男が日本語版を制作しました。中国語版を誰が制作したかは存じませんが、非公式
翻訳の対象に選ばれたことを光栄に思います。
It is hard to enumerate all the people who have made technical
contributions to the development of the Scheme systems we use for
instructional purposes. In addition to Guy Steele, principal wizards
have included Chris Hanson, Joe Bowbeer, Jim Miller, Guillermo Rozas,
and Stephen Adams. Others who have put in significant time are
Richard Stallman, Alan Bawden, Kent Pitman, Jon Taft, Neil Mayle, John
Lamping, Gwyn Osnos, Tracy Larrabee, George Carrette, Soma
Chaudhuri, Bill Chiarchiaro, Steven Kirsch, Leigh Klotz, Wayne Noss,
Todd Cass, Patrick O'Donnell, Kevin Theobald, Daniel Weise, Kenneth
Sinclair, Anthony Courtemanche, Henry M. Wu, Andrew Berlin, and Ruth
Shyu.
教育目的で使用するSchemeシステムの開発に技術的に貢献したすべての人を列挙するのは困難です。Guy Steeleに加えて、主要な魔法使いたちにはChris Hanson、Joe Bowbeer、Jim Miller、Guillermo Rozas、Stephen Adamsが含まれます。他に多大な時間を費やした人々は、Richard Stallman、Alan Bawden、Kent Pitman、Jon Taft、Neil Mayle、John Lamping、Gwyn Osnos、Tracy Larrabee、George Carrette、Soma Chaudhuri、Bill Chiarchiaro、Steven Kirsch、Leigh Klotz、Wayne Noss、Todd Cass、Patrick O'Donnell、Kevin Theobald、Daniel Weise、Kenneth Sinclair、Anthony Courtemanche、Henry M. Wu、Andrew Berlin、Ruth Shyuです。
Beyond the MIT implementation, we would like to thank the many people
who worked on the IEEE Scheme standard, including William Clinger and
Jonathan Rees, who edited the R$^4$RS,
and Chris Haynes, David Bartley, Chris Hanson, and Jim Miller,
who prepared the IEEE standard.
MITの実装を超えて、IEEE Scheme標準に取り組んだ多くの方々に感謝します。R$^4$RSを編集したWilliam ClingerとJonathan Rees、そしてIEEE標準を準備したChris Haynes、David Bartley、Chris Hanson、Jim Millerに感謝します。
Dan Friedman has been a long-time leader of the Scheme community.
The community's broader work goes beyond issues of language design to
encompass significant educational innovations, such as the high-school
curriculum based on EdScheme by Schemer's Inc., and the wonderful
books by Mike Eisenberg and by Brian Harvey and Matthew Wright.
Dan FriedmanはSchemeコミュニティの長年のリーダーです。コミュニティのより広い活動は言語設計の問題を超えて、Schemer's Inc.のEdSchemeに基づく高校カリキュラムや、Mike Eisenberg、Brian HarveyとMatthew Wrightによる素晴らしい書籍など、重要な教育的革新を包含しています。
We appreciate the work of those who contributed to making this a real
book, especially Terry Ehling, Larry Cohen, and Paul Bethge at the MIT
Press. Ella Mazel found the wonderful cover image. For the second
edition we are particularly grateful to Bernard and Ella Mazel for
help with the book design, and to David Jones, TeX wizard
extraordinaire. We also are indebted to those readers who made
penetrating comments on the new draft: Jacob Katzenelson, Hardy
Mayer, Jim Miller, and especially Brian Harvey, who did unto this book
as Julie did unto his book Simply Scheme.
これを本当の書籍にするために貢献してくださった方々、特にMIT PressのTerry Ehling、Larry Cohen、Paul Bethgeに感謝します。Ella Mazelは素晴らしい表紙の画像を見つけてくれました。第2版では、書籍のデザインを手伝ってくれたBernardとElla Mazel、そして卓越したTeXの魔法使いであるDavid Jonesに特に感謝しています。また、新しい草稿に鋭いコメントをくださった読者の方々にも恩義があります。Jacob Katzenelson、Hardy Mayer、Jim Miller、そして特にBrian Harveyに感謝します。彼は、Julieが彼の著書『Simply Scheme』にしたのと同じことを本書にしてくれました。
Finally, we would like to acknowledge the support of the organizations
that have encouraged this work over the years, including support from
Hewlett-Packard, made possible by Ira Goldstein and Joel Birnbaum, and
support from DARPA, made possible by Bob Kahn.
最後に、長年にわたりこの仕事を支援してくださった組織に感謝します。Ira GoldsteinとJoel Birnbaumによって可能になったHewlett-Packardからの支援、そしてBob Kahnによって可能になったDARPAからの支援です。
Harold Abelson and Gerald Jay Sussman