Inconvenientes del código kata

41

Code kata es un concepto que propone perfeccionar la habilidad del programador haciendo pequeños problemas muchas veces tratando de mejorar el código en cada iteración. El nombre proviene de una analogía con el kata de artes marciales donde las formas (también conocidas como kata) son prácticas realizadas una y otra vez que conducen a mejoras.

Desde la reacción que recibí hasta mi última pregunta sobre el tema, deseo saber cuáles son los inconvenientes de este enfoque.

Sardathrion - Restablece a Monica
fuente
+1 para contrarrestar el improductivo -1 aplicado. Parece una pregunta válida, al igual que mis dudas sobre Code kata, pero no puedo precisar por qué.
mattnz
99
hasta hoy no tenía idea de qué se trata este asunto del kata. Ahora lo acabo de comprobar y, en mi opinión, es solo un nombre elegante para algo que todo programador cuerdo hace y aprende automáticamente mientras se desarrolla: practicar. Entonces, el inconveniente para mí sería: solo toma tiempo extra que podría usarse de otra manera.
stijn
11
Hmm ... aparentemente, uno de los principales inconvenientes del código kata parece ser que la gente está criticando el código kata sin entender qué es el código kata :-)
Jörg W Mittag
19
@ JörgWMittag: eso se debe a que el término 'kata' es una mala analogía, ya que implica la práctica de una forma rígida con poco significado práctico en situaciones del mundo real. La aplicación de palabras de artes marciales, como "cinturón negro" o "kata", a situaciones de programación o negocios me molesta.
jfrankcarr

Respuestas:

22

En principio, no veo inconvenientes en el código kata. Intenta realizar la misma tarea muchas veces, con diferentes enfoques y diferentes idiomas. Pero

  1. Es bastante difícil introducirlo en un lugar de trabajo. Por lo general, se espera que sea competente o razonablemente productivo. No digo que no sea útil (es mejor dedicar algo de tiempo para mejorar las habilidades de un nuevo empleado que pagar por el código no tan bueno que escribirá en el futuro) pero es bastante difícil.
  2. debes intentar mejorar en algún sentido. Escribir el mismo código de la misma manera mil veces no te hará mejorar (más bien te aburrirá). Debe comprender sus errores anteriores, lo que salió mal o no funcionó como se esperaba. Esta es la parte más importante. Es una forma de auto estudio, por lo que debes estudiar.
Francesco
fuente
1
Acepté esta respuesta porque aborda la pregunta directamente (en lugar de la terminología "kata") y se centra en los posibles problemas de la práctica de kata de código. Esto no quiere decir que otras respuestas no sean buenas, de hecho, ¡me encantaría aceptar más de una!
Sardathrion - Restablece a Monica
43

Creo que programar kata, como las artes marciales, se trata principalmente de forma sobre función. Puede enseñarle a escribir código elegante, pero no le enseñará a resolver los problemas para los que está escribiendo el código. Creo que una mejor manera de mejorar como programador es resolver acertijos que requieren una resolución real de problemas y trabajar en proyectos más grandes que le enseñarán el valor del código bien factorizado de una manera que el código kata nunca puede enseñarle.

Por otro lado, creo que términos como 'código kata' y 'artesanía de software' tienen más que ver con la romantización de nuestra profesión que con la descripción de algo nuevo o útil.

KaptajnKold
fuente
44
Haz ese +2 para esa oración.
Erik Dietrich
66
Si bien estoy de acuerdo en que resolver problemas es una buena manera de mejorar como programador, aprender a escribir código elegante también puede ser una búsqueda valiosa. Desearía que algunos de los desarrolladores originales de código que mantengo actualmente hayan dedicado algo de tiempo y esfuerzo a escribir código elegante en lugar de copiar y pegar para que las cosas funcionen.
Mike Partridge
1
+3 para el comentario de Mike. En general, se dedica mucho más tiempo a mantener el código del que se invirtió inicialmente al escribirlo. Es de esperar que se aplique la artesanía cuando alguien construye su casa, ya que va a vivir en ella durante mucho tiempo. Lo mismo debería aplicarse cuando alguien crea software, pero la mayoría de las veces no lo es.
Kaleb Brasee
@KaptajnKold: ¿Estás hablando desde tu experiencia? Me encantaría escuchar algunos comentarios de alguien que realmente intentó mejorar sus habilidades a través de CodeKata y falló.
dzieciou
2
@dzieciou: Tengo experiencia en artes marciales kata practicando Karate durante varios años. Y aunque creo que hay algunos aspectos útiles de la lucha que se pueden aprender del kata, también creo que, en última instancia, no es una forma muy eficiente de entrenar. Debes entrenar mientras luchas como dicen. Eso es si tu propósito es convertirte en un mejor luchador. Algunas personas consideran que practicar kata es una búsqueda alegre en sí misma. No hay nada de malo en eso. Finalmente, algunos de ellos se vuelven muy buenos. En kata
KaptajnKold
20

