Code kata é um conceito que propõe aprimorar a habilidade do programador, fazendo pequenos problemas muitas vezes, tentando melhorar o código a cada iteração. O nome vem de uma analogia ao kata da arte marcial, onde os formulários (também conhecidos como kata) são práticas feitas repetidas vezes, levando a melhorias.
A partir da reação que cheguei à minha última pergunta sobre o tema, gostaria de saber quais são as desvantagens dessa abordagem?
Respostas:
Em princípio, não vejo desvantagens no código kata. Você tenta realizar a mesma tarefa várias vezes, com abordagens diferentes e idiomas diferentes. Mas
fonte
Eu acho que programação kata, como artes marciais, é principalmente sobre forma sobre função. Isso pode ensiná-lo a escrever um código elegante, mas não o ensina a resolver os problemas para os quais está escrevendo o código. Eu acho que uma maneira melhor de melhorar como programador é resolver quebra-cabeças que exigem a solução de problemas reais e trabalhar em projetos maiores que ensinem o valor do código bem-fatorado de uma maneira que o código kata nunca possa ensinar.
Como um aparte, acho que termos como 'código kata' e 'habilidade com software' são mais sobre romantizar nossa profissão do que sobre descrever algo novo ou útil.
fonte
O código kata leva tempo.
Sendo desenvolvedor e pai em período integral, não quero tornar a computação um hobby.
E não imagino que meu chefe me pagaria para desenvolver aplicativos não relacionados ao meu projeto atual.
fonte
Como boxeador, eu teria que discordar do princípio por trás do kata. É muito rígido para ser realmente útil. No ringue, você precisa entender como aplicar os princípios que aprendeu em um ambiente de fluxo livre.
Isso não quer dizer que o aprendizado e o aprimoramento da técnica não devam ser realizados. Praticar nas sacolas permite que você trabalhe com um soco e sinta como você o joga, o mesmo que um kata. Mas não é tão rígido. Você está praticando muitas coisas ao mesmo tempo, movendo-se pela sacola, jogando de uma plataforma estável, mirando, respirando, a lista continua.
Mais importante, tudo é aprendido juntos da maneira como será realmente usado. Se você pode escrever o loop for mais bonito de todos os tempos, mas não consegue entender como encaixá-lo em um programa, então de que serve?
Eu diria que uma coisa melhor a fazer se você quiser praticar seria construir ferramentas para si mesmo ou trabalhar nas ferramentas que você usa. Requer o exercício de todas as suas habilidades e, no final, você pode ter algo útil.
fonte
Na minha perspectiva, a principal desvantagem é que seria terrivelmente chato. Os programadores também parecem prosperar no desenvolvimento de software que faz algo útil ou interessante. A abordagem de código kata parece ser o oposto disso.
fonte
Kata significa exatamente o oposto do que você deveria estar se esforçando.
O termo Kata (origem: 1950–55; <japonês: forma, padrão), usado nas artes marciais, e sua pergunta é sobre memorização mecânica da memória muscular, como digitação por toque .
No Karate Kid original, encerar os carros, lixar o chão, pintar a cerca , todos esses Katas foram ensinados, completamente fora de contexto e, neste caso, sem explicação, apenas para fornecer memória muscular. Não foi até que um sensei entrou e deu a essas atividades vazias o contexto que elas significaram alguma coisa.
Eu acho que a mesma coisa se aplica aqui, sem um mentor para colocar as coisas em contexto, refazer a solução de problemas incorretos em vários idiomas não é melhor do que um único. Sem o mentor para lhe dizer onde melhorar, eles são uma perda de tempo.
É exatamente o oposto da resolução criativa de problemas, aprendendo novas variações de expressões idiomáticas e semânticas de uma linguagem ou plataforma.
Se você deseja digitar o
System.out.println()
mais facilmente possível, praticar isso seria um Kata.Se você deseja melhorar uma solução para um problema em uma implementação diferente , reduzir os requisitos de tempo e / ou espaço ou aplicar princípios mais idiomáticos, isso não é algo que o Kata o ajudará.
Já existe um termo aceito no setor para reimplementar a mesma coisa repetidamente, depois que ele já trabalha em busca de pequenas melhorias incrementais e benefícios questionáveis da perfeição, chamado de Revestimento de Ouro !
Os termos que eles deveriam ter usado são refatoração quando aplicados ao mesmo idioma / tempo de execução / plataforma. E portando ao mover um programa de trabalho para um idioma / tempo de execução / plataforma diferente. O Kata provavelmente foi escolhido erroneamente porque soa moderno, descolado e místico sem entender completamente a semântica.
Resolver diferentes problemas difíceis com pouco planejamento, experiência ou orientação é o que a maioria dos desenvolvedores, especialmente desenvolvedores juniores, tem que fazer todos os dias.
Somente acadêmicos fazem o mesmo exercício repetidamente apenas para aperfeiçoar uma solução específica. A habilidade de ter uma carreira de sucesso como desenvolvedor está na adaptação , não na repetição.
Quem disse que não existem pessoas inteligentes que não precisam estudar depois do trabalho e que podem aprender tudo o que precisam saber e, às vezes, mais nas 8 horas de trabalho?
fonte
Concordo que a metáfora "kata" pode não ser a melhor. Um kata no karatê é realizado com a finalidade de praticar um movimento específico e discreto, até que possa ser executado de maneira impecável, nítida e automática. Isso não se traduz bem em uma atividade em que pensamento crítico e criatividade são necessários. (Seria melhor traduzir, digamos, digitar).
Dito isto, a falha do nome não é uma falha da atividade. Qual possível desvantagem em praticar algo em que alguém queira melhorar? Suponho que se possa dizer que o tempo gasto com isso é uma desvantagem, de uma perspectiva de custo de oportunidade, mas, na verdade, é um investimento. Portanto, o tempo gasto praticando o ofício do desenvolvimento de software é para desenvolvedores de software, pois o dinheiro gasto em ações ou títulos é para um economizador / investidor de longo prazo. Não é uma "desvantagem" - são apostas na mesa.
fonte
Você melhora tentando coisas difíceis e fora do alcance de suas habilidades; desafiando a si mesmo. Fazer o mesmo "código kata" repetidamente, como uma forma de artes marciais, não faz isso. Eu acho que isso estagnou suas habilidades, em vez de ajudar a impulsionar suas habilidades.
Ele tem seu uso como método de prática pela primeira vez, mas é limitado. Eu digo às pessoas para usarem o projeto Euler . Mais problemas e mais desafiadores.
fonte
Para mim, a principal desvantagem da técnica, na minha opinião, é o uso subótimo do seu tempo.
O valor de aprendizado deste exercício também é questionável: quando você faz algo repetidamente para melhorar, o feedback de especialistas é essencial. Sem feedback de alta qualidade, você aprenderá algo também, mas há uma chance de aprender muito bem uma coisa errada.
Não me interpretem mal, praticar continua sendo a única maneira de se tornar bom em programação, e o kata é definitivamente uma forma de prática. Mas o mesmo acontece com a resolução de problemas de concorrência de codificação, escrevendo seus próprios "projetos divertidos", aprendendo novas linguagens de programação e assim por diante. Por fim, você precisa escolher a técnica com a qual se sente mais confortável e garantir uma orientação clara ao longo do caminho.
fonte
Acredito que sem alguma forma de Kata você nunca será um ótimo programador. Kata é prática, é literalmente o que isso significa. Tome isso como um exemplo: Um atleta diz: "Eu simplesmente apareço e corro o trilho de 100 metros, pratique parafuso". Isso soa como uma estratégia vencedora? Isso já foi feito dessa maneira?
Eu sugiro que as pessoas leiam " The Clean Coder ", do tio Bob , e ele se aprofunda sobre este (e outros) tópicos de profissionalismo no campo da programação.
Ah, e argumentos apresentados de que você não pode praticar Kata e criar uma família são simplesmente desculpas. Falando por experiência própria: as crianças vão dormir em algum momento ...
fonte
Fazer apenas katas, em um contexto de arte marcial, é inútil. Como dito anteriormente, os katas são coreografias de movimentos que ensinam a você a forma. Você conhece os movimentos, mas não sabe como aplicá-los. Você não sabe em que situações elas são úteis. Se você realmente deseja fazer algo útil com eles, precisa do (s) aplicativo (s), que é o Bunkai .
Em um contexto de software, o código kata seria o algoritmo, ferramenta, padrão de design ou qualquer outra tecnologia. Saber que é bom, mas você precisa aplicá-lo para entendê-lo. Você precisa usá-lo em diferentes contextos para realmente dominá-lo. O Bunkai seria uma situação concreta em que esse kata ou parte dele é útil.
Não vejo nada de errado com essa metodologia; é assim que tudo é dominado: aprenda algo, pratique, adicione um detalhe, pratique, adicione outro detalhe, pratique etc.
fonte
A programação é uma arte - como pintura ou música. Quando alguém se torna músico ou artista por dinheiro, você pode contar, não há inspiração, a performance não vale o seu tempo. Se você gosta da arte, nada pode impedi-lo de praticar e aperfeiçoá-la constantemente - todos os dias refinando uma única técnica, observando as nuances que a maioria das pessoas nunca verá.
Sempre há espaço para as pessoas felizes serem músicos de bar e pintores de casas, mas eles são uma classe de talento completamente diferente. Suponho que a maioria dos pintores de casa riria da idéia de praticar, mas aposto que um pintor que pesquisou e praticou técnicas - essencialmente reconhecer seu trabalho como uma arte faria um trabalho visivelmente melhor, mesmo em algo tão mundano quanto pintar sua casa .
Algumas pessoas reconhecerão o valor da prática que outras não. Isso por si só deve ter valor se você estiver em posição de avaliar e estiver procurando pessoas que possam fazer arte (código enxuto, simples e compreensível) e não apenas uma solução.
ps. Eu não estou me chamando de impressionante arte ou algo assim - eu não pratico Kata em problemas abstratos, mas reconheço o valor e tento refatorar meu código de produção um pouco.
fonte