Desvantagens do código kata

41

Código kata é um conceito que propõe aprimorar a habilidade do programador fazendo pequenos problemas muitas vezes tentando melhorar o código em cada iteração. O nome vem de uma analogia com arte marcial kata onde os formulários (aka kata) são práticas feitas repetidas vezes levando a melhorias.

Da reação cheguei ao meu

    
por Sardathrion 06.03.2012 / 09:43
fonte

12 respostas

22

Em princípio, não vejo desvantagens no código kata. Você tenta realizar a mesma tarefa várias vezes, com diferentes abordagens e diferentes idiomas. Mas

  1. é bastante difícil de introduzir isto em um lugar de trabalho. Em geral, espera-se que você seja proficiente ou razoavelmente produtivo. Não estou dizendo que não seria útil (é melhor gastar algum tempo para melhorar as habilidades de um novo contratado do que pagar pelo código não tão bom que ele escreverá no futuro), mas é bastante difícil, no entanto.
  2. você deve experimentar tentar para melhorar em algum sentido. Escrever o mesmo código da mesma maneira mil vezes não fará com que você melhore (em vez disso, você ficará sem graça). Você deve entender seus erros anteriores, o que deu errado ou não funcionou como esperado. Esta é a parte mais importante. É uma forma de auto estudo, então você deve estudar.
por 06.03.2012 / 13:31
fonte
43

Eu acho que programar kata, como kata de artes marciais, é principalmente sobre forma sobre função. Pode ensinar você a escrever um código elegante, mas não o ensinará a resolver os problemas para os quais você está escrevendo o código. Acho que uma maneira melhor de melhorar como programador é resolver quebra-cabeças que exigem resolução de problemas reais e trabalhar em projetos maiores que ensinam o valor do código bem-fatorado de uma forma que o código kata nunca pode lhe ensinar.

Como um aparte, acho que termos como 'code kata' e 'software craftsmanship' são mais sobre romancear a nossa profissão do que descrever qualquer coisa nova ou útil.

    
por 06.03.2012 / 14:46
fonte
20

Code kata leva tempo.

Sendo desenvolvedor e pai em tempo integral, não quero tornar a computação um hobby.

E não imagino que meu chefe me pague para desenvolver aplicativos não relacionados ao meu projeto atual.

    
por 06.03.2012 / 10:24
fonte
13

Como pugilista, 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 livre.

Isso não quer dizer que o aprendizado e a melhoria da técnica não devam ser feitos. Praticar nas malas 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 em torno da bolsa, jogando de uma plataforma estável, apontando, respirando, a lista continua.

Mais importante ainda, tudo é aprendido em conjunto da maneira como será realmente usado. Se você pode escrever o mais belo loop de todos os tempos, mas não consegue entender como encaixá-lo em um programa, então, o que é bom?

Eu diria que uma coisa melhor a fazer se você quiser praticar seria construir ferramentas para você mesmo ou trabalhar com ferramentas que você usa. Isso requer o exercício de todas as suas habilidades e, no final, você pode ter algo útil.

    
por 06.03.2012 / 15:42
fonte
11

Da minha perspectiva, a principal desvantagem é que seria terrivelmente chata. Também os programadores parecem prosperar no desenvolvimento de software que faz algo útil ou legal. A abordagem do código kata parece ser o oposto disso.

    
por 06.03.2012 / 10:43
fonte
8

Kata significa o oposto exato do que você deveria estar se esforçando.

an exercise consisting of a sequence of the specific movements of a martial art, used in training and designed to show skill in technique

O termo Kata (Origem: 1950–55; < Japonês: forma, padrão), como usado em artes marciais, e sua pergunta é sobre memorização de memória muscular como digitação .

No Karate Kid original, encerando os carros, lixando o chão, pintando a cerca estes foram todos Katas que 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 contexto que elas significam alguma coisa.

Eu acho que a mesma coisa se aplica aqui, sem um mentor para colocar as coisas no contexto re-fazendo a resolução de problemas errado em vários idiomas não é melhor que um único. Sem o mentor para lhe dizer onde melhorar, é uma perda de tempo.

É exatamente o oposto de resolver problemas criativamente aprendendo novas variações de expressões idiomáticas e semânticas de uma linguagem ou plataforma.

Se você quiser poder digitar System.out.println() da maneira mais fácil possível, então praticar isso seria um Kata.

Se você quiser 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 é não que o Kata irá ajudá-lo.

Já existe um termo aceito na indústria para reimplementar a mesma coisa repetidas vezes, depois que ela já trabalha para pequenas melhorias incrementais e benefícios questionáveis de perfeição, é chamada de Chapeamento de ouro !

Os termos que eles deveriam ter usado são Refatorando quando aplicados ao mesmo idioma / tempo de execução / plataforma. E Portando ao mover um programa em funcionamento para outro idioma / tempo de execução / plataforma. Kata foi provavelmente erroneamente escolhido porque soa moderno, legal e místico sem entender completamente a semântica.

Resolver problemas difíceis com pouco planejamento, experiência ou orientação é o que a maioria dos desenvolvedores, especialmente os desenvolvedores juniores, precisam fazer todos os dias.

Apenas acadêmicos fazem o mesmo exercício repetidamente apenas para aperfeiçoar uma solução específica. A habilidade em ter uma carreira de sucesso como desenvolvedor está em adaptação , não em repetição.

