Joel on Software

Joel on Software   Joel über Software

 

Andere auf Deutsch verfügbare "Joel on Software"-Artikel

Andere auf Englisch verfügbare "Joel on Software"-Artikel

Email an den Verfasser (nur auf Englisch)

 

Vorsicht beim Menschlichen Multitasking


Von Joel Spolsky
Aus dem Englischen von Hartmut Ludwig
Redigiert von Freitag Ewald
12. Februar 2001

Wenn Sie ein Team von Programmierern leiten, ist eines der ersten Dinge, die Sie lernen müssen, wie man die Zuteilung von Aufgaben organisiert. Um es einfach auszudrücken: es geht darum, den Leuten etwas zu tun zu geben. Im Hebräischen bezeichnet man das umgangssprachlich als "Akten werfen" (weil man die Akten in die Eingangskörbe der Leute wirft). Und je nachdem, wie Sie sich entscheiden, wann welche Akte in welchen Körben landen, können Sie - wenn Sie es richtig anstellen - in diesem Bereich einen unglaublichen Produktivitätszuwachs erlangen. Wenn Sie es jedoch falsch machen, schaffen Sie sich eine der kniffligen Situationen, wo niemand irgendetwas hinbekommt und sich jeder darüber beschwert, dass "hier nie was zu Ende gebracht wird".

Da sich diese Website an Programmierer richtet, bringe ich eure Hirne jetzt mit einem kleinen Programmier-Problem etwas in Gang. 

Nehmen wir an, dass zwei verschiedene Berechnungen, A und B, durchzuführen sind. Jede Berechnung benötigt 10 Sekunden CPU-Zeit. Hierfür steht eine CPU zur Verfügung, die im Sinne dieses Problems nichts anderes in der Warteschlange hat.

Auf unserer CPU ist Multitasking optional. Man kann also entweder diese Berechnungen hintereinander ablaufen lassen...

Sequenzielle Verarbeitung

Berechnung A

Berechnung B

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

...oder man setzt Multitasking ein. Bei dem Multitasking dieser speziellen CPU laufen Tasks jeweils für eine Sekunde, das Umschalten zwischen den Tasks kostet keinerlei zusätzliche Zeit.

Multitasking

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Welche Methode würden Sie lieber wählen? Die meisten Leute werden wohl aus dem Bauch heraus vermuten, dass Multitasking besser ist. In beiden Fällen muss man 20 Sekunden warten, um beide Lösungen zu bekommen. Aber wie lange dauert es, die Ergebnisse für jede einzelne der Berechnungen zu bekommen?

In beiden Fällen braucht das Ergebnis der Berechnung B (blau markiert) 20 Sekunden um zu erscheinen. Aber schauen Sie auf Berechnung A. Mit Multitasking braucht das Ergebnis 19 Sekunden um zu erscheinen... hingegen erscheint es bei sequenzieller Bearbeitung bereits nach nur 10 Sekunden.

In anderen Worten gilt in diesem netten konstruierten Beispiel, dass die durchschnittliche Zeit pro Berechnung niedriger ist (15 Sekunden statt 19,5 Sekunden), wenn man diese sequenziell verarbeitet, anstatt Multitasking einzusetzen. (Übrigens ist das Beispiel gar nicht so konstruiert - es beruht auf einem realen Problem, das Jared in seinem Job zu lösen hatte).

Methode

Berechnung A braucht

Berechnung B braucht

Durchschnitt

Sequenziell

10 Sekunden

20 Sekunden

15

Multitasking

19 Sekunden

20 Sekunden

19.5

Vorhin sagte ich, dass "das Umschalten zwischen den Tasks keinerlei zusätzliche Zeit kostet". In Wirklichkeit benötigt dieses Umschalten bei realen CPUs ein klein wenig Zeit... Im Grunde genommen genau so viel Zeit, um den Zustand der CPU-Register zu speichern und denjenigen des vorherigen Tasks wieder zu laden. Realistisch betrachtet wird diese Zeit jedoch so nah wie möglich an der Grenze dessen gehalten, was man als vernachlässigbar bezeichnen kann. Aber um der Diskussion willen wollen wir uns einmal vorstellen, dass das Umschalten eines Tasks eine halbe Sekunde braucht. Nun sieht es noch schlechter aus.

Methode

Berechnung A braucht

Berechnung B braucht

Durchschnitt

Sequenziell

10 Sekunden

20 + 1 Task Umschaltung =
20.5 Sekunden

15.25

Multitasking

19 + 18 Task Umschaltungen =
28 Sekunden

20 + 19 Task Umschaltungen = 29.5 Sekunden

28.75

Und nun ... Sie können ruhig über mich lachen, ich weiß, dass es albern ist ... was wäre wenn das Umschalten eine ganze Minute braucht?

Methode

Berechnung A braucht

Berechnung B braucht

Durchschnitt

Sequenziell

10 Sekunden

20 + 1 Task Umschaltung =
80 Sekunden

45 Sekunden

Multitasking

19 + 18 Task Umschaltungen =
1099 Sekunden

