Java (weiter)lernen

juan_

juan_

König
Guten Morgen beisammen,

soeben habe ich ein Java-Grundlagenbuch (Head First - Java) durchgearbeitet. Zu den 2 Semestern OOP eine - denke ich - gute Javabasis.
Mit den Hauptthemen (Swing, Db, Threads, Sockets, Polymorphie..) bin ich einigermaßen vertraut und habe da so einige Beispiele programmiert.

Nun möchte ich das Ganze etwas mehr professionalisieren, aber nicht auf "Umsetzen-ebene", sondern eher auf der konzeptionellen Ebene. Daher suche noch fortführende Literatur.

z.B. habe ich 1. die Idee und die tech. Umsetzung der OO einigermaßen verstanden, aber die Beispiele in meinem Buch/Unterricht waren allesamt relativ trivial (u.a. Zoo: mit schönen Haustier- und Wildtierobjekten, dazu noch ein paar Hunde-,Katzen-,Tigerobjekte..), wo es keine große Schwierigkeit gab, zu entscheiden ob und wie es umgesetzt werden soll. Allerdings würde ich es gerne mal in einer etwas komplexeren Form kennen lernen, wo man sich zur OO "ernsthafte" Gedanken machen sollte.

2. würde ich auch gerne etwas über sauberen und sicheren Code kennenlernen. Aktuell sieht es so aus, dass ich zwar einiges umgesetzt bekomme, aber nicht einschätzen kann, wie "toll" es im Endeffekt wirklich ist. Ich will jetzt zwar nicht gleich morgen als Softwareentwickler anfangen, aber ich würde gerne auf ein Niveau kommen (oder darauf hinarbeiten), dass ich z.B. ein Projekt in der Uni abgeben und sagen kann, dass ich dafür ne gute Note kriege, weil alle Kriterien erfüllt sind:" gute/benutzerfreundliche Umsetzung + Code einfach "gut" (nicht "beanstandnötig") ". Außerdem würde ich gerne vielleicht mal praktikumstechnisch in einer Softwareschmiede reinschnuppern und will da auch kein Murks abgeben müssen.


Hoffe ihr versteht mich einigermaßen, ansonsten schreib ich einfach nochmal ein paar Worte, wenn ich nicht mehr so müde bin ;)

Beim Kauf tendiere ich wieder klar zur "Von Kopf bis Fuß" / "Head First" - Reihe.
Interessant sind die Bücher zum Thema:

-Design Pattern
-Softwareentwicklung
-objektorientierte Analyse/design

Falls ihr weitere persönliche (!!) Empfehlungen habt, bitte her damit. zB. Soll ja "thinking java" auch sehr gut sein. Hat mir nur wieder zu viele Basics.


Auch auf persönliche Tipps, wie man sich in diesem Bereich gut weiterentwickelt, bin ich gespannt ;)


Vielen Dank!
 
Zuletzt bearbeitet:
(...)"Von Kopf bis Fuß" / "Head First" - Reihe.
-Design Pattern
Kann ich empfehlen, meine Freundin findet des Buch super.
(...)würde ich auch gerne etwas über sauberen und sicheren Code kennenlernen.
Ich meine mich zu erinnern, das es von Sun gewisse Vorschläge dazu gibt, müsste den Link dazu jetzt aber selber erst wieder bei $SUCHMASCHINE suchen
 
Bin voll deiner deiner Meinung "Head First" sind gute Bücher, neben bei würde ich dir noch welche zum Thema UML empfehlen. Eine wichtige Rolle spielt auch noch neben den eigentlichen Thema der Entwicklung der Entwicklungsprozess (Vorgehnsmodelle) auch in dieser Richtung solltest du dich einwenig bilden.

mg
Harry
 
Danke für die Zusprechungen ;)

Gibt es vielleicht ein Buch, welches exemplarisch ein großes Softwareprojekt aufzieht und von der Konzeption, bis zur Umsetzung alles behandelt?

Ciao
 
Hi,

ha, ich kann mich mal wieder austoben, Zeit fuer meinen naechsten Roman. ;)

Dann muss ich jetzt nur mal die vielen Gedanken die mir dazu durch den Kopf schwirren vernuenftig ordnen...

