Le code kata est un concept qui propose de perfectionner les compétences du programmeur en faisant de petits problèmes plusieurs fois en essayant d'améliorer le code à chaque itération. Le nom vient d'une analogie avec le kata d'art martial où les formes (alias kata) sont des pratiques répétées conduisant à des améliorations.
De la réaction à ma dernière question sur le sujet, j'aimerais savoir quels sont les inconvénients de cette approche?
Réponses:
En principe, je ne vois pas d'inconvénients dans le code kata. Vous essayez d'accomplir la même tâche plusieurs fois, avec des approches et des langages différents. Mais
la source
Je pense que la programmation du kata, comme celle des arts martiaux, concerne principalement la forme plutôt que la fonction. Cela peut vous apprendre à écrire du code élégant, mais cela ne vous apprendra pas à résoudre les problèmes pour lesquels vous écrivez le code. Je pense qu'une meilleure façon de s'améliorer en tant que programmeur est de résoudre des énigmes qui nécessitent une résolution de problème réel, et de travailler sur des projets plus vastes qui vous apprendront la valeur d'un code bien factorisé d'une manière que le code kata ne pourra jamais vous apprendre.
En passant, je pense que les termes tels que «code kata» et «savoir-faire logiciel» visent plus à romancer notre métier qu’à décrire quelque chose de nouveau ou d’utile.
la source
Le code kata prend juste du temps.
En tant que développeur et père à temps plein, je ne veux pas faire de l’informatique un loisir.
Et je ne pense pas que mon patron me paierait pour développer des applications sans lien avec mon projet actuel.
la source
En tant que boxeur, je devrais être en désaccord avec le principe du kata. C'est trop rigide pour être réellement utile. Sur le ring, vous devez comprendre comment appliquer les principes que vous avez appris dans un environnement fluide.
Cela ne veut pas dire que l'apprentissage et l'amélioration de la technique ne devraient pas être faits. Pratiquer sur les sacs vous permet de travailler avec un coup de poing et de sentir comment vous le lancez, comme un kata. Mais ce n'est pas aussi rigide. Vous pratiquez beaucoup de choses en même temps, bougez dans le sac, lancez depuis une plate-forme stable, visez, respirez, la liste est longue.
Plus important encore, tout est appris ensemble de la manière dont il sera réellement utilisé. Si vous pouvez écrire la plus belle boucle de tous les temps, mais que vous ne comprenez pas comment l'intégrer dans un programme, à quoi sert-il?
Je dirais qu'une meilleure chose à faire si vous voulez vous entraîner serait de vous construire des outils, ou de travailler sur des outils que vous utilisez. Cela nécessite d’exercer toutes vos compétences et vous aurez peut-être quelque chose d’utile.
la source
De mon point de vue, le principal inconvénient est que ce serait terriblement ennuyeux. De plus, les programmeurs semblent s’épanouir en développant des logiciels utiles ou intéressants. L’approche du code kata semble être l’opposé de cela.
la source
Kata signifie exactement le contraire de ce que vous devriez rechercher.
Le terme Kata (origine: 1950-1955; <japonais: forme, motif) utilisé dans les arts martiaux, et votre question concernent la mémorisation par cœur de la mémoire musculaire, comme la dactylographie au toucher .
Dans le Karaté Kid original, cirer les voitures, poncer les sols, peindre la clôture, c’étaient tous des Katas enseignés, complètement hors contexte et, dans ce cas, sans explication, uniquement pour fournir de la mémoire musculaire. Ce n'est que lorsqu'un sensei est entré et a donné à ces activités creuses un contexte qu'elles ne voulaient rien dire.
Je pense que la même chose s’applique ici, sans un mentor pour mettre les choses en contexte, refaire le problème en résolvant le problème dans plusieurs langues n’est pas mieux qu’un seul. Sans le mentor pour vous dire où améliorer, c'est une perte de temps.
C’est exactement le contraire de la résolution créative de problèmes en apprenant de nouvelles variations d’idiomes et de sémantique d’un langage ou d’une plate-forme.
Si vous voulez être capable de taper le
System.out.println()
plus facilement possible, pratiquez alors un Kata.Si vous souhaitez améliorer une solution à un problème dans une implémentation différente , réduire les contraintes de temps et / ou d'espace ou appliquer des principes plus idiomatiques, ce n'est pas quelque chose que Kata vous aidera.
Il existe déjà un terme industriel accepté pour ré-implémenter la même chose encore et encore après que cela fonctionne déjà, en essayant d'obtenir de petites améliorations incrémentielles et des avantages discutables de perfection, ce s'appelle Gold Plating !
Les termes qu’ils auraient dû utiliser sont le refactoring lorsqu’ils sont appliqués à la même langue / exécution / plate-forme. Et le portage lors du déplacement d'un programme de travail vers une autre langue / exécution / plate-forme. Kata a probablement été choisi à tort parce que ça a l'air hipster, cool et mystique sans comprendre complètement la sémantique.
Résoudre différents problèmes difficiles avec peu de planification, d'expérience et de conseils est ce que la plupart des développeurs, en particulier les développeurs débutants, doivent faire tous les jours.
Seuls les universitaires ont la possibilité de faire le même exercice encore et encore juste pour affiner une solution spécifique. La compétence pour réussir une carrière de développeur réside dans l’ adaptation et non dans la répétition.
Qui a dit qu'il n'y a pas de gens intelligents qui n'ont pas besoin d'étudier après le travail et qui peuvent apprendre tout le besoin de savoir et parfois plus en 8 heures de travail?
la source
Je conviens que la métaphore "kata" n'est peut-être pas la meilleure. Un kata dans le karaté est exécuté dans le but de pratiquer un mouvement spécifique et discret jusqu'à ce qu'il puisse être exécuté de manière parfaite, nette et automatique. Cela ne se traduit pas bien dans une activité où la pensée critique et la créativité sont nécessaires. (Cela se traduirait mieux en tapant, par exemple).
Cela dit, la défaillance du nom n'est pas une défaillance de l'activité. Quel inconvénient possible pourrait-il y avoir à pratiquer quelque chose pour lequel quelqu'un veut aller mieux? Je suppose que l’on pourrait dire que le temps passé à le faire est un inconvénient, du point de vue des coûts d’opportunité, mais c’est vraiment un investissement. Ainsi, le temps passé à pratiquer le développement de logiciels est réservé aux développeurs de logiciels, car l'argent dépensé en actions ou en obligations est destiné à un épargnant / investisseur à long terme. Ce n'est pas un «inconvénient», c'est un enjeu de table.
la source
Tu t'améliores en essayant des choses difficiles et hors de portée de tes capacités; vous mettre au défi. Faire le même "code kata" à plusieurs reprises, comme une forme d'arts martiaux, ne fait pas cela. Je pense que cela stagne vos capacités au lieu d'aider à faire progresser vos compétences.
Il est utilisé comme méthode de pratique la première fois, mais il est limité. Je dis aux gens d'utiliser le projet Euler à la place. Plus de problèmes et plus de défis.
la source
Pour moi, le principal inconvénient de la technique, à mon avis, est son utilisation sous-optimale de votre temps.
La valeur d'apprentissage de cet exercice est également discutable: lorsque vous faites quelque chose de plus pour vous améliorer, le retour d'expert est essentiel. Sans retour d'informations de haute qualité, vous apprendrez aussi quelque chose, mais il est possible que vous appreniez très mal une mauvaise chose.
Ne vous méprenez pas, la pratique reste le seul moyen de devenir bon en programmation et le kata est très certainement une forme de pratique. Mais il en va de même pour résoudre les problèmes de concurrence de codage, écrire vos propres "projets amusants", apprendre de nouveaux langages de programmation, etc. En fin de compte, vous devez choisir la technique avec laquelle vous êtes le plus à l'aise et vous assurer de disposer de conseils clairs tout au long du processus.
la source
Je crois que sans Kata, vous ne serez jamais un excellent codeur. Kata est pratique, c'est littéralement ce que cela signifie. Prenons ceci à titre d'exemple: un athlète dit: "Je vais simplement me présenter et courir le 100 mètres, entraînement de vis". Est-ce que cela ressemble à une stratégie gagnante? Est-ce que c'est déjà fait de cette façon?
Je suggère aux gens de lire " The Clean Coder " de Oncle Bob , il approfondit ce sujet (et d’autres) sur le professionnalisme dans le domaine de la programmation.
Oh, et les arguments avancés selon lesquels vous ne pouvez pas faire du Kata et élever une famille ne sont que des excuses. Parlant d'expérience: les enfants vont dormir à un moment donné ...
la source
Ne faire que des katas, dans un contexte d'arts martiaux, est inutile. Comme dit précédemment, les katas sont une chorégraphie de mouvements qui vous apprend la forme. Vous connaissez les mouvements mais vous ne savez pas comment les appliquer. Vous ne savez pas dans quelles situations ils sont utiles. Si vous voulez vraiment faire quelque chose d'utile avec eux, vous avez besoin de la ou des applications, qui sont le Bunkai .
Dans un contexte logiciel, le code kata serait l'algorithme, l'outil, le modèle de conception ou toute autre technologie. Savoir que c'est bon, mais vous devez l'appliquer pour le comprendre. Vous devez l'utiliser dans différents contextes pour vraiment le maîtriser. Le Bunkai serait une situation concrète où ce kata ou une partie de kata est utile.
Je ne vois rien de mal à cette méthodologie, voici comment maîtriser quelque chose: apprendre quelque chose, le pratiquer, ajouter un détail, pratiquer, ajouter un autre détail, pratiquer, etc.
la source
La programmation est un art - comme la peinture ou la musique. Quand on devient musicien ou artiste pour de l'argent, on peut le dire, il n'y a pas d'inspiration, la performance ne vaut pas vraiment votre temps. Si vous êtes amateur d'art, rien ne peut vous empêcher de le pratiquer et de le perfectionner constamment - chaque jour, perfectionnez une technique, en remarquant les nuances que la plupart des gens ne verront jamais.
Il y a toujours de la place pour des personnes heureuses d’être des musiciens de bar et des peintres en bâtiment, mais il s’agit d’une catégorie de talents complètement différente. Je suppose que la plupart des peintres en bâtiment riraient à l'idée de pratiquer, mais je parie qu'un peintre qui fait de la recherche et pratique des techniques - en reconnaissant que leur travail d'artiste ferait un travail remarquablement meilleur, même sur quelque chose d'aussi banal que de peindre votre maison .
Certaines personnes reconnaîtront la valeur de la pratique, d’autres. Cela seul devrait être utile si vous êtes en mesure d’évaluer et que vous recherchez des personnes capables de créer de l’art (code simplifié, simple et compréhensible) et pas seulement une solution.
ps. Je ne me considère pas comme un artiste artistique ou quoi que ce soit - je ne fais pas de kata sur des problèmes abstraits, mais je reconnais la valeur et j'essaie de refactoriser mon code de production un peu.
la source