4 pontos por GN⁺ 2024-11-17 | 1 comentários | Compartilhar no WhatsApp
  • Apresentação do livro

    • Há um livro que foi emprestado a um aluno como leitura para o verão
    • Este livro é uma das obras mais importantes da ciência da computação e teve grande impacto na carreira e na pesquisa de uma pessoa
    • O título do livro é Structure and Interpretation of Computer Programs (SICP), de Hal Abelson e Jerry Sussman
  • A importância do livro

    • Este livro causa um grande impacto quando se entra em contato com a ciência da computação pela primeira vez
    • Ele apresenta os elementos fundamentais da programação e explora diversos temas
    • Entre os temas estão abstração lambda, computação de ordem superior, estruturas de dados complexas, modularidade, streams, avaliação preguiçosa, construção de interpretadores e compiladores e gerenciamento de memória
  • Abordagem de projeto de linguagem

    • Hal e Jerry viam tudo como um exercício de projeto de linguagem
    • O livro apresenta o conceito de estruturar sistemas complexos com um projeto em camadas
    • Cada camada é construída combinando as partes consideradas primitivas naquele nível
  • A essência da ciência da computação

    • A revolução dos computadores é uma revolução na forma de pensar e na forma de expressão
    • O livro introduz o conceito de epistemologia procedimental, que é o estudo da estrutura do conhecimento a partir de uma perspectiva imperativa
    • A ciência da computação fornece uma estrutura para o "como"
  • A relevância contínua do livro

    • Comprado em 1988, este livro continua relevante até hoje
    • É um dos poucos livros de ciência da computação que mantêm seu valor com o passar do tempo
    • Assim como Lectures on Physics, de Feynman, ele captura muito bem a essência da ciência da computação
  • Atualização

    • Atualizado em 27 de janeiro de 2024
    • Este livro também está incluído em uma bibliografia comentada de Lisp

1 comentários

 
GN⁺ 2024-11-17
Comentários do Hacker News
  • É possível aprender o conteúdo do livro nas aulas em vídeo de 1986 de Abelson e Sussman. A explicação deles sobre a estratificação de abstrações é útil para mim tanto pessoalmente quanto como mentor

  • Textos clássicos como SICP falam sobre projeto de programas, mas hoje acho que projeto de sistemas é mais importante. Não sei se sistemas distribuídos fazem parte da ciência da computação, mas é um problema mais geral a ser resolvido. A ideia é escrever o sistema da forma mais simples possível, usar ferramentas de observabilidade para identificar falhas no projeto e depois resolver os problemas com estruturas de dados ou outros métodos mais ligados à ciência da computação. Na maioria dos casos, notação Big O e complexidade de tempo de execução não importam muito, e dá para resolver a maior parte dos problemas com arrays e CPUs rápidas. Quando há problema de desempenho, é preciso fazer profiling do programa para encontrar os hotspots. A ciência da computação não ensina como funciona o cache de memória da CPU. Um algoritmo de grafos elegante pode ter boa complexidade assintótica, mas destruir completamente o cache da CPU, enquanto arrays poderiam ter resolvido mais rápido. Os problemas mais gerais são tolerância a falhas, corretude de locks distribuídos e filas, e escalabilidade do sistema. Talvez eu seja tendencioso por ter formação em engenharia da computação/elétrica

  • O link para a cópia gratuita está quebrado. Por volta de 2001, só a versão HTML era oferecida gratuitamente, e alguém a converteu para TeXinfo. Hoje, se você quiser estudar SICP, pode executar o código no MIT Scheme ou no DrRacket

  • "The Elements of Programming Style" vale a pena ser lido três vezes, e li mais do que isso com muito proveito. Dá para consultar a resenha de 2010

  • Eu queria gostar de SICP, mas Lisp parece difícil para mim. Gosto de Haskell e Standard ML. Fico curioso se outras pessoas tiveram experiência parecida. Pode ser interessante ler um livro com espírito semelhante ao de SICP em outra linguagem. Não gostaria de fazer SICP em JavaScript

  • Tenho curiosidade sobre a opinião das pessoas a respeito de "Software Design for Flexibility: How to Avoid Programming Yourself into a Corner"

  • SICP me ajudou a entender que existem vários modelos de programação. O livro ajuda a ler a documentação de linguagens, bibliotecas e frameworks e a se orientar

  • Programo há 25 anos e tenho o livro há uns 10 anos. Recentemente comecei com o Dr. Racket. Uma vantagem do Dr. Racket é que, ao passar o mouse sobre uma variável, dá para ver visualmente as conexões com outros lugares do código. Mas me incomodava um pouco o fato de não ser o VS Code. Então montei um ambiente em que eu pudesse resolver os exercícios usando o VS Code, ou melhor, o Cursor. A integração com LLM é ótima, e eu posso fornecer o código e a narrativa que escrevi e pedir feedback. Avancei um pouco nos exercícios, mas transformei o código convertido, as respostas que escrevi e o feedback que recebi da LLM em um site estático. Foi uma forma divertida de passar o tempo. Eu não entenderia SICP completamente sem a ajuda de uma LLM, mas é interessante ver como integrar LLMs à prática

  • Na segunda leitura, comecei a explorar as notas de rodapé e as referências e descobri que ali existe um mundo belo. Há um artigo em que Sussman e sua equipe projetam um processador programável sob medida para calcular propriedades de corpos celestes. Sempre surpreendente

  • Fornece links para a versão original e a versão em JavaScript