Diskussionen zu ext. Libs vs Eigenentwicklung

D

deek

Stammgast
368
Hi,

ich fand, die Diskussion, die sich hier gebildet hat sehr interessant, wollte aber nicht den Thread hijacken.
Da mich die Meinung anderer Entwickler (sowohl professionell als auch hobbymäßig[1]) sehr interessiert würde ich die gerne hier etwas weiterführen.

Mein ursprünglicher Beitrag:
Ich weiß nicht wie das andere sehen, aber meine persönliche Meinung:
Implementiere nie etwas selbst, für das es eine library gibt, die tut was du willst. Da muss man eventuell noch etwas differenzieren, wenn die lib noch nicht lange existiert oder nicht gepflegt ist kann das anders aussehen.

Nur mal als Beispiel: In einer App, die ich bei einer früheren Firma geschrieben habe sind ungefähr 20 externe, gut gepflegt libs drin. Warum? Es macht mir selbst sehr viel weniger Aufwand und im Zweifelsfall können die Leute, die sich teilweise schon Jahre mit einer Funktion in einer lib beschäftigt haben, das einfach besser.
Ich habe anfangs ca 5 Tage in einen ImageLoader verbraten, der in Memory und auf Flash Speicher cacht und das ganze auch noch multithreaded hinbekommt. Nach den 5 Tagen gab es immer noch Probleme. Dann habe ich Picasso von Square gefunden und innerhalb von einer halben Stunde eingebaut und alles funktioniert wunderbar!

Wenn du sagst du willst es zum Üben machen, dann stürze dich lieber auf Probleme die noch keiner hübsch gelöst hat und bau selbst eine lib draus.

Um direkt mal mit der Diskussion, die dort losging weiterzumachen:

"nie" war vielleicht wirklich etwas harsch und extrem. Es kommt immer auch darauf an, von wem die lib ist und wieviel man davon braucht. Ich bin ein Fan von kleinen spezialisierten libs, die wirklich nur eine Sache machen und diese dafür gut. Als positiv-Beispiel würde ich gerne alle libs von Square bzw. auch die privaten von Jake Wharton hervorheben. Die sind hochspezialisiert und machen das was sie sollen meistens perfekt und sind gut gepflegt. In einem solchen Fall macht es dann eben keinen Sinn das ganze neu zu implementieren (zumindest für mich). In anderen Fällen muss man sich eben wie gesagt genauer anschauen wer da was macht und ob man das selbst nich doch besser kann.

Ein anderes Thema sind da meiner Meinung nach Frameworks. Dem stehe ich inzwischen etwas kritischer gegenüber. Ich habe zum Beispiel anfangs Android Annotations verwendet, habe aber gemerkt, dass man da ziemlich dem Framework ausgeliefert ist und nicht alles so tut wie es sollte. Auch hier gibt es aber positiv-Beispiele. Das Spring-Framework für die nicht-Android Entwicklung macht da vieles richtig (aber auch nicht alles)

Um mal ein paar Beispiele zu nennen wo ich libs absolut sinnvoll finde (jetzt nur im Android Umfeld):
- Umgang mit Datenbanken. Da gibt es mit ormlite und SugarORM zwei hervorragende libs, die mir das Object-Relation Mapping abnehmen. Ich werde im Android und Java Umfeld wahrscheinlich zu 90% keine eigenen Queries mehr im Java Code stehen haben, mich mit Cursorn oder Datenbankverbindungen rumschlagen. Das Problem ist gelöst.
- Bilder laden. Das kann Picasso perfekt, ich habe mich dran versucht und es nicht besser hinbekommen.
- Rest Webservice ansprechen. retrofit liefert hier ein hervorragendes Mapping direkt auf Request und Response Objekte, warum sollte ich mich selbst mit einer HttpConnection und dem parsen von Antworten rumschlagen?
- JSON Parsing. Ich will nicht selbst mit einem JsonReader den Json Baum traversieren und mein Business Objekt füllen. Ich sage gson oder Jackson in welches Objekt das Zeug rein kommt und bin fertig. (Ausnahme: das JSON ist nicht 1:1 auf ein Objekt meiner Struktur mapbar, sondern wird dynamisch geparst, imho aber selten)

Und das sind nur ein paar Beispiele von extrem sinnvollen libs.

