Artikel

 
November 2009 | Artikel

"IDE 2.0?"

(Link zum Artikel: http://www.it-republik.de/jaxenter/artikel/2671)

Wie IDEs von ihren Usern lernen können – und User von ihrer IDE.

Text: Marcel Bruch
Mit Web 2.0 hat ein fundamentales Umdenken in der Nutzung des Internets stattgefunden: Informationen werden nicht mehr länger von wenigen bereitgestellt und von vielen genutzt, sondern jeder ist jetzt in der Lage, seine Informationen und Erfahrungen bereitzustellen und zu einem "Großen Ganzen" zusammenzufügen. Wikipedia ist ein Beispiel für den Erfolg solcher Anwendungen. Die Frage ist nun: Können IDEs von diesem Konzept profitieren? Und wenn ja, wie genau?
Teil 1   Teil 2   Teil 3   

Software Frameworks sind aus dem heutigen Entwicklungsprozess kaum noch wegzudenken. Kein Wunder, treten sie doch mit einer Vielzahl von Versprechungen an, um die Welt der Softwareentwicklung effizienter zu gestalten. Dennoch ist ihr Einsatz nicht kostenlos: Bevor Frameworks effizient eingesetzt werden können, müssen Entwickler den Umgang mit ihnen zuerst einmal erlernen.

Das Projekt "Eclipse Code Recommenders"
Wer mehr über den hier vorgestellten Ansatz und das Projekt Eclipse Code Recommenders erfahren möchte, dem sei das vom Eclipse Magazin und itemis am 26.11.2009 in Frankfurt veranstaltete Eclipse DemoCamp empfohlen, in dem Marcel Bruch das Projekt in einer Live-Demo vorstellen wird.

Um die Einarbeitung möglichst gering zu halten, stellen Framework-Entwickler verschiedene Dokumentationen zur Verfügung. Dennoch bleibt oftmals unklar, wie gewisse Anforderungen mit Hilfe des Frameworks erfüllt werden können. Wenn die bestehende Dokumentation keine Hilfestellung mehr geben kann, stellt der Quellcode anderer Programme, die das Framework bereits auf ähnliche Weise benutzt haben, eine interessante Informationsquelle dar. In diesem Artikel wollen wir anhand zweier Beispiele zeigen, wie IDEs ihre Nutzer beim Erlernen neuer Frameworks besser unterstützen könnten: beispielsweise, indem sie aus dem Quellcode anderer Anwendungen die korrekte Nutzung des Frameworks erkennen und dieses Wissen dem Entwickler wieder zur Verfügung stellen.

"IDE 2.0" – Wie geht das? Zwei Beispiele wie Code anderer Anwendungen Entwicklern helfen könnte.
Nehmen wir die folgende Situation als Beispielszenario: Ein Entwickler möchte mit den Frameworks SWT und JFace einen einfachen Eingabe-Dialog erzeugen. Innerhalb dieses Dialogs soll ein Benutzer über ein Textfeld eine Eingabe machen können, die vom System dann ausgelesen wird. Nehmen wir weiter an, dass der Entwickler bereits die korrekte Basisklasse (in unserem Fall die Klasse org.eclipse.jface.dialogs.Dialog) ausgewählt hat. Abbildung 1 zeigt den Code, den die Entwicklungsumgebung für den Entwickler initial bereit stellt.

Nachdem die ersten Zeilen generiert sind, stellen sich für den Entwickler zwei Fragen: Wo kann der Code für das Text-Widget platziert werden? Und wie muss das Text-Widget konfiguriert bzw. verwendet werden, damit der Code am Ende lauffähig ist und die Eingabe tatsächlich ausgelesen werden kann?

Beschäftigen wir uns zuerst mit dem Wo.

HotSpot-Identifikation der Klasse Dialog
Um erste Anhaltspunkte zu bekommen, welche Methoden der Basisklasse überschrieben werden müssen, wird zuerst die Javadoc-Klassendokumentation der Basisklasse nach Hinweisen untersucht. Im Fall der Klasse Dialog ist diese Untersuchung allerdings nicht sehr erfolgreich; die Klassendokumentation beschreibt lediglich das Konzept der "modalen Dialoge" (vgl. Javadoc View in Abbildung 1), gibt jedoch keinen Aufschluss darüber, wo der eigene Code eingefügt werden kann. Darüber hinaus gibt es in der Klasse auch keine abstrakten Methoden, die einen Entwickler auf die relevanten, da zu implementierenden Methoden hinweisen könnten. Der Entwickler ist jetzt also gezwungen, alle 55 Methoden von Dialog manuell zu untersuchen, d.h. nach interessant klingenden Methodennamen zu fahnden bzw. die Javadocs der Methoden auf entsprechenden Informationen hin zu analysieren.

Nun kommt die Frage auf, wie andere Entwickler die Klasse Dialog typischerweise erweitert haben, d.h. welche der 55 Methoden bisher von Entwicklern besonders häufig überschrieben wurden.

Würde der Entwickler den gesamten Code seiner Eclipse-Entwicklungsumgebung nach Dialog-Subklassen durchsuchen, käme er zu dem Ergebnis, dass fast alle Subklassen die Methode Dialog.createDialogArea() bzw. sehr viele Subklassen die Methode Dialog.okPressed() überschreiben. Diese Methoden scheinen also in besonderem Maße für Subklassen interessant zu sein – warum also nicht auch jetzt? Die spannende Frage lautet: Wieviel würde ein Entwickler davon profitieren, wenn ihm die IDE exakt diese beiden Methoden vorschlagen würde, anstelle der gesamten Liste – oder ihm zumindest eine Empfehlung geben könnte, welche der vielen Methoden er sich genauer anschauen sollte?

Teil 1   Teil 2   Teil 3   

Anzeige

Kommentare

Gravatar TutNichtsZurSache 20.11.2009
um 17:52 Uhr
Link zum Eclipse Code Recommenders-Projekt ist fehlerhaft und das Datum des DemoCamps wohl auch .. zumindest sind Zeitreisen soweit ich weiss nicht erfunden worden weshalb mir deshalb ein Besuch wohl nicht möglich ist.Gruß #zitieren
Gravatar Redaktion JAXenter 20.11.2009
um 18:25 Uhr
Der Link wurde repariert - danke für den Hinweis! Und auch Zeitreisen werden nicht nötig sein um zum Eclipse DemoCamp zu gelangen: Am 26. November ist auch "TutNichtsZurSache" herzlich nach Frankfurt zum Campen eingeladen! #zitieren
Gravatar nero 28.11.2009
um 13:42 Uhr
Klingt ja alles schön und gut - aber ein grundsätzliches Problem sehe da schon: Seit wann hat die Mehrheit einfach so recht? Wirklich innovativ wird man meiner Meinung nach nur sein, wenn man neue Lösungen schafft, die aus der Masse der Durchschnittsentwicklung heraussticht. (Kreativität kann man nicht automatisieren)

Trotzdem find ich den Ansatz hochinteressant! Kann mir durchaus vorstellen, dass die beschriebene Lösung bei vielen kleinen Problemen weiterhelfen kann - vor allem, wenn man grad auf dem Schlauch steht oder noch nicht so gut mit einer Problemstellung oder einem Framework vertraut ist.

Ist es nicht denkbar, so eine Mischung aus automatischer Bewertung der Code-Vorschläge und einer "menschlichen" Bewertung durch eine Experten-Team einzuführen? Oder hier den Web 2.0 Gedanken weiterzuspinnen und die Community selbst bewerten lassen?

Bin gespannt, wie das weitergeht.... ;-)
#zitieren
Gravatar code-recommenders 30.11.2009
um 12:22 Uhr
> Seit wann hat die Mehrheit einfach so recht?
Das mit der Mehrheit ist tatsächlich so eine Sache :) Nicht alles, was Entwickler machen ist auch immer korrekt bzw. oftmals werden bestimmte Dinge eben nicht getan, die man vielleicht hätte tun sollen: Ein Beispiel ist das Registrieren eines Hilfstexts mit dem UI. Kaum einer macht es (davon manche m.E. aus Unwissenheit) - trotzdem wäre es schon, wenn Entwickler Hilfstexte über F2 bereitstellen würden. In so einem Fall kann das Tool vielleicht nützliche Anregungen geben.

