Der Einstellungseffekt bezieht sich auf "die Veranlagung einer Person, ein bestimmtes Problem auf eine bestimmte Weise zu lösen, obwohl es" bessere "oder geeignetere Methoden zur Lösung des Problems gibt".
Wie kann man als Programmierer mit viel Erfahrung dieser Tendenz entgegenwirken, sich dem Lösen von Problemen immer aus "erprobten" Pfaden der Vergangenheit zu nähern?
Um zwei sehr konkrete Beispiele zu nennen: Ich habe lange genug Webanwendungen erstellt, um die weit verbreitete Verwendung von Javascript-Frameworks (z. B. jQuery) und besseren Webanwendungs-Frameworks (z. B. ASP.NET MVC) vorwegzunehmen. Wenn meine Kunden in einer schwierigen Zeit arbeiten oder dringende Probleme aus der Problemdomäne oder den Geschäftsregeln auftreten, verwende ich in der Regel nur das, was ich weiß, um eine Lösung zu finden. Dies beinhaltet sehr hässliche Dinge wie
document.getElementById
oder Verwenden von ASP.NET mit vorlagengebundenen Steuerelementen (DataList / Repeater), anstatt herauszufinden, wie Dinge mit einem ASP.NET MVC-Ansatz neu strukturiert werden.
Eine Technik, die ich in der Vergangenheit angewendet habe, besteht darin, persönliche Projekte zu haben, die nur dazu dienen, diese neuen Technologien zu erforschen, aber dies ist schwer aufrechtzuerhalten. Welche anderen Ansätze könnten empfohlen werden?
Antworten:
Das ist eine gute Frage. Und ich denke, es sind nicht nur erfahrene Programmierer, die auf dieses Problem stoßen. Eine frühzeitige Behandlung kann für einen Lernenden eine großartige Möglichkeit sein, seine Fähigkeiten zu verbessern.
Dieses Problem hat zwei Seiten: eine schlechte und eine gute .
Schlecht - Die falsche Lösung auswählen
Hier ist ein Beispiel - als unerfahrenen Entwickler, Sie haben nur dann wirklich gelöst zwei Probleme vor, Probleme A und B . Zu diesem Zeitpunkt wissen Sie , es gibt Probleme , die Sie nicht kennen, aber die Linse der eigenen Erfahrung gegeben, viel von dem, was man sieht zu sehen , wie es sein könnte , A oder B .
Daraus ergibt sich ein neues Problem. Um Ihnen dieses neue Problem sieht wie Problem A , so lösen Sie es so , wie Sie in der Regel lösen A . Etwas fühlt sich nicht richtig, und es dauert länger, und wie Sie arbeiten Sie am Ende zu realisieren ist dies ein neues Problem, C . Es ist eine Variation von A, von der du nicht wusstest, dass es sie gibt.
Was tun Sie also, um diesen Fehler nicht noch einmal zu begehen? Zwei Dinge:
Dies sollte Ihnen natürlich helfen, dieses Problem zu lösen. Mit 10 Jahren Erfahrung sind Sie mit den Problemen von A bis Z vertraut und verfügen über ein umfangreiches Repertoire an Lösungen.
Gut - Effizienz
In der realen Welt ist es mit Fristen und begrenzten Ressourcen nicht immer schlecht, das zu nutzen, was Sie wissen:
Das ist keine schlechte Sache - es verwendet eine Risikoanalyse, um die Effizienz mit einer Genauigkeit von über 100% zu bestimmen. Es wird jeden Tag gemacht und wir wären alle mit Dingen beschäftigt, die uns nicht weiterbringen, wenn wir es nicht tun.
Um Ihre Frage zu beantworten:
quelle
Nehmen Sie sich 20% Ihrer Arbeitszeit Zeit, um Ihre Fähigkeiten zu verbessern / Dinge richtig zu machen, anstatt schnell. Ansonsten geraten Sie langsam ins Hintertreffen. Dies kann bedeuten, dass Sie kurzfristig weniger Arbeit erledigen, aber auf lange Sicht sich diese Investition auszahlt.
Der harte Teil widersteht dem Druck, hier Ecken zu schneiden. Bis die Gewohnheit verwurzelt ist, schneiden Sie diese Ecke einfach nicht ab. Sobald Sie an dem Punkt angelangt sind, an dem Sie diese Investition in Ihre Fähigkeiten als "normal" betrachten, können Sie sich entscheiden, gelegentlich durch ein Projekt zu eilen. Betrachten Sie diese Zeit in der Zwischenzeit nicht als optional und bilden Sie Ihre Schätzungen entsprechend.
quelle
In der Softwareentwicklung geht es meiner Ansicht nach nicht immer darum, die absolut beste Lösung zu finden, sondern Dinge zu erledigen. Wenn Sie das Problem also nicht immer auf die beste Weise lösen, ist dies möglicherweise nicht das Ende der Welt.
Wenn Sie jedoch der Meinung sind, dass es wichtig ist, die Dinge auf die beste Art und Weise zu erledigen, dann denke ich, dass die beste Wette darin besteht, sich als Teil eines Teams zu entwickeln. Besprechen Sie das Design und führen Sie Code-Reviews mit Kollegen durch. Da die Menschen normalerweise unterschiedliche Hintergründe und Vorlieben haben (zwischen zwei und drei Personen), sollten Sie verschiedene Einstellungen zu Problemen und Lösungen haben.
quelle
Refactor regelmäßig. Refactoring setzt voraus, dass wir den Code überprüfen, den wir in der Vergangenheit geschrieben haben. Wir können diese Zeit nutzen, um alten Code aus einer neuen Perspektive zu betrachten. Solange Sie mit den wichtigsten technologischen Änderungen Schritt halten, können Sie nach Bedarf Aktualisierungen vornehmen.
Gut. Sie konzentrieren sich auf die Bedürfnisse des Kunden und nicht auf Ihre eigenen Ziele. Weiter so.
An Webforms ist nichts auszusetzen. MVC soll Webforms nicht ersetzen. Dies ist auch nicht die Zeit, eine neue Technologie zu erlernen. Erinnere dich an das Dreieck. Refactor, wenn Sie Zeit haben. Siehe auch erste Aussage.
Was ist schwer zu ertragen? Hoffentlich unterhalten Sie keine Projekte, von denen Sie lernen können. Wenn ja, werfen Sie die Beispielprojekte weg. Es ist nichts Falsches daran, einmalige Projekte zu Lernzwecken zu erstellen. Das ist eine sehr gute Sache. Siehe erste Aussage.
Versucht und wahr! = Schlecht. Der "Einstellungseffekt" wird hier etwas aus dem Zusammenhang gerissen. Die Tests beziehen sich auf Personen, die das "Öffnen eines Glases" optimieren. Die Methoden der Leute zum "Öffnen eines Glases" sind begrenzt und werden im Laufe der Zeit nicht verbessert (mit Ausnahme von Science-Fiction-Inhalten). In der Software ändert sich der beste Weg, um "Aufgabe X zu erreichen", mit der Zeit.
quelle
Etwas, das hilft, über den Tellerrand hinaus zu denken, ist, eine tatsächliche Praxis dafür zu haben. Edward De Bono hat viele Bücher über Querdenken und verwandte Themen geschrieben.
An jedem Entscheidungspunkt ist es jedoch am wichtigsten, das Risiko zu bewerten und zu berücksichtigen. Waltzing with Bears von De Marco and Lister ist eines der besten Bücher zu diesem Thema, wenn es um Softwareentwicklung geht.
Extreme Programming und andere agile Methoden schlagen vor, dass man routinemäßig mit den neuen (Spike-) Lösungen experimentieren sollte. Ich mache Experimente mit verschiedenen Technologien während des Projektstarts, und das hat mich mehrere Male davon abgehalten, mich in das gehypte zugunsten des Wahren und Versuchten zu verlieben und manchmal ein neues technologisches Juwel zu entdecken.
quelle
Als Team können Sie die Gruppe ändern, indem Sie musterbrechende Großartigkeit erkennen. Ich benutze oft neue Leute dafür, weil sie nicht in die normale Art und Weise, Dinge zu tun, eingebrochen sind. Dies ist in gewisser Weise eine Antwort des Managements - aber selbst als erfahrener Ingenieur können Sie erkennen, dass die Sichtweise eines anderen weniger voreingenommen ist, und dies mit einem Ranking von mindestens so viel Gewicht wie Ihrer eigenen Meinung (vielleicht sogar mehr) berücksichtigen.
quelle
Sind Sie sicher, dass es nicht nur das ist, was Sie anstelle von document.getElementById eingeben würden?
Bearbeiten: Ich habe gerade festgestellt, dass es in beiden Beispielen um Tools geht. Dies könnte daran liegen, dass Sie das Ändern Ihrer Tools als den größten Meilenstein Ihrer Kompetenzentwicklung ansehen. Ein guter Programmierer braucht nicht viel mehr als eine vollständige Sprache von Turing, um seine Wunder zu vollbringen. Das heißt, Werkzeuge sind nicht wichtig, aber was Sie bereits verwenden, ist nicht gerade ein Rock-Bottom-Toolset. Wenn der Wechsel von einem Tool zu einem anderen der größte Fortschritt ist, den Sie sich vorstellen können, dann könnte es sein, dass Sie im Grunde genommen in den weniger quantifizierbaren Bereichen stehen geblieben sind.
quelle
$("#id")
ist kürzer, aber letztendlich nur ein Pseudonym fürdocument.getElementById("id")
etwas Overhead. Wissen Sie, dass es Ihren Workflow verbessern wird? Oder wurde Ihnen gerade gesagt, dass jQuery so oft besser ist, als Sie es glauben?$("#id")
das letztendlich nur ein Alias für istdocument.getElementById("id")
? Oder wurde Ihnen das so oft gesagt, dass Sie es glauben? Ich hoffe, dass Sie sich jedes MalgetElementById
daran erinnern, den Fall zu behandeln, in dem IE und Opera Elemente stattdessen nach Namen zurückgeben, sowie den Fall, in dem Blackberry 4.6 Knoten zurückgibt, die nicht mehr im Dokument enthalten sind.Selbsterkenntnis
Sei dir deiner Tendenzen, deiner Schwächen und deiner Stärken bewusst.
Bewusste Entscheidungen
Treffen Sie Ihre Entscheidungen klar und bewusst. Springe nicht, um etwas zu tun, ohne bewusst darüber nachzudenken, wie du es tun wirst.
Lernen und bewerben
Lernen Sie weiterhin neue Techniken und überlegen Sie, wo sie angewendet werden können. Wenn Sie auf eine Situation stoßen, in der sie angewendet werden kann, führen Sie eine Kosten-Nutzen-Analyse durch. Manchmal überwiegt der Nutzen, etwas Neues auszuprobieren, der Nutzen einer bekannten Lösung.
quelle