... Organisationsentwicklung,, Aikido, Strategie und alles was mir sonst noch einfällt und nicht in mein englisches Blog passt...

Dienstag, 3. November 2009

Permanentes Code-Review (Aka pair programming howto)

Was unterscheidet Pair-Programming davon, zu zweit vor einem Rechner zu sitzen?
Aus meiner Sicht 3 Dinge:
  • Klare Rollendefinition
  • Ein festes Prozedere
  • Eine (mentale) Checkliste

Die Rollen

Die beiden Rollen, die wahrgenommen werden müssen sind die des Fahrers und die des Navigators. Dabei ist die Aufteilung ähnlich wie im Motorsport - der Fahrer ist dafür zuständig, bis zur nächsten Kurve zu kommen und der Navigator dafür, dass das Team auch nach der Kurve noch weiss, wie es weiter geht.
Übertragen auf die Programmierung bedeutet das, dass der Fahrer sich sowohl um Maus und Tastatur (entsprechend Gas und Kupplung) als auch um die konkreten Details der näheren Umgebung wie Klassen, Syntax, Struktur des aktuellen Codeblocks (entsprechend Geschwindigkeit, Drehzahl Straßenzustand etc.) kümmert. Der Navigator kümmert sich so lange um die weiter entfernten Zielen wie Design, Schnittstellen, Frameworks und Architektur (entsprechend Strassenkarte, Himmelsrichtung, Entfernungen etc.).
In dieser Rolle ist es auch Aufgabe des Navigators sich um so etwas wie das Roadbook – im Falle der Programmierung um den GoalStack – zu kümmern sowohl um die Erstellung, als auch um die Abarbeitung!

Das feste Prozedere

Das Prozedere zum Pair-Programming umfasst einen Bildschirm, eine Tastatur und eine Maus sowie eine Stoppuhr (welcher Art auch immer). Die Maßgabe lautet nun, dass beide Entwickler zugleich vor der Maschine sitzen, sich vor Beginn der Arbeit über das Ziel und den Zeitrahmen absprechen und in festen Intervallen von 10 bis 15 Minuten die Rollen wechseln. Beim Rollenwechsel sollten dabei tatsächlich nur Maus und Tastatur verschoben werden und weder die Sitzpositionen, noch die Monitorposition angepasst werden. Letzteres soll sicher stellen, dass der Navigator tatsächlich den gleichen Zugang zum Code hat wie der Fahrer. (Anm: Tools wie Key Jedi helfen zusätzlich, falls der Fahrer ein Mausgegner sein sollte...)

Die Checkliste