El código kata solo lleva tiempo.

Siendo desarrollador y padre a tiempo completo, no quiero que la informática sea un pasatiempo.

Y no me imagino que mi jefe me pagaría por desarrollar aplicaciones no relacionadas con mi proyecto actual.

Mouviciel
fuente
10
¿Hay algún tipo de aprendizaje que no lleve tiempo? A menos que tenga la suerte de trabajar en proyectos nuevos cada vez.
Den
38
Si no pasa al menos una pequeña cantidad de su tiempo libre para mejorar sus habilidades de programación de manera regular, su carrera profesional está en gran peligro.
Ladislav Mrnka
77
+1 a esto. Si bien amo la programación, y que puedo ganar dinero en algo que amo hacer, no veo el punto de hacer MÁS programación fuera del trabajo. Tengo muchos otros pasatiempos (DJ, producción de música, levantamiento de pesas, dibujo y baile callejero, por ejemplo) que no veo el punto de pasar más horas en algo que ya hago 40 horas / semana.
Andreas Johansson
77
@mouviciel: Y ese es exactamente el problema: su jefe está dispuesto a pagar por su desarrollo profesional, si es necesario en el proyecto, pero usted debería estar dispuesto a mejorar sus habilidades no relacionadas con su proyecto actual, tal vez no relacionado con su actual plataforma en absoluto. Eso es lo que construye su carrera / seguridad social.
Ladislav Mrnka
66
@LadislavMrnka - Estoy de acuerdo contigo. Sin embargo, Code kata no es la respuesta a ese problema.
Mouviciel
13

Como boxeador, tendría que estar en desacuerdo con el principio detrás del kata. Es demasiado rígido para ser realmente útil. En el ring, debes comprender cómo aplicar los principios que has aprendido en un entorno de flujo libre.

Esto no quiere decir que no se deba aprender y mejorar la técnica. Practicar en las bolsas te permite trabajar usando un golpe y sentir cómo lo lanzas, lo mismo que un kata. Pero no es tan rígido. Está practicando muchas cosas al mismo tiempo, moviéndose alrededor de la bolsa, lanzando desde una plataforma estable, apuntando, respirando, la lista continúa.

Lo más importante es que todo se aprende de la forma en que realmente se utilizará. Si puede escribir el bucle más bello de todos los tiempos, pero no puede entender cómo encajarlo en un programa, ¿de qué sirve?

Yo diría que una mejor cosa si quieres practicar sería crear herramientas para ti mismo o trabajar en las herramientas que utilizas. Requiere ejercitar todas sus habilidades y al final puede tener algo útil.

