The joys of C++
October 19th, 2007
Quick, why does this give me a compiler error?
if (dIntersectionZ < box.GetChild(0,0,0).GetBox().Min.z) Assert(false);
else if (dIntersectionZ < box.GetChild(0,0,1).GetBox().Min.z) z = 0;
else if (dIntersectionZ < box.GetChild(0,0,2).GetBox().Min.z) z = 1;
else if (dIntersectionZ <= box.GetChild(0,0,2).GetBox().Max.z) z = 2;
else Assert(false);
The compiler complains that the else in the second line does not belong to any if. Read the rest of this entry »
F# Observations
August 12th, 2007
I’m feeling all mad-scientistic tonight, sipping coke, with 30 tabs open in Opera :)
On my journey into the weird world of functional programming on the .NET CLR, I continue to stumble upon interesting stuff. Papers, articles, interviews, each worthy of hours of dedication. Alas, my day still has only 24 hours (I need to work around that somehow), so at the time being I can’t do much more than glance over everything. Read the rest of this entry »
An apple a day…
July 31st, 2007
Wie heisst die Faustregel doch so schön? “Lerne jedes Jahr eine neue Programmiersprache”
Bisher schlage ich mich damit ganz gut:
2007: ein bißchen Python
2006: C#, Ruby, Javascript
2005: genug C++ um da in Zukunft einen Bogen herum zu machen, genug Haskell um ein permanentes distanziertes Interesse zu erhalten das vielleicht irgendwann durchschlägt in ernsthafte Auseinandersetzung.
2003/2004: Java
1999-2002: PHP, SQL Read the rest of this entry »
C# vs. The World
November 13th, 2006
Meine erste Einstellung gegenüber C# war ablehnend. Wozu ein neue Sprache die kaum wesentliche Vorteile gegenüber Java bietet? Nach näherer Beschäftigung mit .NET 2.0 sah die Sache besser aus. Properties? Nice! Anonyme Funktionen? Praktisch!, Closures und Iteratoren? Yay! Langsam schien die Entscheidung doch nicht die verkehrteste zu sein.
Bei der konkreten Arbeit offenbaren sich jedoch allmählich die Unterschiede zwischen Theorie und Praxis:
- Die ganzen coolen Funktionen und Konstrukte verstecken sich hinter einem Wust redundanter Syntax, die nur duch viele automatische Funktionen in VisualStudio 8 erträglicher wird.
- VisualStudio kommt zwar mit einem Debugger, ein Speicherprofiler muss aber extern installiert werden, ein Laufzeit-Profiler kostet extra.
- Wenn ich den erwische der die Idee hatte, XML als Markup für die DocComments zu benutzen…
- Viele der netten Features sind in ihrer tatsächlichen Verwendung nur noch halb so nett. Das Programmieren in streng getypten Sprachen ist eine Qual wenn man einmal mit Ruby gearbeitet hat.
- Die Doku im MSDN ist zwar umfangreich, aber verwirrend und schlecht organisiert. Die Methoden, Properties und Member der Klassen stehen alle auf jeweils einer einzelnen Seite mit unzähligen Links, die irgendwohin führen. Soviel Redundanz führt auch dazu, dass Suchergebnisse selten akkurat sind und die gewünschte Information erst nach ein paar weiteren Klicks gefunden wird.
C# ist im Ansatz eine gute Idee, mein ungutes Gefühl wird aber vor allem duch die Implementierung durch Microsoft verursacht. Man merkt schnell dass man hier mit proprietärer Technik arbeitet wenn viele wichtige Tools entweder nicht verfügbar sind oder Geld kosten (oder kennt jemand einen brauchbaren freien Profiler?).
Bessere Jobs dank C# ?
November 3rd, 2006
Dritte Woche PG, so langsam geht es los. Müssen die ersten Entscheidungen getroffen werden, gibt es auseinandergehende Meinungen.
Die Frage: Mit welcher Sprache wollen wir das Projekt implementieren? Zur Auswahl stehen C# und Java. C++ schied glücklicherweise schon in der Vorrunde aus.
Unsere Ausgangssituation sieht so aus, dass alle “so ein bißchen” Java Erfahrung aus dem Sopra haben, zwei Leute über etwas weniger Erfahrung mit C# verfügen. Kriterien die die Entscheidungsfindung erleichern sollten waren
- Verfügbarkeit und Qualität von Bibliotheken
- Performance
- 3D-Grafik Wiedergabe
und zu guter Letzt
- Vertrautheit mit der Sprache
Über die ersten drei Punkte bestand im wesentlichen Einigkeit, am letzten schieden sich jedoch die Geister, zwei Argumente stehen sich jetzt gegenüber:
Gegen C# spricht, dass so gut wie keiner von uns damit Erfahrung hat und dadurch neben den eigentlichen Anwendungsproblemen noch das Einarbeiten in eine völlig neue Sprachumgebung als Aufgabe hinzukommt. Der damit verbundene Aufwand ist nicht zu unterschätzen.
Zur Verteidigung der Verwendung von C# wird angeführt, dass man die PG dazu nutzen wolle, sich neben Java noch eine weitere, auf dem Arbeitsmarkt augenscheinlich momentan beliebte Sprache anzueignen.
Dieses Argument steht allerdings auf keiner guten Grundlage.
Vor allem ist der Wunsch eine neue Sprache zu lernen eine reine Privatangelegenheit und hat eigentlich keinen Bezug zu den Zielen des Projektes. Vorausgesetzt dass Java und C# unter allen erwähnten Kriterien äquivalent oder zumindest ähnlich sind, wird durch die Verwendung von C# nichts gewonnen, im Gegenteil, die Entwicklung wird durch den beschriebenen Lernaufwand noch behindert.
Darüberhinaus gibt es noch eine falsche, zumindest aber zweifelhafte Annahme die dem Argument zugrundeliegt. Leider konnte ich den Hintergrund dieses Gedankens in der Sitzung auf die Schnelle nicht überzeugend formulieren und habe ihn erstmal für mich behalten. Jetzt habe ich mich ein bißchen hingesetzt, nachgedacht und festgehalten was ich genau meine.
Die Idee, mit dem Lernen von C# jetzt seine Berufschancen zu erhöhen ist Unsinn
Aus –im wesentlichen– zwei Gründen:
Wem wirklich etwas daran liegt Sprachen zu lernen, der wartet nicht darauf dass die Uni auf ihn zukommt. Eigeninitiative und die Fähigkeit sich für eine Sache so zu interessieren dass man seine Freizeit darin investiert sind wesentlich mehr wert als C#. Paul Graham erläutert das Phänomen in Python Paradox:
It’s a lot of work to learn a new programming language. And people don’t learn Python because it will get them a job; they learn it because they genuinely like to program and aren’t satisfied with the languages they already know.
Which makes them exactly the kind of programmers companies should want to hire. Hence what, for lack of a better name, I’ll call the Python paradox: if a company chooses to write its software in a comparatively esoteric language, they’ll be able to hire better programmers, because they’ll attract only those who cared enough to learn it. And for programmers the paradox is even more pronounced: the language to learn, if you want to get a good job, is a language that people don’t learn merely to get a job.
Only a few companies have been smart enough to realize this so far. But there is a kind of selection going on here too: they’re exactly the companies programmers would most like to work for. Google, for example. When they advertise Java programming jobs, they also want Python experience.
Nun bin ich nicht so naiv zu glauben, alle deutschen Personalchefs würden Paul Graham lesen (sehr schade eigentlich), aber wenn man auf sein Engagement und seine Bandbreite an Programmiersprachen hinweist, dürfte es kein Problem sein, jemanden davon zu überzeugen, dass man sich innerhalb kürzester Zeit in jede beliebige neue Sprache einarbeiten kann.
Umgekehrt aber einem der Personalchefs, die Graham kennen, von der eigenen Flexibilität und Begeisterung für Softwareentwicklung zu erzählen, wenn alle Spracherfahrung die man vorzuweisen hat ein bißchen Java und C# im Rahmen halbfreiwilliger Uni-Veranstaltungen sind, dürfte schwierig werden.