Die Checkliste für den Navigator kann entweder sogar physisch vorliegen, sollte aber auf jeden Fall zumindest mental bei jeder Zeile durchgegangen werden, die der Fahrer programmiert.
Kommt es zu "Verstößen" gegen die Checkliste ist es Aufgabe des Navigators, zu entscheiden, ob dieser "Verstoß" sofort aufgelöst werden muss (was zum Beispiel im Falle von Rechtschreibfehlern sicherlich sinnvoll ist) oder ob diese Verstöße eher in den GoalStack gehören – also auf eine kurze, völlig informelle Liste von Dingen, die man "noch in dieser Session" bereinigen muss. In diese letzte Kategorie fallen insbesondere notwendige Refactorings und Verstöße gegen das DRY oder YAGNI Prinzip.
Ein guter Startpunkt für eine solche Checkliste ist aus meiner Sicht die folgende:
  • [Nur bei TDD und BDD] Haben wir einen (fehlschlagenden) Test für den Code, den wir gerade schreiben wollen?
  • Wird die gleiche Absicht an andere Stelle im Code bereits ausgedrückt? (Verstoß gegen das Don't Repeat Yourself Prinzip, DRY)
  • Benötigen wir diesen Code zu diesem Zeitpunkt? (Verstoß gegen das You Aren#t gonna Need It Prinzip, YAGNI)
  • Kommuniziert der Code klar die Absicht, die mit ihm verfolgt wird? (Gegenbeispiel für C-Programmierer: {while(*p++=*q++)} )
  • Entspricht der Code dem vereinbarten Coding-Style?
  • Entspricht der Code den vereinbarten Naming Conventions?
  • Entspricht der Code der vorgesehenen Nutzung des Frameworks?
  • Ist der Code ausreichend dokumentiert?
  • Bietet der Code Optionen für Refactorings? (Enthält er Code-Smells?)

Anm.:
Vor langer Zeit gab es mal einen guten aber kurzen Artikel darüber, was Pair-Programming davon unterscheidet einfach zu zweit vor einem Rechner zu sitzen.
Leider hat selbst extensive Google und Twitter-Recherche keine greifbaren Hinweise auf diesen Artikel geliefert, was bei mir die Befürchtung aufkommen lässt, dass es sich bei diesem Artikel und einen echten gedruckten Artikel handelt - daher diese Zusammenfassung aus meiner Sicht.

Einige der Quellen, auf die ich mich dabei beziehe sind:
http://c2.com/cgi/wiki?PairProgrammingPattern
http://c2.com/cgi/wiki?GoalStack
http://c2.com/cgi/wiki?LetTheJuniorDrive
http://webpages.cs.luc.edu/~anh/170/Kindergarten.html
http://softwarecreation.org/2008/pair-programming-to-do-or-not-to-do/

Mittwoch, 29. Juli 2009

Continuous Integration / Permanente Integration

In letzter Zeit erzähle ich immer wieder etwas über meine Sicht auf das Thema "Continuous Integration" – es wird Zeit, das mal von Flipcharts und Whiteboards in Bits und Bytes zu transponieren.

Permanente Integration ist aus meiner Sicht etwas ganz anderes als der reine Tooleinsatz. Auch wenn mittlerweile selbst im Wikipedia-Artikel über “Kontinuierliche Integration” das Hauptaugenmerk auf der Automatisierung von Build, Test und Deployment liegt, gibt es noch eine andere Art, sich dem Thema zu nähern.

Da ich in absehbarer Zeit wohl kein Schriftsteller werde, würde ich mich um eine intensive Diskussion (z.B. hier in den Kommentaren) des Drafts unter
http://www.cg-ag.de/files/ContinuousIntegration-MindsetVersusTooling_draft1.pdf freuen.

(Auf einem Whiteboard ist es viel leichter darzustellen...)
Meine eigenen Hauptkritikpunkte:

  • Zu lang

  • Die Story fehlt noch (ist als nächster Schritt geplant)



Edit: Mittlerweile ist aus dem Draft ein Artikel geworden,der im RailswayMagazin veröffentlicht wurde. Ich muss "bei Gelegenheit" mal die von @jcfischer beigetragenen git-Spezifika wieder ausbauen und den Artikel als reinen "Was ist CI" Artikel veröffentlichen. Am besten auch gleich auf Englisch.

Freitag, 19. Juni 2009

Politisch inkorrekt? (Zensur in Deutschland)

Gestern ist also das (nach meiner Kenntnis) erste offizielle Gesetz in der BRD "durchgewunken" worden, dass Zensur in Deutschland für legal erklärt. Derzeit zwar nur für einen Bereich, in dem Zensur oberflächlich betrachtet "gut" zu sein scheint, aber schon gibt es ja die ersten Stimmen, die nach "mehr" rufen.

Schade, dass so wenig Leute z.B.: http://www.jensscholz.com/2009/04/warum-es-um-zensur-geht.htm (besonders den Teil "Verwaltung") gelesen haben (oder einfach das Gesetz selbst).

So bleibt wohl nur die Hoffnung auf eine Verfassungsbeschwerde oder -klage. Ob Aktionen wie z.B. die unter anderem von der Piratenpartei organisierte Demonstration etwas ausrichten können bleibt abzuwarten.

Zumindest war die Öffentlichkeit wohl nicht informiert genug um die Petition gegen das Gesetz durchzubringen.

Wobei ich mich jetzt schon frage, ob dieser Beitrag in ein paar Jahren gegen mich verwendet werden kann...

(P.S.: Wow, das Interview in dem Wiefelspütz die Ausweitung der Sperren fordert ist - zumindest unter dem alten Link http://www.berlinonline.de/berliner-zeitung/archiv/.bin/dump.fcgi/2009/0606/politik/0081/index.html nicht mehr verfügbar... die Interpretation sei dem geneigten Leser überlassen...

Dienstag, 7. April 2009

Der Wert von Software

Auch wenn sich das Buch mit dem Ansatz, eine neue Methodologie zu präsentieren erheblich zu weit aus dem Fenster lehnt, lohnt Software by Numbers doch auf jeden Fall die Lektüre.

Nicht so sehr, weil es neues zeigt, sondern weil es bekanntes zusammenfasst und den Zusammenhang von betriebswirtschaftlichen und softwarearchitektonischen bzw. prozesspezifischen Entscheidungen nachvollziehbar darstellt.

Cheerio
_MM_

Donnerstag, 2. April 2009

Mal was ganz anderes...


Auch bei der Aufstellung von Plakaten sollte man sich ein paar Gedanken machen... Aber vielleicht ist das auch nur ein Spiegel unserer Welt.

Cheerio
_MM_

Montag, 2. März 2009

Meine heutigen 2 Cent zum Thema Maven...

Moin!

nachdem letzte Woche an vier von fünf Tagen das Thema "Maven und die Sinnhaftigkeit des Einsatzes" hochkam, dachte ich mir, ich mache noch ein bisschen Lobby-Arbeit und weise auf den folgenden Artikel hin:

http://blog.labnotes.org/2007/04/18/introducing-buildr-or-how-we-cured-our-maven-blues/

Ohne natürlich zu verschweigen, dass zumindest im zweiten der dort zitierten Artikeln http://fishbowl.pastiche.org/2007/04/03/an_open_letter_to_maven_2/ und http://www.javalobby.org/java/forums/t92965.html#92139914 Maven gar nicht unbedingt Hauptthema war und es auch durchaus andere Stimmen gibt.

Erfolgreiche Woche!
_MM_

P.S.:
Ach ja: Buildr ist zu finden unter: http://buildr.apache.org/
Und richtig schnell soll es auch noch sein: http://blog.labnotes.org/2007/05/03/buildr-or-when-ruby-is-faster-than-java/

Anyway: Das sind natürlich nur meine 2 Cent und YMMV.