Freitag, 19. Juni 2009

Das Problem der eigentumsorientierten Softwareentwicklung

Sind Softwareentwickler abgesonderte Individualisten?

Viele würden jetzt wohl spontan ja sagen. Jedenfalls haben Informatiker gemeinhin den Ruf Individualisten zu sein. Zum Beispiel schreibt Klischeestudent in seinem Blog über Informatiker folgendes:


Ihn in der freien Natur anzutreffen ist weitaus schwieriger, als einen BWLer zu sichten. Informatiker halten sich lieber in geschlossenen Räumen auf. Bevorzugter Lebensraum ist der Keller mit der selbsterbauten und technisch hoch entwickelten Computerecke. Weibliche Vertreter dieser Gattung sind nur schwer zu finden, die Männchen bleiben lieber unter sich und reagieren daher auch meist schockiert, wenn sich weibliche Wesen in ihrer Umgebung befinden. Der Informatiker setzt auf vornehme Blässe und Karohemden, um möglichst unauffällig zu sein. Denn im Gegensatz zum BWLer ist der Informatiker eindeutig ein Einzelgänger! Lebensmittelpunkt: Technik!

Auch Gerald M. Weinberg schreibt in seinem Buch die Psychologie des Programmierers, dass er die meisten dieser Zunft in die Kategorie abgesonderte Individualisten einordnen würde. Ich denke, dass sich die Anforderungen an Softwareentwickler stark geändert haben. Dies hat zur Folge, dass auch die Entwickler andere sind und dieses Vorurteil nicht mehr zutrifft. Kommunikation ist für dieses Berufsbild von immenser Bedeutung.

Trotzdem identifizieren sich viele Softwareentwickler und Programmierer gern und oft mit ihrem Programm. Anders ist es nicht zu erklären, warum einige Programme nach ihren Entwicklern benannt sind.

Auch kenne ich ein Projekt, welches nicht nach Fachlichkeiten, sondern den Namen der Entwickler organisiert wurde. Darüber zu diskutieren ist wohl nicht notwendig.

Aber was ist daran überhaupt das Problem? Es gibt keines, wenn man ein Programm hauptsächlich lesen würde. Aber das geschieht viel zu wenig. Ein Programm muss in erster Linie funktionieren und seine Aufgabe erfüllen. Dies lässt sich leicht überprüfen. Aber was passiert mit einem Softwareentwickler, dessen Programm nicht läuft, wenn es Fehler gibt? Er wäre ja automatisch ein schlechter Programmier.

Dieses Urteil geben sich eigentumsorientierte Entwickler selten. Ist ja auch verständlich. Dies führt zu einer kognitiven Dissonanz. Wikipedia erklärt den Begriff so:


Als Kognitive Dissonanz versteht man in der Sozialpsychologie einen als negativ empfundenen Gefühlszustand, der durch nicht miteinander vereinbare Kognitionen – Wahrnehmungen, Gedanken, Meinungen, Einstellungen, Wünsche oder Absichten – entsteht.

Und dieses Gefühl muss aufgelöst werden oder sollte gar nicht erst entstehen. Der Mensch strebt nach Konsonanz. Deshalb werden viele Dissonanzen schon erahnt und dies führt zu einer selektiven Wahrnehmung. Zum Beispiel wird ein Käufer nach einem Kauf eines bestimmten Produktes selten in Prospekte eines anderen Produktes schauen. Er könnte dann feststellen, dass sein Produkt das schlechtere ist.

In der Softwareentwicklung führt dies zu einer selektiven Wahrnehmung bei der Fehlersuche. Der Programmierer wird in seinem eigenen Code weniger Fehler finden als in fremden Code.

Deshalb ist es wichtig, den Code nicht als “sein” Werk anzusehen. Vielmehr sollte man sich freuen, wenn andere Fehler finden und gemeinsam an dem Code arbeiten. Dies führt bei konsequenter Anwendung zu besserem Code. Pair-Programming zum Beispiel ist eine sehr gute Möglichkeit dies zu erreichen. Jeder ist für jeden Teil des Programms verantwortlich, niemandem gehört der Code! Dies sollte sich jeder Entwickler beherzigen.

