skweez.net

Erfahrungsbericht über Google Summer of Code

by ritze
26.11.2012

Diesen Artikel habe ich ursprünglich für ubuntuusers.de verfasst und möchte somit meine Erfahrungen im Rahmen des Google Summer of Code schildern.

Alles begann als ich Anfang des Jahres bei heise online mal wieder über Google Summer of Code las. Ich wollte schon immer meinen Teil zum Projekt Gnome beitragen und so etwas an die Gemeinschaft zurückzugeben. Ich benutze den Desktop nun schon seit mehr als vier Jahre. Also fing ich an im Wiki von Gnome ein wenig herumzustöbern und stieß auf eine Seite mit Ideen zum diesjährigen Google Summer of Code. Nach längerer Überlegung dachte ich mir, ich versuch es einfach einmal bei Anjuta.

Anjuta ist eine IDE, die das Leben eines Programmierers erleichtern soll. Eine IDE beherbergt in der Regel viele nützliche Werkzeuge, sodass man beim Programmieren nicht durch Trivialitäten abgelenkt oder gar aufgehalten wird. Ein Beispiel wäre das markieren von Syntaxfehlern. Auch Programmierer sind nur Menschen und machen somit auch Leichtsinnsfehler indem sie sich vertippen oder einfach ein Zeichen vergessen. Die IDE markiert diese Fehler und macht damit den Programmierer darauf aufmerksam. Dadurch werden sehr viele Fehler im Vorhinein verhindert.

Projekt gefunden – was nun? Als Mentor für das Projekt Anjuta wurde Johannes Schmid angegeben. Zudem fand ich die Entwickler-Mailingliste von Anjuta heraus und trug mich auch gleich dort ein. Mein Englisch ist nicht gerade das beste und nun soll ich eine E-Mail in Englisch verfassen? Natürlich war das für mich eine der größten Hürden bei der Teilnahme an Google Summer of Code. Dennoch wagte ich mich dran und so folgte eine kurze E-Mail, mit der ich mein Interesse kundgetan hatte. Johannes antwortete mir innerhalb von zwei Stunden und erklärte mir, dass ich als erstes etwas zum Projekt beitragen sollte. Das einfachste wäre einen kleinen Bug zu beheben. Damit soll sichergestellt werden, dass ich es ernst meine.

Ich behebte also einen kleinen Bug und konnte somit auch gleich den Quelltext von Anjuta ein wenig kennen lernen. Ich hatte zuvor schon von der Uni aus mit ein paar Kommilitonen ein größeres Programm geschrieben, jedoch war Anjuta das bisher größte Projekte und hatte dementsprechend auch mehr Zeilen Code, mehr Klassen und demzufolge auch mehr "Infrastruktur".

Anschließend suchte ich mir ein Thema aus, das ich über die nächsten drei Monate ausarbeiten werde. Ehrlich gesagt, ist mir nichts dazu eingefallen, allerdings gab es bereits einen Vorschlag von Johannes auf der Gnome-Wikiseite, auf der alle Google-Summer-of-Code-Projekte von Gnome aufgelistet wurden. Dort stand etwas von "Clang".

Clang ist ein Frontend vom LLVM Compiler. Wie auch der GNU Compiler (kurz: GCC) übersetzt der LLVM Code von den Programmiersprachen C, C++ Objective-C und Objective-C++ in Maschinencode. Das ist längst nicht alles. LLVM bringt auch viele Werkzeuge mit, die es ermöglichen, den Quelltext nach Fehlern zu durchsuchen und den Programmierer beim compilieren darauf aufmerksam zu machen. Das macht LLVM sehr effizient und in manchen Bereichen sogar besser als der GCC. Mit Clang können nun Programmierer auf diese Funktionalität vom LLVM zurückgreifen und sie mit ihren Programmen kombinieren.

In meiner offizielle Bewerbung schrieb ich kurz etwas zu meiner Person und erklärte anschließend, wie Clang Anjuta bereichern kann. Dabei werden mehr Fehler von der IDE erkannt und der Programmierer kann diese gleich bei der Entstehung korrigieren. Dies hat zur Folge, dass in den Programmen weniger Fehler vorliegen und somit wird die Qualität der einzelnen Programmen gesteigert. Außerdem verbringt der Programmierer weniger Zeit mit Fehlerbehebung vom Code, was mehr als die Hälfte beim Programmieren aus macht. Diese Zeit kann also in neue Funktionen gesteckt werden, was wiederum den Endbenutzer glücklich macht. Mit diesem Vorhaben schlage ich also mehrere Fliegen auf einmal.

Es verstrich ein wenig Zeit bis ich die Zusage an Google Summer of Code bekommen hatte. Das Programm war in mehreren Phasen eingeteilt. Die erste Phase war die Community-Phase, in der man die Menschen hinter den Nicknames kennen lernen soll. Dazu gehört natürlich auch, dass man sich selber vorstellt und über den ganzen Zeitraum des Projektes hinweg Berichte schreibt, in denen man den aktuellen Stand der Dinge, sowie Probleme und eventuell auch deren Lösungen beschreibt. Meine Berichte hatte ich auf meinem Blog verfasst, die wiederum über Planet Gnome publiziert wurden. Daneben richtete ich eine Seite im Gnome-Wiki ein, die über das Projekt hinweg immer aktuell gehalten wurde.

Wie bei jedem neuen Projekt ist auch bei Anjuta aller Anfang schwer. Man muss sich in den Quellcode einlesen. Dazu gehört auch das Lesen von Dokumentationen, die Handhabe von Bibliotheken wie beispielsweise GLib und Allgemein das objektorientierte Programmieren mit einer Programmiersprache C, die ursprünglich dafür gar nicht ausgelegt wurde. In dieser Phase lernte ich unglaublich viel über allerlei Dinge und genau das ist auch der große Pluspunkt bei Google Summer of Code.

Der Rest ist Geschichte. Mein ursprüngliches Ziel Clang nach Anjuta zu bringen, konnte ich leider nicht erreichen, jedoch habe ich eine gute Grundlage dafür gelegt und habe auch die Absicht, das Plugin in naher Zukunft fertig zu schreiben. Nichtsdestotrotz habe ich unter der Haube von Anjuta vieles vereinfacht und zusammengelegt, was die meiste Zeit meines Projektes in Anspruch genommen hat. Es ist nun leichter ein Plugin für eine Programmiersprache zu schreiben als zuvor. Zudem sind nun Eigenschaften wie zum Beispiel das automatische hinzufügen von einer schließenden Klammer ')' nach der Eingabe einer offenen Klammer '(' für alle unterstützten Programmiersprachen von Anjuta vorhanden. Auch das Verhalten ist jetzt überall gleich.

Ich für meinen Teil Bereue es nicht, dass ich an diesem Programm teilgenommen habe. Ich konnte dadurch sehr viel neues Lernen, zumal ich mich mittlerweile im Quelltext von Anjuta größtenteils auskenne und ich auch Vorhabe dem Projekt weiterhin Code beizusteuern, sofern ich genügend Zeit finde.