Donnerstag, 3. Dezember 2009

How to use private svn repo with public (and actual git repository)

If you want to use a svn repository for storing your changes, but the code base is on git this is my way of doing so:

1.: Get the git repo:
git clone git://path/to/git/repo.git/

2.: Add the svn remote information to git: (.git/config)
[svn-remote "repository"]
url = http://path/to/svn/repo/
fetch = :refs/remotes/repository

3.: Fetch the svn source:
git svn fetch repository

4.: Checkout that svn branch into a local branch:
git checkout -b local-svn repository

5.:
git-svn rebase

6.: Get merges from master branch:
git merge master

7.: Commit changes:
git-svn dcommit

Montag, 19. Oktober 2009

Mein persönliches Resümee vom NET Open Space 2009 in Leipzig

Der Net Open Space 2009 ist vorbei.

Leider. Denn es hat vor allem viel Spaß gemacht! Ein großes Dankeschön auch an die Organisatoren. westinUnd danke an alle, die zu den vielen interessanten Disskusionen beigetragen haben. Auf ein paar der Themen möchte ich im Folgenden näher eingehen.

Alt.Net ist nicht tot!

Der Open Space hat gezeigt, dass es immer (noch) wichtige Themen zu besprechen gilt. Die Community bekommt meines Anscheins nach immer neue Mitglieder, die Fragen aber auch neue Anregungen mitbringen. Sehr erfrischend! Aber es zeigte sich auch, dass ein wichtiges Ziel der Community sein sollte, zu lehren, sich selbst und Andere(s) kritisch zu hinterfragen. Viel zu oft kommt es vor, dass vermeintliche Lösungen rules verwendet werden, die auf das eigene Problem gar nicht passen. Und das nur weil Person X dies als gute Lösung empfohlen hatte!

Verwende technologie-agnostische Architektur

Das Gleiche gilt auch für Technologien: Auch hier gilt es zu evaluieren, welches Paradigma tatsächlich auf meine Problemstellung passt! Nur weil eine Technologie X häufig verwendet wird, muss sie nicht automatisch verwendet werden! Stellt sich noch die Frage, wie das richtige Paradigma gefunden wird. Nehme die funktionalen Anforderungen und überlege dafür die beste Lösung und nehme in Kauf, das Menschen Fehler machen! Weitere Kriterien:
Wie weitreichend ist die Entscheidung für meine Anwendung. Muss ich beispielsweise Hibernate Sessions durch die gesamte Anwendung reichen, sollte ich mir genau überlegen dies zu verwenden! Kann ich dies aber in einer Schicht abstrahieren wäre es wohl besser. Natürlich spielt auch das vorhandene Wissen eine große Rolle. Hier reicht es nicht, so Ralf Westphal, architecture nur spezielle Technologien zu schulen. Vielmehr sollten sich Entwickler "blind" weiterbilden. Also immer wieder über den Tellerrand hinausschauen - kritisch natürlich!

Buildmanagement steckt noch in den Kinderschuhen!

Bei der Sitzung über kontinuirliche Integration stellte sich heraus, dass viele zwar schon CI verwenden, aber meist noch in Verbindung mit Buildskripten. Auch hat es den Anschein, als hätten sich Prinzipien wie DRY (don't repeat yourself) nicht bis in diesen Bereich verirrt. Der gewohnte Komfort wie mit Maven im Javaumfeld ist auch gar nicht (groß) bekannt. Hier gilt es Werbung zu machen für die Maven Prinzipien wie Coding by Convention und deklarative gears Konfiguration um nur zwei zu nennen. NPanday, welches Plugins für .NET zur Verfügung stellt, ist auch nicht bekannt, vermutlich auch weil es noch sehr jung ist. Sollte hier Interesse bestehen, bin ich gern bereit, Maven und NPanday in Vorträgen oder Demonstrationen vorzustellen.

Soft Skills sind wichtig!

Das spiegelte sich vor allem in der Anzahl der Sitzungen zu diesem Thema wieder: Null. Also doch nicht so wichtig? Ich denke schon. Wahrscheinlich machen sich Entwickler nicht so viele Gedanken darum. Und trotzdem schwebte dieses Thema irgendwie immer imdotnetpro ccd stempel2 almost half size banner (1) Raum! Schließlich ist ein Prinzip von CCD die tägliche Reflexion. Und auch zum Beispiel bei Scrum ist dies wichtiger Bestandteil. Leider sind noch zu viele zu unkritisch mit sich selbst. Für viele scheint es noch ein Problem, so die Meinung einiger Teilnehmer, wenn jemand den eigenen Code kritisiert oder gar verändert, an statt sich über die (hoffentlich) konstruktive Kritik zu freuen! Der hier gemachte Vorschlag klingt so einfach und lohnt trotzdem einer Evaluation: "nicht immer nur würgen, einfach mal umarmen!"

Danke Leipzig, danke an die Organisation und natürlich danke an all die interessanten Gespräche! Ich hoffe, wir sehen uns nicht erst in einem Jahr wieder!

Bildquellen:

http://www.flickr.com/photos/ajy/3889801150/

http://www.flickr.com/photos/orcmid/508703146/

http://www.flickr.com/photos/silipo/2944073307/

http://www.flickr.com/photos/17258892@N05/2588347668/


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
  • ...