Ein Freund, der auch gerne programmiert, fragte mich mal, ob ich häufig Quellcodes kopiere. Ohne lange zu überlegen sagte ich, „Ja! Und zwar in ganz großem Stil“. So fing ich auch an, mich zu fragen, ob das überhaupt gut ist. Ich bin zu der Überzeugung gekommen, dass es definitv gut ist. Uns ist ja auch bekannt, dass auch namhafte Programmierer wie „Bill Gates“ in Harvard in den Mülltonnen nach Code-Schnippeln wühlte, um sie woanders einzusetzen. Aber genug jetzt, lasst uns zu den Vorteilen des Code-Kopierens übergehen.
Zuerst müssen wir festhalten, dass Codes von fremden Frameworks, Projekten oder Bibliotheken kopiert werden sollten und nicht aus dem Projekt, an dem wir gerade arbeiten. Denn dann würden wir einen entscheidenden Fehler machen, weil wir unnötige Redundanzen erstellen und nichts dazu beitragen würden, den gesamten Code wieder verwendbar zu machen. Somit würden wir auch unnötig den C.R.A.P.-Index, auch bekannt als Zyklomatische Komplexität. (Also die Metrik bei der es darum geht, für wie komplex und damit auch wie wartbar eine Funktion ist. Wir gehen also davon aus, dass eine Funktion, je komplexer sie wird, desto eher Probleme bereiten wird.), steigern.
Wichtig ist außerdem, dass wir uns mit dem fremden Code genau befassen und versuchen zu erkennen, was genau damit beabsichtigt wurde. Dabei lernen wir andere, womöglich bessere Lösungsansätze kennen und schulen gleichzeitig unser Verständnis für Komplexe Zusammenhänge. Befassen wir uns mit vielen Nuancen des fremden Codes, sind wir dadurch in der Lage, besser, ja auch schneller einen fremden Code zu verstehen, gar den Fehler auf den ersten Blick zu sehen. Wir schulen also unser Verständnis für fremde Codes und können somit schneller und besser in alte Projekten einsteigen und somit die Bugs schneller erkennen und beseitigen.
Also, kopiert gerne fremde Codes, setzt euch damit auseinander und publiziert eure Erkenntnisse.
Weiterführende Informationen:
Softwaremetrik: Zyklomatische Komplexität
What is your C.R.A.P. Index?
Ich stimme Dir vollkommen zu, dass man sich mit fremden Code auseinandersetzen soll, um sich mit neuen Ideen und Lösungsansätzen zu ‚versorgen‘; wenn es hier um reinen ‚Ideen-Klau‘ geht bin ich ganz Deiner Meinung.
Geht es um „Copy & Paste“ will ich Dir widersprechen, denn das ist hier nicht zielführend. Warum? Weil ich in 90% der Fälle den kopierten Code eh so umschreiben muss, dass er meinen Coding guidelines, etc. entspricht; Variablen müssen umbenannt werden und man sollte einen entsprechenden UnitTest schreiben. Also alles Arbeiten, die ich, wenn ich z.B. die Methode gleich selber schreibe auch tun muss.
Ausserdem mal Hand aufs Herz und kräftig gelogen, wer leistet denn der Aufforderung folge, sich den zu kopierenden Code erst genau anzuschauen und dann, erst wenn er den in Gänze verstanden hat, diesen in sein Programm einzufügen und das dann noch im Eifer eines Gefechts – mir fällt da keiner ein, so konsequent diese Person auch sein mag.
@lapistano: Sicher, hier geht es nicht um “Copy & Paste”, hier geht es alleine nur um sich mit fremden Code zu befassen und sich mal von fremden Lösungsansätzen inspirieren zu lassen oder eben nicht.
„Dabei lernen wir andere, womöglich bessere Lösungsansätze kennen und schulen gleichzeitig unser Verständnis für Komplexe Zusammenhänge“ – exzellent! ;)