Spencer Rathbun
fuente
en el clavo. fwiw, también soy boxeador / programador :).
Paul Sanwald
1
Los katas de código no se tratan de repetición rígida; se trata más de trabajar para resolver un problema y luego de mejorar su solución hasta que esté satisfecho. De Kata One: "El objetivo de este kata es practicar un estilo más flexible de modelado experimental. Busque tantas formas diferentes de manejar los problemas como sea posible. Tenga en cuenta las diversas compensaciones de cada uno. ¿Qué técnicas se utilizan mejor para explorar estos modelos? ¿grabarlos? ¿Cómo puede validar que un modelo sea razonable? "
Mike Partridge
44
Estoy de acuerdo en que el término 'kata' es imperfecto, pero no pierda de vista su punto debido al nombre. Además, no todos son problemas verbales; de Kata Two: "Implemente una rutina de búsqueda binaria (utilizando la especificación a continuación) en el idioma y la técnica que elija. Mañana, implemente nuevamente, utilizando una técnica totalmente diferente. Haga lo mismo al día siguiente, hasta que tenga cinco totalmente únicos implementaciones de un corte binario (por ejemplo, una solución podría ser el enfoque iterativo tradicional, uno podría ser recursivo, uno podría usar un estilo funcional pasando segmentos de matriz, y así sucesivamente) ".
Mike Partridge
3
@MikePartridge Eso ejemplifica mi punto. Un kata implicaría un método de búsqueda binaria que mejora cada día, digamos con menos líneas o menos tiempo para escribirlo desde cero. Cómo se describe un concepto es importante para definirlo. Podría haberlo llamado programación de práctica, que es de lo que tratan los artículos, sin traer equipaje incorrecto. El autor tiene la responsabilidad de elegir palabras y conceptos que definan correctamente su idea, no quejarse de que su audiencia está sacando asociaciones incorrectas debido a su elección de metáfora.
Spencer Rathbun
3
@MikePartridge En mi caso, creo que todos los programadores están aprendiendo / mejorando, o deberían estarlo, todo el tiempo. Por lo tanto, el código kata es una técnica para ayudar a lograr este objetivo, y mi respuesta fue que la técnica, como lo vi, no valía la pena. Estoy completamente de acuerdo con el objetivo, pero esa no era la cuestión.
Spencer Rathbun
11

Desde mi perspectiva, el principal inconveniente es que sería terriblemente aburrido. También los programadores parecen prosperar en el desarrollo de software que hace algo útil o genial. El enfoque del código kata parece ser lo opuesto a eso.

Antonio2011a
fuente
2
Los katas te enseñan cosas nuevas. ¿Cómo puede ser lo contrario de lo que los programadores pretenden hacer? También está resolviendo un rompecabezas, no es algo que la mayoría de los buenos programadores percibiría como "aburrido". De hecho, esto está en el corazón mismo de la piratería.
Konrad Rudolph
44
@KonradRudolph ¿Pensé que la repetición era el corazón de los katas? Entonces resolvería un problema una vez (quizás nuevo y emocionante) pero luego continuaría resolviendo el mismo problema una y otra vez. Apenas he mirado a Katas para poder estar equivocado.
Kevin D
@Kevin Estoy de acuerdo en que esto suena estúpido (a menos que intentes específicamente encontrar diferentes formas de resolver el problema). Nunca he hecho "katas" como tal, solo rompecabezas genéricos de programación.
Konrad Rudolph
¿Cómo es hacer lo mismo una y otra vez "enseñarte cosas nuevas"?
Está claro en su respuesta que no leyó el enlace proporcionado en la pregunta.
Mike Partridge
8

Kata significa exactamente lo contrario de lo que deberías esforzarte.

Un ejercicio que consiste en una secuencia de los movimientos específicos de un arte marcial, utilizado en el entrenamiento y diseñado para mostrar habilidad en la técnica.

El término Kata (Origen: 1950–55; <Japonés: forma, patrón) como se usa en las artes marciales, y su pregunta es sobre la memorización de memoria de la memoria muscular como la escritura táctil .

En el Karate Kid original, encerar los autos, lijar los pisos, pintar la cerca , todos estos fueron Katas que se enseñaron, completamente fuera de contexto y en este caso sin explicación solo para proporcionar memoria muscular. No fue hasta que un sensei entró y le dio el contexto a estas actividades huecas que significaron algo.

Creo que lo mismo se aplica aquí, sin un mentor para poner las cosas en contexto volver a hacer la resolución de problemas mal en varios idiomas no es mejor que uno solo es. Sin el mentor que le diga dónde mejorar, son una pérdida de tiempo.

Es exactamente lo opuesto a la resolución creativa de problemas al aprender nuevas variaciones de expresiones idiomáticas y semánticas de un lenguaje o plataforma.

Si quieres poder escribir lo System.out.println()más fácilmente posible, entonces practicar eso sería un Kata.

