![]() |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Ich verstehe. Ich nenne diese Art von Programmierung 'Heuristik', denn man hat ein Regelwerk, das man durch Versuch und Irrtum ver(schlimm)bessert.
Ich habe mal ein Silbentrennprogramm geschrieben (ja, ich bin alt). Da habe ich mit einer Art Phoneme, Wortteilen oder wie auch immer rumgebapselt. Zum Schluss war es richtig gut, aber ich habe Sonderfälle und Regeln und was weiss ich eingebaut und immer gegen mein Wörterbuch von 1000 Wörtern getestet. DAS war -wenn man so will- evolutionär. Sowas mach ich aber nicht. Oder -hups- doch, gerade gestern. Aber das ist Frickeln, sowas nenne ich rumspielen und experimentieren. Schaden tut es nicht, aber in produktive Systeme wird sowas nicht übernommen. Grauenvoll.. |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Hallo!
Dieses 'evolutionäre Programmieren' kommt mir durchaus sehr bekannt vor. Ich denke aber dass einige hier das etwas zu eng sehen. Es geht m.E. nicht darum das gesamte Programm nur durch trial & error zu schreiben - sondern einzelne Fehlerfällle dadurch zu beheben. Gerade wenn es um Indizes oder eher ungenaue Beschreibungen von Schnittstellen geht, ist dieser Weg nicht selten auch der schnellere; besonders wenn der Tag sich dem Ende neigt. Wenn ich einen String auf bestimmte Weise zurecht schneiden muss und bei der Ausführung einen Fehler bekomme oder das Ergebnis schlichtweg falsch ist, dann ist es für mich oft schneller 'nach Erfahrung' an den Eckpunkten einer substr-Funktion zu raten. Insbesondere bei Scriptsprachen, in denen auch negative String-Längen und -Indizes eine Bedeutung haben kommt man schnell mal durcheinander bei den ganzen +1 und -1. :? Das Restrisiko ist zumindest bei den Fällen ich denen ich dieses Prinzip anwende nicht existent. Wenn die Lösung funktioniert dann ist sie richtig. Wenn Verdacht darauf besteht dass eine Funktion nicht allgemeingültig genug funktioniert, dann wird diese Art von Problemlösung nicht angewendet, ganz einfach. Dann heißt es Gehirn einschalten, woanders weiter arbeiten oder den Lösungsweg im Gesamten vereinfachen. ;) Um das nochmal zu betonen: Ich meine damit banale Probleme im Detail bei der Implementation. Vom Rumspielen bei der Planung eines großen Programms hat keiner gesprochen. Deshalb sehe ich auch keinen Grund mir bei der gelegentlichen Anwendung der Verfahrens an der richtigen Stelle (!) Unprofessionalität vorzuwerfen. Wenn das Ergebnis der Spezifikiation entspricht und ich schnell und korrekt gearbeitet habe, dann ist doch alles okay, oder? Liebe Grüße, Valentin |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Das diskutierte Verfahren würde ich eher experimentell nennen. Unter evolutionärem Programmieren verstehe ich: Beginne mit einem Kern, der eine gewisse Minimalfunktionalität abdeckt und erweitere den im Laufe der Zeit konsistent, d.h. ohne das zu zerstören, was bereits funktioniert. Im übrigen ist mir unverständlich, wie man aus der Implementierung eines Algorithmus eher dessen Funktionsweise verstehen lernen will als aus seiner Beschreibung, die ja gerade von den (für das Verständnis unwesentlichen) Implementierungsdetails abstrahiert und demzufolge viel klarer die Grundidee erkennen läßt.
|
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
![]() |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Ich kenn keinen Fall, bei dem Frickeln (aka 'Rumprobieren') zu einer nachhaltigen Lösung führte. Natürlich wird man in der Praxis, speziell, wenn es 5 vor 12 ist (oder noch später) und der Milestone drängelt, eher zu solchen Brachialmitteln greifen. Oder wenn man nur mal fix ein Helferlein programmieren muss (Filter, Transformer z.B.)
Eigentlich ist das aber alles Quark und als Projektleiter kann ich so etwas in keinem Fall gutheißen (nur vorübergehend dulden). Wie gesagt: Es gibt durchaus Probleme, die derzeit nur durch Rumprobieren 'gelöst' werden können, wobei das dann keine Lösung ist, sondern ein mehr oder minder schlechter Versuch, einen halbwegs stabilen Output für ein (nichtdeterministisches) Problem zu finden. Beispiel: Wir hatten eine Adressdatenbank mit vielen Duplikaten, und natürlich sollten die Duplikate raus. Nur, was ist ein 'Duplikat'? ("Dr. Meier vs. "Hans Meier (Dr.)". Hier kann man schlecht eine Formel definieren, sonder muss versuchen, mit heuristischen Mitteln das kleinste Übel zu finden. DAS wäre (und war) ein Fall für Frickler und etwas rumprobieren und etwas an Parametern drehen. [QUOTE=Valle;1143711]Gerade wenn es um Indizes oder eher ungenaue Beschreibungen von Schnittstellen geht..[QUOTE] Na, da schaue ich aber lieber genau hin, als rumzuprobieren. Zitat:
Zitat:
Zitat:
Zitat:
Isoliert betrachtet, ist die Aussage natürlich korrekt (und banal): "Wenn ich alles richtig gemacht habe, ist (doch) alles okay, oder?" Ich kann deine Haltung verstehen, früher war ich auch so. Aber es ist unprofessionell. Schlicht und ergreifend. Und sehr teuer. Auf lange Sicht. Meine Meinung. @BUG: :thumb: Genau so isses! |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Zitat:
Einen Größenoperator < oder > mit <= oder >= auszutauschen, kann schon entscheidend für die (In-)Stabilität eines Sortieralgoritmus' sein (relative Reihenfolge der Elemente mit gleichgroßem Schlüsselelement verändern oder beibehalten). Und einen < mit einem > oder umgekehrt auszutauschen, kann die Sortierreihenfolge invertieren (also z.B. absteigend als aufsteigend). Die von mir eingeworfene "evolutionäre" Programmierung meinte ich vor allem i.S. der Fehlerbeseitigungen (aber auch das tut die "echte" Evolution ja). Und anhand dieser simplen Vergleichsoperatoren läßt sich aber die Qualität von (Sortier-)Algorithmen entscheidend ändern und damit auch verbessern. |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Zitat:
Zitat:
Ist die Zeitersparnis nicht doch der tatsächliche oder "gefühlte" Vorteil, der das dulden läßt? Auch die tendenziell größere Fehlerarmut bei intensiverem Einarbeiten als bei von vornherein größerem Probieren ist diskutabel: Wie oft bekommt man von einem Programm nach der Implementation eines Algorithmus', einer Idee, von diesem Programm einen Denkfehler in seinem Konzept vorgeführt? |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Der Unterschied zur Natur ist der, das die Natur nie fertig wird: "Nach dem Verbessern ist vor dem Verbessern".
Wenn Du deine Heuristik (nennen wir sie mal so) nie auf die Menschheit loslässt, ist alles ok und die Vorgehensweise in der Tat nicht zu beanstanden. Nur im Berufsleben wird man das Resultat deiner Optimierungsbemühungen irgendwann einsetzen oder dem Kunden übergeben. Und dann kann man nur eines von dem Ergebnis sagen: "Es ist nicht fertig", denn das ist ja Mutter Natur auch nie. Zitat:
Sollte dir mein Beispiel (aus dem echten Berufsleben) nicht Lehre genug sein, um eine Frage wie "Ist die Zeitersparnis nicht doch der tatsächliche oder "gefühlte" Vorteil, der das dulden läßt? nicht mehr zu stellen? Es ist schlicht und ergreifend Faulheit und Schlamperei, wenn ich etwas, was ich ordentlich erledigen könnte, nur so lange hinschludere, "bis es irgendwie hinhaut", oder "der Kunde zufrieden ist", oder "das Teil doch funktioniert" oder oder oder. Glaube mir: Diese Vorgehensweise beschehrt dir viele unnötige Besuche beim Kunden. Oder im schlimmsten Fall: Schadensersatzforderungen. Du bist nämlich verpflichtet, nicht fahrlässig zu arbeiten. Und was ist diese Einstellung denn anderes als "fahrlässig"? Grenzsituationen, wie "Schnittstelle, ohne Beschreibung" oder "nichtdeterministische Probleme" werden mit dem Kunden abgestimmt. Hier ist nichts anderes als die o.g. experimentelle Vorgehensweise möglich. Wobei ich mich beim ersten Problem (Schnittstelle ohne Spec) meist weigere, dies umzusetzen sondern verlange, das diese verdammte Spec aufzutreiben ist. Na, und wenns eben gar nicht anders geht, dann hilft eben nur Try & Error. Umgekehrt hebst Du dich von der Masse ab, wenn Du qualitativ hochwertige Arbeit ablieferst, die nachhaltig und robust funktioniert. Lassen wir mal die Kirche im Dorf: Grau ist alle Theorie und in der Praxis wird natürlich (wie schon erwähnt) auch mal gefrickelt. Dann verlange ich aber, das dies im Code explizit durch dicke fette Kommentare kenntlich gemacht wird. Der Programmierer muss seinen Namen angeben und beschreiben, warum er diese Frickellösung nehmen musste. Übrigens weigern sich die meisten meiner Jungs, Schrott zu programmieren, nur damit es irgendwie läuft. Weil, im Endeffekt sind sie es, die die Suppe auslöffeln müssen. Also machen sie es gleich richtig. Zitat:
|
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
Man darf nicht alles in einen Topf werfen.
Es gibt Leute die beruflich mit der Programmierung zu tun haben und die in der Freizeit programmieren. Es wurde ja schon erwähnt: Zitat:
Die Hobby-Programmierer oder auch Anfänger tendieren eher zu dieser "Methode" zu programmieren. Doch unabhängig davon ob Programmierung mit Beruf oder Freizeit zu tun hat, sollte man generell immer in irgendeiner Form seine Idee dokumentieren, darstellen und überlegt an sein Programm/ Problem rangehen. |
AW: Evolutionäre Programmierung - programmiert auch Ihr evolutionär?
_Ich_ möchte hier doch noch klar differenzieren zwischen rumfrickeln und dem gesagtem im Ausgansgsposting:
Zitat:
Dass Delphi dieses Vorgehen zudem deutlich fördert, ist der Komponentenansatz. Kaum jemand macht sich zum Beispiel noch Gedanken zu der RTF- oder der JPG-Spezifikation um nur zwei Beispiele aufzuführen, man verwendet die entsprechenden Units und damit hat es sich (bis der erste Fehler in der Komponente auftaucht). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz