Inconvenientes de código kata

41

Code kata es un concepto que propone perfeccionar las habilidades 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 kata de artes marciales donde las formas (también conocidas como kata) son prácticas que se realizan una y otra vez y conducen a mejoras.

De la reacción llegué a mi última pregunta sobre el tema, deseo saber cuáles son los inconvenientes de este enfoque.

    
pregunta Sardathrion 06.03.2012 - 09:43

12 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. Generalmente se espera que usted sea competente o razonablemente productivo. No estoy diciendo que no sería útil (mejor dedicar un tiempo a mejorar las habilidades de un nuevo empleado que a pagar por el código no tan bueno que escribirá en el futuro), pero es bastante difícil, no obstante.
  2. debes actuar intentar para mejorar en algún sentido. Escribir el mismo código de la misma manera mil veces no te hará mejorar (más bien te embotará). 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 usted debe estudiar.
respondido por el Francesco 06.03.2012 - 13:31
43

Creo que la programación de kata, como el kata de artes marciales, tiene que ver principalmente con la forma sobre la 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 los enigmas que requieren la resolución de problemas reales 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. p>

Aparte de eso, creo que términos como 'código kata' y 'artesanía de software' tienen más que ver con romantizar nuestra profesión que con describir algo novedoso o útil.

    
respondido por el KaptajnKold 06.03.2012 - 14:46
20

El código kata solo lleva tiempo.

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

Y no creo que mi jefe me pague para desarrollar aplicaciones no relacionadas con mi proyecto actual.

    
respondido por el mouviciel 06.03.2012 - 10:24
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, debe comprender cómo aplicar los principios que ha 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 le permite trabajar con un puñetazo y sentir cómo lo lanza, al igual 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, y la lista continúa.

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

Yo diría que una mejor cosa que hacer si quieres practicar sería construirte herramientas o trabajar en las herramientas que usas. Requiere ejercitar todas tus habilidades y al final puedes tener algo útil.

    
respondido por el Spencer Rathbun 06.03.2012 - 15:42
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 contrario de eso.

    
respondido por el Antonio2011a 06.03.2012 - 10:43
8

Kata significa el exactamente opuesto de lo que deberías esforzarte por alcanzar.

  

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 memorización de memoria de músculo como tecleo táctil .

En el Karate Kid original, encerando los autos, lijando los pisos, pintando la cerca , estos fueron todos los 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 dio estas actividades huecas contexto que no significaron nada.

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. Sin el mentor para decirle dónde mejorar, son una pérdida de tiempo.

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

Si quieres poder escribir System.out.println() tan fácilmente como sea 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 más principios idiomáticos, eso no es no algo que Kata te ayudará con.

Ya existe un término aceptado en la industria para volver a implementar lo mismo una y otra vez después de que ya funciona y 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 Porting al mover un programa en funcionamiento a un idioma / tiempo de ejecución / plataforma diferente. Kata probablemente fue elegido erróneamente porque suena inconformista, genial y místico sin entender 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 por perfeccionar una solución específica. La habilidad para tener una carrera exitosa como desarrollador está en adaptación , no en repetición.

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

    
respondido por el Jarrod Roberson 06.03.2012 - 18:05
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, crujiente y automática. Esto no se traduce bien en una actividad donde se requiere el pensamiento crítico y la 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 al practicar algo en lo que alguien quiere mejorar? Supongo que se podría decir que el tiempo empleado en hacerlo es un inconveniente, desde la perspectiva del costo de oportunidad, pero en realidad es una inversión. Por lo tanto, el tiempo dedicado a la práctica del desarrollo de software es para los desarrolladores de software, ya que el dinero gastado en acciones o bonos es para un ahorrador / inversionista a largo plazo. No es un 'inconveniente', es una mesa de juego.

    
respondido por el Erik Dietrich 06.03.2012 - 17:46
3

Para mejorar, prueba cosas que son difíciles y que están fuera del alcance de tus habilidades; desafiándote a ti mismo Hacer el mismo "código kata" una y otra vez, como una forma de artes marciales, no hace eso. Creo que se estanca tus habilidades en lugar de ayudar 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 desafiantes.

    
respondido por el jmq 06.03.2012 - 18:03
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 para mejorar, es esencial la opinión de los expertos. Sin comentarios de alta calidad, también aprenderás algo, pero existe la posibilidad de que aprendas algo muy bien muy bien.

No me malinterpretes, la práctica 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 los problemas de codificación de la competencia, 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 contar con una guía clara en el camino.

    
respondido por el dasblinkenlight 06.03.2012 - 20:11
1

Creo que sin algún tipo 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: "Me presentaré y correré el tablero de 100 metros, la práctica de los tornillos". ¿Eso suena como una estrategia ganadora? ¿Se ha hecho alguna vez de esta manera?

Sugiero a las personas que lean el tío Bob " The Clean Coder ", profundiza en este (y otros) temas de profesionalidad en el campo de la programación.

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

    
respondido por el ThaDon 06.03.2012 - 18:45
1

Hacer solo katas, en un contexto de arte marcial, es inútil. Como se dijo antes, los katas son una coreografía de movimientos que te enseña 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 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 necesitas aplicarlo para entenderlo. Necesitas usarlo en diferentes contextos para realmente dominarlo. El Bunkai sería una situación concreta en la que ese kata o parte del kata es útil.

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

    
respondido por el plmaheu 23.03.2012 - 20:05
-1

La programación es una pintura o música artística. Cuando alguien se convierte en músico o artista por dinero, se puede decir que no hay inspiración, la interpretación no vale la pena. Si te gusta el arte, nada puede impedirte practicar y refinarlo constantemente; todos los días refinando una técnica única, notando los matices que la mayoría de las personas nunca verán.

Siempre hay lugar para gente feliz como músicos de bares y pintores de casas, 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, reconociendo esencialmente su trabajo como un arte haría un trabajo notablemente mejor, incluso en algo tan mundano como pintar tu casa. .

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

ps. No me llamo asombrosamente artístico ni nada, no hago Kata en problemas abstractos, pero reconozco el valor y trato de refactorizar mi código de producción un poco.

    
respondido por el Bill K 06.03.2012 - 19:29

Lea otras preguntas en las etiquetas