Montag, 3. Juni 2013

Die "besten" Java Frameworks, Libraries und Tools

Bestes Framework?
CC-BY-NC-ND Francis Mariani
Welche Java Frameworks, Libraries und Tools sind die "besten"? Welche gelten, noch ohne auf Spezifika der Projekte Rücksicht zu nehmen, als die "besten"? Welche sollte jeder Senior Java Entwickler beherrschen? Ist Hibernate "besser" als EclipseLink? Oder sollte man doch zu MyBatis oder gar JDBC greifen?

Leider wird bei der Frage nach den besten Technologien oft "beste" mit "persönlich liebste" verwechselt. Ich durfte schon in vielen Projekten mitarbeiten, wo nicht die besten, sondern die einem Entwickler / Architekten / Projektleiter / Auftraggeber persönlich liebsten Frameworks, Libraries und Tools eingesetzt wurden. Selbstverständlich wird da nie ehrlich mit persönlichen Vorlieben argumentiert, sondern meist mit Totschlagargumenten, die - forscht man ein wenig nach - sich meist in Luft auflösen.

Dabei ist es gar nicht so schwer die generell "besten" Java Frameworks, Libraries und Tools zu bestimmen. Dafür benötigt es nur folgende Erkenntnisse:
  1. Nicht die "Besten" sind auch automatisch die "Geeignetsten"
    Die Liste der besten Technologien kann nur eine Vorauswahl für die konkret geeignetsten Technologien sein. Im Detail kommt es noch auf viele Punkte an um aus den besten Technologien die im konkreten Fall geeignetsten herauszufinden. Dazu mehr in meinem nächsten Blogartikel
  2. Die "besten" Java Technologien sind ein Subset der "wichtigsten" Java Technologien
    In meinem letzte Blogartikel (Die "wichtigsten" Java Frameworks,  Libraries und Tools") habe ich eine Technik vorgestellt wie man die 10.000en Java Technologien auf die "wichtigsten" einschränken kann. Die dabei vorgestellte Mindmap enthält aber immer noch ca. 600 Java Technologien
  3. Die Auswahl der "Besten" benötigt eine allgemein gültige Definition was "beste" bedeutet.
    Nicht alles ist projektspezifisch. Es gibt eine Reihe allgemein gültiger Kriterien die entscheiden, ob beispielsweise ein Java Framework zu den "besten" Java Frameworks zu zählen ist.
Hier ein Vorschlag für eine allgemein gültige Definition der "besten" Java Frameworks, Libraries und Tools:
  • Ausgereiftheit: Neu aufkommende Frameworks, Libraries und Tools mögen vielleicht hip sein, aber dafür sind sie auch meist buggy und halten noch nicht wirklich das, was sie versprechen.
    Üblicherweise kann man aber davon ausgehen, dass Software dann halbwegs ausgereift ist, wenn sie a) offiziell in einer final Version vorliegt und b) schon einige Jahre existiert und c) sich nur noch prozentuell kleine Programmteile von Version zu Version ändern.
    Hibernate Nutshell @ Ohloh
    Mittels ohloh kann man diese Informationen leicht für OpenSource Frameworks, Libraries und Tools beschaffen. Für Hibernate beispielsweise findet man dort folgende Information:
    ".. has a well established, mature codebase with decreasing year over year commits"
    Hibernate kann man also eindeutig als ausgereift ansehen. Betrachtet man darüberhinaus noch die Anzahl der monatlichen Commits, so erkennt man, dass Hibernate bis Mitte 2005 starken Änderungen unterworfen war, aber ab 2006 nur mehr relativ wenig geändert wurde.
    Seit 2006 kann Hibernate also als ausgereift angesehen werden kann. Das deckt sich auch zu 100% mit meinen Erfahrungen mit Hibernate in diesen Jahren.
  • Zukunftssicherheit: Mit jeder Toolentscheidung liefert man sich auch dessen Maintainern aus. Sind diese am Support der Software in Zukunft nicht mehr interessiert steht man meist blöde da. Die theoretische Option bei OpenSource Software, deren Wartung selbst zu übernehmen ist in der Praxis so gut wie nie rentabel.
    Aussagen zu Zukunftssicherheit ist leider immer Glaskugelei. Stellen alle namhaften Datenbankhersteller ihre relationalen Datenbanken ein, so wären die Tage eines OR-Mappers wie Hibernate gezählt.
    Man kann aber davon ausgehen, dass wenn hinter einer Software eine große Entwicklermannschaft steht und diese Software auch viele tausend Male weltweit eingesetzt wird, diese Software auch noch in einigen Jahren bestehen wird.
    Bei der Beantwortung der Frage nach der Größe der Entwicklungsmannschaft hilft Ohloh. Zur Größe der Entwicklermannschaft von Hibernate findet man bei Ohloh folgende Informationen:
    "Over the past twelve months, 54 developers contributed new code to Hibernate. This is one of the largest open-source teams in the world, and is in the top 2% of all project teams on Ohloh."
  • Dokumentation und Support: Je besser eine Software für die Anwender dokumentiert ist, desto einfacher ist sie zu erlernen und korrekt zu verwenden. Je besser der Support einer Software ist, desto rascher und korrekter wird einem bei Problemen geholfen. Zu verbreiteter Software findet man oft Bücher, bei OpenSource Produkten teilweise sogar auf deren Homepage zum Download. Bei anderen hilft die online-Dokumentation, Foren, Blogs, etc..
    All diese Dinge kann man im Internet relativ leicht eruieren, beispielsweise gibt es bei Amazon.com 189 Bücher mit "Hibernate" im Titel, 13 davon betreffen nicht das Framework, sondern den Winterschlaf oder ähnliches, es gibt also ca. 176 englischsprachige Bücher zu diesem Thema. Lt. Google Suche gibt es 391.000 Bücher, 2,5 Mio Blogartikel und 4,5 Mio Diskussionen mit Hibernate im Text - andere Wortbedeutungen hier auszuschließen ist aber nicht mehr möglich.
  • Verbreitung: Die Verbreitung einer Software hat direkten Einfluss auf die Zukunftssicherheit, aber auch einen indirekten Einfluss auf die Dokumentation und den Support der Software. Hibernate beispielsweise prahlt auf der Hibernate FAQ Seite mit folgendem:
  • "About 25.000 developers are registered on the Hibernate forums. An average of 150 questions are asked and answered on the community forums every day. Hibernate is downloaded about 3.000 times every day. These numbers - unlike marketing numbers shown by competing commercial software vendors - are easily verifiable by anyone (just check our SourceForge project page)"
    Die Verbreitung führt also dazu, dass man rasch zu korrekten Informationen zu der Software kommt. Darüberhinaus findet man eher mit der Software erfahrene Entwickler - dies ist insbesondere im Java Umfeld wichtig, wo von den Softwareentwicklern Erfahrung in Hunderten Frameworks, Tools und Techniken verlangt wird.
    Wie oft ein Werkzeug tatsächlich eingesetzt wird, ist oft schwer zu eruieren - die Webseiten der Hersteller (so auch bei Hibernate) sind diesbezüglich oft veraltet. OpenSource Provider wie Google Code oder Sourceforge bieten für die bei ihnen gehosteten Projekte eine entsprechende Statistik, viele Frameworks und Libraries werden aber über Maven Repositories geladen und fehlen daher in derartigen Statistiken. Für einen Vergleich der Verbreitung von Software kann man aber Google Trends heranziehen - die Anzahl der Suchanfragen bei Google ist bei Software vermutlich direkt proportional zu ihrer Verbreitung.
Fazit: Es gibt sehr wohl Techniken um die "besten" Java Frameworks, Libraries und Tools zu eruieren. Diese sind allerdings aufwändig und vielen Entwicklern / Architekten ein Dorn im Auge, da sie oft nicht die (bleeding edge) Ergebnisse liefern, die sie sich erhoffen würden.

In meinem nächsten Blogartikel werde ich anhand dieser Techniken für typische Bereiche in der Java Softwareentwicklung die besten Frameworks, Libraries und Tools eruieren. Ich bin schon gespannt:
Wetten werden gerne angenommen :-)



web analytics