Frameworks nutzen oder doch selber machen?

Hubivan

Mitglied
Hallo Zusammen,

Meine Frage ist jetzt vielleicht keine reine Technik Frage und könnte eventuell ins philosophische abtrifften, aber sie hat mit Java zu tun und mich würde mal interessieren was ihr über das Thema denkt.

Ich hatte gestern mit einem Freund ein Gespräch so allgemein über Programmieren mit Java und dabei sind wir natürlich auch auf die Verwendung von Frameworks, wie etwa Spring, JSF, JPA aber auch älteren Sachen wie etwa Struts gekommen und natürlich auch andere Frameworks die ich hier jetzt nicht genannt hab.

Er meinte dann dass der Einsatz von Frameworks oft übertrieben wird, viele der Frameworks sind nicht performant oder es werden einfach zu viele gemischt eingesetzt, weil man "nichts" mehr selber macht und auch für Kleinigkeiten dazu neigt ein monströses Framework einzubauen, von dem man dann genau eine Funktion braucht.

Ich persönlich muss sagen, zum Teil geb ich ihm Recht. Ich finde wenn zu viele Frameworks gemischt eingesetzt werden leidet die Performance und auch der Entwicklungsprozess selbst wird langsammer weil man sich einfach mit zu vielen Dingen gleichzeitig beschäftigen muss. Oder aber auch der Punkt wenn man ein riesiges Framwork einsetzt um dann eine einzige Funktion davon zu verwenden die man auch hätte leicht selbst schreiben können hat man hier jede Menge Overhead zur Laufzeit, immerhin muss ja
die Lib geladen werden.
Aber wählt man das richtige Framework für das was die Software können muss, kann so ein Framwork auch durchaus die Performance steigern, gerade wennn man selbst noch nicht so die Erfahrung hat wie man Code optimieren und schneller machen kann.

Wie seht ihr dass sind Frameworks nur Performancebremsen, oder können sie bei richtigem Einsatz eher die Performance steigern?
 
Ich persönlich neige eher dazu, so wenig externe Libs und besser sogar gar keine zu verwenden. Viele Sachen kann man auch mit Bordmitteln ganz gut umsetzen. Vielleicht nicht so elegant und schnell, wie mit einer entsprechenden Lib, aber dafür habe ich dann auch keinen unnötigen Overhead mehr. Genau das ist aber das Problem. Wenn ich eine für mich spezielle Lösung baue, dann ist alles darauf abgestimmt. Libs und vor allem Frameworks haben dieses Privileg aber nicht. Sie sind oft sehr allgemein gehalten und versuchen mehr oder weniger alles abzudecken. Das führt zwangsläufig zu jede Menge Overhead, der dann aber sein muss.

Wenn man im Großen und Ganzen das Framework mehr oder weniger gut ausnutzen kann, dann kann man mit Sicherheit mehr davon profitieren, als die vermeindliche Performanceeinbußen vielleicht Auswirkungen haben. Wenn ich mal so überlege, was bei uns so im Einsatz ist, dann muss ich sagen, dass ich es für Businessapplikationen auch gar nicht anders haben will. Spring und Hibernate sind Grundausstattung jeder Anwendung bei uns, alles andere wäre unverantwortlich. Und wenn die Anwendung in einem ApplicationServer läuft, dann ist es eh egal, denn die ganzen Libs müssen nur beim Start geladen werden und sind dann im gesamten Kontext verfügbar. Wenn der Server dann irgendwann in der Nacht neugestartet wird, dann juckts auch niemanden, wenn der vielleicht 10 Sekunden länger zum Hochfahren braucht.

Ich für meinen Teil sage: Es kommt drauf an. Gerade für die meisten privaten kleinen Tools lohnt sich das in der Regel in keinster Weise. Hat man aber eine Anwendung, die die entsprechenden Dimensionen erreichen könnte, dann macht es durchaus Sinn über diverse Frameworks nachzudenken. Die Frameworks existieren ja nicht zum Spaß. Sie machen vieles leichter und deutlich angenehmer und treiben die Entwicklungen auch voran. Man ist zudem auch produktiver, da es auch deutlisch schneller voran geht.
 
Ich denke der Schlußabsatz trifft es am besten: Es kommt darauf an.
Letztendlich ist es eine Sache der Kosten. Ich für meinen Teil bin kein Fan von selbst bauen, das liegt vermutlich eher daran, dass ich oft die Erfahrung gemacht habe, dass bestimmte Teams fast immer etwas customized haben oder komplett selbst neu entwickeln. Völlig klar; denn etwas selbst entwicklen heißt auch ausprobieren, testen, lernen. Das macht den Entwicklern einfach mehr Spaß.
In größeren Projekten zieht das fast immer die ersten Kinderkrankheiten mit sich, Lernphase, Bugs, Security Issues, etc. So etwas ist vom Aufwand her umheimlich schwer zu schätzen, noch schwerer als Software Aufwände ohnehin zu schätzen sind.
Von daher sollte man immer genau abwägen. In größeren Projekten empfehlen sich kleine Prototypen die z.B. ein/mehrere Framework(s) vs. Proof of concept Eigenimplementierung testen. Hier am besten immer wirklich systematisch vorgehen und Vor- gegen Nachteile objektiv abwägen.
 
wenn ich beispielsweise spring und/oder hibernate anschaue und mir dann anschaue, wie effizient und einfach mit JPA und spring DI gemacht werden kann, dann sind das frameworks, die ich im regulären java-umfeld relativ häufig einsetze.

auf dem server wiederum nutzt man implizit frameworks, indem man JEE konform entwickelt.

auf dem androiden hingegen verzichte ich beinahe vollkommen auf frameworks.

ich glaube, dass es vor allem eine frage des einsatzgebietes ist.

das laden einer lib sollte eigentlich keine performancebremse sein, sondern eher die umsetzung der lib-klassen.

allerdings : eine webanwendung auf z.b. tomcat zu entwickeln, ohne ein framework (wie z.b. rich faces, spring o.ä.) zu nutzen, ist imo heutzutage kostentechnischer wahnsinn, da solche frameworks genau zu diesem zweck entwickelt werden.

viel interessanter ist imho die lizenzfrage. ich darf z.b. kein closed source - kaufprodukt mit swing vertreiben, wenn ich GPL libs drin habe.

grüße,
gore
 
Stimmt ich würde auch sagen es kommt ein bischen darauf an, was man vorhat und wo man das Projekt einsetzen möchte.
Und gore du hast vollkommen Recht, neben der technischen Frage kommt die Lizenzfrage noch dazu.

Ich selbst würde im Bereich der Webanwendungen eh nicht mehr auf Dinge wie Spring oder JPA verzichten wollen. Sowas selbst zu machen ist eigentlich glatter Selbstmord, gerade wenn man nur kleine Entwicklerteams hat. Selbst dann wenn die Entwickler genug Erfahrung haben sowas performant selbst zu gestalten, sowas bindet einfach Leute die für die Entwicklung des eigentlichen Produktes nicht zur Verfügung stehen.

Viele Grüße und Danke für eure Meinungen.

Hubivan

P.S. Mit meiner Antwort möchte ich die Diskussion noch lange nicht beenden, wer also noch was dazu schreibne möchte, immer her damit. Bin gespannt wie andere das so sehen.
 
Zurück