Desvantagens do código kata


41

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?


+1 para combater o -1 improdutivo aplicado. Parece uma pergunta válida, assim como minhas dúvidas sobre o Code kata, mas não é possível identificar o porquê.
mattnz

9
até hoje eu não tinha ideia do que se trata esse kata. Agora eu apenas verifiquei e imho é apenas um nome sofisticado para algo que todo programador sensato faz e aprende automaticamente enquanto desenvolve: praticando. Portanto, a desvantagem para mim seria: leva apenas um tempo extra que poderia ser usado de outra forma.
Stijn

11
Hmm ... aparentemente, uma grande desvantagem de kata código parece o ser que as pessoas estão criticando kata código sem entender o que kata de código são :-)
Jörg W Mittag

19
@ JörgWMittag - Isso ocorre porque o termo 'kata' é uma analogia ruim, pois implica a prática de forma rígida com pouco significado prático em situações do mundo real. A aplicação de palavras de artes marciais, como "faixa preta" ou "kata", a situações de programação ou de negócios me irrita.
Jfrankcarr 06/03/12

Respostas:


22

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

  1. é bastante difícil introduzi-lo em um local de trabalho. Normalmente, você deve ser proficiente ou razoavelmente produtivo. Não estou dizendo que não seria útil (melhor gastar algum tempo para aprimorar 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.
  2. você deve realmente tentar melhorar em algum sentido. Escrever o mesmo código da mesma maneira mil vezes não fará com que você melhore (em vez disso, irá entorpecer você). Você deve entender seus erros anteriores, o que deu errado ou não funcionou conforme o esperado. Esta é a parte mais importante. É uma forma de auto-estudo, então você deve estudar.

1
Aceitei esta resposta porque ela aborda a questão diretamente (em vez da terminologia "kata") e se concentra nos possíveis problemas da prática de kata de código. Isso não quer dizer que outras respostas não sejam boas - na verdade, eu ficaria feliz em aceitar mais de uma!
Sardathrion - Restabelece Monica 9/12/09

43

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.


4
Faça isso +2 para essa frase.
Erik Dietrich

6
Embora eu concorde que resolver problemas é uma boa maneira de melhorar como programador, aprender a escrever código elegante também pode ser uma tarefa interessante. Desejo que alguns dos desenvolvedores originais de código que atualmente mantenho tenham dedicado algum tempo e esforço a escrever código elegante, em vez de copiar e colar para fazer as coisas funcionarem.
Mike Partridge

1
+3 no comentário de Mike. Em geral, é gasto muito mais tempo mantendo o código do que o gasto inicialmente para escrevê-lo. Você esperaria que o artesanato fosse aplicado quando alguém construir sua casa, já que você vai morar nela por um longo tempo. O mesmo deve ser aplicado quando alguém cria software - mas na maioria das vezes não é.
Kaleb Brasee

@KaptajnKold: Você está falando de sua experiência? Eu adoraria ouvir alguns comentários de alguém que realmente tentou melhorar suas habilidades através do CodeKata e falhou.
dzieciou

2
@dzieciou: Tenho experiência em artes marciais praticando Karatê há vários anos. E embora eu acredite que há alguns aspectos úteis da luta que podem ser aprendidos com os katas, também acredito que, em última análise, não é uma maneira muito eficiente de treinar. Você deve treinar enquanto luta, como eles dizem. Ou seja, se seu objetivo é se tornar um lutador melhor. Algumas pessoas acham que praticar kata é uma busca alegre por si só. Não há nada de errado nisso. Eventualmente, alguns deles se tornam muito bons. No kata.
KaptajnKold

20

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.


10
Existe algum tipo de aprendizado que não leva tempo? A menos que você tenha a sorte de trabalhar em projetos greenfield toda vez.
Den

38
Se você não gasta pelo menos uma pequena quantidade de seu tempo livre para melhorar suas habilidades de programação regularmente, sua carreira profissional está em grande perigo.
Ladislav Mrnka

7
+1 a isso. Embora eu adore a programação e que possa ganhar dinheiro com algo que adoro fazer, não vejo sentido em fazer MAIS programação fora do trabalho. Eu tenho tantos outros hobbies (DJ, produção de música, levantamento de peso, desenho e dança de rua, por exemplo) que não vejo sentido em passar mais horas em algo que já faço 40 horas / semana.
Andreas Johansson

7
@mouviciel: E esse é exatamente o problema: seu chefe está disposto a pagar pelo seu desenvolvimento profissional, se for necessário no projeto, mas você deve estar disposto a melhorar suas habilidades não relacionadas ao seu projeto atual - talvez não relacionadas ao seu atual plataforma em tudo. É isso que constrói sua carreira / previdência social.
Ladislav Mrnka

6
@LadislavMrnka - Eu concordo com você. No entanto, o Code Kata não é a resposta para esse problema.
Mouviciel 6/03/12

13

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.


local. fwiw, eu também sou um boxeador / programador :).
Paul Sanwald