Und jetzt würde mich wirklich mal interessieren wie ihr das seht. Gerne dürft ihr auch schreiben was euer Background in der Entwicklung ist, damit man das etwas einordnen kann, ich fange mal an:
Habe meinen Master in Informatik gemacht und arbeite seit Ende 2011 professionell im Java und Android Umfeld. Im Android Bereich bin ich zusätzlich privat noch sehr aktiv mit aktuell einer App im Play Store (more to come) und einer lib für die Entwicklung.

--deek

PS: wurde jetzt länger als gedacht, ich hoffe jemand liest es trotzdem ;)

[1] professionell im Sinne von "verdiene mein Geld damit", hat nichts mit dem Können oder der Erfahrung zu tun
 
Also für die die sich mit Spielen ebschäftigen rate ich zu libGDX und BOX2D.

Es ist zwar etwas mühsam diese erstmal zu beherrschen aber das geht schon nach 1-2 Wochen hat man die Grundkonzepte verstanden und kann shcon voll mit einsteigen.
Ein sehr großer vorteil ist dass es Crossplattform fähig ist: Mit libGDX lassen sich html5,iOS,Blackberry,Android, Desktop(Mac,Windows,Linux) und Windows Phone Anwendungen programmieren.
Es sit 2D und 3D fähig unterstützt 3D Sound, man kann opengl1.0 oder opengl2.0 benutzen, es istr schnell und effizient, managed seine objekte sehr gut sodass der GC möglichst selten angeworfen wird, es gibt zahlreiche Bücher, besitzt eine große Community und sit open source
Es gibt regelmäßige updates also ist man immer uptodate.

Man kann mit dieser lib jede erdenkliche app erstellen und zwar für wie gesagt alle gängigen Betriebssysteme.

Eine gute lib und einfach nur EMpfehlenswert

Der ursprüngliche Beitrag von 23:07 Uhr wurde um 23:12 Uhr ergänzt:

Achja da Box2D etwas schreibarbeit erfordert empfehle ich noch ein (kostenpflichtiges) Tool: den R.U.B.E - editor (Really Useful Box2D Editor)
Damitr lassen sich in nullkommanix ganze Spielewelten erstellen und zwar per drag and drop verfahren wirklich ein MUSS
 
Es gibt natürlich immer mehrere Aspekte, aber in den meisten Fällen bin ich für den Gebrauch von (etablierten) Libraries und Frameworks. Speziell im professionellen Umfeld macht es oft keinen Sinn, etwas neu zu entwickeln, das Andere bereits besser gelöst haben. Einerseits ist es unnötiger Zeitaufwand, andererseits gibts auch Risiken (Bugs, Sicherheitslücken etc.).

Es gibt natürlich auch immer Situationen, wo es durchaus Sinn machen kann, etwas selber zu entwickeln. Vielleicht gibts einfach keine gute Library. Oder die Lib wird nicht mehr gepflegt oder steht vielleicht unter einer "falschen" Lizenz. Oder natürlich, die zu entwickelnde Komponente gehört einfach zum Kernbusiness und wird deshalb selbst entwickelt.

Im privaten Bereich kommt oft noch der Lerneffekt dazu. Manchmal will man einfach etwas mal zuerst selber versuchen ;)
 
Gut Einwände. Gerade das mit der Lizenz kann im Business Sinn machen (scheiXX GPL) oder dass die Funktionalität gerade zum Business gehört. :thumbsup:

Privat stimme ich dir zu, dass man es evtl. einfach mal gemacht haben will. Da bin ich sogar einer Meinung. Gewisse Sachen sollte man einfach mal selbst gebaut haben um es gemacht zu haben, aber danach die etablierten Implementierungen verwenden, wenn man keinen Spezialfall braucht. (Listen, Sortieralgorithmen, binäre Suche, ...)

Hat eigentlich von euch mal jemand eine selbst geschriebene lib, die im Unternehmen entstanden ist open-sourced? In den USA machen die größeren Firmen (z.B. Google und Square) das ja öfter. In meiner Ex-Firma ist mal eine Idee für eine lib entstanden, die ich dann erstmal privat umgesetzt habe, aber auch mit Kollegen in der Arbeitszeit weiter entwickelt habe, weil sie genutzt wurde bei uns. Habe aber das Gefühl, dass eine solche Offenheit in D eher selten ist. In meiner aktuellen Firma verwenden wir einige intern entwickelte Libs, die durchaus Potential haben, aber es bleibt alles closed source.
 

Ähnliche Themen

S
Antworten
0
Aufrufe
598
Sergio13
S
A
Antworten
1
Aufrufe
590
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.411
jogimuc
J
Zurück
Oben Unten