Code-Kata ist ein Konzept, mit dem die Fähigkeiten des Programmierers verbessert werden sollen, indem häufig kleine Probleme gelöst werden, um den Code bei jeder Iteration zu verbessern. Der Name stammt von einer Analogie zur Kampfkunst-Kata, bei der Formen (auch bekannt als Kata) Praktiken sind, die immer wieder zu Verbesserungen führen.
Nach der Reaktion auf meine letzte Frage zum Thema möchte ich wissen, was die Nachteile dieses Ansatzes sind.
Antworten:
Im Prinzip sehe ich keine Nachteile in Code-Kata. Sie versuchen mehrmals, dieselbe Aufgabe mit unterschiedlichen Ansätzen und Sprachen zu lösen. Aber
quelle
Ich denke, beim Programmieren von Kata geht es wie bei Kampfsport-Kata hauptsächlich um Form über Funktion. Es lehrt Sie vielleicht, eleganten Code zu schreiben, aber es lehrt Sie nicht, die Probleme zu lösen, für die Sie den Code schreiben. Ich denke, ein besserer Weg, sich als Programmierer zu verbessern, besteht darin, Rätsel zu lösen, die eine tatsächliche Problemlösung erfordern, und an größeren Projekten zu arbeiten, die Ihnen den Wert von gut faktorisiertem Code auf eine Weise beibringen, die Code-Kata Ihnen niemals beibringen kann.
Abgesehen davon denke ich, dass Begriffe wie "Code-Kata" und "Software-Handwerkskunst" eher die Romantisierung unseres Berufs als die Beschreibung von Neuem oder Nützlichem bedeuten.
quelle
Code-Kata braucht nur Zeit.
Als Vollzeitentwickler und Vater möchte ich das Rechnen nicht zum Hobby machen.
Und ich kann mir nicht vorstellen, dass mein Chef mich dafür bezahlt, Anwendungen zu entwickeln, die nichts mit meinem aktuellen Projekt zu tun haben.
quelle
Als Boxer müsste ich dem Prinzip der Kata nicht zustimmen. Es ist zu starr, um wirklich nützlich zu sein. Im Ring muss man verstehen, wie man die Prinzipien, die man gelernt hat, in einer frei fließenden Umgebung anwendet.
Dies bedeutet nicht, dass das Erlernen und Verbessern der Technik nicht erfolgen sollte. Wenn Sie an den Taschen üben, können Sie einen Schlag ausführen und fühlen, wie Sie ihn werfen, genau wie bei einer Kata. Aber es ist nicht so starr. Sie üben viele Dinge gleichzeitig, bewegen sich in der Tasche, werfen von einer stabilen Plattform aus, zielen, atmen, die Liste geht weiter.
Am wichtigsten ist, dass alles so gelernt wird, wie es tatsächlich verwendet wird. Wenn Sie die schönste for-Schleife aller Zeiten schreiben können, aber nicht verstehen, wie sie in ein Programm passt, was bringt es dann?
Ich würde sagen, dass eine bessere Sache, wenn Sie üben möchten, darin besteht, sich Werkzeuge selbst zu bauen oder an Werkzeugen zu arbeiten, die Sie verwenden. Es erfordert die Ausübung all Ihrer Fähigkeiten und am Ende können Sie etwas Nützliches haben.
quelle
Aus meiner Sicht ist der Hauptnachteil, dass es entsetzlich langweilig wäre. Auch Programmierer scheinen davon zu leben, Software zu entwickeln, die etwas Nützliches oder Cooles leistet. Der Code-Kata-Ansatz scheint das Gegenteil davon zu sein.
quelle
Kata bedeutet das genaue Gegenteil von dem, wonach Sie streben sollten.
Der Begriff Kata (Ursprung: 1950–55; <Japanisch: Form, Muster), wie er in den Kampfkünsten verwendet wird, und Ihre Frage beziehen sich auf das Auswendiglernen des Muskelgedächtnisses wie das Tippen von Berührungen .
Im ursprünglichen Karate Kid waren das Wachsen der Autos, Schleifen der Böden, Bemalen des Zauns alles Katas, die unterrichtet wurden, völlig aus dem Zusammenhang gerissen und in diesem Fall ohne Erklärung, nur um Muskelgedächtnis zu schaffen. Erst als ein Sensei hereinkam und diesen hohlen Aktivitäten Kontext gab , bedeuteten sie etwas.
Ich denke, das Gleiche gilt hier, ohne einen Mentor, der die Dinge in einen Zusammenhang bringt, ist es nicht besser , die Fehlerbehebung in mehreren Sprachen zu wiederholen als in einer einzigen. Ohne den Mentor, der Ihnen sagt, wo Sie sich verbessern können, sind sie Zeitverschwendung.
Es ist das genaue Gegenteil von kreativem Lösen von Problemen durch Erlernen neuer Variationen von Redewendungen und Semantik einer Sprache oder Plattform.
Wenn Sie in der Lage sein möchten,
System.out.println()
so mühelos wie möglich zu tippen , dann wäre das Üben eine Kata.Wenn Sie eine Lösung für ein Problem in einer anderen Implementierung verbessern , den Zeit- und / oder Platzbedarf verringern oder idiomatischere Prinzipien anwenden möchten, hilft Ihnen Kata nicht weiter .
Es gibt bereits einen anerkannten Industriebegriff für die immer wieder erneute Implementierung derselben Sache. Nachdem bereits kleine inkrementelle Verbesserungen und fragwürdige Vorteile der Perfektion angestrebt wurden, wird dies als Vergoldung bezeichnet .
Die Begriffe, die sie hätten verwenden sollen, lauten Refactoring, wenn sie auf dieselbe Sprache / Laufzeit / Plattform angewendet wurden. Und Portierung beim Verschieben eines Arbeitsprogramms auf eine andere Sprache / Laufzeit / Plattform. Kata wurde wahrscheinlich fälschlicherweise ausgewählt, weil es hipster, cool und mystisch klingt, ohne die Semantik vollständig zu verstehen.
Verschiedene schwierige Probleme mit wenig Planung, Erfahrung oder Anleitung zu lösen, ist das, was die meisten Entwickler, insbesondere Junior-Entwickler, jeden Tag tun müssen.
Nur Akademiker dürfen die gleiche Übung immer wieder machen, nur um eine bestimmte Lösung zu finden. Die Fähigkeit, eine erfolgreiche Karriere als Entwickler zu haben, liegt in der Anpassung , nicht in der Wiederholung.
Wer sagt, dass es keine klugen Leute gibt, die nicht nach der Arbeit lernen müssen und in ihren 8 Stunden bei der Arbeit alles lernen können, was sie wissen müssen und manchmal auch mehr?
quelle
Ich bin damit einverstanden, dass die Metapher "Kata" möglicherweise nicht die beste ist. Eine Kata im Karate wird ausgeführt, um eine bestimmte, diskrete Bewegung zu üben, bis sie fehlerfrei, scharf und automatisch ausgeführt werden kann. Dies lässt sich nicht gut auf eine Aktivität übertragen, bei der kritisches Denken und Kreativität erforderlich sind. (Es wäre besser zu übersetzen, sagen wir, tippen).
Das heißt, das Versagen des Namens ist kein Versagen der Aktivität. Welchen möglichen Nachteil könnte es haben, etwas zu üben, bei dem jemand besser werden möchte? Ich nehme an, man könnte sagen, dass die dafür aufgewendete Zeit aus Sicht der Opportunitätskosten ein Nachteil ist, aber es ist wirklich eine Investition. Die Zeit, die für die Ausübung des Handwerks der Softwareentwicklung aufgewendet wird, ist für Softwareentwickler, da das Geld, das für Aktien oder Anleihen ausgegeben wird, für einen langfristigen Sparer / Investor bestimmt ist. Es ist kein "Nachteil" - es geht um Tischeinsätze.
quelle
Sie werden besser, wenn Sie Dinge ausprobieren, die schwierig und für Ihre Fähigkeiten unerreichbar sind. fordere dich selbst heraus. Dieselbe "Code-Kata" immer und immer wieder zu machen, wie bei einer Kampfkunstform, tut das nicht. Ich denke, es stagniert Ihre Fähigkeiten, anstatt zu helfen, Ihre Fähigkeiten voranzutreiben.
Es kann zum ersten Mal als Übungsmethode verwendet werden, ist aber begrenzt. Ich fordere die Leute auf, stattdessen das Projekt Euler zu verwenden. Mehr Probleme und mehr Herausforderungen.
quelle
Für mich ist der Hauptnachteil der Technik, wie ich sie sehe, die suboptimale Nutzung Ihrer Zeit.
Der Lernwert dieser Übung ist ebenfalls fraglich: Wenn Sie etwas über sich ergehen lassen, um sie zu verbessern, ist Expertenfeedback von entscheidender Bedeutung. Ohne qualitativ hochwertiges Feedback werden Sie auch etwas lernen, aber es besteht die Möglichkeit, dass Sie sehr gut etwas Falsches lernen.
Versteht mich nicht falsch, das Üben bleibt der einzige Weg, um im Programmieren gut zu werden, und Kata ist definitiv eine Form von Übung. Aber das Gleiche gilt für das Lösen von Wettbewerbsproblemen beim Programmieren, das Schreiben eigener "Spaßprojekte", das Erlernen neuer Programmiersprachen und so weiter. Letztendlich müssen Sie die Technik auswählen, mit der Sie sich am wohlsten fühlen, und sicherstellen, dass Sie klare Anweisungen auf dem Weg haben.
quelle
Ich glaube, ohne irgendeine Form von Kata wirst du niemals ein großartiger Kodierer sein. Kata ist Übung, das bedeutet es wörtlich. Nehmen Sie das als Beispiel: Ein Athlet sagt: "Ich werde nur auftauchen und das 100-Meter-Armaturenbrett laufen lassen, schrauben üben". Klingt das nach einer Gewinnstrategie? Wird es jemals so gemacht?
Ich schlage vor, dass die Leute Onkel Bobs " The Clean Coder " lesen , der sich eingehend mit diesem (und anderen) Thema der Professionalität im Bereich der Programmierung befasst.
Oh, und die Argumente, dass man kein Kata machen und keine Familie gründen kann, sind einfach Ausreden. Apropos aus Erfahrung: Kinder schlafen irgendwann ein ...
quelle
Es ist sinnlos, im Kampfkunstkontext nur Katas zu machen. Wie bereits erwähnt, sind Katas Choreographien von Bewegungen, die Ihnen die Form beibringen. Sie kennen die Bewegungen, wissen aber nicht, wie Sie sie anwenden sollen. Sie wissen nicht, in welchen Situationen sie nützlich sind. Wenn Sie wirklich etwas Nützliches mit ihnen tun möchten, benötigen Sie die Anwendung (en), die der Bunkai ist .
In einem Software-Kontext wäre die Code-Kata der Algorithmus, das Werkzeug, das Entwurfsmuster oder eine andere Technologie. Es ist gut zu wissen, aber Sie müssen es anwenden, um es zu verstehen. Sie müssen es in verschiedenen Kontexten verwenden, um es wirklich zu meistern. Der Bunkai wäre eine konkrete Situation, in der diese Kata oder ein Teil von Kata nützlich ist.
Ich sehe an dieser Methodik nichts Falsches, so wird alles gemeistert: etwas lernen, üben, ein Detail hinzufügen, üben, ein weiteres Detail hinzufügen, üben usw.
quelle
Programmieren ist eine Kunst wie Malen oder Musik. Wenn jemand Musiker oder Künstler wird, um Geld zu verdienen, gibt es keine Inspiration, die Aufführung ist Ihre Zeit nicht wirklich wert. Wenn Sie sich für Kunst interessieren, kann Sie nichts davon abhalten, sie zu üben und ständig weiterzuentwickeln - jeden Tag werden Sie eine einzelne Technik weiterentwickeln und dabei die Nuancen bemerken, die die meisten Menschen niemals sehen werden.
Es gibt immer Platz für Leute, die gerne Barmusiker und Anstreicher sind, aber sie sind eine ganz andere Klasse von Talenten. Ich nehme an, dass die meisten Hausmaler über die Idee des Übens lachen würden, aber ich wette, dass ein Maler, der geforscht und Techniken geübt hat - im Wesentlichen würde die Anerkennung seiner Arbeit als Kunst eine spürbar bessere Arbeit leisten, selbst auf etwas so Alltäglichem wie dem Malen Ihres Hauses .
Einige Leute werden den Wert der Praxis erkennen, andere nicht. Das allein sollte von Wert sein, wenn Sie in der Lage sind zu evaluieren und nach Menschen suchen, die Kunst machen können (schlanker, einfacher, verständlicher Code) und nicht nur eine Lösung.
ps. Ich nenne mich nicht wirklich künstlerisch oder so - ich mache keine Kata bei abstrakten Problemen, aber ich erkenne den Wert und versuche, meinen Produktionscode ein bisschen umzugestalten.
quelle