Resultados de dois anos de estudo em "Estrutura e Interpretação de Programas de Computador"





O original foi publicado no meu blog em 11/07/2020. Se bem entendi, isso não é um problema.



Eu acredito que o desenvolvimento de software é muito sobre programação em pseudocódigo. Se você forneceu pseudocódigo, então traduzindo para Python, C, qualquer que seja, não é um problema. A principal dificuldade reside nessa atividade conceitual, não na codificação. Você precisa saber como abordar certos problemas. Modularidade, abstração. Flexibilidade, confiabilidade, simplicidade. Padrões de design. Teste de unidade. Você sabe.



Existe no mundo o curso "Estrutura e Interpretação de Programas de Computador" (doravante SICP), que se posiciona como uma introdução à Ciência da Computação e era usado anteriormente no MIT para ensinar calouros. Há dois anos, concluí com prazer um curso de palestras sobre o assunto. e pegou o livro. Primeiro, vou falar sobre o bom.



O texto fala sobre coisas que estão muito distantes do meu trabalho diário e me permitiu um novo olhar sobre a programação. Funcionalidade é um mundo inteiro que vive de acordo com suas próprias leis. A linguagem Lisp é muito diferente da linguagem C com a qual estou acostumado por causa de sua flexibilidade frenética devido à digitação dinâmica, gerenciamento automático de memória, a capacidade de redefinir qualquer coisa em tempo de execução. Tenho uma ideia mais versátil de como, em princípio, você pode resolver diferentes problemas. Falando em uma linguagem de xadrez, expandi muito meu repertório de dever de casa que é útil no meu trabalho (embora não todos os dias). O exercício fez meu cérebro funcionar (às vezes muito intensamente), repensar e sistematizar conhecimentos anteriores. Em geral, estudar SIKP me tornou um desenvolvedor melhor, ampliou meus horizontes. tenho certezaComecei a olhar para as coisas diferentes com uma visão mais sistemática e madura.



O livro constantemente me levou a pensar, pelo que me curvo a ela. Percebi profundamente coisas que todos parecem saber, mas que, portanto, todos têm preguiça de mencionar. Por exemplo, que todo software é simplificado no início e, então, inevitavelmente, se torna mais complexo para melhorar o desempenho. O usuário não se importa com quantas linhas de código-fonte estão dentro, mas a velocidade é importante.



E os efeitos específicos para trabalhar? Eu me tornei melhor em ver as deficiências durante a revisão do código (em primeiro lugar, meu próprio código). Adorava pequenas funções, de preferência o mais geral possível. Comecei a praticar o uso cuidadoso e apropriado de macros - às vezes em C você pode fazer algo que não está de acordo com as regras com cuidado, e todos ganharão com isso. A experiência que obtive ao fazer os exercícios do livro me ajudou com alguns dos meus problemas de trabalho.



Mas esse é um lado da moeda. Outra é que a abordagem deste curso para a aprendizagem pode ser expressa na unidade fraseológica inglesa "sink or swim". Há uma barra transversal à sua frente, ao lado está a tarefa: puxar para cima 10 vezes. Em princípio, isso é suficiente para a tarefa, mas essa abordagem não pode ser considerada agradável. Eu diria que ele é muito cansativo! Você é lançado na batalha meio preparado e aprende parte do material não com explicações, mas com seus erros. Provavelmente, essa é uma maneira aceitável de ensinar pessoas altamente motivadas, mas ele me considerou uma pessoa preguiçosa. Eu mal pude suportar por 3 dos 5 capítulos (às vezes parei por vários meses!), Fiz os exercícios neles do início ao fim, mas parece que minha paciência se esgotou.



