Neues Lern-Projekt gesucht

Hallo,

ich überlege zurseit welches Thema ich als nächstes tiefer bearbeite. Damit meine ich sowas wie Server/Cleint schreiben Parallelität mit Threads und so.

Also welche Themen ich schon mal bearbeitet habe:
Grundlagen und Objektorientierung, Lambda, Server/Client, Webserver, Threads, Generics, JUnit Testf

Aufgrund eines Thread kam ich auf die Idee ein Schach-Spiel als Konsolen Programm zu programmieren. Aber da ist kein neues Thema was ich lernen könnte drin. Ist bisschen Objektorientierung. Außer man macht GUI. Aber GUI ist nicht so das meine. Aber langsam glaube ich, dass ich wirklich mit GUI anfangen muss?
Oder gibt es noch andere Themen, in die ich einsteigen könnte?

Falls GUI das nächste sinnvolle Thema wäre, auf was muss ich achten? Swing oder AWT?
Wird heutzutage, im professionellen Bereich, viel mit Scencebuilder gearbeitet?

Oder an die Experten, die viele Projekte bearbeitet haben. Gibt es irgendwelche Sachen, die ihr sehr oft verwendet und es nicht schadet wenn man sich damit sehr gut auskennt? Z.B. Map, ist ein Thema was ich oft als Antwort lese.

Wenn ihr spontan konkrete Projekt-Ideen habt, könnt ihr sie auch schreiben.

Danke für Antworten auf einen etwas anderen Thread.

mfg werdas34
 
K

kneitzel

Wenn du doch schreibst, dass GUI nicht so Dein Ding ist, dann gibt es doch genug andere Themen. Datenbanken z.B. angefangen von JDBC hin zu diversen Libraries...

Das ganze JEE Thema könnte man etwas angehen ...

Oder man übt einfach, in dem man ein Projekt Mal von Anfang bis Ende durchzieht.
Muss ja nicht ständig etwas Neues dazu kommen ...

Oder man meistert das, was man meint zu können. Begriffe wie Clean Code, Pattern, ....

Möglichkeiten gibt es extrem viele. Was du machen willst musst du selbst entscheiden....
 
Gibt es irgendwelche Sachen, die ihr sehr oft verwendet und es nicht schadet wenn man sich damit sehr gut auskennt? Z.B. Map, ist ein Thema was ich oft als Antwort lese.
Algorithmen und Datenstrukturen sind Grundlagen...

Eine Map ist einfach eine Abbildung von Schlüsseln, die per Definition eindeutig sind, auf Werte, wobei jedem Schlüssel höchstens ein Wert zugeordnet ist (aka Dictionary). Eine Map bietet also ganz Allgemein die Möglichkeit, Einträge einzufügen, zu löschen und (über den Schlüssel) zu suchen. Das Interface Map macht keine Zusicherungen bzgl. der Ordnung der Einträge, Implementierungen können das natürlich nachholen.

Die Java-Docs (gerne auch in neuerer Version) sind hier Pflichtlektüre. Dort siehst Du auch, dass verschiedene Implementierungen angeboten werden, die natürlich unterschiedliche Eigenschaften haben.

Du kannst Dir eine Map also als eine Art im Hauptspeicher verwaltete Mini-Datenbank vorstellen. Diese Funktionalität wird insbesondere im Zusammenhang mit HashMaps oder EnumMaps gerne genutzt, um z. B. if-Statements oder switch-Konstrukte zu vermeiden, d. h. fest in den Quelltext kodierte Verzweigungen werden durch eine solche dynamische Datenstruktur ersetzt.

Schau Dir Algorithmen (z. B. Sortierverfahren, Hashverfahren) und Datenstrukturen (Stack, Queue, Ringbuffer, Map, Bäume) an. Wenn Dir dazu dann kein Anwendungsfall einfällt, um das am "lebenden Objekt" auszuprobieren, frag einfach nochmal nach, da findet sich schon was :)
 
Wenn die Grundlagen sitzen (oder du das zumindest von dir glaubst), dann lies dich etwas in Entwurfsmuster ein. Das Buch "Entwurfsmuster von Kopf bis Fuß"/"Head first Design Pattern" kann ich dir da sehr empfehlen.

Wenn du dann so ein bisschen ein Gefühl dafür bekommen hast, was für Gebilde man mit Klassen und Interfaces bauen kann (und vor allem, was der Unterschied zwischen Softwareentwicklung und Programmieren ist), schreib ein Programm. Irgendeins, daß du gut gebrauchen könntest. Du glaubst nicht was du damit auf einmal alles zum Einsatz bringen mußt. Meiner bisherigen Erfahrung nach der lehrreichste Weg.
 
Danke für die vielen hilfreichen Antworten.

Werde mich nun mit Pattern und Algorithmen/Datenstrukturen befassen. Hat den Vorteil, da das auch für andere Programmiersprachen hilfreich sein kann.

Die Frage, die ich mir stelle ist, wie lerne ich das am besten bzw wie gehe ich das am besten an.
Klar ist: üben, implementieren und nochmal üben , implementieren
Bei Algorithmen z.B. Sortierverfahren, könnte man zum Beispiel mehrere bekannte Verfahren(Merge, Quick, Select, Insertion, Bucket, Radix, ...) einfach implementieren. Sehe ich als recht einfach an, da meist der Pseudocode mit dabei ist. Gibts da bessere Ansätze?
Datenstrukturen ist recht klar. Diese implemenjtieren und dann ganz viele Methoden dazu implementieren. Es ist wahrscheinlich sinnvoller nicht die vorgefertigten Klassen zu nutzen, oder?
Bei Pattern habe ich jetzt keinen richtigen Ansatz.
Einfach die Pattern in Java umzusetzen?