z.B. habe ich 1. die Idee und die tech. Umsetzung der OO einigermaßen verstanden, aber die Beispiele in meinem Buch/Unterricht waren allesamt relativ trivial (u.a. Zoo: mit schönen Haustier- und Wildtierobjekten, dazu noch ein paar Hunde-,Katzen-,Tigerobjekte..), wo es keine große Schwierigkeit gab, zu entscheiden ob und wie es umgesetzt werden soll. Allerdings würde ich es gerne mal in einer etwas komplexeren Form kennen lernen, wo man sich zur OO "ernsthafte" Gedanken machen sollte.
Ich denke das beste was du machen kannst, ist dir ein Open Source Programm zu suchen, dir ein Feature auszudenken dass das Programm noch nicht hat, und es zu implementieren. Fuer den optimalen Lerneffekt und Realitaetsnaehe sollte der Code schlecht bis gar nicht kommentiert sein. ;)

Das gehoert zu den Faehigkeiten eines Programmierers die in den meisten Bildungseinrichtungen komplett ignoriert wird, also sich in den Code von anderen Leuten einzuarbeiten, ihn zu verstehen, und damit dann effektiv weiter zu arbeiten. Als Programmierer kommst du eher selten in die Situation dass du ein Programm von Grund auf komplett selbst schreibst, meistens arbeitest du mit Code den jemand anderes bereits geschrieben hat. Sei es nun weil du ein Plugin fuer ein bestehendes Programm schreiben sollst, oder weil du ein neues Programm schreibst und dich dabei in grossen Teilen auf Code und Bibliotheken von anderen Leuten stuetzt, die dann z.B. wiederum ueberhaupt nicht kommentiert sind.

Ausserdem hat es den positiven Effekt, dass du von guten Code Beispielen lernen kannst und ein besseres Gespuehr dafuer bekommst was alles moeglich ist. Wobei du fuer gute Beispiele lieber ein groesseres, bekannteres Open Source Projekt nehmen solltest, da ist die Chance geringer dass der Source Muell ist. ;)

Ach ja, bevor hier ein Missverstaendnis aufkommt: Ich meine nicht dass du dich an dem Open Source Projekt beteiligen sollst, sondern nur dass du mit dem Code arbeitest. Das kannst du natuerlich auch, darum ging es mir im obigen Abschnitt aber nicht, das ist dann wieder eine etwas andere Geschichte.

Ebenfalls wichtig ist die Faehigkeit effektiv zu debuggen. Das faengt schon mit so "simplen" Sachen an, wie die Fehlermeldungen deines Compilers oder Interpreters richtig zu deuten. Manchmal ist es eindeutig, manchmal aber eben auch nicht. Ich habe sogar schon Leute getroffen die schon seit Jahren programmieren, und noch nie einen Debugger benutzt haben. Klar, manchmal hat man keinen Debugger zur Verfuegung, und haeufig muss man sich auf print statements verlassen (z.B. Netzwerk Programmierung). Viele Leute sind der Meinung dass das debuggen mit print statements die wichtigste Methode sei. Vermutlich, aber wenn man einen Debugger zur Verfuegung hat, sollte man ihn auch nutzen. Haeufig findet man so Bugs, die man sonst erst sehr viel spaeter entdeckt haette.


Aber um zurueck zu der Frage nach Buechern zu kommen. Ich denke falls du noch kein Buch zu Algorithmen und Datenstrukturen gelesen hast, solltest du das tun. Was in solchen Buechern behandelt wird, sind die absoluten Grundlagen die man draufhaben sollte: Was ist ein Hash, ein Baum oder eine doppelt verkettete Liste? In welcher Situation kann ein O(n^2) Algorithmus besser sein als ein O(log(n)), und warum? Usw. usf.
Das ist Grundwissen, ohne das alles weitere ein wenig witzlos ist. Algorithm Design von Tamassia und Goodrich fand ich ganz ok, die Beispiele sind alle in Java. Aber auch jedes andere halbwegs vernuenftige Buch zu dem Thema sollte es tun.

Der naechste Schritt waeren dann wohl in der Tat Design Patterns. Das Head First Buch zu Design Patterns habe ich ja schon haeufig empfohlen, und werdes es wieder tun. Ein sehr gutes Buch.
Ansonsten waere da natuerlich noch der Klassiker, Design Patterns von Gamma, Vlissides, Johnson und Helm. Der Beispielcode ist allerdings in C++, und das Buch ist auch eher Referenz. Zum einlesen in das Thema, ohne Vorkenntnisse, ist es nicht so gut geeignet.

Was seit einigen Jahren ein neuer Trend ist, ist Test-Driven Development (TDD => unit tests). Das waere das dritte Thema, das ich empfehlen wuerde. Ich habe mir gerade das Buch von Kent Beck zum Thema gekauft. Es ist aber heute erst angekommen, so dass ich es selbst noch nicht gelesen habe. Aber da u.a. das xUnit framework behandelt wird, sollte sich das Buch auf jeden Fall lohnen.
Was ich an den Buechern von Kent Beck immer sehr schoen finde, ist dass sie meistens extrem kurz sind, so um die 200 Seiten, und dabei trotzdem unheimlich informativ.

Wenn ich dir also drei Buecher empfehlen muesste, die du als naechstes Lesen solltest, so wuerden es diese Drei werden:

Algorithm Design - Tamassia & Goodrich (oder ein anderes Algorithmen & Datenstrukturen Buch)
Head First Design Patterns - Freeman & Freeman
Test-Driven Development - Kent Beck

Ich wuerde sie auch in dieser Reihenfolge lesen.

Zum Thema sauberer Code in Java gibt es eigentlich auch nur eine Antwort: Effective Java von Joshua Bloch.
Hardcore Java soll auch ganz gut sein, das hab ich hier auch rumfliegen, ich bin aber nie dazu gekommen es zu lesen.
Von Thinking in Java oder aehnlichen Anfaengerbuechern wuerde ich abraten, ein Anfaengerbuch reicht vollkommen. Alles andere ist Zeitverschwendung, es steht doch in allen das gleiche. ;)


Wenn dich der komplette Software Engineering Lifecycle interessiert, also wie ein kommerzielles Software Projekt als ganzes Ablaufen sollte, kann ich Software Project Survival Guide von Steve McConnal empfehlen. Darin geht es vor allem darum, was alles gewaehrleistet sein muss, damit ein Software Projekt Termin und Budget gerecht fertig wird, also mehr die Management Perspektive. Ich hab das Buch verschlungen, einige meiner Studienkollegen fanden es langweilig. Haengt wohl davon ab wo die persoenlichen Interessen liegen. ;)

--

Buecher Listing:

Algorithm Design - Tamassia & Goodrich (oder ein anderes Algorithmen & Datenstrukturen Buch)
Head First Design Patterns - Freeman & Freeman
Test-Driven Development - Kent Beck

Effective Java - Joshua Bloch
Harcore Java - Simmons
Software Project Survival Guide - Steve McConnal
Design Patterns - Gamma, Vlissides, Helm, Johnson


Ich will jetzt zwar nicht gleich morgen als Softwareentwickler anfangen, aber ich würde gerne auf ein Niveau kommen (oder darauf hinarbeiten), dass ich z.B. ein Projekt in der Uni abgeben und sagen kann, dass ich dafür ne gute Note kriege, weil alle Kriterien erfüllt sind:" gute/benutzerfreundliche Umsetzung + Code einfach "gut" (nicht "beanstandnötig") ". Außerdem würde ich gerne vielleicht mal praktikumstechnisch in einer Softwareschmiede reinschnuppern und will da auch kein Murks abgeben müssen.