Quem disse que não há pessoas inteligentes que não precisam estudar depois do trabalho e podem aprender tudo o que precisam saber e às vezes mais em suas 8 horas de trabalho?

    
por 06.03.2012 / 18:05
fonte
5

Concordo que a metáfora "kata" pode não ser a melhor. Um kata no karatê é realizado com o propósito de praticar um movimento específico e discreto até que ele possa ser executado de forma impecável, nítida e automática. Isso não se traduz bem em uma atividade em que o pensamento crítico e a criatividade são necessários. (Seria melhor traduzir, digamos, digitação).

Dito isto, a falha do nome não é uma falha da atividade. Que possível inconveniente poderia haver para praticar algo em que alguém quer melhorar? Suponho que se poderia dizer que o tempo gasto fazendo isso é uma desvantagem, do ponto de vista do custo de oportunidade, mas, na verdade, é um investimento. Assim, o tempo gasto praticando o ofício de desenvolvimento de software é para os desenvolvedores de software, pois o dinheiro gasto em ações ou títulos é para um poupador / investidor de longo prazo. Não é uma "desvantagem" - é apostas de mesa.

    
por 06.03.2012 / 17:46
fonte
3

Você fica melhor tentando coisas difíceis e fora do alcance de suas habilidades; desafiando a si mesmo. Fazer o mesmo "código kata" várias vezes, como uma forma de artes marciais, não faz isso. Eu acho que isso estagna suas habilidades ao invés de ajudar a impulsionar suas habilidades.

Tem seu uso como método de prática pela primeira vez, mas é limitado. Eu digo às pessoas para usar o projeto Euler . Mais problemas e mais desafios.

    
por 06.03.2012 / 18:03
fonte
3

Para mim, a principal desvantagem da técnica como eu a vejo é o uso sub-ótimo do seu tempo.

O valor de aprendizado deste exercício também é questionável: quando você faz algo para melhorar, o feedback dos especialistas é essencial. Sem feedback de alta qualidade, você também aprenderá algo, mas há uma chance de aprender algo errado muito bem.

Não me entenda mal, a prática continua a ser a única maneira de se tornar bom em programação, e o kata é definitivamente uma forma de prática. Mas também está resolvendo problemas de concorrência de codificação, escrevendo seus próprios "projetos divertidos", aprendendo novas linguagens de programação e assim por diante. Em última análise, você precisa escolher a técnica com a qual você se sente mais confortável e garantir que você tenha uma orientação clara ao longo do caminho.

    
por 06.03.2012 / 20:11
fonte
1

Eu acredito que, sem alguma forma de Kata, você nunca será um ótimo codificador. Kata é prática, isso é literalmente o que isso significa. Tome isso como um exemplo: Um atleta diz: "Eu só vou aparecer e executar o tablier de 100 metros, prática de parafuso". Isso soa como uma estratégia vencedora? É sempre feito dessa maneira?

Sugiro às pessoas que leiam " tio Bob The Clean Coder ", ele se aprofunda sobre este (e outros) tópicos de profissionalismo no campo da programação.

Ah, e argumentos que você não pode fazer Kata e criar uma família são simplesmente desculpas. Falando da experiência: as crianças vão dormir em algum momento ...

    
por 06.03.2012 / 18:45
fonte
1

Fazer apenas katas, em um contexto de arte marcial, é inútil. Como dito antes, os katas são uma coreografia de movimentos que ensinam a você a forma. Você conhece os movimentos, mas não sabe como aplicá-los. Você não sabe em quais situações elas são úteis. Se você realmente quer fazer algo útil com eles, você precisa do (s) aplicativo (s), que é o Bunkai .

Em um contexto de software, o código kata seria o algoritmo, a ferramenta, o padrão de design ou qualquer outra tecnologia. Sabendo que é bom, mas você precisa aplicá-lo para entendê-lo. Você precisa usá-lo em contextos diferentes para realmente dominá-lo. O Bunkai seria uma situação concreta onde esse kata ou parte do kata é útil.

Eu não vejo nada de errado com essa metodologia, isto é como tudo é dominado: aprender alguma coisa, praticá-lo, adicionar um detalhe, praticar, adicionar outro detalhe, praticar, etc.

    
por 23.03.2012 / 20:05
fonte
-1

A programação é uma pintura ou música artística. Quando alguém se torna um músico ou artista por dinheiro, você pode dizer, não há inspiração, o desempenho não é realmente vale o seu tempo. Se você está na arte, nada pode impedi-lo de praticar e constantemente refiná-lo - todos os dias refinando uma única técnica, notando as nuances que a maioria das pessoas nunca verá.

Há sempre espaço para pessoas felizes sendo músicos de bar e pintores de casas, mas eles são uma classe completamente diferente de talento. Eu suponho que a maioria dos pintores de casa riria da idéia de praticar, mas eu aposto que um pintor que fez pesquisa e praticou técnicas - essencialmente reconhecendo que 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 de alguma forma. Isso por si só deve ser valioso se você estiver em posição de avaliar e estiver procurando pessoas que possam fazer arte (código simples, simples e compreensível) e não apenas uma solução.

ps. Eu não estou me chamando de artístico ou algo assim - eu não faço Kata em problemas abstratos, mas eu reconheço o valor e eu tento refatorar meu código de produção um pouco.

    
por 06.03.2012 / 19:29
fonte

Tags