1
Katas de código não são sobre repetição rígida; eles são mais sobre trabalhar para resolver um problema e, em seguida, trabalhar para melhorar sua solução até que você esteja satisfeito. Do Kata One: "O objetivo desse kata é praticar um estilo mais flexível de modelagem experimental. Procure o maior número possível de maneiras de lidar com os problemas. Considere as várias vantagens e desvantagens de cada uma. Quais técnicas são melhores para explorar esses modelos? gravá-los? Como você pode validar um modelo é razoável? "
Mike Partridge

4
Concordo que o termo 'kata' é imperfeito, mas não perdemos de vista seu argumento por causa do nome. Além disso, nem todos são problemas de palavras; do Kata Two: "Implemente uma rotina de pesquisa binária (usando a especificação abaixo) no idioma e na técnica de sua escolha. Amanhã, implemente novamente, usando uma técnica totalmente diferente. Faça o mesmo no dia seguinte, até ter cinco totalmente exclusivos implementações de um chop binário. (Por exemplo, uma solução pode ser a abordagem iterativa tradicional, uma pode ser recursiva, pode-se usar um estilo funcional passando fatias de array e assim por diante) ".
Mike Partridge

3
@ MikePartridge Isso exemplifica o meu argumento. Um kata envolveria um método de pesquisa binária que a cada dia é aprimorado, digamos, com menos linhas ou menos tempo necessário para escrevê-lo do zero. Como um conceito é descrito é importante defini-lo. Ele poderia ter chamado isso de prática de programação, que é o assunto dos artigos, sem levar bagagem incorreta. O ônus é do autor escolher palavras e conceitos que definam corretamente sua idéia, não reclamar que seu público está provocando associações incorretas devido à sua escolha de metáfora.
Spencer Rathbun

3
@ MikePartridge No meu caso, acredito que todos os programadores estão aprendendo / melhorando, ou deveriam estar, o tempo todo. Portanto, o código kata é uma técnica para ajudar a alcançar esse objetivo, e minha resposta foi que a técnica, como eu a vi, não valia a pena. Concordo plenamente com o objetivo, mas essa não era a questão.
Spencer Rathbun

11

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.


2
Katas te ensina coisas novas. Como isso pode ser o oposto do que os programadores pretendem fazer? Também está resolvendo um quebra-cabeça, algo que a maioria dos bons programadores consideraria "chato". De fato, este é o cerne do hacking.
Konrad Rudolph

4
@KonradRudolph Eu pensei que a repetição era o coração dos katas? Então, você resolveria um problema uma vez (talvez novo e empolgante), mas continuaria resolvendo o mesmo problema várias vezes. Mal olhei para Katas para estar errado.
Kevin D

@ Kevin Eu concordo que isso parece estúpido (a menos que você tente especificamente encontrar maneiras diferentes de resolver o problema). Eu nunca fiz katas como tal, apenas quebra-cabeças de programação genéricos.
Konrad Rudolph

Como está fazendo a mesma coisa repetidamente "ensinando coisas novas"?

Está claro na sua resposta que você não leu o link fornecido na pergunta.
9118 Mike Partridge #:

8

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

exercício que consiste em uma sequência dos movimentos específicos de uma arte marcial, usados ​​no treinamento e projetados para mostrar habilidade na técnica

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?


E se o que você está praticando é redesenhar e melhorar o design - repetindo o processo de design, o termo não se aplica? Você pode criar uma melhor?
Bill K

o termo para redesenhar e melhorar um sistema existente é refatoração ( refatoração de código é "técnica disciplinada para reestruturar um corpo de código existente, alterando sua estrutura interna sem alterar seu comportamento externo"). Eles escolheram Kata porque soa legal e místico, sem entender a semântica.

O termo refatoração é um termo muito diferente de praticar para ser bom em refacotagem. Qualquer pessoa pode refatorar o código, o que não significa que eles o façam bem ou sejam praticados no reconhecimento de boas oportunidades de refatoração. Embora "Praticar refatoração" seja um termo descendente, ele não transmite a dedicação que o Kata faz, então eu acho que o Kata pode ser uma escolha um pouco melhor, embora eu esteja aberto à teoria de que ainda existe uma frase melhor.
Bill K

1
Na verdade, Gold Platting refere-se a "... recursos adicionais ou mais polidos". O que você descreve parece mais semelhante à otimização prematura, embora após o fato.
Joshua Drake

5

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.


3

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.


