Pular para o conteúdo principal

Agradecimentos

A adaptação para JavaScript de Structure and Interpretation of Computer Programs (SICP JS) foi desenvolvida na Universidade Nacional de Singapura (NUS) para o curso CS1101S. O curso foi co-ministrado por seis anos consecutivos por Low Kok Lim, cujo sólido julgamento pedagógico foi crucial para o sucesso do curso e deste projeto. A equipe de ensino do CS1101S incluiu muitos colegas da NUS e mais de 300 assistentes estudantis de graduação. Seu feedback contínuo ao longo dos últimos nove anos nos permitiu resolver inúmeras questões específicas do JavaScript e remover complicações desnecessárias, mantendo as características essenciais tanto do SICP quanto do JavaScript.

SICP JS é um projeto de software além de ser um projeto de livro. Obtivemos os fontes do livro em LaTeX dos autores originais em 2008. Uma ferramenta inicial para SICP JS foi desenvolvida por Liu Hang e refinada por Feng Piaopiao. Chan Ger Hean desenvolveu as primeiras ferramentas para a edição impressa, com base nas quais Jolyn Tan desenvolveu as ferramentas para a primeira edição de e-book e He Xinyue e Wang Qian reaproveitaram essas ferramentas para a atual edição comparativa. Samuel Fang projetou e desenvolveu a edição online do SICP JS.

A edição online do SICP JS e o CS1101S dependem fortemente de um sistema de software chamado Source Academy, e as sublinguagens JavaScript que ele suporta são chamadas Source. Muitas dezenas de estudantes contribuíram para a Source Academy durante a preparação do SICP JS, e o sistema os lista com destaque como "Contribuidores". Desde 2020, os estudantes do curso CS4215 da NUS, Implementação de Linguagens de Programação, contribuíram com várias implementações de linguagens de programação que são usadas no SICP JS: A versão concorrente do Source usada na seção 3.4 foi desenvolvida por Zhengqun Koo e Jonathan Chan; a implementação preguiçosa (lazy) usada na seção 4.2 foi desenvolvida por Jellouli Ahmed, Ian Kendall Duncan, Cruz Jomari Evangelista e Alden Tan; a implementação não-determinística usada na seção 4.3 foi desenvolvida por Arsalan Cheema e Anubhav; e Daryl Tan ajudou a integrar essas implementações na Academy.

Somos gratos à STINT, The Swedish Foundation for International Cooperation in Research and Higher Education, cujo programa sabático conectou Martin e Tobias e permitiu que Tobias trabalhasse como co-professor do CS1101S e se juntasse ao projeto SICP JS.

Gostaríamos de reconhecer o trabalho corajoso do comitê do ECMAScript 2015, liderado por Allen Wirfs-Brock. SICP JS depende fortemente de declarações const e let e expressões lambda, todas adicionadas ao JavaScript com o ECMAScript 2015. Essas adições nos permitiram permanecer próximos do original na apresentação das ideias mais importantes do SICP. Guy Lewis Steele Jr., que liderou a primeira padronização do ECMAScript, forneceu feedback detalhado e útil sobre alguns exercícios do capítulo 4.

Martin Henz e Tobias Wrigstad

Agradecimentos da Segunda Edição do SICP, 1996

Gostaríamos de agradecer às muitas pessoas que nos ajudaram a desenvolver este livro e este currículo.

Nossa disciplina é uma descendente intelectual clara de "6.231", uma maravilhosa disciplina sobre linguística de programação e cálculo lambda ministrada no MIT no final dos anos 1960 por Jack Wozencraft e Arthur Evans, Jr.

Devemos uma grande dívida a Robert Fano, que reorganizou o currículo introdutório do MIT em engenharia elétrica e ciência da computação para enfatizar os princípios de design de engenharia. Ele nos liderou no início deste empreendimento e escreveu o primeiro conjunto de notas de aula a partir do qual este livro evoluiu.

Muito do estilo e estética de programação que tentamos ensinar foi desenvolvido em conjunto com Guy Lewis Steele Jr., que colaborou com Gerald Jay Sussman no desenvolvimento inicial da linguagem Scheme. Além disso, David Turner, Peter Henderson, Dan Friedman, David Wise e Will Clinger nos ensinaram muitas das técnicas da comunidade de programação funcional que aparecem neste livro.

Joel Moses nos ensinou sobre estruturação de grandes sistemas. Sua experiência com o sistema Macsyma para computação simbólica forneceu a percepção de que se deve evitar complexidades de controle e concentrar-se em organizar os dados para refletir a estrutura real do mundo sendo modelado.

Marvin Minsky e Seymour Papert formaram muitas de nossas atitudes sobre programação e seu lugar em nossas vidas intelectuais. A eles devemos o entendimento de que a computação fornece um meio de expressão para explorar ideias que de outra forma seriam muito complexas para lidar com precisão. Eles enfatizam que a capacidade de um estudante de escrever e modificar programas fornece um meio poderoso no qual explorar se torna uma atividade natural.