Si desea mejorar una solución a un problema en una implementación diferente , reducir los requisitos de tiempo y / o espacio o aplicar principios más idiomáticos, eso no es algo con lo que Kata lo ayudará.

Ya existe un término industrial aceptado para volver a implementar lo mismo una y otra vez después de que ya se esfuerza por lograr pequeñas mejoras incrementales y beneficios cuestionables de la perfección, ¡se llama Gold Plating !

Los términos que deberían haber utilizado son Refactorización cuando se aplican al mismo idioma / tiempo de ejecución / plataforma. Y portabilidad al mover un programa de trabajo a un idioma / tiempo de ejecución / plataforma diferente. Probablemente, Kata fue elegida erróneamente porque suena inconformista, genial y mística sin comprender completamente la semántica.

Resolver diferentes problemas difíciles con poca planificación, experiencia u orientación es lo que la mayoría de los desarrolladores, especialmente los desarrolladores junior, tienen que hacer todos los días.

Solo los académicos pueden hacer el mismo ejercicio una y otra vez solo para perfeccionar una solución específica. La habilidad de tener una carrera exitosa como desarrollador está en la adaptación , no en la repetición.

¿Quién dice que no hay personas inteligentes que no necesiten estudiar después del trabajo y puedan aprender todo lo que necesitan saber y, a veces, más en sus 8 horas en el trabajo?


fuente
¿Qué sucede si lo que está practicando es rediseñar y mejorar el diseño, repitiendo el proceso de diseño, no podría aplicarse el término? ¿Se te ocurre uno mejor?
Bill K
el término para rediseñar y mejorar un sistema existente es refactorización (la refactorización de código es "técnica disciplinada para reestructurar un cuerpo de código existente, alterando su estructura interna sin cambiar su comportamiento externo"). Escogieron a Kata porque suena genial y místico, sin entender la semántica.
El término refactorización es un término muy diferente de practicar para ser bueno en refactorizar. Cualquiera puede refactorizar el código, lo que no implica de ninguna manera que lo hagan bien o que se les practique reconocer buenas oportunidades de refactorización. Aunque "Practicar la refactorización" es un término descendente para ello, no transmite la dedicación que Kata hace, así que creo que Kata puede ser una opción ligeramente mejor, aunque estoy abierto a la teoría de que todavía hay una frase mejor.
Bill K
1
En realidad, Gold Platting se refiere a "... características adicionales o más pulidas". Lo que describe parece más parecido a la optimización prematura, aunque después del hecho.
Joshua Drake
5

Estoy de acuerdo en que la metáfora "kata" puede no ser la mejor. Un kata en karate se realiza con el propósito de practicar un movimiento específico y discreto hasta que se pueda realizar de manera impecable, nítida y automática. Esto no se traduce bien en una actividad en la que se requiera pensamiento crítico y creatividad. (Se traduciría mejor a, digamos, escribir).

Dicho esto, la falla del nombre no es una falla de la actividad. ¿Qué posible inconveniente podría haber para practicar algo en lo que alguien quiere mejorar? Supongo que se podría decir que el tiempo dedicado a hacerlo es un inconveniente, desde una perspectiva de costo de oportunidad, pero en realidad, es una inversión. Por lo tanto, el tiempo dedicado a practicar el oficio de desarrollo de software es para los desarrolladores de software, ya que el dinero gastado en acciones o bonos es para un ahorrador / inversor a largo plazo. No es un 'inconveniente', es una apuesta de mesa.

Erik Dietrich
fuente
3

Mejoras al intentar cosas que son difíciles y que están fuera del alcance de tus habilidades; desafiando a ti mismo. Hacer el mismo "código kata" una y otra vez, como una forma de artes marciales, no hace eso. Creo que estanca tus habilidades en lugar de ayudarte a impulsar tus habilidades hacia adelante.

Tiene su uso como método de práctica la primera vez, pero es limitado. Le digo a la gente que use el proyecto Euler en su lugar. Más problemas y más desafíos.