Por exemplo, o livro não diz uma palavra sobre como organizar seu fluxo de trabalho. Não há sequer uma consideração aproximada de conceitos como "depuração" (é específico aqui), "IDE" (eles são específicos aqui), "testes de unidade", "divisão em arquivos para reutilização". Existem fragmentos onde um determinado sistema complexo está sendo desenvolvido, que estará totalmente pronto somente no final do capítulo, e as tarefas aparecem após cada parágrafo do texto. Essa. estritamente falando, tendo lido até a página N, em alguns casos você não pode resolver o problema desta página sem arrastar o código das páginas subsequentes. O código deve ser arrastado com cuidado, porque as notas podem discutir sutilezas não óbvias e, às vezes, algum código é fornecido como um exemplo de uma ideia quebrada. Isso é irritante! Sim, é como na vida real - você precisa definir a tarefa sozinho, procurar algo na Internet,mas caramba ... isso é um tutorial! Estou cheio de tarefas difíceis no trabalho, e talvez os autores devessem ter sido mais pedantes sobre o texto? Ok, sou um pogromist profissional com acesso rápido à Internet, mas e um calouro do MIT nos anos 80? Tenho certeza que não é doce ...



Deixe-me enfatizar as principais vantagens do livro: ele permite que você ganhe experiência pessoal, preencha seus próprios cones e pense em problemas complexos em geral. As desvantagens estão diretamente relacionadas a elas: é complexo e muitas vezes dá poucas pistas para entender algo. Por exemplo, se você tem algum tipo de experiência de combate, então sabe que o código sem testes de unidade não pode ser chamado de solução, mas o livro não falará sobre isso. Você tem que fazer isso sozinho! O que você acha? Bem, ou estou mentindo, o livro vai falar sobre isso, mas da maneira mais sádica. Você terá a próxima tarefa com base na anterior (muitas vezes está lá). Se você já ganhou um caso de teste anteriormente e decidiu “Ok, vamos além!”, Então, ao virar da esquina, você ficará feliz em depurar as soluções de duas tarefas ao mesmo tempo. Provavelmente, quando isso acontecer várias vezes, você perceberá que está fazendo algo errado. A coisa principal,para que nesses momentos você não desista do curso, mas entenda, então vai dar tudo certo!



Outra característica irritante do texto: as tarefas (novamente, como na vida real) às vezes não são bem definidas. Fiz um exercício outro dia, em meia hora desenhei uma solução, comecei a reler o enunciado do problema. Descobriu-se que se você pensar pedantemente, eu cumpri 95%, gastando cerca de 40% do esforço. A maioria dos caras com quem verifiquei fez o mesmo. Um fez isso totalmente, mas usou um hack de outro interpretador Lisp. Fiquei chateado e cuspi, tendo perdido a motivação para continuar no futuro próximo. Deixe-me reiterar a essência do problema: há tarefas em que tudo se resolve de forma simples e lógica, mas apenas se você não for rígido consigo mesmo. Então, na vida real, eu entendo, mas eu tinha expectativas diferentes do livro didático. Quando você faz o exercício no seu tempo livre e verifica a si mesmo, você quer resolver o problema 100%,não "bom o suficiente para a iteração atual".



O problema com os testes de unidade é, na verdade, do mesmo tipo. Às vezes, você precisa suar um pouco e pensar a fim de simplesmente implementá-los no sistema. Eu sei que não há lugar nenhum sem eles, mas caras mais simples apenas esboçam soluções sem verificar e seguir em frente! Quanto mais rigoroso, mais atencioso, mais experiente você for, mais difíceis se tornarão as tarefas para você. Às vezes, às vezes! Isso é desmotivador, porque aqui, ao contrário do trabalho, eles não elogiam ou pagam por ele, e a abordagem iterativa é pouco aplicável. Conhecimento e habilidades, úteis na vida real, machucam as mãos ao resolver os problemas dos alunos!



Vale dizer que o livro contém muita matemática. Resolvendo os exercícios, entendi a beleza e o poder dessa ciência, mas às vezes era difícil para mim justamente por causa dessas questões específicas, apenas indiretamente relacionadas aos problemas que estavam sendo resolvidos. Só que os autores resolveram mostrar algo com um exemplo de integração, então lembre-se e botay!



Em geral, não me arrependo de me encaixar nessa aventura, ela foi útil para mim. No entanto, recomendo que outras pessoas procurem algo melhor. Por exemplo, com base no SIKP, levando em consideração seus erros (como dizem, eu não verifiquei), o curso "Como projetar programas" foi feito recentemente. Suponho que deveria tê-lo cobiçado também, mas o tempo não vai se desenrolar.



PS Peter Norvig escreveu uma resenha maravilhosa do SIKP .



All Articles