Ach ja: könnte bitte jemand diesen Text nach Fehlern durchsuchen, ich finde gerade keine mehr. ;-)







Montag, 8. Juni 2009

Psychologie in der Informatik

Auf dem 1. Architecture.NET Open Space in Düsseldorf gab mir ein Track besonders zu denken: Psychologie in der Softwareentwicklung.



Welche Auswirkungen hat die Psychologie für die Architektur? Welche Rolle spielen Hierarchie und Erfahrung? Wieviel Kreativität steckt in Softwareentwicklern oder wieviel sollte in Ihnen stecken? Ist der Beruf eines Softwareentwicklers eher ein praktischer oder eher ein kreativer?

All diese Fragen sind nicht einfach zu beantworten und waren Teil der Diskussion beim Open Space. Das wohl meistzitierte Buch in diesem Bereich ist sicher "Die Psychologie des Programmierers" von Gerald M. Weinberg welches ich gerade lese. Ich werde demnächst sicher dazu noch etwas bloggen.

Aber als erstes Thema möchte ich hier die Frage diskutieren, wieviel besteht der Beruf des Softwareentwicklers aus Handwerk und wieviel ist Kunst?

Dazu muss man zuerst erörtern, wieviel Handwerk man benötigt um künstlerisch tätig zu sein. Ich denke, dass man ziemlich viel erlernen kann und durch Übung festigen muss. Ich stelle mir gerade einen Maler vor. Sicher gibt es hier viele Genies. Aber auch die mussten die Grundlagen erst erlernen und immer wieder proben. Es gibt sehr viele verschiedene Pinseltechniken und die zu erlernen ist harte Arbeit. Ähnlich sehe ich es auch mit Informatikern.

Viel ist harte Arbeit. Es müssen ersteinmal die Grundlagen erlernt und immer wieder geübt werden. Aber an einem gewissen Punkt gehört auch in der Softwareentwicklung Kreativität zum täglichen Werkzeug. An vielen Stellen liest man immer wieder von weichen Faktoren, die sich nicht mit Metriken ausdrücken lassen. Zum Beispiel wenn Martin Fowler in seinem Buch
Improving the Design of Existing Code
von Smells redet. Einige von diesen Gerüchen sind sicher messbar, wie zum Beispiel wenn die Anzahl der Zeilen einer Methode eine bestimmte Anzahl überschreitet. Andere Smells lassen sich nur mittels Gefühl und/oder Erfahrung erkennen. Man hat das Gefühl, dass hier irgendetwas nicht so gut ist ... oder eben nicht. Hier kommt eben die Kreativität ins Spiel. Und die kann man nur bedingt erlernen.

Also liebe Softwareentwickler: Setzt euch hin und arbeitet. Arbeitet hart. Arbeitet an Euch und erlernt euer Handwerk und zwar gut. Dafür gibt es genügend Hinweise, wie dies zu erreichen ist. Zum Beispiel als Clean Code Developer. Aber unterdrückt niemals eure Kreativität. Sie wird gebraucht!

Neues Blog

Auch ich habe mich nun entschlossen meine Gedanken über meine Welt in einem Blog festzuhalten. Anreiz hierzu war der Besuch des Architecture.NET Open Space in Düsseldorf. Hier kamen am 5. und 6. Juni sehr interessante Persönlichkeiten zusammen um über das Thema Architektur zu diskutieren.

Viele neue Ansätze und Denkweisen habe ich hier aufgegriffen und einige der dort besprochenen Themen werde ich hier in der nächsten Zeit auch diskutieren. Dies betrifft wahrscheinlich folgende Themen:
  • Architektur im Allgemeinen
  • Clean Code
  • Psychologie
  • Patterns
  • Persistenz
  • ...