Unsicher bei der Wahl der nächsten Projekte

dvdlly

Aktives Mitglied
Hallo,

Ich studiere Informatik aber habe noch wenig Software selber geschrieben. Ich kenne mich moderat mit Java und C aus und etwas mit Python und C++. Ich möchte bald Rust lernen. Ich plane zuerst einen kleinen Interpreter mit Java zu schreiben und dann Rust zu lernen, dann erst ein paar Algorithmen und Datenstrukturen zu implementieren und dann einen Compiler zu schreiben. Für den Interpreter und Compiler habe ich Hilfsmaterialien die es recht leicht machen das zu schaffen.

Ich möchte fragen, ob ich noch einmal Softwaretechnik 1 revue passieren lassen sollte oder etwas anderes lesen sollte, ein Buch z.B.
und bin für gute Ratschläge von euch sehr dankbar!

Ich habe nicht vor, Systemprogrammierer zu werden und denke es wäre nicht so wichtig, mehr mit C zu arbeiten. Rust stattdessen zu lernen erscheint mir besser, würdet Ihr dem so zustimmen?

Viele Grüße!
 
Zuletzt bearbeitet:

Marinek

Bekanntes Mitglied
Gemäß dieser Seite (https://www.fiveteams.com/ratgeber/programmiersprachen-ranking) ist Python die beliebteste Programmiersprache. Danach gefolgt von Java.

Ich persönlich denke, dass die Ergebnisse, die auf der Seite beschrieben werden plausibel sind. Und zeigen auch einen Stand, der in unserer Firma auch vertreten sind.

Rust gehört nicht dazu.

P.S. Bitte nicht noch ein Bücher Thread.... Bitte nutze doch einfach die Suche im Forum oder Google. Gefühlt kommen auch immer alle 2 Wochen die gleichen Vorschläge.
 

KonradN

Super-Moderator
Mitarbeiter
Also generell solltest Du Dir überlegen, was Du denn später einmal machen willst.

Es ist aus meiner Sicht nicht wirklich sinnvoll, sich zig Programmiersprachen anzueignen. Die Sprachen selbst bringen fast nichts und in eine neue Sprache kommt man schnell rein, wenn man die Grundprinzipien kennt.

Und dann ist die Frage: bringt es Dich Deinen Zielen näher, einen Interpret oder Compiler zu bauen? Oder solltest Du evtl. eher andere Dinge angehen? Das wird Dir hier aber im Forum niemand sagen können, da wir nicht wissen, was Du später machen willst.

Und statt Sprache geht es dann mehr um Frameworks oder Systeme. Also z.B. die Erstellung von Treibern. Oder die Entwicklung von embedded Systemen ….
 

White_Fox

Top Contributor
Rust wird wahrscheinlich eher was für Microcontroller und eingebettete Systeme, dahin mausert es sich meines Wissens jedenfalls. Das ist relativ weit entfernt von dem, wo sich Java tummelt.

Ansich ist es erstmal keine schlechte Idee, sich Rust anzuschauen. Die haben da ein paar sehr interessante Programmierparadigmen verwurstet, das Grundkonzept mal kennenzulernen könnte sich lohnen (und zumindest von diesem Standpunkt fände ich das sinnvoller als Python).

Es ist sicher nicht verkehrt mal in seinem Leben ein paar Zeilen Python geschrieben zu haben. Der Lerneffekt wird aber geringer ausfallen als bei Rust, schätze ich. Und ob man sich diese gräßliche Syntax antun will...baaahhh.
 

dvdlly

Aktives Mitglied
Danke für eure Tipps - bisher habe ich hier die besten bekommen. Ich habe schon auf Reddit und Stack Overflow gefragt unter anderem.
Denkt ihr wenn ich etwas hardware nahes programmiere sollte ich dafür Rust statt C benutzen?

Also generell solltest Du Dir überlegen, was Du denn später einmal machen willst.

Ja das stimmt - ich kann aber nur sagen, dass ich nicht Systemprogrammierer, Systemadministrator o.ä. werden will - das ist mir zu hardware nah auch wenn es cool ist das gut zu können.

Ich löse gerne algorithmische Probleme von codeforces oder leetcode also wäre backend Entwickler vermutlich naheliegend?

In jedem Fall - ich frage mich ob ich mir noch einmal Entwurfsmuster und andere Teile aus der Softwaretechnik 1 Vorlesung anschauen soll, denn das habe ich alles vergessen.
Was denkt ihr dazu?
 

KonradN

Super-Moderator
Mitarbeiter
Also beim Thema Backend kommen direkt sehr viele Themen, die Du Dir anschauen solltest:
- Ja, Entwurfsmuster sind wichtig. Aber bitte direkt mit Bezug zur Praxis. Irgend welche Theorie anzuschauen und dann nicht zu verwenden führt dann nur zu sowas:
denn das habe ich alles vergessen.
Also wirkliches Doing, dann vergisst man das auch nicht.
Ein Buch, das immer wieder empfohlen wird: "Entwurfsmuster von Kopf bis Fuss"

- Dann sind Unit Tests sehr wichtig. Also schau Dir Test Driven Development (TDD) einmal an. Buchempfehlung wäre da von mir Kent Beck mit "Test Driven Development by example"

- Mit den Unit Tests sind wir bereits in der Thematik Clean Code. Da wäre dann Uncle Bob zu nennen. Gibt dazu auch einige Videos auf YouTube und ich habe da mal eine Playlist zusammen gestellt um die zu sammeln: Solid Principles by Uncle Bob Martin (youtube.com)
Aber ansonsten natürlich von ihm die ganzen "Clean ..." Bücher: Robert C Martin mit Clean Code, Clean Architecture, ...
Und wenn es um das praktische Erlernen geht: www.clean-code-developer.de mit den Graden und auf jedem Grad ein paar ausgewählte Prinzipien und Praktiken.

- Datenbanken wurden schon erwähnt. Hier dann halt die Grundlagen (also relationale Datenbanken, dokumentenorientierte Datenbanken ...) aber dann auch die Zugriffe darauf (Also angefangen mit direkten JDBC Abfragen aber dann schnell auch Richtung JPA / Hibernate und dann Nutzung in Frameworks wie Spring oder Quarkus.

- Im Backend ist aus meiner Sicht wichtig, dass man sich auch etwas mit den verwendeten Technologien / Protokollen auskennt. Also so Dinge wie HTTP. Darauf bauen dann auch Dinge wie REST Webservices auf ... Aber in das Themengebiet fallen dann auch Dinge wie z.B. Möglichkeiten, eine Anmeldung zu machen (Basic Auth, OAUTH, ...)

- Frameworks sind schon angeklungen. Da sollte man sich eines aussuchen und das etwas vertiefen. Dabei ist es aus meiner Sicht fast egal, was man nutzt: Jakarta EE, Spring Boot, Quarkus, ... Such Dir eines aus und erarbeite es.

- Architekturen sind auch ein wichtiges Themengebiet. Da wären Schlagworte sowas wie Microservices oder Domain Driven Design.

- Verwendete Technologie: Hier sehe ich zum einen ci/cd Pipelines aber auch die Fragestellung: Wie soll denn später die erstellte Software laufen? Da kommen dann Themen wie Docker und Kubernetes in Frage (also eine Option).

Ich würde somit eher keine neuen Sprachen erlernen sondern bei einer Sprache bleiben und da dann entsprechend vertiefen. Dabei ist es relativ egal, welche Sprache Du nutzt. Java im Backend ist garantiert nicht schlecht und damit machst Du nichts falsch.

Und wenn Du eine Sprache gewählt hast: Vertiefe / meistere diese. Bei Java fällt mir da z.B. direkt Effective Java von Joshua Bloch ein.
Aber auch Themen wie Build Tools (Maven oder Gradle), Entwicklungsumgebungen, ...
(Entwicklungsumgebungen mein nicht, alle möglichen IDEs zu kennen sondern wirklich den Umgang mit einer zu meistern. Da gibt es halt viele Aspekte, denn die IDEs bieten halt sehr viel Unterstützung und es gibt sehr viele Plugins wie z.B. SonarLint...)

Das wäre eine Liste, die mir so direkt einfallen würde und die schon recht gut aufzeigt, welche Bereiche man alles behandeln müsste, wenn man später im Bereich Backend aktiv sein möchte und die ich als notwendig ansehen würde.

Prioritäten sind schwer zu nennen. Man kann ggf. direkt einsteigen mit einem Framework wie Spring Boot und dann parallel an so Dingen wie Clean Code und Entwurfsmuster arbeiten. Das hat den Vorteil, dass man direkt mit der Praxis einsteigt. Denn ganz wichtig: Ohne Praxis geht es nicht.

Und die Themen Interpreter oder Compiler würde ich hier komplett fallen lassen. Das sind Dinge, die Dich im Backend Bereich nicht wirklich voran bringen dürften.
 

dvdlly

Aktives Mitglied
Danke für deine lange und ausführliche Antwort!
Ich denke ich werde jetzt noch einmal wichtige Teile von Softwaretechnik wiederholen und dann erst einen Interpreter schreiben, dann überlegen welche Sprache ich für den Compiler benutze - eine, die ich schon kenne oder Rust.

Ich denke wenn man ein Software System einmal selber implementiert hat kann man viel besser verstehen, wie es sich verhält. Wenn ich also mal ein kleines Betriebssystem, eine Datenbank, einen Compiler und einen Browser geschrieben habe, dann habe ich ein besseres Verständnis für den Software stack in einem Computer.

Außerdem sind solche Projekte gut, wenn man sich für eine Stelle bewirbt denke ich zumindest. Ich werde mir deine Empfehlungen sicher noch ein paar Mal durchlesen!
 

Marinek

Bekanntes Mitglied
Und die Themen Interpreter oder Compiler würde ich hier komplett fallen lassen. Das sind Dinge, die Dich im Backend Bereich nicht wirklich voran bringen dürften.

vs.

Ich denke wenn man ein Software System einmal selber implementiert hat kann man viel besser verstehen, wie es sich verhält. Wenn ich also mal ein kleines Betriebssystem, eine Datenbank, einen Compiler und einen Browser geschrieben habe, dann habe ich ein besseres Verständnis für den Software stack in einem Computer.

Denke dein Vorhaben ist OK. Grundsätzlich kann das nicht schaden. Aber ist in der Praxis unnötig.
 

dvdlly

Aktives Mitglied
Ich habe noch eine Frage - denkt ihr, ein herangehen an meine Projekte so wie es in der Softwaretechnik gelehrt wird - also 1. spezifikationen erfassen etc. 2. Entwurf mit UML oder OCL etc. 3. Implementierung unter berücksichtigung von heuristiken (code smells), Entwurfsmustern etc. 4. Validierungstests ist gut oder sollte ich das wiederholen von Softwaretechnik kürzen und das nicht so akribisch machen?
 

Marinek

Bekanntes Mitglied
Das hängt davon ab, was deine Ziele sind, wie groß dein Team ist, wie bekannt die fachliche Domaine ist.

In der Praxis wird das oft nicht so akribisch gemacht. Aber bei komplexen Projekten wiederum schon.

Du möchtest ja was lernen, wieso also hier abkürzen?
 

Ähnliche Java Themen

Neue Themen


Oben