Ich weiß, wenn ich die Dinge alle iin einem Projekt anwenden würde, wäre es sinnvoller, aber mir fällt momentan nichts ein, was ich brauchen könnte. :D
 
Werde mich nun mit Pattern und Algorithmen/Datenstrukturen befassen. Hat den Vorteil, da das auch für andere Programmiersprachen hilfreich sein kann.
Aber dabei nicht vergessen, dass es Vorgehensweisen gibt, die in einer Programmiersprache leicht zu implementieren sind, in einer anderen PS dagegen entweder gar nicht oder nur über Umwege. Klassikerbeispiel: Pointer / Referenzen in C++ und Implementierung einer doppelt verketten Liste im Vergleich zu Java https://www.geeksforgeeks.org/doubly-linked-list/

Es ist wahrscheinlich sinnvoller nicht die vorgefertigten Klassen zu nutzen, oder?
Man sollte eine Klasse (oder allgemeiner ein Framework) nicht nur benutzen können, sondern auch die Hintergründe kennen.

Bei Pattern habe ich jetzt keinen richtigen Ansatz.
Einfach die Pattern in Java umzusetzen?
Ganz so einfach ist es nicht, nur ein Zitat aus dem Thread "Brauche Erklärung UML 2.5...." : "(..)dass die Abbildung UML <-> Java nicht bijektiv ist. Das einfachste Beispiel sind die Assoziationen: die UML unterscheidet Assoziation, Aggregation und Komposition. In Java sehen alle Beziehungen von der Struktur identisch aus. (..)" Quelle: https://www.java-forum.org/thema/brauche-erklaerung-uml2-5-zu-bildern-als-java-code.184916/page-3#post-1185127
 
Die Frage, die ich mir stelle ist, wie lerne ich das am besten bzw wie gehe ich das am besten an.
Das Buch, daß ich dir oben genannt habe, liefert meines Erachtens einen guten Einstieg, Entwurfsmuster nicht nur kennenzulernen, sondern auch zu verstehen. Wenn du da durch bist, kannst du diese bestimmt selbständig anwenden.
 
Hat den Vorteil, da das auch für andere Programmiersprachen hilfreich sein kann.
Ja, das ist Hintergrundwissen, das man immer brauchen kann. Es kommt durchaus vor, dass man selbst Datenstrukturen (z. B. Bäume, Graphen, ...) implementieren muss.

Bei Algorithmen z.B. Sortierverfahren, könnte man zum Beispiel mehrere bekannte Verfahren(Merge, Quick, Select, Insertion, Bucket, Radix, ...) einfach implementieren. Sehe ich als recht einfach an, da meist der Pseudocode mit dabei ist. Gibts da bessere Ansätze?
Klar, nur anhand der Beschreibung umsetzen (also erstmal ohne Pseudocode).

Datenstrukturen ist recht klar. Diese implemenjtieren und dann ganz viele Methoden dazu implementieren. Es ist wahrscheinlich sinnvoller nicht die vorgefertigten Klassen zu nutzen, oder?
"Ganz viele Methoden" brauchst Du gar nicht; es genügt in der Regel, das Einfügen, Löschen, Suchen und ggf. Iterieren umzusetzen. Natürlich ohne die den Datenstrukturen entsprechenden Klassen aus der Standardbibliothek, sonst ist es ja witzlos.

Bei Pattern habe ich jetzt keinen richtigen Ansatz.
Einfach die Pattern in Java umzusetzen?
Man muss hier ein wenig aufpassen, dass man ihnen nicht mehr Bedeutung beimisst, als sie haben. Es geht nicht darum, möglichst viele Entwurfsmuster einzusetzen, denn wo es kein Problem gibt, braucht es auch keine Lösung.

Eine Zeit lang gab einen riesigen Hype um Design Patterns, der in meinen Augen fürchterliche Ausmaße angenommen hat (für jeden Unsinn, und sei er noch so gewöhnlich, muss bzw. musste ein Pattern her. Mein Vorschlag wäre das Parameter Passing Pattern gewesen: übergebe Werte per Parameter an eine andere Methode...)

Voraussetzung ist also, dass man ein Problem hat, das sich mit einem solchen Muster lösen lässt und für das es keine bessere Lösung gibt. So hat z. B. das Singleton Pattern zugunsten Dependency Injection (nicht zu verwechseln mit DI Frameworks) massiv an Bedeutung verloren, weil es in der Regel genügt, einfach nur eine Instanz einer Klasse zu erzeugen anstatt in dieser Klasse sicherzustellen, dass nur eine Instanz erzeugt werden kann.

Es geht also nicht (nur) darum, das Pattern in Java umzusetzen, sondern zu verstehen, wann sich ein Problem für welches Problem eignet.

Beispiel: Du möchtest einmal die Gesamtgröße und einmal die Anzahl der Dateien in einem Verzeichnis (inkl. Unterverzeichnisse) ermitteln. Natürlich könntest Du alle Dateiinfos in eine Collection einlesen und anschließend auswerten, das ist aber ggf. sehr speicherlastig. Du könntest auch während des Einlesens zählen oder die Größe ermitteln, also entweder zwei Methoden schreiben, die das entsprechende Ergebnis liefern oder das Ergebnis für beides mit einer Methode ermitteln. Das ist aber auch nicht schön, denn jetzt bist Du auf diese beiden Dinge festgelegt. Willst Du später die Besitzer ermitteln, musst Du den bestehenden Code umschreiben. Hier bieten Dir die Entwurfsmuster mehrere Möglichkeiten an, z. B. Iterator oder Visitor.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben