Java Kochrezepte

Hallo Forum,

beim früheren Lernen von VisualBasic haben mir Codebeispiele für die Lösung üblicher Fragestellungen sehr viel gerbracht, sowohl beim Erlernen der Sprache sowie beim Aufbau von Anwendungen. Im Fall von VB hatte ich damals einige Webseiten mit unerschöpfliche public domain Kochrezepten gefunden. In Sachen Java bin ich noch nicht auf vergleichbare Sammlungen gestoßen, sondern nur auf Seiten mit jeweils wenigen Beispielen zu speziellen Fragestellungen. In Buchform gibt es “Das Java 6 Codebook” von Louis Müller, was ich für mich als Anfänger ziemlich klasse finde. Sind euch ergänzend dazu entsprechende Internseiten mit Quellcode-Sammlungen bekannt? …

Was macht solche “Kochrezepte” speziell aus? D.h. was unterscheidet sie von den Millionen Snippets, die man so mit den gängigen Suchmaschinen und in Open-Source-Software findet?

Du darfst gerne auch Snippets sagen. Gibt es einschlägige Seiten, die entsprechende Sammlungen von Lösungen für “Standardfragestellungen” (hihi, jetzt wird bestimmt gefragt, was das bitteschön wieder sein soll ;-)) schön nach Themen sortiert als Fundgrube zum freien Herumstöbern auflisten?
Eine Quelle, die ich inzwischen gefunden habe, ist diese: http://www.java2s.com/Code/Java/CatalogJava.htm.
Kennt Ihr weitere?

Wenn ich was suche, google ich einfach danach ^^
Dann kommt man natürlich auch öfters mal auf die von dir genannte java2s Seite oder auf eine der vielen anderen Seiten/Foren…

Ja, die java2s ist vor allem ein heißer Kandidat für Java3D-Fragen. Damit habe ich es jetzt schon einige Jahre lang geschafft, den Eindruck zu erwecken, ich wüßte was über Java3D. Ansonsten sehe ich das auch so: Es gibt so viele Themenbereiche, und zu vielen auch recht spezielle Snippet-Sammlungen. Zu allem was mit Swing zu tun hat findet man ja die Sun-eigenen Swing Snippets. Bei RCP stolpert man automatisch über http://www.vogella.com/ . In java2s findet man vieles gemischt. Für Bildverarbeitung, 2D Paining & Co ist sowas wie http://www.jhlabs.com/index.html ganz nett. Aber man sieht schon, dass diese Auswahl biased ist, und ich für Themen wie Netzwerke, Enterprise-Server oder Datenbanken spontan keine nennen kann.

Es macht auch keinen Sinn solche Sammlungen zu machen. In der Java-Welt zumindest gibt es diverse Standard-Lösungen oder Workarounds für gewissen Problematiken, die braucht man nicht in Snippet-Sammlungen, da man diese entweder schon kennt oder aber Google bei einer Suche min. 1mio Treffer liefert, von denen meist bereits der erste die gewollte Lösung aufzeigt. Außerdem entstehen jeden Tag neue Frameworks, neue Libs, neues Wissen, neue Workflows, neue Lösungsansätze. Die gesamte Plattform Java ist so dynamisch und riesieg und verändert sich so schnell, dass es kaum Sinn macht solche Sachen irgendwo zu archivieren, denn was man heute neues erfährt, war vielleicht schon vorgestern veraltet und wer soll das bitte verwalten oder warten … Daher einfach Google fragen, mehr braucht man nicht oder noch besser selbst die Sache reflektieren und sich Gedanken dazu machen anstatt “schnell schnell”.

Zum grundsätzlichen Umgang mit Java finde ich die Artikelserie von Angelika Langer sehr hilfreich:
http://www.angelikalanger.com/Articles/Topics.html#JAVA
Und die Seite hier hat zu verschiedensten Themen Artikel mit Codebeispielen:
http://www.javapractices.com/home/HomeAction.do

Da muss ich widersprechen. Wenn man eine konkrete Aufgabe hat, etwa in Java3D oder auch Swing oder sonstwas, dann ist es praktisch unmöglich, ein eigenes Programm zu schreiben, indem man nur die API-Doku liest. Probier’ es aus: Mach’ die API-Doku von Java3D auf, und versuche, einen bunten Würfel zu rendern. Du wirst scheitern. Man braucht immer irgendwelche Grundlagen und Tutorials. Und sooo dynamisch sind die meisten Dinge nun auch nicht - dafür wird bei Java so großer Wert auf verläßliche, stabile APIs und Rückwärtskompatibilität gelegt.

Sicher ändern sich Dinge. Eine AWT-Snippet-Sammlung würde heute kaum noch jemanden interessieren, stattdessen eben Swing und JavaFX (oder SWT, btw: SWT Snippets | The Eclipse Foundation ). Und auch in Details gibt es Unterschiede (Java3D und die GraphicsConfiguration - früher konnte man da irgendwo ‚null‘ übergeben, das geht jetzt nicht mehr). Aber letztendlich hat man mit Google den gleichen Effekt, weil Google auch nur „archivierte“ Dinge anzeigt, und wenn man nach „java gui“ googlet und dann unreflektiert (da isses wieder) das erstbeste AWT-Beispiel verwendet, ist das ungünstig - egal, wie lange man drüber nachdenkt :wink:

Ein Getting Startet ist aber keine Snippet-Sammlung für „Standardprobleme“, die es nach nem halben Jahr aufgrund neuerer Libs vielleicht gar nicht mehr gibt, weil das Problem schon ausgemerzt wurde :wink: Und man kann sehr wohl mit der API klar kommen, ohne irgendwelche Snippets von anderen Leuten zu klauen, man muss aber lernen eine API zu lesen und nicht zu überfliegen :wink: Insofern muss ich dir da wiederum widersprechen, denn mehr als API braucht man nicht, besser geht es aber mit kleine Einstiegshilfen und Tutorials, aber keine Snippets, die irgendwer geschrieben hat und zu denen man kein Bezug hat und womöglich nicht mal versteht und Tutorials gibt es im Java-Ökosystem mehr als man haben möchte zu eigentlich jedem Thema und Problem, da ist alles mehr als genug abgedeckt (im Zweifelsfall durch Stackoverflow), daher einfach Google als Referenz benutzen.

Da du gerade AWT ansprichst … Sich mit AWT auszukennen schadet keineswegs, denn Swing baut auf AWT auf und vieles orientiert sich eben daran. Swing ist keine neue Technologie in dem Sinne, auch wenn sie sich von AWT abhebt, sondern zeichnet lediglich selbst die Komponenten und erweitert AWT in gewissen Punkten, aber mehr auch nicht. Das Wissen über AWT führt daher sehr wohl dazu bei überhaupt zu begreifen, was Swing eigentlich ist und warum etwas so funktioniert, wie es funktioniert, und wenn es nur darum geht zu verstehen, warum zum Geier da Müll zu sehen ist anstatt das was man erwartet hat. Um das zu verstehen brauche ich aber keine Snippet-Sammlung, sondern ein grundlegendes Verständnis für die Arbeitsweise, das Konzept und optimal wäre auch der Background zu der Technologie, die ich einsetze.

Danke Marco13 und nillehammer für die Links! Die finde ich sehr hilfreich!
Weitere derartige Tips nehme ich sehr gerne entgegen :slight_smile:

Ich finde, die Existenz so einer Snippet-Sammlung wie die für SWT spricht Bände. Es wäre natürlich schön, wenn alle APIs so einfach wären, dass man das nicht braucht, aber ab einem gewissen Komplexitätsgrad ist das kaum möglich. Oder um bei der Metapher zu bleiben: Um etwas essbares zu produzieren reicht analog dazu vielleicht auch ein Buch über organische Chemie, aber ein Rezept kann nicht schaden :wink: Mir erschließt sich auch nicht, warum du das als so negativ anzusehen scheinst. Snippets sollen ja auch gerade best practices vermitteln. Ein reines Lesen der API erscheint mir vergleichbar mit dem Versuch, eine Sprache zu lernen, indem man ein Wörterbuch liest. Man muss auch wissen, wie alles zusammenspielen soll.

:smiley: Ich finde das nicht negativ, soll se doch die ganze Welt nutzen, ich tus nicht :smiley: Mein Standpunkt ist der: Wenn man sich mit einem Thema beschäftigt, dann beschäftigt man sich damit hoffentlich auch richtig und holt sich entsprechendes Material, angefangen bei Einstiegsbüchern, falls es die gibt bis hin zu Fachbüchern speziell zu dem Thema (ob in Papierform oder eBook oder sonst wie) und zieht bei Bedarf auch das Internet heran. Ich selbst lese aber nicht gern am Monitor, daher kaufe ich lieber Bücher. So, wenn ich mich mit der Materie auseinander gesetzt habe, dazu gehört auch bis zu einem gewissen Grad die API zu kennen, dann brauch ich in der Regel für irgendwelche trivialen Standardprobleme keine Snippetsammlungen, weil das Wissen über das Problem hoffentlich vorhanden ist und somit folglich auch hoffentlich eine Idee zur Lösung, verstehst du :wink: Wenn man an diesem Punkt ist und Hilfe braucht, dann kann man mal eben Google fragen, oft werden dann auch irgendwelche Snippets aus Sammlungen kommen, das gebe ich zu, aber der eigentlich interessante Part an den Ergebnissen sind Diskussionen aus Foren oder Blog-Beiträge, die das Problem thematisieren und sich damit meist halbwegs tief auseinandersetzen. Wenn man an dem Punkt ist, hat man einen Bezug zu der ganzen Sache und auch das nötige Verständnis und kann ein Snippet dann auch kritisch betrachten und eventuell sogar optimieren. Der Punkt ist aber, man muss dazu den nötigen Background haben und den hat man einfach nicht, wenn man sich nur mal eben so ein Snippet holt, weil man sich mal eben so für fünf Minuten mit einem Thema befassen will. Ein Snippet copy&pasten kann jeder, auch ein Grundschüler, das ist keine Kunst. Vielleicht hat man sich das Snippet sogar tatsächlich angeschaut und halbwegs begriffen, was da passiert, aber auf die Frage „Warum?“ wird wohl oft eine Antwort wie „Keine Ahnung, es funktioniert halt“ kommen und das ist dann ein Fall, wo ich ehrlich sagen muss „Tja Leute, nicht mit dem Thema befasst“. Zugegeben meine Vorgehensweise ist etwas heftiger, so sehr arbeitet sich wohl sicherlich nicht die Masse der Leute in ein Thema ein, denn ich verwende sehr viel Freizeit dafür. Aber dennoch finde ich ist das wichtig, gerade wenn dann Bugs auftreten, weil ein „Anwender“-Programmierer aufgrund der Unwissenheit einfach irgendwelchen Code angewand hat und gar nicht weiß, warum er es deswegen verbockt hat und die Anwendung ein underfiniertes Verhalten aufweist. Das kann dann nur jemand fixen, der sich mit der Materie auseinander gesetzt hat, selbst wenn er die Lösung nicht parat hat, aber er kann zumindest gezielt eine Suche starten anstatt im Trüben zu fischen.

Snippets schön und gut, kann nie schaden welche zu haben, aber Snippets ersetzen kein Fachwissen, das man sich beim Einarbeiten erarbeitet hat und daran ändert auch eine Seite, wo die Snippets völlig ohne Bezug auf ein Problem und ohne jeglichen Kommentar (weder mit Gedankengang noch mit einer Begründung) einfach nur unter einander gelistet sind, nichts. Deswegen bin ich eher dafür, dass man lernt Google richtig zu benutzen, um so auf die angesprochenen Foren- und Blog-Beiträge zu kommen und sich damit zu befassen anstatt eine Linksammlung für Snippets abzuspeichern und wenn man weder das Problem kennt, noch eine Idee hat wonach man suchen muss, dann bringt so eine Snippet-Sammlung auch nichts, ganz egal wie oft man die Snippets rauf und runter liest.

Immer wieder interessant, dass andere für mich festlegen, was die richtige Herangehensweise ist, und beurteilen, ob ich Themen ausreichend durchdringe oder nicht. Nach diesen engagierten Antworten auf gar nicht gestelte Fragen habe ich jetzt verstanden, dass du mein Anliegen für blödsinnig hältst. Vielleicht haben diejenigen, die das anders sehen, ja noch Antworten auf die gestellte Frage (auch wenn ich die bisherigen Links schon sehr hilfreich fand).

Dann erleuchte mich mal, vielleicht schaffst du ja etwas, was sonst noch niemand geschafft hat. Sagen wir mal du hast jetzt 20 Seiten mit jeweils vielleicht 10k Snippets. Wie gehst du jetzt damit um, wie gehst du vor, was machst du mit den Seiten oder nach welchen Kriterien suchst du ein Snippet aus? Was machst du damit bzw. mit den Seiten?

In meinen Augen habe ich übrigens keinesfalls eine nicht gestellte Frage beantwortet, ich habe eher im Gegenteil auf eine nahezu unendliche Liste mit solche Seiten verwiesen und gesagt, dass es mehr Sinn macht über eine Suchmaschine sinnvoll und reflektiert nach einer Lösung für ein vorhandenes Problem zu suchen (ob das nun Blogs, Foren, Snippets, Tutorials oder sonst was sind, das ist ja egal). Vielleicht sehe ich das auch falsch, aber ein Snippet ist nur dann sinnvoll, wenn ich es als Lösung für ein Problem brauche, habe ich das Problem aber nicht, brauche ich das Snippet nicht. Habe ich ein Snippet für ein Problem, das ich aber nicht habe, habe ich ein Snippet, das buchstäblich wertlos ist. Deswegen wüsste ich jetzt einfach mal gerne, wie du so eine Seite verwendest, wenn du sie in deinen Lesezeichen abgespeichert hast.

Wenn du aber auf deine Frage nur Links zu anderen Seiten als hilfreiche Antwort akzeptierst, dann kann ich auch gerne alle 5mio Treffer hier posten (und dabei hab ich noch nicht einmal eine ernsthafte Suche angefangen), ist gar kein Problem.