jmq
fuente
Escribir el mismo programa una y otra vez puede ser útil e interesante, por ejemplo, si lo hace usando un algoritmo diferente y / o en un idioma diferente cada vez. Pero probablemente no es un kata.
9000
2
Lea el enlace provisto en la pregunta; la idea no es una repetición sin sentido como parece suponer por el nombre.
Mike Partridge
@ 9000 En realidad, así es exactamente como entiendo Code Katas. A menudo se usa al aprender un nuevo idioma o al intentar un nuevo enfoque para un problema ya resuelto.
Joshua Drake
3

Para mí, el principal inconveniente de la técnica tal como la veo es su uso subóptimo de su tiempo.

El valor de aprendizaje de este ejercicio también es cuestionable: cuando haces algo más de lo necesario para mejorar, los comentarios de expertos son esenciales. Sin comentarios de alta calidad, también aprenderá algo, pero existe la posibilidad de aprender algo muy bien.

No me malinterpretes, practicar sigue siendo la única forma de ser bueno en la programación, y el kata es definitivamente una forma de práctica. Pero también lo es resolver problemas de competencia de codificación, escribir sus propios "proyectos divertidos", aprender nuevos lenguajes de programación, etc. En última instancia, debe elegir la técnica con la que se sienta más cómodo y asegurarse de tener una guía clara en el camino.

dasblinkenlight
fuente
¿Cómo encontraste la guía? Estoy luchando con el mismo problema.
CodeYogi
1

Creo que sin alguna forma de Kata nunca serás un gran programador. Kata es práctica, eso es literalmente lo que significa. Tome esto como un ejemplo: un atleta dice "Solo apareceré y correré el tablero de 100 metros, práctica de tornillo". ¿Suena eso como una estrategia ganadora? ¿Se hace alguna vez de esta manera?

Sugiero que la gente lea " The Clean Coder " del tío Bob , profundiza en este (y otros) temas de profesionalismo en el campo de la programación.

Ah, y los argumentos presentados de que no puedes hacer Kata y criar una familia son simplemente excusas. Hablando por experiencia: los niños se van a dormir en algún momento ...

ThaDon
fuente
3
codificación! = correr 100 metros de carrera, a menos que esos 100 metros atraviesen un campo de minas muy boscoso un día y un arrozal lleno de minas terrestres al día siguiente y un pantano lleno de víboras venenosas al día siguiente mientras están bajo fuego de francotiradores, vea el patrón ... Kata es el término incorrecto semánticamente .
2
-1 La capacitación puede realizarse en el trabajo, incluso en tiempo remunerado (no estoy seguro de por qué las personas parecen olvidar esto). No todo es trabajo puro o aprendizaje puro.
joshin4colours
@JarrodRoberson, el escenario que acabas de representar es lo que un soldado hace a diario. Entonces elegiste una analogía bastante mala. Francamente, debería estar feliz por las personas que hacen su trabajo de 9-5 y luego se van a casa y dejan de aprender, ya que me da una ventaja competitiva.
ThaDon
3
Una vez se le preguntó a Martin Fowler sobre gastar dinero en capacitar a sus empleados "¿No teme que si los capacita, renuncien?" , y su respuesta fue "¡No, me temo que si no los entreno se quedarán!" . No todos los empleadores ven la capacitación como un gasto, ¡los buenos la ven como una inversión!
Resolver diferentes problemas difíciles con poca planificación, experiencia u orientación es lo que la mayoría de los desarrolladores, especialmente los desarrolladores junior, tienen que hacer todos los días. Creo que es una analogía bastante precisa. Solo los académicos pueden hacer el mismo ejercicio una y otra vez solo para perfeccionar una solución específica. La habilidad de tener una carrera exitosa como desarrollador está en la adaptación , no en la repetición. Quién dice que no hay personas más inteligentes que no necesiten estudiar después del trabajo y puedan aprender todo lo que necesiten y más en sus 8 horas.
1

Hacer solo katas, en un contexto de artes marciales, es inútil. Como se dijo antes, las katas son coreografías de movimientos que te enseñan la forma. Conoces los movimientos pero no sabes cómo aplicarlos. No sabes en qué situaciones son útiles. Si realmente quieres hacer algo útil con ellos, necesitas la (s) aplicación (es), que es el Bunkai .