Das sind leider zwei sehr unterschiedliche Szenarien. Wenn du nicht gerade einen speziellen Studiengang fuer Anwendungsentwicklung oder Software Engineering machst, ist es den Leuten an der Uni meistens vollkommen egal wie dein Code aussieht, solange er funktional und korrekt ist. Gerade an der Uni hast du haeufig hochintelligente Leute sitzen, vom PhD Studenten zum Professor, die fuer grosse Software Projekte nicht zu gebrauchen sind.
Das Problem ist, dass viele davon nie in der Industrie gearbeitet haben, und es gewoehnt sind ihre eigenen kleinen Projekte anzugehen, wovon viele haeufig rein algorithmisch sind. Was ich z.B. wirklich haeufig von Akademikern gesehen habe, ist dass sie total kryptische Variablennamen nehmen, meistens einfach von a bis z.
Das mag prima sein, wenn du fuer ein Forschungsprojekt einen bestimmten Algorithmus implementieren willst, aber fuer "real-world" Programme ist das nicht zu gebrauchen. Leider tragen manche Studenten solche schwachsinnigen Praktiken dann auch noch in die Industrie... Hab ich bei ehemaligen Kollegen schon erlebt, zum Haare raufen war das...

Mal davon abgesehen, dass sehr viel von dem was du in einem Informatik Studium machst, gar nichts mit Programmieren zu tun hat.

D.h. wenn du dich auf die Uni vorbereiten willst, solltest du dich mit der Theorie von Algorithmen, oder Graphentheorie, oder Logik, oder theoretischer Informatik (Automatentheorie, Turing Maschinen), usw. beschaeftigen. Das sind Dinge die dir gute Noten einbringen werden, aber das hat nur sehr abstrakt mit Programmierung zu tun.

So, und ich glaub dabei belass ich es fuer heute Abend auch, ich koennte noch Stundenlang so weiter machen, aber dann sitz ich hier morgen frueh noch. ;)

mfg,
bytepool
 
Hey vielen Dank!

Vielleicht noch 1-2 Sätze zu mir: ich studiere Wirtschaftsinformatik. Also sind die OOP Module wohl eher ein wenig praxisorientierter, im Vergleich zum reinen Info-Studium.
Auch wenn ich den ganzen "Kram" vielleicht nicht unbedingt fürs Studium brauchen werde (du hast die Gründe ja im letzten Abschnitt schon genannt), will ich es trotzdem gerne können, weil ich a) sonst das Programmieren auch gleich sein lassen könnte (weil ich damit später eh nichts mehr anfangen kann) und b) weil es einfach in meinem Interessengebiet liegt.

Dein Tipp mit dem Softwareprojekt (OOS) kam mir auch schon in den Sinn, aber wie gesagt: ich fühl mich dafür noch nicht so weit. wahrscheinlich würde ich nicht mal das Designkonzept verstehen ;)

Richtiges Debuggen muss ich mir auf jeden Fall auch nochmal angucken, bis jetzt habe ich es nur verwendet, um zu überprüfen wie mein Algorithmus läuft, aber noch nie für irgendwelche OO Geschichten, die "keinen" Besonderen haben (in letzter Zeit habe ich zB viel mit Swing gemacht, da habe ich nie einen Debugger verwendet).

Leider kam dein Post etwa 8 Stunden zu spät, gestern Abend habe ich mir schon "Von Kopf bis Fuß - Objekt Orientierte Analyse & Design" zugelegt. Die ersten 2 Kapitel haben mich aber schon vollends überzeugt:
Es wurde ein kleines Szenario aufgebaut, von wegen "Peter brauch die und die Software und so würden wir es in der Rohfassung umsetzen".. natürlich wurde die Rohfassung so "verkauft", dass ich mit allen Punkten einverstanden war, aber keine 2 Seiten später haben sie einem gezeigt, wie es "richtig" (vom 3 Stufen Konzept etc) geht. Da hab ich das erste mal gemerkt, wie kompliziert u.a. die sinnvolle Kapselung doch sein kann, wenn man es nicht rein beispielhaft an irgendwelchen Tierobjekten macht ;)

Aber deine Bücher sehen auch gut aus. So ein Algorithmusbuch wollte ich mir auch schon zulegen, habs dann aber irgendwie sein lassen. Auf jeden Fall habe ich jetzt einiges an Material vor mir :D

Mal ne persönliche Frage: bist du (beruflich) Softwareentwickler?
Wie gesagt, mich interessiert das Thema sehr, könnte mir auch vorstellen, dass ich in diesem Bereich Erfahrung sammeln werde, aber aktuell sehe ich mich eigentlich nicht als Mensch, der stundenlang vor irgendwelchen Zeilen Code sitzt ;)
Dann doch lieber der, der die Leute zum arbeiten zwingt oder die Software verkauft, passt auch besser zum Studium :D


