Empathic Code zwischen Rhein und Ruhr

10.06.2013 09:50

Am 29. Mai 2013 machte die .NET UG Tour von dotnetpro und Developer Week Halt in Ratingen. Als Referent war Johannes Hofmeister mit "Empathic Code" dabei.

An erster Stelle ein herzliches Dankeschön an 7Principles, die regelmäßig die .NET Usergroup Rhein/ Ruhr empfangen. Mit Kaffee, Getränken und Keksen werden Johannes Hofmeister, der Referent des Abends, und mehr als 10 interessierte Teilnehmer im großen Meetingraum empfangen. Hier prangt das Motto des Unternehmens an der Wand „Perfection.“ Und auch Johannes’ Vortrag dreht sich darum: Code besser und möglich nahe der Perfektion zu bringen.

Perfection

Am Ende des Abends stellt Johannes zwei Fragen aus seinem Vortrag. Die Gewinner bekommen ein Franken-Developer-Package und ein 3-Tages-Ticket zur Developer Week. Der erste von zweien hat die Qual der Wahl. Hätten Sie’s gewusst?

  1. Was ist ein trainwreck?
  2. Welche Prinzipien ergänzen SOLID?

 

Empathic Code, 12 und Erdnüssen.

Was haben die letzten beiden mit dem Ersten zu tun?

Johannes beginnt seine Talks gerne mit random facts. Hier die Auflösung: 12 ist die größte Zahl mit einer Silbe und Erdnüsse sind keine Nüsse, sondern Hülsenfrüchte, dagegen Erdbeeren sind Nüsse. Noch etwas Erstaunliches: Informatik ist KEINE Naturwissenschaft. Entwicklung erfordert viel kognitives Denken, daher hat Johannes zusätzlich ein Psychologiestudium begonnen. Er sagt: Wir schreiben Code nicht für die Maschine, sondern für den Menschnen. Der IT-ler muss es lesen.

 

Machine / Code / Intent

Programmierung ist eine Kommunikation von Mensch zu Mensch: Der Entwickler schreibt den Code und vererbt ihn weiter. Daher gibt es drei Ebenen, um Code zu diskutieren: Emotions, Boundaries und Language.

3 Ebenen von Code

Diese Gefühl kennt jeder Entwickler: Spüre Deinen Code, man sieht nur mit dem Herzen gut! Zu diesem Thema fertigt Johannes eine Studie: Seien Sie gespannt, ob auf der DWX shcon erste Ergebnisse vorliegen.

Um mit dem Herzen zu sehen, wäre es für höhere Codequalität manchmal besser, der Entwickler wäre kurzsichtig. Verschwommen sieht C# Code oft so aus:

C# kurzsichtig

Wenn das Loch links des „Bauchs“ sehr groß wird, wird gehäuft „if“ verwendet. Das mindert die Qualität des Codes.

 

Ein wichtiges Prinzip für besseren Code ist DRY, was ganz logischerweise WET widerspricht. Don’t repeat yourself vs. write everything twice. Ein ganz böser Verstoß in C# wäre also:

Duck duck = new Duck ();

Etwas schöner ist da schon Python: duck = Duck. Das sagt allerdings nur implizit etwas über eine NEUE Ente. Doch mehr zu Python in Johannes‘ Session auf der DWX.

Auch das ist ein bisschen WET:

public classCustomerRepository

{

     I Enumerable <Customer>
     Get Customer by Year of Birth (DateTime Year of Birth)

     {
     }

}

Wieso denn nicht ohne dabei nass zu werden:

Public class Customers
IEnumerable <Customer>
Born In (DateTime Year)

 

Wer sich an seine Kindheit erinnert, wird auch dem Prinzip „Size & Re-Use“ zustimmen: Einzelne Lego-Steine sind viel besser, da wiederverwendbar. Ein fertiges duplo-Flugzeug macht nur halb-soviel Spaß. Angewendet auf die Entwicklung: Ein Operator ist besser als eine Manager-Klasse von 4.400 Zeilen Code. Johannes kommt auch gerne zu Ihnen in die Firma und steht bei solch artigen Problemen mit Rat und Tat zur Seite.

 

Code, Philosophie und Maximen

Um guten Code zu schreiben empfiehlt Johannes des Öfteren bei Ihrer Großmutter vorbeizuschauen: Wenn die Oma es versteht, dann ist dem Schlimmsten vorgebeugt, denn: „If the implementation is hard to explain it’s a bad idea. If it is easy to explain, it might be a good idea.“ (The Zen of Python)

Eine andere Lösung für schlechten Code ist immer, den Kollegen zu wechseln. Denn der Urheber des Codes kann nicht schuld sein. Oder etwa doch? Warum einfach, wenn es auch kompliziert geht?

 

 

The Blind Man and the Elephant

(John Godfrey Saxe, Auszüge)

It was six men of Indostan
 To learning much inclined,
 Who went to see the Elephant
 (Though all of them were blind),
 That each by observation
 Might satisfy his mind
And so these men of Hindustan
 Disputed loud and long,
 Each in his own opinion
 Exceeding stiff and strong,
 Though each was partly in the right
 And all were in the wrong.

 

Die Männer sagen viel Verschiedenes, dennoch liegt jeder daneben: Sie bezeichnen den Elefanten als Wand, Speer, Schlange, Baum etc. Das Gleiche gilt für das allseits beliebte „Repository:“ Jeder hat schon mal eines gesehen, doch keiner kann es klar definieren. Oder können Sie es? Vorschläge gerne via Twitter und Facebook.

 

 

Johannes gibt seinen Zuhörern noch eine Hausaufgabe mit nach Hause: Schreiben Sie einmal in der Mittagspause innerhalb von 30 Minuten in C# einen „Brain Fuck Compiler.“ Diese polyglotte Aufgabe soll den Blick schärfen für besseren Code.

Die Sprache muss für das Problem geeignet sein. Wer schafft es, in 30 Zeilen einen Rubics Cube zu lösen? Mit Proloc ist das möglich, dagegen C# dürfte Probleme bereiten. Ein Buchtipp dafür: „Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages“ von Bruce A. Tate.

 

Im Publikum taucht die Frage auf „Kann ich problemlos mehrere Tools gleichzeitig verwenden?“ Johannes empfiehlt, für den Kerncode die geeignete Sprache zu suchen. Für das Framework kann sich eine andere besser eignen. Durch funktionales Denken lässt sich schnell herausfinden, welche Sprache wann anzuwenden ist.

 

 

Zum Schluss seien den Lesern eine Richtlinie an die Hand gegeben: Für natürliche Sprache ist natürliches Denken nötig. Wird zuerst die Frage geklärt „ist dieses Element wirklich wichtig?“ ist es sehr einfach der Linie „leicht verständlich“ zu folgen.

 

Simplicity

     10.times(doSomething)

Einfach so und ohne for-Loop. Wenn Du mir erklären kannst, was da steht, warum steht das dann da nicht: z. B. 1=1. Für eine einfache Regel einfachen Code schreiben ist das Gebot der Stunde.

 

Johannes geht es mit „Empathic Code und Weasel Words“ und seinem Vortrag „Empathic Refactoring“ auf der Developer Week nicht darum, eine Idee bzw. eine Vorschrift zu verkaufen, oder diese den Leuten einzubläuen. Er will zu einem Umdenken bewegen. In diesem Punkt hat Johannes bei der .NET Usergroup Rhein/ Ruhr einen kleinen Erfolg erzielt: Es wird viel diskutiert, auch wenn nicht alle seine Vorschläge gut finden. Der Vortragende hat kein Patentrezept, sondern will aufzeigen wie wichtig es ist „mündiger Entwickler“ zu sein.

 

Solche Diskussionen, die in die Tiefe gehen, sind nur in kleinem Rahmen möglich. Dafür sind Vorträge mit 100 Zuhörern eher nicht geeignet. Daher sind Usergroups wichtig und die Treffen zu besuchen jedem zu empfehlen.

 

Wer mehr von Johannes lesen und lernen möchte, dem seien sein Blog und seine Projekte auf GitHub empfohlen.

Auf der Developer Week präsentiert Johannes folgende Vorträge. Sprechen Sie Johannes an, wenn Sie weiterführende Fragen haben.

 

  • Python für C# Programmierer
    24.06.2013 15:00 - 16:00 Uhr   Track: Sprachen + .NET

 

  • Empathic Refactoring
    26.06.2013 09:00 - 10:00 Uhr   Track: Craftsmanship

 

Ich freue mich, die Gewinnerin des 3-Tages-Tickets in Nürnberg zu begrüßen!

Alle Photos und einige Codebeispiele vom Treffen der .NET UG Rhein/ Ratinngen finden Sie im Album .NET UG Tour.

Schlagwörter: .NET , Qualität


Autor Kerstin Hartmann

Kerstin ist als Projekt Manager Events aktiv im developer-media.de Team für die Neue Mediengesellschaft Ulm. Im Praxissemester schloss sie dort auch ihr Studium ab. Fokus-Projekte: DWX und weitere Events zur Softwareentwickler-Weiterbildung (z.B. DDC - .NET Developer Conference, SMART DATA Developer Conference - Big Data & Smart Analytics, WDC - Web Developer Conference (Angular & React), inklusive Speaker Management, Programme und Sponsorings. Ihre besondere Passion gilt den Social Media, Muay Thai und Food - Genuss und Zubereitung gleichermaßen.

Kerstin Hartmann

Developer Week in Social Media

Folgen Sie uns auf:

Aussteller & Sponsoren

Infos anfordern

Infos anfordern
  • Florian Bender
  • Projektleitung
  • Tel.: +49 (89) 74117-206
  • Fax: +49 (89) 74117-448
  • E-Mail: florian.bender@nmg.de

Medienpartner