En un contexto de software, el código kata sería el algoritmo, la herramienta, el patrón de diseño o cualquier otra tecnología. Saber que es bueno, pero debes aplicarlo para entenderlo. Necesitas usarlo en diferentes contextos para dominarlo realmente. El Bunkai sería una situación concreta donde ese kata o parte de kata es útil.

No veo nada malo con esa metodología, así es como se domina algo: aprender algo, practicarlo, agregar un detalle, practicar, agregar otro detalle, practicar, etc.

plmaheu
fuente
-1

La programación es un arte, como la pintura o la música. Cuando alguien se convierte en músico o artista por dinero, puede decir que no hay inspiración, la actuación realmente no vale su tiempo. Si te gusta el arte, nada puede impedirte practicarlo y refinarlo constantemente: todos los días refinamos una sola técnica, notando los matices que la mayoría de la gente nunca verá.

Siempre hay espacio para las personas felices de ser músicos de bar y pintores de casa, pero son una clase de talento completamente diferente. Supongo que la mayoría de los pintores de casas se reirían de la idea de practicar, pero apuesto a que un pintor que investigó y practicó técnicas, esencialmente reconociendo su trabajo como arte, haría un trabajo notablemente mejor, incluso en algo tan mundano como pintar su casa. .

Algunas personas reconocerán el valor de la práctica que algunos no acostumbrarán. Eso por sí solo debería ser valioso si está en condiciones de evaluar y está buscando personas que puedan hacer arte (código simple, simple y comprensible) y no solo una solución.

PD. No me estoy llamando increíblemente artístico ni nada: no hago Kata en problemas abstractos, pero reconozco el valor y trato de refactorizar un poco mi código de producción.

Bill K
fuente
los músicos excesivamente entrenados en particular pueden estar ocupados negativamente por la perfección teórica, esto es extremadamente peligroso para una carrera en el desarrollo de software. La música tiene un elemento de expresión , el software de programación no tiene esto. Se podría argumentar que los productos de Apple tienen esta expresión, pero esa es la expresión de diseño , el código nunca se ve ni se percibe directamente. La música y el arte son malas analogías para el desarrollo de software. Y muestra un marcado prejuicio contra los trabajadores manuales porque asume que no se enorgullecen de su trabajo ni ven valor en la calidad.
No mezcles el entrenamiento con la práctica. Demasiado entrenado es muy diferente de lo que se practica demasiado, y si no cree que el nivel de expresión en su código se vea en los tiempos de entrega y la estabilidad del código, realmente no sé si tenemos una base común para la discusión.
Bill K
No importa lo que piense, sé que la mayoría de los clientes no reconocerán ni se preocuparán por el código cuidadosamente diseñado y lo elegante que está diseñado siempre que la aplicación funcione la mayor parte del tiempo. De la misma manera que la mayoría de la población nunca se ha preocupado por la calidad de sonido y video de VHS y cintas de video o cassette de Internet altamente comprimidas y ahora mp3 altamente comprimidos que eliminan todos esos matices, sin ninguna queja. Demasiado entrenado es peor que excesivamente practicado, demasiado entrenado hace que uno ignore "lo suficientemente bueno" y miserable en la industria del software.
La programación es un oficio, no un arte. Hay niveles de artesanía y estética para ambos, pero el arte no es vocacional en la naturaleza, el desarrollo de software es vocacional. Más personas ganan más dinero escribiendo software que artistas por mucho. El software no es subjetivo, y no existe únicamente por su propia existencia, las pinturas y la música existen para complacer al creador la mayoría de las veces, como su definición de ventas superiores implica como una diferenciación. Como alguien que fue a la universidad de arte, puedo decirte que la programación es un oficio profesional y nada que ver con la creación de una obra de arte.
Si no cree que el software bien hecho se entregue más rápido, menos costoso y simplemente mejor que el software hecho por artesanos, no lo ha visto bien. No es muy improbable, cuántas personas han visto a un artista maestro, músico o jugado con / contra un jugador deportivo profesional; simplemente no son tan comunes, y en nuestra industria MUCHO más difícil de reconocer, pero la diferencia en el talento es la misma como son los resultados. Un artista puede superar a 5 artesanos en velocidad y calidad, pero pocos tienen la suerte de haberlo visto y no creen que exista.
Bill K