Also, wie gesagt, vielen Dank für deine kleine Lektüre (auch um die Uhrzeit), pers. Erfahrung ist in diesem Bereich einfach unbezahlbar!
 
Hi,

Dein Tipp mit dem Softwareprojekt (OOS) kam mir auch schon in den Sinn, aber wie gesagt: ich fühl mich dafür noch nicht so weit. wahrscheinlich würde ich nicht mal das Designkonzept verstehen ;)
ok, wenn du nicht erwartest grossartig praktisch zu arbeiten, ist das vielleicht auch etwas zu Zeitintensiv. Aber programmieren ist eine Sache die man vor allem durch viel Praxis Erfahrung lernt. Ich gehoere auch eher zu den Theorie Anhaengern, aber nachdem man eine Theorie gelernt hat, muss man sie auch anwenden, damit es wirklich haengen bleibt.

Richtiges Debuggen muss ich mir auf jeden Fall auch nochmal angucken, bis jetzt habe ich es nur verwendet, um zu überprüfen wie mein Algorithmus läuft, aber noch nie für irgendwelche OO Geschichten, die "keinen" Besonderen haben (in letzter Zeit habe ich zB viel mit Swing gemacht, da habe ich nie einen Debugger verwendet).
Mit debuggen meine ich mehr die Fehlersuche und -beseitigung im allgemeinen, nicht unbedingt das benutzen eines Debuggers. Es gibt tatsaechlich viele Bereiche wo der Einsatz von Debuggern nicht moeglich oder nicht sinnvoll ist. Nur wenn dann jemand kommt, der sagt er programmiert schon seit 5 Jahren und hat noch nie einen Debugger benutzt, dann guck ich etwas komisch. ;)


Leider kam dein Post etwa 8 Stunden zu spät, gestern Abend habe ich mir schon "Von Kopf bis Fuß - Objekt Orientierte Analyse & Design" zugelegt.
Ok, das ist sicherlich auch eine sehr gute Wahl, wenn du noch nichts in die Richtung gemacht hast. Das ist ein Teil den ich irgendwie haeufig vergesse. Das Buch will ich mir eventuell auch noch kaufen. ;)

Aber deine Bücher sehen auch gut aus. So ein Algorithmusbuch wollte ich mir auch schon zulegen, habs dann aber irgendwie sein lassen.
Wenn du wahrscheinlich eh nicht als Programmierer arbeiten wirst, reicht es vielleicht auch die entsprechenden Grundlagen im Netz zusammen zu suchen. Soviel ist es eigentlich auch nicht, aber wie gesagt sollte man wenigstens die grundlegenden Datenstrukturen kennen. Die Laufzeit von Algorithmen ist dann fuer dich als Wirtschaftsinformatiker vielleicht gar nicht so interessant/wichtig.

Mal ne persönliche Frage: bist du (beruflich) Softwareentwickler?
Jup, ich verdiene da seit 1 1/2 Jahren meine Broetchen mit. Mein erstes Programm hab ich aber vor 11 oder 12 Jahren geschrieben. ;)

Wie gesagt, mich interessiert das Thema sehr, könnte mir auch vorstellen, dass ich in diesem Bereich Erfahrung sammeln werde, aber aktuell sehe ich mich eigentlich nicht als Mensch, der stundenlang vor irgendwelchen Zeilen Code sitzt ;)
Dann doch lieber der, der die Leute zum arbeiten zwingt oder die Software verkauft, passt auch besser zum Studium :D
In dem Fall wuerde ich dir wirklich das Buch von McConnell andrehen wollen. Das ist ein Buch das IMHO vor allem Software Manager gelesen haben muessen. Ich hab das meinem Chef vor einiger Zeit auch mal in die Hand gedrueckt. :D

Eventuell interessieren dich dann auch die Essays von Joel Spolsky. Verfuegbar als Buch unter dem Titel Joel on Software, aber auch auf seiner Webseite unter www.joelonsoftware.com.

mfg,
bytepool
 

Ähnliche Themen

4 x O'Reillys - Bitte um Rezension!

Zurück
Oben