Intelligenz vs. Dummheit der Masse: Kontroverse Diskussion um die Eclipse Code Recommenders

Hartmut Schlosser

Eine der spannendsten Eclipse-Neuerungen ist das Projekt Code Recommenders, das im Juno-Release in seiner ersten Major-Version enthalten ist. Kurz gesagt fügt Code Recommenders dem Java-Editor neue Code Completion Engines hinzu, die die rein logisch mögliche Zahl der Vorschläge auf intelligente Art und Weise reduziert. Dafür wird ein Korpus an Java-Quellcode einer Analyse unterzogen, die in der Lage ist, verbreitete Programmiermuster zu finden. Im besten Fall kommt man damit auf die Spur von Best Practices, die dem Entwickler direkt während des Programmierens in der Codevervollständigung zur Verfügung gestellt werden.

Die Community zeigt großes Interesse an dieser Verfeinerung der Code Completion, hat diese doch das Potenzial, den Entwickleralltag an vielen Stellen produktiver zu gestalten. Doch wird in der aktuellen Diskussion auch die Frage aufgeworfen, wohin diese „Demokratisierung der Code-Vervollständigung“ führen wird. Schließlich hat die breite Masse nicht immer Recht…

Im Eclipse Magazin beschreiben Marcel Bruch und Andreas Sewe den Ansatz des Code-Recommenders-Projektes mit der Idee, die kollektiven Mechanismen des Web 2.0 auf eine IDE zu übertragen:

Code Recommenders ist eine Erweiterung für die Eclipse Java Development Tools, die den Code von bereits existierenden Anwendungen analysiert, daraus Patterns ableitet, nach denen Entwickler bestimmte APIs für gewöhnlich verwenden und erweitern, und diese Erkenntnisse an die IDE zurückgibt: in Form von (i) intelligenter Codevervollständigung, (ii) erweiterter API-Dokumentation, (iii) verfeinerter Codebeispielsuche und sogar (iv) Werkzeugen zur Fehlererkennung.

All dies wird gespeist durch das implizite Wissen der breiten Masse an Entwicklern weltweit. Code Recommenders überträgt also das Konzept des Web 2.0 auf Ihre IDE, wenn Sie so wollen. Oder, wie wir es auch manchmal ausdrücken: Code Recommenders schafft eine IDE 2.0.

Auf dem Projekt-Blog und auf reddit nimmt die Community diese Idee der IDE 2.0 auf und diskutiert das anfangs geschilderte Problem: Nicht immer stellt ein oft anzutreffendes Entwicklungsmuster auch eine Best Practice dar. Was also, wenn eine rein quantitative Analyse dazu führt, „schlechte Angewohnheiten“ von Entwicklern vorzuschlagen und weiter zu verbreiten?

Schauen wir uns hier einmal einige der vertretenen Positionen an:

So nennt beispielsweise SM.ELAATIFI das Problem der Bad Practices beim Namen.

This is a great idea, but I think also that is promote bad design and bad practices (call chain breaks encapsulation)

tophat02 regt auf reddit an, das Tool so zu erweitern, dass Entwickler neuer APIs proaktiv gut funktionierende Methoden-Aufrufe, Use Cases, Templates, etc. mitteilen könnten.

maybe you could do things like

  • specify a „popularity index“ for classes and methods
  • leverage example cross refs in java doc (the examples could be in a template format the recommender could use)

Der Redditer sir_yes_sir sieht gerade in einer intelligenten Code Templates Engine eine Gefahr, das Schreiben von Boilderplate-Code zu promoten und generische Meta-Ansätze wie Modellierung zu vernachlässigen.

I have mixed feelings about pushing autocompletion so far (I’m referring to the Intelligent Code Templates paragraph). While for sure it can enhance productivity, however it can encourage the use of boilerplate code versus modelization.

Ein konstruktiver Vorschlag kommt von Lars Vogel, der anregt, intelligente Typenfilter einzuführen. In einem SWT-Projekt ist es schließlich unwahrscheinlich, dass Vorschläge zu AWT hilfreich sind.

What about intelligent type filters? If I use SWT in a project, it is unlikely that I want to import awt. Not sure if it is possible to find a general rule for this though.

Insgesamt kann man sagen, dass sich die Überlegungen sowohl des Code-Recommender-Teams als auch der Community in die Richtung bewegen, wie man von einer rein quantitativen Analyse zu einer mehr qualitativen kommt, die in der Lage ist, häufig vorkommende Programmierunsitten von Best Practices zu trennen.

Vielleicht haben auch Sie Ideen und Lust, sich an dieser spannenden Diskussion zu beteiligen?

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.