Por que "Structure and Interpretation of Computer Programs" é importante
A inovação do SICP
- Elevação do nível intelectual: o SICP elevou significativamente o nível intelectual da educação introdutória em ciência da computação. Enquanto o primeiro curso tradicional de CS se concentrava em aprender os detalhes de uma linguagem de programação específica, o SICP colocava o foco em aprender a visão geral do processo de programação.
- Ênfase na abstração: enfatizava a importância da abstração: encontrar padrões gerais em problemas concretos e criar ferramentas de software que implementem cada padrão.
- Tratar funções como dados: deu destaque à ideia de que funções podem ser usadas como dados. É um conceito difícil de aprender, mas muito poderoso depois de assimilado.
- Diversos paradigmas de programação: integrou três paradigmas de programação — funcional, orientado a objetos e declarativo — no primeiro curso de CS.
A escolha da linguagem Scheme
- Notação simples e consistente: Scheme tem uma notação muito simples e consistente para tudo. Outras linguagens usam notações diferentes para atribuição de variáveis, execução condicional, repetição, chamada de função etc., mas Scheme resolve tudo com uma única notação.
- Aprendizado de vários paradigmas: graças à simplicidade de Scheme, é possível aprender com facilidade vários paradigmas de programação. Em especial, ela permite entender como a programação orientada a objetos é implementada.
- Preparação para o futuro: o SICP desenvolve nos alunos a capacidade de aprender novas linguagens de programação. Sua filosofia é que "a linguagem que você usará no futuro ainda não foi inventada".
A abordagem otimista do SICP
- Expectativas altas: o SICP tem expectativas otimistas sobre o que calouros universitários conseguem alcançar. Os alunos normalmente chegam a escrever interpretadores de linguagens de programação, algo geralmente tratado por alunos mais avançados.
- Aprendizado profundo: o texto em si não é fácil de ler, mas cada frase é importante, e cada exercício ensina uma nova ideia importante.
O impacto do SICP
- Influência duradoura: os cursos baseados no SICP eram poucos, mas sua influência foi enorme. Muitos livros didáticos posteriores tentaram seguir o padrão estabelecido pelo SICP.
- Expansão de Scheme: o uso de Scheme como linguagem de ensino se expandiu do ensino fundamental ao mestrado e doutorado.
- Ciência da computação centrada em ideias: a noção de que a ciência da computação deve ser centrada em ideias se espalhou amplamente.
A permanência do SICP
- Longevidade: o SICP perdura há mais de 25 anos e continua sendo impresso. O ambiente de computação mudou muito, mas as grandes ideias por trás dele não mudaram.
- Mudanças no curso: ao longo do tempo, os cursos baseados no SICP passaram a incluir paralelismo, controle de concorrência, design de interface de usuário e o paradigma cliente/servidor.
Mudanças no currículo do MIT
- Currículo centrado em aplicações: o MIT mudou de um currículo centrado em tópicos para um currículo centrado em aplicações. A escolha da linguagem de programação foi a menor parte dessa decisão.
- Desafio da nova abordagem: a nova abordagem é mais difícil de ensinar e exige que cada curso conte com a colaboração do corpo docente de engenharia elétrica e ciência da computação.
Reação dos alunos
- Popularidade posterior: durante a disciplina, os alunos muitas vezes não percebem o quanto estão aprendendo, mas depois a avaliam como uma das matérias mais populares. Também há relatos de ex-alunos dizendo que continuam usando no trabalho o que aprenderam nela após a formatura.
Opinião do GN⁺
- A filosofia educacional do SICP: o SICP se concentra em aprender grandes ideias, mais do que os detalhes de linguagens de programação, ajudando os alunos a desenvolver a capacidade de aprender novas linguagens com facilidade.
- As vantagens de Scheme: a simplicidade e a notação consistente de Scheme são muito benéficas para iniciantes. Elas facilitam a compreensão de vários paradigmas de programação.
- A mudança no MIT: a mudança no currículo do MIT enfatiza um aprendizado centrado em aplicações, o que pode proporcionar uma experiência mais próxima da prática.
- A continuidade educacional: a longa vida do SICP mostra que sua filosofia educacional e seu conteúdo continuam válidos. Isso reforça o valor essencial da educação.
- Conexão com a prática: a formação baseada no SICP desenvolve habilidades que podem ser aplicadas diretamente no trabalho, o que continua sendo de grande ajuda após a formatura.
1 comentários
Comentários do Hacker News
As aulas do Prof. Abelson podem ser vistas no YouTube e valem o tempo investido: oferecem uma compreensão profunda da ciência da computação e podem ajudar a reduzir o impacto do hype recente.
A primeira metade do livro foi uma leitura leve e interessante: teve dificuldades na parte de orientação a objetos e, pessoalmente, se identificou mais com o pensamento funcional.
É possível ver no YouTube aulas do começo dos anos 80: incluem humor, tentativas iniciais de gráficos e moda dos anos 70, o que as torna educativas.
Há curiosidade sobre se este livro ainda vale a leitura mesmo para programadores com muita experiência.
Achava que o objetivo de SICP era assustar quem não gostava de ciência da computação: na prática, foi um curso básico muito valioso, mas fez algumas pessoas mudarem para outras áreas.
Não conseguiu passar das primeiras páginas: se fosse uma disciplina obrigatória, teria acabado fazendo outra coisa.
Trabalhou como monitor da disciplina CS 61A em Berkeley: argumenta que a notação simples e unificada da linguagem Scheme ajuda no ensino, mas, na prática, os alunos ficavam confusos. Acha que essa característica de tudo em Scheme parecer igual é um defeito.
A melhor lição aprendida com SICP é que, no momento em que você escreve a primeira função, já está criando uma DSL para resolver o problema do domínio: essa percepção elevou seu nível como programador.
Sempre sente frustração com JavaScript quando lê sobre SICP: se JavaScript fosse Scheme, o desenvolvimento web teria sido melhor.
Pedido para comparar SICP e PAIP: SICP trata de programação funcional e dos fundamentos da ciência da computação, enquanto PAIP parece focar mais em prática geral de programação.**