Esta pode ter sido uma pergunta difícil há alguns anos, mas hoje não é mais difícil eliminar a complexidade acidental da IMO.
O que Kent Beck disse sobre ele mesmo, em algum momento: "Não sou um grande programador; sou apenas um bom programador com bons hábitos".
Vale destacar duas coisas: OMI: ele se considera um programador , não um arquiteto, e seu foco é nos hábitos, não no conhecimento.
A maneira de Feynman de resolver problemas difíceis é a única maneira de fazê-lo. A descrição não é necessariamente muito fácil de entender, por isso vou dissecá-la. A cabeça de Feynman não estava apenas cheia de conhecimento, mas também cheia de habilidade para aplicar esse conhecimento. Quando você tem o conhecimento e as habilidades para usá-lo, resolver um problema difícil não é difícil nem fácil. É o único resultado possível.
Existe uma maneira completamente não mágica de escrever código limpo, que não contém complexidade acidental e é semelhante ao que Feynman fez: adquirir todo o conhecimento necessário, treinar para se acostumar a colocá-lo para trabalhar, em vez de apenas escondê-lo em algum canto do seu cérebro, depois escreva um código limpo.
Agora, muitos programadores nem sequer estão cientes de todo o conhecimento necessário para escrever um código limpo. Programadores mais jovens tendem a descartar o conhecimento sobre algoritmos e estruturas de dados, e a maioria dos programadores mais velhos costuma esquecê-lo. Ou grande notação O e análise de complexidade. Programadores mais antigos tendem a descartar padrões ou odores de código - ou nem sabem que eles existem. A maioria dos programadores de qualquer geração, mesmo que conheça padrões, nunca se lembra exatamente de quando usar as peças dos drivers. Poucos programadores de qualquer geração avaliam constantemente seu código em relação aos princípios do SOLID. Muitos programadores misturam todos os níveis possíveis de abstração em todo o lugar. Por enquanto, não conheço um colega programador que avalie constantemente seu código em relação às fintas descritas por Fowler em seu livro de refatoração. Embora alguns projetos usem alguma ferramenta de métricas, a métrica mais usada é a complexidade, de um tipo ou de outro, enquanto duas outras métricas - acoplamento e coesão - são em grande parte ignoradas, mesmo que sejam muito importantes para o código limpo. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. a métrica mais usada é a complexidade, de um tipo ou de outro, enquanto duas outras métricas - acoplamento e coesão - são em grande parte ignoradas, mesmo que sejam muito importantes para o código limpo. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. a métrica mais usada é a complexidade, de um tipo ou de outro, enquanto duas outras métricas - acoplamento e coesão - são em grande parte ignoradas, mesmo que sejam muito importantes para o código limpo. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. enquanto duas outras métricas - acoplamento e coesão - são em grande parte ignoradas, mesmo que sejam muito importantes para o código limpo. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. enquanto duas outras métricas - acoplamento e coesão - são em grande parte ignoradas, mesmo que sejam muito importantes para o código limpo. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. Outro aspecto que quase todo mundo ignora é a carga cognitiva. Poucos programadores tratam os testes de unidade como documentação, e menos ainda estão cientes de que a dificuldade de escrever ou nomear testes de unidade é outro fedor de código, que geralmente indica fatoração ruim. Uma minoria minúscula está ciente do mantra do design orientado a domínio para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, uma vez que discrepâncias tendem a criar problemas no caminho. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. s para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, pois as discrepâncias tendem a criar problemas no futuro. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora. s para manter o modelo de código e o modelo de domínio de negócios o mais próximo possível do outro, pois as discrepâncias tendem a criar problemas no futuro. Tudo isso precisa ser considerado, o tempo todo, se você deseja que seu código seja limpo. E muito mais que não consigo me lembrar agora.
Você quer escrever um código limpo? Não há mágica necessária. Basta aprender tudo o que é necessário, depois usá-lo para avaliar a limpeza do seu código e refatorar até que você esteja feliz. E continue aprendendo - o software ainda é um campo jovem, e novas idéias e conhecimentos são adquiridos em ritmo acelerado.