Java >> Java Tutorial >  >> Tag >> switch

Die Kosten des Kontextwechsels

Ich habe immer gedacht, dass ich gut im Multitasking bin. Deshalb habe ich geglaubt, dass ich nicht den Preis zahlen muss, der mit Kontextwechseln (oder Aufgabenwechseln) verbunden ist.

Diese Woche wurde mir klar, dass ich mich geirrt habe. Ich bin nicht sehr gut im Multitasking und Kontextwechsel ist viel teurer als ich dachte.

Der Grund für meinen Fehler ist einfach:

Ich wurde nicht annähernd so oft unterbrochen, wie ich dachte .

Warum Kontextwechsel so teuer ist?

Die Auswirkungen des Kontextwechsels sind mir schmerzlich vertraut:

  • Wenn ich an etwas arbeite und etwas anderes anfangen muss, kann es Ewigkeiten dauern, bis ich tatsächlich an der neuen Aufgabe arbeite.
  • Weil ich mehrmals am Tag den Kontext wechseln muss, habe ich das Gefühl, dass ich nichts erledigen kann (oft ist das nicht nur ein Gefühl).

Joel Spolsky erklärt den Grund dafür:

Der Trick dabei ist, dass insbesondere beim Verwalten von Programmierern Taskwechsel sehr, sehr, sehr lange dauern. Denn Programmieren ist eine Aufgabe, bei der man viele Dinge gleichzeitig im Kopf behalten muss. Je mehr Dinge Sie sich auf einmal merken, desto produktiver sind Sie beim Programmieren. Ein Programmierer, der mit Vollgas programmiert, behält zig Dinge gleichzeitig im Kopf:alles von Namen von Variablen, Datenstrukturen, wichtigen APIs, den Namen von Hilfsfunktionen, die er geschrieben und oft aufgerufen hat, sogar den Namen des Unterverzeichnisses, in dem sie sich befinden ihren Quellcode speichern. Wenn Sie diesen Programmierer für einen dreiwöchigen Urlaub nach Kreta schicken, werden sie alles vergessen. Das menschliche Gehirn scheint es aus dem Kurzzeit-RAM zu verschieben und es auf ein Sicherungsband auszulagern, wo es ewig dauert, es abzurufen.

Das Interessante ist, dass der Preis für den Kontextwechsel nicht konstant ist. Es hängt von der Komplexität der neuen Aufgabe ab.

Wenn die neue Aufgabe so einfach ist, dass sogar ein Affe sie bewältigen kann, ist der Preis sehr gering. Normalerweise kann ich die neue Aufgabe einfach beenden und an der alten Aufgabe weiterarbeiten, ohne Zeit zu verlieren. Der Grund dafür ist, dass ich mein Kurzzeitgedächtnis nicht löschen muss, weil die neue Aufgabe so einfach ist.

Ist die neue Aufgabe hingegen nicht trivial, ist der Preis sehr hoch. Ich muss mein Kurzzeitgedächtnis reinigen und die Informationen laden, die ich brauche, um eine neue Aufgabe zu erledigen. Nachdem ich die neue Aufgabe erledigt habe, muss ich mein Kurzzeitgedächtnis bereinigen und die Informationen laden, die für meine ursprüngliche Aufgabe relevant sind. Mit anderen Worten, ich muss den Preis doppelt bezahlen!

Wie hoch ist der Preis des Kontextwechsels? Ich gehe davon aus, dass dies von der Person abhängt, aber ich habe festgestellt, dass es zwischen 5 und 30 Minuten pro Kontextwechsel liegen kann. Das ist verrückt, denn wenn Sie mehrmals am Tag den Kontext wechseln müssen, vergeuden Sie viel Zeit und verbrauchen viel mentale Energie .

Den Mittelweg finden

Da der Kontextwechsel einen hohen Preis hat und psychisch anstrengend ist, sollten wir ihn um jeden Preis vermeiden. Das ist jedoch leichter gesagt als getan, denn „echte“ Teamarbeit (agile Methoden) ist ein wesentlicher Bestandteil moderner Softwareentwicklung und hat meiner Meinung nach klare Vorteile, die man nicht übersehen sollte.

Mit anderen Worten, wir müssen den Mittelweg zwischen Zusammenarbeit und schwerem Heben finden .

Wir müssen unsere eigene Zeit und die Zeit unserer Teammitglieder respektieren, und der einfachste Weg, dies zu tun, ist, diese Regeln zu befolgen:

  • Machen Sie eine Sache nach der anderen . Wenn Sie zwei Aufgaben erledigen müssen, erledigen Sie die wichtigste, bevor Sie mit der zweiten beginnen. Auf diese Weise können Sie zumindest die wichtigste Aufgabe erledigen. Wenn Sie versuchen, beide Aufgaben zu erledigen, können Sie möglicherweise keine von beiden erledigen.
  • Asynchrone Kommunikation verwenden . Wenn Sie das nächste Mal eine Frage haben, unterbrechen Sie nicht die Person, die Ihre Frage beantworten kann. Stattdessen sollten Sie asynchrone Kommunikationstools wie IM, E-Mail oder ein anderes Collaboration-Tool verwenden. Auf diese Weise kann die Person Ihre Frage beantworten, wenn sie Zeit dafür hat. Machen Sie außerdem deutlich, dass Ihre Teammitglieder Sie genauso behandeln müssen. Wenn die Scheiße den Ventilator trifft, es sei denn, Ihre Frage wird nicht sofort beantwortet, können Sie die Person unterbrechen, die Ihnen helfen kann, aber denken Sie daran, dass diese Person einen hohen Preis für die Beantwortung Ihrer Frage zahlt .
  • Stellen Sie sicher, dass Sie nicht unterbrochen werden, wenn Sie etwas erledigen müssen . Wenn Sie an einer wichtigen Aufgabe arbeiten, müssen Sie die Möglichkeit haben, sie ohne Unterbrechungen zu beenden. Schaffen Sie eine Möglichkeit, Ihren Kollegen zu signalisieren, dass Sie nicht unterbrochen werden möchten. Wenn Ihre Kollegen dies nicht respektieren, können Sie im Home Office arbeiten, bis Sie diese Aufgabe erledigt haben. Denken Sie auch daran, dass dies eine Einbahnstraße ist.
  • Akzeptieren Sie, dass Sie nicht alles können, und stellen Sie sicher, dass Ihr Arbeitgeber dies auch akzeptiert . Wenn es Ihre Aufgabe ist, anderen Entwicklern regelmäßig zu helfen, haben Sie kein schlechtes Gewissen, weil Sie das Gefühl haben, dass Sie nichts erledigen können. Stellen Sie sicher, dass Sie keine Aufgaben mit hoher Priorität übernehmen, weil Sie ihnen nicht die Aufmerksamkeit schenken können, die sie verdienen.

Einige dieser Ratschläge mögen anti-agil erscheinen. Das Problem ist, dass der Aufstieg agiler Softwareentwicklungsmethoden ein mentales Bild geschaffen hat, das uns dazu ermutigt, ständig zusammenzuarbeiten. Dieses mentale Bild wird unsere Produktivität zerstören und wir sollten es nicht annehmen .

Stattdessen sollten wir akzeptieren, dass Zeit für Zusammenarbeit und Zeit für das schwere Heben ist , und wir können nicht beides gleichzeitig tun (es sei denn, wir machen Pair Programming oder Mob Programming).


No
Java-Tag