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.
Respuestas:
En principio, no veo inconvenientes en el código kata. Intenta realizar la misma tarea muchas veces, con diferentes enfoques y diferentes idiomas. Pero
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
Kata significa exactamente lo contrario de lo que deberías esforzarte.
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
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.
fuente
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.
fuente
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.
fuente
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 ...
fuente
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.
fuente
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.
fuente