Também concordamos fortemente com Alan Perlis que programação é muito divertida e devemos ter cuidado para apoiar a alegria da programação. Parte dessa alegria deriva de observar grandes mestres trabalhando. Temos a sorte de ter sido aprendizes de programadores aos pés de Bill Gosper e Richard Greenblatt.

É difícil identificar todas as pessoas que contribuíram para o desenvolvimento de nosso currículo. Agradecemos a todos os palestrantes, instrutores de recitação e tutores que trabalharam conosco nos últimos quinze anos e dedicaram muitas horas extras em nossa disciplina, especialmente Bill Siebert, Albert Meyer, Joe Stoy, Randy Davis, Louis Braida, Eric Grimson, Rod Brooks, Lynn Stein e Peter Szolovits. Gostaríamos de reconhecer especialmente as excelentes contribuições de ensino de Franklyn Turbak, agora em Wellesley; seu trabalho em instrução de graduação estabeleceu um padrão ao qual todos podemos aspirar. Somos gratos a Jerry Saltzer e Jim Miller por nos ajudarem a lidar com os mistérios da concorrência, e a Peter Szolovits e David McAllester por suas contribuições para a exposição da avaliação não-determinística no capítulo 4.

Muitas pessoas dedicaram esforço significativo apresentando este material em outras universidades. Algumas das pessoas com quem trabalhamos de perto são Jacob Katzenelson no Technion, Hardy Mayer na Universidade da Califórnia em Irvine, Joe Stoy em Oxford, Elisha Sacks em Purdue e Jan Komorowski na Universidade Norueguesa de Ciência e Tecnologia. Estamos excepcionalmente orgulhosos de nossos colegas que receberam grandes prêmios de ensino por suas adaptações desta disciplina em outras universidades, incluindo Kenneth Yip em Yale, Brian Harvey na Universidade da Califórnia em Berkeley e Dan Huttenlocher em Cornell.

Al Moyé organizou para que ensinássemos este material para engenheiros na Hewlett-Packard, e para a produção de videotapes destas palestras. Gostaríamos de agradecer aos talentosos instrutores—em particular Jim Miller, Bill Siebert e Mike Eisenberg—que projetaram cursos de educação continuada incorporando esses vídeos e os ensinaram em universidades e indústrias ao redor do mundo.

Muitos educadores em outros países dedicaram trabalho significativo traduzindo a primeira edição. Michel Briand, Pierre Chamard e André Pic produziram uma edição francesa; Susanne Daniels-Herold produziu uma edição alemã; e Fumio Motoyoshi produziu uma edição japonesa. Não sabemos quem produziu a edição chinesa, mas consideramos uma honra ter sido selecionados como tema de uma tradução "não autorizada".

É difícil enumerar todas as pessoas que fizeram contribuições técnicas para o desenvolvimento dos sistemas Scheme que usamos para fins instrucionais. Além de Guy Steele, os principais "magos" incluíram Chris Hanson, Joe Bowbeer, Jim Miller, Guillermo Rozas e Stephen Adams. Outros que dedicaram tempo significativo são 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 e Ruth Shyu.

Além da implementação do MIT, gostaríamos de agradecer às muitas pessoas que trabalharam no padrão IEEE Scheme, incluindo William Clinger e Jonathan Rees, que editaram o R⁴RS, e Chris Haynes, David Bartley, Chris Hanson e Jim Miller, que prepararam o padrão IEEE.

Dan Friedman tem sido um líder de longa data da comunidade Scheme. O trabalho mais amplo da comunidade vai além de questões de design de linguagem para abranger inovações educacionais significativas, como o currículo de ensino médio baseado em EdScheme pela Schemer's Inc., e os maravilhosos livros de Mike Eisenberg e de Brian Harvey e Matthew Wright.

Apreciamos o trabalho daqueles que contribuíram para tornar este um livro real, especialmente Terry Ehling, Larry Cohen e Paul Bethge no MIT Press. Ella Mazel encontrou a maravilhosa imagem de capa. Para a segunda edição, somos particularmente gratos a Bernard e Ella Mazel pela ajuda com o design do livro, e a David Jones, mago extraordinário do TeX. Também somos gratos àqueles leitores que fizeram comentários penetrantes sobre o novo rascunho: Jacob Katzenelson, Hardy Mayer, Jim Miller e especialmente Brian Harvey, que fez com este livro como Julie fez com seu livro Simply Scheme.

Finalmente, gostaríamos de reconhecer o apoio das organizações que encorajaram este trabalho ao longo dos anos, incluindo o apoio da Hewlett-Packard, possibilitado por Ira Goldstein e Joel Birnbaum, e o apoio da DARPA, possibilitado por Bob Kahn.

Harold Abelson e Gerald Jay Sussman