Escrever o mesmo programa repetidamente pode ser útil e interessante, por exemplo, se você o fizer usando um algoritmo diferente e / ou em um idioma diferente todas as vezes. Mas provavelmente não é um kata.
9000

2
Leia o link fornecido na pergunta; a idéia não é repetição sem sentido, como você parece assumir pelo nome.
9118 Mike Partridge #

@ 9000 Na verdade, é exatamente assim que eu entendo o Code Katas. Frequentemente usado ao aprender um novo idioma ou ao tentar uma nova abordagem para um problema já resolvido.
Joshua Drake

3

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.


Como você encontrou a orientação? Estou lutando com o mesmo problema.
CodeYogi

1

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 ...


3
coding! = rodando 100 metros, a menos que um dia chegue a um campo minado arborizado e um arrozal cheio de minas terrestres no dia seguinte e um pântano cheio de víboras venenosas no dia seguinte, sob forte fogo de atirador, veja o padrão ... Kata é o termo errado semanticamente .

2
-1 O treinamento pode ocorrer no trabalho, mesmo em horário remunerado (não sei por que as pessoas parecem esquecer isso). Nem tudo é puro trabalho ou puro aprendizado.
Joshin4colours #

@JarrodRoberson o cenário que você acabou de descrever é o que um soldado faz diariamente. Então você escolheu uma analogia bastante ruim. Sinceramente, eu deveria estar feliz pelas pessoas que fazem seu trabalho de 9 a 5 anos, depois ir para casa e parar de aprender, pois isso me dá uma vantagem competitiva.
ThaDon 6/03/12

3
Uma vez, Martin Fowler foi questionado sobre como gastar dinheiro em treinar seus funcionários "Você não tem medo de treiná-los? , e sua resposta foi "Não, receio que, se não os treinar, eles ficarão!" . Nem todo empregador vê o treinamento como uma despesa, os bons vêem isso como um investimento!

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. Eu acho que é uma analogia bastante precisa. 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 diz que não há pessoas mais inteligentes que não precisam estudar depois do trabalho e podem aprender tudo o que precisam e muito mais em suas 8 horas.

1

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.


-1

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.


músicos excessivamente treinados, em particular, podem ser ocupados negativamente pela perfeição teórica, o que é extremamente perigoso para uma carreira no desenvolvimento de software. A música tem um elemento de expressão , o software de programação não tem isso. Você poderia argumentar que os produtos da Apple têm essa expressão, mas isso é expressão de design , o código nunca é visto ou percebido diretamente. Música e arte são más analogias para o desenvolvimento de software. E você mostra um preconceito acentuado contra trabalhadores de colarinho azul, na medida em que assume que eles não se orgulham de seu trabalho ou veem valor em qualidade.

Não misture treinamento com prática. Excessivamente treinado é muito diferente de excessivamente praticado, e se você não acha que o nível de expressão em seu código é visto nos prazos de entrega e na estabilidade do código, eu realmente não sei se temos uma base comum para discussão.
Bill K

Não importa o que eu pense, eu sei que a maioria dos clientes não reconhece e se preocupa com códigos cuidadosamente criados e com que elegância ele é criado, desde que o aplicativo funcione na maioria das vezes. Do mesmo modo que a maioria da população nunca se preocupou com a qualidade do som e do vídeo em VHS, fitas de vídeo ou cassetes na Internet altamente compactadas e agora mp3s altamente compactados que removem toda essa nuance, sem queixas. Excessivamente treinado é pior do que excessivamente praticado, excessivamente treinado faz com que se ignore "suficientemente bom" e se sinta infeliz na indústria de software.

Programar é um ofício, não uma arte. Existem níveis de habilidade e estética para ambos, mas a arte não é profissional na natureza, o desenvolvimento de software é profissional. Mais pessoas ganham mais dinheiro escrevendo softwares do que artistas em geral. O software não é subjetivo e não existe apenas para sua própria existência, pinturas e música existem para agradar o criador com mais freqüência do que nunca, pois sua definição de esgotamento de vendas acima implica uma diferenciação. Como alguém que frequentou a universidade de arte, posso dizer, a programação é um ofício profissional e nada tem a ver com a criação de uma obra de arte.

Se você não acha que o software bem fabricado é entregue mais rápido, menos caro e simplesmente melhor do que o software fabricado por artesãos, você não o viu corretamente. Não é muito improvável, quantas pessoas assistiram a um artista mestre, músico ou tocaram com / contra um jogador profissional de esportes - elas simplesmente não são tão comuns e em nossa indústria MUITO mais difícil de reconhecer, mas a diferença de talento é a mesma como são os resultados. Um artista pode superar cinco artesãos em velocidade e qualidade, mas poucos têm a sorte de ter visto isso e não acreditam que exista.
Bill K
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.