20 + 19 task Umschaltungen = 1160 Sekunden

fast 19 Minuten!

Je mehr Zeit das Umschalten in Anspruch nimmt, desto höher fällt die Strafe für das Multitasking aus.

Das ist jetzt an und für sich noch keine weltbewegende Erkenntnis, oder? Aber ich werde wohl schon bald zornentbrannte Mails von irgendwelchen Schwachköpfen erhalten, die mich bezichtigen, "gegen" Multitasking zu sein. "Willst Du zurück in die Zeiten von DOS, also Du Word Perfect beenden musstest, um 1-2-3 starten zu können?" werden sie mich fragen.

Aber das ist nicht mein Punkt. Ich möchte nur, dass Sie mir zustimmen, dass in diesem speziellen Beispiel:

a) die sequenzielle Verarbeitung die Ergebnisse durchschnittlich schneller liefert und

b) je länger man braucht, um zwischen den Tasks umzuschalten, desto höher ist der Preis, den man für das Multitasking bezahlen muss.

OK, zurück zu dem viel interessanteren Bereich des Magagements von Menschen, statt CPUs. Der Trick hierbei ist, dass man, wenn man Programmierer leitet, wissen sollte, dass ganz speziell hier das Umschalten zwischen Tasks sehr, sehr, sehr lange dauert. Das liegt daran, dass Programmieren eine Art von Aufgabe ist, in der man sehr viele Dinge gleichzeitig im Kopf haben muss. Je mehr Dinge man sich gleichzeitig merken kann, desto produktiver ist man beim Programmieren. Ein Programmierer, der unter Volldampf entwickelt, muss Myriaden von Dingen gleichzeitig im Kopf behalten. Alles angefangen von Variablennamen, Datenstrukturen, wichtigen APIs, den Namen der Hilfsfunktionen, die er schreibt und häufig benötigt, sogar der Name des Unterverzeichnisses, in dem er seinen Quellcode speichert. Wenn man diesen Programmierer für drei Wochen Urlaub nach Kreta schickt, wird er alles vergessen haben. Das menschliche Hirn scheint es aus dem Kurzzeitspeicher auf Backup-Tapes ausgelagert zu haben, und es von dort wieder zu holen dauert eine Ewigkeit.

Wie lange genau? Nun - meine Software-Firma unterbrach kürzlich ihre Arbeit (Entwicklung eines Software-Produktes mit dem Codenamen CityDesk), um einem unserer Kunden für drei Wochen aus einer kleinen Notlage herauszuhelfen. Als wir zurück in unser Büro kamen, schien es mir, dass es nochmals drei Wochen dauerte, bis alle wieder mit voller Geschwindigkeit an CityDesk arbeiteten.

Auf dem individuellen Level - haben Sie auch schon die Erfahrung gemacht, dass Sie einen Job an eine Person vergeben und das großartig klappt, aber wenn Sie dieser Person zwei Jobs geben, bekommt sie nie jemals etwas erledigt? Entweder der eine Job wird gut gemacht und der andere vernachlässigt, oder beide werden erledigt, aber so langsam, dass man meint, dass selbst Schnecken schneller sind. Das liegt daran, dass das Umschalten zwischen Programmieraufgaben so viel Zeit benötigt. Ich denke, dass, wenn ich zwei Programmierprojekte gleichzeitig auf meiner Liste habe, die Umschaltzeit zwischen den Aufgaben etwa 6 Stunden beträgt. An einem 8-Stunden-Tag bedeutet das, dass durch das Multitasking meine Produktivität auf 2 Stunden am Tag reduziert wird. Ziemlich bedrückend.

Wie man sieht sollten Sie also gnädig mit jemandem verfahren, dem Sie zwei Aufgaben gleichzeitig gegeben haben und der eine davon "schleifen" lässt und nur noch an der anderen arbeitet, denn er wird insgesamt mehr leisten können und die Aufgaben im Durchschnitt schneller fertiggestellt haben. Tatsächlich ist die eigentliche Lektion aus all dem jedoch die: Lassen Sie Ihre Leute nicht an mehr als einer Sache gleichzeitig arbeiten. Stellen Sie sicher, dass die auch wissen, worum es geht. Gute Manager fühlen sich verantwortlich dafür, Hindernisse aus dem Weg zu räumen, so dass sich die Leute auf eine Sache konzentrieren können, die sie wirklich erledigen müssen. Falls es also mal knapp wird, sollten sie lieber darüber nachdenken, ob sie die Sache nicht lieber selbst in den Griff kriegen, bevor Sie die Aufgabe an einen Programmierer delegieren, der tief in einem anderen Projekt steckt.



Titel der Originalausgabe: Human Task Switches Considered Harmful  

Joel Spolsky ist der Gründer von Fog Creek Software, einer kleinen Software Firma in New York City. Nachdem er auf der Yale University graduierte arbeitete er als Programmierer und Manager bei Microsoft, Viacom und Juno.


Der Inhalt dieser Seiten stellt die persönliche Ansicht des Autors dar.
Copyright ©1999-2005  Joel Spolsky. Die Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten.

FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky