Truly Beautiful Code [updated]

In einer Sitzung heute kamen wir auf das Thema Beautiful Code zu sprechen, und natürlich auch auf das gleichnamige Buch. Bei InfoQ-Kollege Stefan Tilkov habe ich gerade ein wirklich schönes Stück Ruby-Code gesehen:

fib = Hash.new{ |h, n| n < 2 ? h[n] = n : h[n] = h[n - 1] + h[n - 2] }
puts fib[15]

Nicht wahr?

Update, 23. Mai

Ok, ich hätte vielleicht etwas mehr erklären sollen was da genau abgeht. Dazu kann man das ganze etwas schöner schreiben:

fib = Hash.new{ |h, n| h[n] = h[n - 1] + h[n - 2] }
fib[0] = 0
fib[1] = 1
puts fib[15]

Hash.new nimmt einen Block entgegen, welcher jeweils aufgerufen wird, wenn ein Element nicht im Hash vorhanden ist. Wenn also fib[15] evaluiert wird, kommt unser Block zum Zug, welcher dann das aktuelle Element bestimmt, wobei das ganze wieder von vorne beginnt, und zum Schluss im Hash ablegt. Schön daran ist, dass jede Zahl nur einmal berechnet wird, Memoization kriegt man also fast umsonst.

No comment »

TV Tipp zum Wochenende Sonntagabend: Tatort

Und auch nicht von TV Total, sondern von mir (und leider auch ohne Ingrid und Klaus).

Und zwar läuft heute die Erstausstrahlung einer neuen Folge meines Lieblings-Kommissars Frank Thiel und seinem Rechtsmediziner Prof. Karl-Friedrich Boerne (Jan Josef Liefers) im ARD, um 20:15. Also, an alle die glauben, der Tatort sei nur was für Senioren, schaut mal rein, es lohnt sich bestimmt.

2 comments »

Grüsse aus dem Starbucks

Um etwas Leben in diesen trübseligen und verregneten Sonntag zu bringen, habe ich meinen Laptop gepackt und mich in den nächsten Starbucks begeben. Schliesslich wollte ich schon lange mal herausfinden, ob man mit seinem HSR-Remote VPN-Profil reinkommt (ansonsten müsste man jede halbe Stunde einen neuen Coupon beim Barista holen, und natürlich auch schön fleissig konsumieren).

Und ja, so wies aussieht, funktioniert die Verbindung einwandfrei. Auch die Geschwindigkeit ist ordentlich (leider bleibt der Cnlab Speedtest beim Upload hängen).

Was ich auch gemerkt habe: Ich bin irgendwie viel produktiver hier, auch wenns recht laut ist komme ich richtig gut voran beim Arbeiten. Also, dann wünsche ich noch einen schönen Sonntag!

2 comments »

CDT C++ Refactorings in Ganymede!

Jawohl, es ist soweit, heute wurde unser letzter grosser Patch angenommen. Folgendes Menu wird also jedermann Ende Juni im neusten CDT-Release vorfinden:

Zudem haben die Committer-Abstimmungen für Emanuel Graf heute begonnen, 5 Stimmen hat er schon — ich denke man darf bereits gratulieren :-)

So, und wer jetzt glaubt reklamieren zu müssen, ja, Implement Method und Generate Getters and Setters sind keine Refactorings, aber es lohnt sich (noch) nicht, für zwei Einträge ein Top-Level Source-Menu einzuführen.

6 comments »

Installationsprogramm für ThinkPad-Software

Diesen schönen Dialog hat mir heute das Installationsprogramm für ThinkPad-Software (beim Neuinstallieren des Laptops meiner Freundin) präsentiert:

Vielen Dank! :-/

Die manuelle Installation hat dann leider auch nichts gebracht, da das Setup nach einer Diskette verlangt hat und mit dem Ordnerinhalt nicht zufrieden war. Janu, war bestimmt nichts wichtiges.

So, und nun werde ich noch etwas dem Service Pack 3 Setup zukucken, das auch schon seit über einer Stunde läuft. Immerhin ist der Balken bereits etwas über die Hälfte hinaus.

No comment »

Tipp zu Akronymen in Englischen Texten

Die Bachelorbarbeit geht langsam ihrem Ende zu und es wird Zeit, mal mit der Dokumentation zu beginnen, falls man diese nicht schon nebenbei am Schreiben ist. Bei uns am IFS werden, soviel ich weiss, alle Arbeiten komplett in Englisch geschrieben, deshalb möchte ich noch schnell einen Tipp loswerden, den ich vor einigen Tagen in Bugs in Writing gelesen habe.

Wie das in technischen Berichten üblich ist, benützt man sehr viele Akronyme, also Abkürzungen, die aus den jeweiligen Anfangsbuchstaben mehrerer Wörter bestehen, wie beispielsweise DVD. Falls man also ein Akronym in seinem Text einführen will, schreibt man dieses bei der ersten Verwendung in Klammern dazu. Also folgendermassen:

The parser creates an abstract syntax tree (AST).

Was nicht korrekt ist, aber vielfach gemacht wird, ist die Buchstaben des Akronyms gross zu schreiben (es sei denn, man würde das auch sonst gross schreiben):

The parser creates an Abstract Syntax Tree (AST).

Genauso unschön ist es, das ganze umzukehren:

The parser creates an AST (abstract syntax tree).

Ach ja, falls man ein Akronym im Abstract oder Management Summary einführt, muss man es im Hauptdokument trotzdem nochmals definieren, da das Abstract als eigenes Dokument gilt. Auch sollte man natürlich nur Akronyme einführen, die man auch tatsächlich mehrmals einsetzt.

1 comment »

Gelesen: Beautiful Code

Eigentlich mag ich Bücher, welche kapitelweise von verschiedenen Autoren zu verschiedenen Themen geschrieben werden sehr, es gewährt mir einen Einblick in fremde Themen, ohne dass ich gleich ein ganzes Buch darüber lesen muss. Gute Beispiele dafür sind die Bücher der No Fluff Just Stuff Serie [1][2]. Dieses hier? Naja..

Laut Beschreibung erklären in diesem Buch führende Computer-Science Leute Beispiele schönen Codes. Aber wie man so schön sagt: Schönheit liegt im Auge des Betrachters, beziehungsweise in diesem Fall des Lesers. Und meinen Geschmack hat es nicht immer getroffen, dafür hatte es viel zu viel C- und Java-Code, wobei ich mehr Ruby oder so erwartet hätte :-) .

Einige interessantere Beispiele:

  • FIT, von Michael Feathers
  • The Linux Kernel Driver Model, Greg Kroah-Hartmann
  • Distributed Programming with Mapreduce, Jeffrey Dean and Sanjay Ghemawat

Ich kann nicht sagen, dass mir das Buch gar nicht gefallen hat. Einige Beiträge waren sehr interessant und auch gut geschrieben, bei anderen war ich froh wenn sie zu Ende waren, teilweise habe ich auch einfach vorgeblättert.

1 comment »