: Wir können dieses kleine Beispiel auch in die andere Richtung ausdehnen. Bei der Zubereitung von Eiscreme könnte man feststellen, dass die Milch fehlt und ohne besondern Auftrag welche einkaufen. Bei einer Party-Vorbereitung könnte die Eiscreme-Zubereitung Teil dieser größeren Aufgabe sein. Und so weiter, und so fort. Die Zerlegung in Teilaufgaben bzw. die Abstraktion ist eine lebenswichtige Fähigkeit beim Programmieren bzw. bei der Handhabung komplexer Systeme. Trotz des unter Punkt 3 über das Gedächtnis gesagten, können wir immer nur eine kleine Anzahl von Dingen gleichzeitig im Kopf haben. Ein großes Programm kann 100.000 oder 1.000.000 oder 10.000.000 Programmzeilen haben. Wenn es notwendig wäre, alle Zeilen im Kopf zu haben und vor allem gleichzeitig zu verstehen, könnte man so ein Programm unmöglich erstellen oder verstehen. Nur weil es möglich ist, über jeweils kleine Teile isoliert nachzudenken, kann man mit so großen Programmen umgehen. |
: Wir können dieses kleine Beispiel auch in die andere Richtung ausdehnen. Bei der Zubereitung von Eiscreme könnte man feststellen, dass die Milch fehlt und ohne besonderen Auftrag welche einkaufen. Bei einer Party-Vorbereitung könnte die Eiscreme-Zubereitung Teil dieser größeren Aufgabe sein. Und so weiter, und so fort. Die Zerlegung in Teilaufgaben bzw. die Abstraktion ist eine lebenswichtige Fähigkeit beim Programmieren bzw. bei der Handhabung komplexer Systeme. Trotz des unter Punkt 3 über das Gedächtnis gesagten, können wir immer nur eine kleine Anzahl von Dingen gleichzeitig im Kopf haben. Ein großes Programm kann 100.000 oder 1.000.000 oder 10.000.000 Programmzeilen haben. Wenn es notwendig wäre, alle Zeilen im Kopf zu haben und vor allem gleichzeitig zu verstehen, könnte man so ein Programm unmöglich erstellen oder verstehen. Nur weil es möglich ist, über jeweils kleine Teile isoliert nachzudenken, kann man mit so großen Programmen umgehen. |
: Aus diesem Grund reicht es nicht, einfach alle Aufgaben weiter und weiter zu zerlegen und so die Probleme der Komplexität zu erledigen. Wir müssen immer zumindest einen Teil der Annahmen, die unsere Strukturierung begleitet haben, präsent halten. We müssen wissen, was wir von den Prozessen (Personen, Computerprogrammen, etc.) , die wir für unsere Aufgaben verwenden, erwarten können bzw. nicht erwarten dürfen. Wir müssen sicherstellen, dass wir unseren Teil dieser Verträge erfüllen, die eigenen Zusagen und Versprechungen einhalten, auf die sich andere Teile des Systems verlassen. |
: Aus diesem Grund reicht es nicht, einfach alle Aufgaben weiter und weiter zu zerlegen und so die Probleme der Komplexität zu erledigen. Wir müssen immer zumindest einen Teil der Annahmen, die unsere Strukturierung begleiten, im Kopf haben. We müssen wissen, was wir von den Prozessen (Personen, Computerprogrammen, etc.), die wir für unsere Aufgaben verwenden, erwarten können bzw. nicht erwarten dürfen. Wir müssen sicherstellen, dass wir unseren Teil dieser Verträge erfüllen, die eigenen Zusagen und Versprechungen einhalten, auf die sich andere Teile des Systems verlassen. |
: Was das Programmieren noch schwierig macht (neben den vier oben angeführten Problemfeldern) sind menschliche Probleme, organisatorische Probleme und die Fülle an pingeligen Detailproblemen. Ein großes Programm ist ein erstaunlich komplexes System und ein großes Programmierprojekt, an dem viele Personen arbeiten, muss sehr viele periphere Kommunikations- und Dokumentationsaufgaben erfüllen, um nicht in der Flut von Detailinformationen - und Missverständnissen, die zu Fehlern führen - zu ertrinken. |
: Was das Programmieren noch schwierig macht (neben den vier oben angeführten Problemfeldern) sind menschliche Probleme, organisatorische Probleme und die Fülle an nervtötenden Detailproblemen. Ein großes Programm ist ein erstaunlich komplexes System und ein großes Programmierprojekt, an dem viele Personen arbeiten, muss sehr viele periphere Kommunikations- und Dokumentationsaufgaben erfüllen, um nicht in der Flut von Detailinformationen - und Missverständnissen, die zu Fehlern führen - zu ertrinken. |
4. ability to abstract, think on several levels
[17] What's hard about programming (besides maybe having trouble with the four traits above) is mostly picky little detail and organizational problems, and people problems. A large program is a terribly complex system; a large programming project worked on by many people has to work very hard at peripheral, picayune tasks like documentation and communication if the project is to avoid drowning in a flood of little details and bugs.
Diskussion / Korrekturen |
Franz, danke für die IMO sehr wesentliche Korrektur. -- hl