Eine neue Art, Refactoring-Fähigkeiten zu lehren
Schüler lernen besser, indem sie Code mit Problemen erstellen, um ihre Refactoring-Fähigkeiten zu verbessern.
― 8 min Lesedauer
Inhaltsverzeichnis
Programmierprobleme lassen sich auf viele Arten lösen, aber die Qualität dieser Lösungen kann ganz unterschiedlich sein. Guter Code ist leicht zu lesen und zu pflegen, während schlechter Code Probleme haben kann, die die Arbeit damit erschweren. Wenn der Code nicht von guter Qualität ist, kann er Anzeichen zeigen, die man als 'Code Smells' bezeichnet. Das sind erkennbare Probleme, wie zum Beispiel, wenn der gleiche Code an verschiedenen Stellen wiederholt wird. Um diese Probleme zu beheben, können Programmierer Techniken namens Refactoring-Muster verwenden. Viele Informatikstudiengänge unterrichten die Studenten über Refactoring, oft anhand von Beispielen aus Code, den sie nicht selbst geschrieben haben. Das kann es für Anfänger schwierig machen, später ihren eigenen Code zu refaktorisieren.
In diesem Artikel schlagen wir eine neue Methode vor, um Refactoring zu lehren. Anstatt den Studenten Code zu geben, den sie nicht geschrieben haben, bitten wir sie, zuerst selbst Code zu erstellen, der Probleme aufweisen wird. Diese neue Methode hilft den Studenten, sich mit dem Code vertraut zu machen, den sie verbessern müssen. Indem sie Code mit Problemen schreiben, können sie lernen, wie man diese Probleme effektiver identifiziert und behebt. Unsere Studie mit 35 Studenten zeigt, dass dieser Ansatz ihnen mehr Vertrauen in ihre Refactoring-Fähigkeiten gibt und ihre Erfolgsquoten verbessert.
Code-Qualität und Code Smells
Wenn Programmierer Code schreiben, können sie viele Versionen erstellen, die dasselbe tun. Allerdings sind nicht alle Versionen gleich gut. Die Studenten lernen das in der Regel früh, wenn sie sehen, wie verschiedene Programmiermethoden die Leistung beeinflussen können, zum Beispiel bei der Verwendung von Rekursion im Vergleich zu Iteration. Aber Leistung ist nicht der einzige Faktor; die Qualität des Codes ist ebenfalls wichtig.
Code-Qualität bezieht sich darauf, wie gut der Code in Bezug auf Struktur und Organisation geschrieben ist. Hochwertiger Code ist einfach zu lesen, zu verstehen und zu warten. Guter Code hat normalerweise verwandte Teile zusammengefasst und ist so strukturiert, dass Änderungen in einem Teil keine unerwarteten Probleme in anderen verursachen. Wenn diese Standards nicht erfüllt werden, kann der Code Code Smells entwickeln, die Anzeichen potenzieller Probleme sind. Wenn zum Beispiel derselbe Code an mehreren Stellen gefunden wird, gilt das als schlechte Praxis.
Um die Code-Qualität zu verbessern und Code Smells zu beseitigen, wenden Programmierer Refactoring-Techniken an. Diese Techniken helfen dabei, besser strukturierten Code zu erstellen, der auf die gleiche Weise funktioniert, aber ohne die schlechten Anzeichen.
Traditionelle Lehrmethoden
In vielen Informatik-Kursen lernen die Studenten über Refactoring, nachdem sie bereits grundlegendes Programmieren gelernt haben. Die Lehrer führen oft Code Smells ein und zeigen dann, wie man sie mit Refactoring-Mustern behebt. In einer typischen Unterrichtseinheit sehen die Studenten Videos, in denen Dozenten verschiedene Code Smells erklären und wie man damit umgeht. Nach dem Ansehen der Videos bekommen die Studenten Code, den der Dozent erstellt hat, den sie refaktorisieren müssen.
Obwohl diese Methode ihre Vorteile hat, gibt es auch Herausforderungen. Für Anfänger ist es schwieriger, Änderungen zu verstehen, die sie vornehmen müssen, wenn sie mit Code arbeiten, den jemand anderes geschrieben hat. Das liegt daran, dass die Studenten möglicherweise mehr damit beschäftigt sind, den Code einer anderen Person zu verstehen, als zu lernen, wie sie Refactoring-Techniken auf ihre eigene Arbeit anwenden können. Infolgedessen fühlen sich die Studenten Jahre später, wenn sie an ihren eigenen Projekten arbeiten, möglicherweise unsicher, wie sie ihren Code verbessern können.
Der neue Ansatz zum Lehren von Refactoring
Wir schlagen einen anderen Ansatz vor, der den Lernprozess für die Studenten erleichtert. Unsere Methode basiert auf drei Kernideen:
Vertrautheit mit Code: Die Studenten lernen besser, wenn sie den Code selbst geschrieben haben. Indem sie den Code zuerst erstellen, verstehen sie seine Struktur und wo die Probleme liegen.
Integration in die Praxis: Refactoring sollte nicht als isolierte Aufgabe für den Code anderer behandelt werden. Stattdessen sollte es Teil ihrer regulären Programmierpraxis sein.
Lernen aus Fehlern: Es ist wichtig, die Studenten zu ermutigen, aus ihren Fehlern zu lernen. Indem sie Code mit bekannten Problemen erstellen, können die Studenten lernen, wie man diese Probleme in einem unterstützenden Umfeld identifiziert und behebt.
In unserer Studie haben wir Übungen entworfen, die garantierten, dass die Studenten Code mit Problemen erstellen. Nachdem sie ihren Code geschrieben hatten, lernten sie, wie man die Probleme erkennt und Refactoring-Techniken anwendet, um ihn zu verbessern.
Die Studie
Um diesen neuen Ansatz zu testen, führten wir ein Experiment mit 35 Studierenden durch. Die Studenten absolvierten zwei Gruppen von Refactoring-Übungen, eine mit der traditionellen Methode und die andere mit unserer 'fehlerbasierten' Methode. Wir wollten herausfinden, ob unsere Methode zu einer besseren Identifikation von Code Smells und einem effektiveren Refactoring führen würde.
Methodik
Die Studie beinhaltete zwei Gruppen von Code Smells. Gruppe 1 konzentrierte sich auf Lange Methode, Lange Parameterliste und Duplizierter Code. Gruppe 2 behandelte Datenklumpen, Grosse Klasse und Primitive Besessenheit. Wir haben für jede Gruppe eine Programmierübung erstellt, die darauf ausgelegt war, schlechten Code zu produzieren.
Zum Beispiel schrieben die Studenten in einer Übung eine Klasse für ein Sandwichgeschäft, die garantierte, dass sie ein Problem mit einer langen Parameterliste erzeugen würde. Jeder Student erhielt eine Vorlage mit bestimmten Plätzen, die sie ausfüllen sollten. So wurde sichergestellt, dass sie unabhängig von der Ausführung Code generierten, der bekannte Probleme hatte.
Sobald die Studenten ihren Code erstellt hatten, lernten sie die Probleme und wie man sie behebt. Wir massen, wie viele Code Smells sie identifizierten und erfolgreich refaktorisieren konnten, wobei wir beide Methoden berücksichtigten.
Ergebnisse
Die Ergebnisse der Studie zeigten signifikante Unterschiede zwischen den beiden Methoden. Studenten, die die fehlerbasierte Methode verwendeten, identifizierten im Durchschnitt 2,93 von 3 Code Smells. Im Gegensatz dazu identifizierten diejenigen, die die traditionelle Methode verwendeten, nur 1,9 Smells. Ebenso gelang es den Studenten, die die fehlerbasierte Methode verwendeten, im Durchschnitt 2,23 von 3 Code Smells erfolgreich zu refaktorisieren, während die traditionelle Methode nur 1 ergab.
Unsere Analyse bestätigte, dass der fehlerbasierte Ansatz sowohl die Identifikations- als auch die Refactoring-Erfolgsquoten verbesserte. Die Studenten fühlten, dass sie das Gelernte besser anwenden konnten, was zu einem grösseren Verständnis von Refactoring führte.
Vorliebe und Vertrauen
In der Umfrage nach der Studie äusserten die Studenten eine klare Vorliebe für die fehlerbasierte Methode. Von 35 Teilnehmern sprachen sich 34 dafür aus, wobei viele angaben, dass sie sie effektiver fanden. Die Forscher baten die Studenten auch, ihr Vertrauen vor und nach dem Experiment zu bewerten.
Vor dem Experiment lag die durchschnittliche Vertrauensbewertung für die Identifizierung von Code Smells nur bei 1,6. Nach der Studie stieg sie auf 3,6. Die Studenten fühlten sich viel sicherer in ihren Fähigkeiten, besonders als sie an die Code Smells dachten, die sie durch den fehlerbasierten Ansatz gelernt hatten.
Lernen durch Fehler
Die Idee, aus Fehlern zu lernen, ist nicht neu. Viele Forscher haben darauf hingewiesen, dass Fehler zu einem tieferen Verständnis führen können. Unser Ansatz baut auf dieser Idee auf, indem die Studenten absichtlich Code mit bekannten Problemen erstellen. Das hilft ihnen, sich darauf zu konzentrieren, wie sie ihren Code verbessern können, anstatt nur Regeln auswendig zu lernen.
Die Studenten berichteten, dass das Verständnis ihrer Fehler ihnen half, die Konzepte von Code Smells und Refactoring zu erfassen. Einige verglichen diese Erfahrung sogar mit dem Lernen von Mathematik, wo das Verständnis nach der Bewältigung von Herausforderungen kommt.
Fazit
Zusammenfassend haben wir eine neue Methode zum Lehren von Refactoring vorgeschlagen, die die Vertrautheit mit dem eigenen Code und den Wert des Lernens aus Fehlern betont. Unsere Studie zeigt, dass dieser Ansatz zu höheren Erfolgsquoten bei der Identifizierung von Code Smells und Refactoring führt sowie zu einem erhöhten Vertrauen unter den Studenten.
Indem wir den Studenten erlauben, ihre eigenen Code-Probleme zu erstellen, ermöglichen wir ihnen effektiver zu lernen. Wenn sie in ihren Studien und Karrieren vorankommen, werden sie besser darauf vorbereitet sein, diese Fähigkeiten auf ihre eigenen Programmierprojekte anzuwenden.
Diese Methode könnte auch für andere Informatikthemen angepasst werden. Zum Beispiel könnten Studenten in Sicherheitsschulungen die Auswirkungen ihrer eigenen Fehler in der Code-Qualität sehen. Dieser Ansatz könnte zu besseren Lernergebnissen in verschiedenen Bereichen innerhalb der Informatikausbildung führen.
Zukünftige Forschungen könnten diese Methoden in unterschiedlichen Kontexten weiter testen und erkunden, wie automatisierte Werkzeuge oder KI helfen könnten, Übungen zu erstellen, die Fehler induzieren. Auf diese Weise können wir die Art und Weise, wie Programmieren gelehrt wird, weiter verbessern und sicherstellen, dass die Studenten kompetente Entwickler werden, die bereit sind für die Herausforderungen der realen Welt.
Titel: Fixing Your Own Smells: Adding a Mistake-Based Familiarisation Step When Teaching Code Refactoring
Zusammenfassung: Programming problems can be solved in a multitude of functionally correct ways, but the quality of these solutions (e.g. readability, maintainability) can vary immensely. When code quality is poor, symptoms emerge in the form of 'code smells', which are specific negative characteristics (e.g. duplicate code) that can be resolved by applying refactoring patterns. Many undergraduate computing curricula train students on this software engineering practice, often doing so via exercises on unfamiliar instructor-provided code. Our observation, however, is that this makes it harder for novices to internalise refactoring as part of their own development practices. In this paper, we propose a new approach to teaching refactoring, in which students must first complete a programming exercise constrained to ensure they will produce a code smell. This simple intervention is based on the idea that learning refactoring is easier if students are familiar with the code (having built it), that it brings refactoring closer to their regular development practice, and that it presents a powerful opportunity to learn from a 'mistake'. We designed and conducted a study with 35 novice undergraduates in which they completed various refactoring exercises alternately taught using a traditional and our 'mistake-based' approach, finding that students were significantly more effective and confident at completing exercises using the latter.
Autoren: Ivan Tan, Christopher M. Poskitt
Letzte Aktualisierung: 2024-01-01 00:00:00
Sprache: English
Quell-URL: https://arxiv.org/abs/2401.01011
Quell-PDF: https://arxiv.org/pdf/2401.01011
Lizenz: https://creativecommons.org/licenses/by/4.0/
Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.
Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.