Bekämpfung des Einstellungseffekts


17

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?


Arbeitest du alleine?
Apalala

3
Seien Sie vorsichtig mit dem "MVC" Zug, er hat seinen Platz. Wenn eine Webforms-Lösung funktioniert, lassen Sie es sein.
Darknight

Antworten:


4

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:

  1. Finden Sie heraus, was an diesem neuen Problem anders war. Finden Sie heraus, welche Ansätze möglicherweise anders ausgearbeitet haben und warum.
  2. Katalogisieren Sie dieses Problem und fahren Sie mit der Lösung weiterer neuer Probleme fort.

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:

  1. Zu Beginn des Problemlösungsprozesses vergleichen Sie das neue Problem mit allen bekannten Problemen.
  2. Sie werden versuchen, die Anzeichen zu erkennen und zu entscheiden, wie dieses Problem aussieht.
  3. Wenn keine 100% -ige Übereinstimmung erzielt werden kann, vergleicht ein erfahrener Entwickler das Risiko, mehr Zeit für die Ermittlung aufzuwenden, mit dem Risiko einer möglicherweise fehlerhaften Ausführung. Wenn das Risiko einer Zeitverschwendung zu hoch ist, fahren Sie einfach mit dem fort, 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:

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?

  1. Suchen und katalogisieren Sie weiterhin nach neuen Problemen
  2. Besser bei der Auswahl der richtigen Lösung für das Problem; anstatt nur zu wissen, welche Lösung, wissen, warum es richtig ist.
  3. Üben und verbessern Sie Ihre Entscheidungskompetenzen. Manchmal ist Effizienz die richtige Wahl, und eine bessere Erkennung dieser Zeiten führt zu messbaren Vorteilen in der Praxis.

Ich liebe diese Antwort, danke, dass Sie sich die Zeit genommen haben.
David in Dakota

9

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.


2
Wenn Sie die Zeit dafür haben, erhöhen Sie die 20%. Ich bin nicht einmal erlebt, aber ich dies schon gedacht: tut es richtig immer am Ende auszahlt. Je mehr Wissen Sie über das richtige Vorgehen haben, desto schneller werden Sie es richtig machen und schließlich (naja, das hoffe ich; P) werden die beiden zusammengeführt und Sie werden in der Lage sein, so ziemlich alles richtig und richtig zu machen schnell.
29.

Übrigens, was mir häufig passiert: Starten Sie etwas, in dem Wissen, dass es nicht ganz richtig ist, und verlieren Sie dann 2 Tage später wahnsinnig viel Zeit, weil das, was ich ursprünglich als falsch erkannte, jetzt überarbeitet werden muss, um es wieder in Ordnung zu bringen alle.
29.

1
Oder 50%, wenn die Arbeit auf einem niedrigen Niveau ist oder sogar mehr zwischen Projekten. Nichts, was ich jemals studiert habe, wurde verschwendet. Es wurde alles früher als später genutzt, auch wenn es nur darum ging, eine fundierte Meinung zu haben, wenn es darauf ankommt.
Apalala

5

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.


Sich häufig mit der Arbeit zu beschäftigen bedeutet, sich so produktiv zu halten wie der Typ, der die nächstbeste Technologie gelernt hat. Ich bin kurz davor, drei Jahrzehnte mit dem Handel zu rechnen, und das meiste, woran ich mich erinnere, ist Lernen, Lernen und noch mehr Lernen.
Apalala

+1 für das Programmieren (zumindest für professionelles Programmieren), bei dem es darum geht, Code zu schreiben, der die Arbeit erledigt, und nicht um theoretisch perfekten Code, der ein Kunstwerk ist.
jwenting

3

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?

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.

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.

Gut. Sie konzentrieren sich auf die Bedürfnisse des Kunden und nicht auf Ihre eigenen Ziele. Weiter so.

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.

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.

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?

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.


2

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.


1

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.


1

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.


1
Ich bin mir nicht sicher was du meinst; Ich bezog mich auf die Verwendung von jQuery-Selektoren als besseren Ansatz. Die Verwendung des geraden DOM funktioniert gut, aber jQuery ist ein viel besserer Ansatz. Um es klar zu sagen, beide funktionieren, einer ist einfach besser als der andere.
David in Dakota

1
Naja, $("#id")ist kürzer, aber letztendlich nur ein Pseudonym für document.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?
aaaaaaaaaaa

1
@eBusiness - Weißt du, dass $("#id")das letztendlich nur ein Alias ​​für ist document.getElementById("id")? Oder wurde Ihnen das so oft gesagt, dass Sie es glauben? Ich hoffe, dass Sie sich jedes Mal getElementByIddaran 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.
Nick Knowlson

Wenn Sie denselben Bezeichner für den Namen und die ID verschiedener Objekte verwenden oder sich Ihr Code nicht mehr an die Objekte 'erinnern' kann, die er gelöscht hat, ist die Verwendung von jQuery praktisch. Ansonsten ist es nichts anderes als Aufblähen, das die Geschwindigkeit Ihres Codes nach unten drückt. Ich sage nicht, dass das, was jQuery tut, falsch ist, aber es ist nicht für jeden Zweck besser.
aaaaaaaaaaa

1
Ich weiß, dass ich das ausgelöst habe, aber ich denke, wir bewegen uns ein bisschen zu weit in Richtung jQuery gegenüber JavaScript Flamewar.
aaaaaaaaaaa

1

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?

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.