> (Kreativität kann man nicht automatisieren)
Richtig. Ich sehe das Tool eher als eine Unterstützung für das "Handwerk Programmieren" - nicht als Kreativitäts- oder Ideengeber. Du entscheidest, wie dein Haus am Ende aussehen soll und welche Steine du benutzen willst. Das Tool sagt dir dann, wie du die Steine am besten setzen & welchen Mörtel du auftragen solltest. Hinkt das ein wenig? Vielleicht, aber der Unterschied kommt hoffentlich rüber :)

> Web 2.0 Gedanken weiterzuspinnen...
Das wäre wirklich klasse! Wenn man, wie du sagst, User bewerten lassen könnte, was sinnvoll gewesen ist oder sogar direkt von einem User lernen könnte, wie er ein (beliebiges) Framework benutzt, dann ist die IDE tatsächlich in "Web 2.0" angekommen :)

Tatsächlich arbeiten wir gerade an zwei Ideen in dieser Richtung. Wir hoffen bis zur JAX im Mai schon einiges davon umgesetzt zu haben. Aber Ideen, Feedback & Diskussionen zum Thema wären klasse! Interessiert sich jemand dafür (s)eine Idee für "IDE 2.0" umzusetzen?

> Bin gespannt, wie das weitergeht.... ;-)
Wir arbeiten weiter an der Alltagstauglichkeit & neuen Ideen :) Fragen, Ideen und andere Angebote gerne hier oder via code-recommenders@googlegroups.com

M.
#zitieren

Anzeige

zurück zum Seitenanfang