Sollte ein angehender Programmierer jedes Programmierparadigma gleich gut beherrschen?

httpdigest

Top Contributor
Sollte: Natürlich! :)
Ist das realistisch: Natürlich nicht.

Man lernt nur wirklich "on the job" bzw. "learning by doing". Und wenn dein Job gerade nichts mit logischer Programmierung (zum Beispiel mit Prolog) zu tun hat, tja... dann lernst du das eben gerade nicht. Dafür lernst du aber viel in der Richtung, in der du gerade unterwegs bist.
Solange du lernst und immer offen bist, Dinge aufzunehmen/mitzunehmen, sobald sich die Gelegenheit dazu ergibt, ist alles paletti.
 
K

kneitzel

Gast
Sollte ein angehender Programmierer jedes Programmierparadigma gleich gut beherrschen oder ist es in Ordnung, wenn man da Vorlieben hat?
Also man sollte die wichtigsten Programmierparadigmen kennen. Aber "gleich gut beherrschen" ist absoluter Unsinn. Du wirst genug zu tun haben, die Anforderungen zu lernen und auf dem Laufenden zu bleiben wenn Du nur das lernst, was in dem Dir wichtigen Bereich benötigt wird.

Eine Spezialisierung ist unumstößlich. Selbst jemand, der mehrere Sprachen eines Programmierparadigmas meint, gleich gut beherrschen zu können, hat entweder keine Ahnung (Dann kann er C++, C# und Java zwar gleich gut, aber ist auf einem unterirdischen Level) oder wäre ein Wunderkind...

Ich muss ja nur meinen Werdegang ansehen: C / C++ bin ich mit groß geworden. Aber da ich dann 2002 zu C# und später zu Java gewechselt bin, sind meine Erfahrungen und Kenntnisse auf einem veralteten Stand. Ehe ich ein aktuelles C++ Projekt annehmen könnte, bräuchte ich noch einige Zeit, um auf einen Stand zu kommen, der Projekttauglich wäre.

Daher - wie @httpdiggest schon gesagt hat: Das ist einfach unrealistisch.

Und spätestens, wenn man https://de.wikipedia.org/wiki/Programmierparadigma anschaut:
Die Liste ist ja doch schon recht umfangreich...
 
K

kneitzel

Gast
Was verstehst Du bitte unter Fall Stack Developer?

Oder einfach mal sagen, was denn dieses Fall Stack umfasst Deiner Meinung nach...

Ich denke, du solltest über Begriffe und Ihre Bedeutung etwas mehr nachdenken ehe Du mit Ihnen um Dich wirfst.
 

White_Fox

Top Contributor
Wenn ein Programmierer alle Paradigmen beherrschen würde, wäre er sicher kein Angehender mehr.

Ein Entwickler überhaupt (nicht nur Programmierer) sollte zwei Dinge mitbringen:
  • Die Vor- und vor allem auch die Nachteile seiner verwendeten Werkzeuge gut kennen und eine gute Wahl treffen können.
  • Bei Bedarf offen genug sein, sich Neues aneignen zu können.
Wer diese beiden Eigenschaften mitbringt ist in der Lage, jedes Problem gut lösen zu können. Nicht in beliebig kurzer Zeit, denn etwas Einarbeitung muß halt mal sein, aber er steht zumindest nie auf völlig verlorenem Posten und liefert auch kaum Murks ab (bzw. wenn, dann liegt es eher an der Projektleitung und nicht am Entwickler selber).

Kaum etwas ist schlimmer als die Fraktion, die jedes beliebige Problem zum berüchtigten Nagel umdeutet und mit dem ebenso berüchtigten Hammer erschlagen will. Da kommt nur wertlose Grütze bei raus und macht den Alltag der Menschen, die mit diesem Scheiß arbeiten müssen, nur schlechter.
 

LimDul

Top Contributor
Ich würde sogar so weit gehen, die Frage des Thread-Erstellers zu verneinen.

Wer behauptet alles gleich gut zu beherrschen ist Unfähig - den es ist unmöglich alles in guter Qualität gleich zu beherrschen. In so einem Fall trifft eine von folgenden zwei Konstellation zu:

* Derjenige kann nix richtig
* Derjenige ist nicht in der Lage seine Fähigkeiten korrekt einzuschätzen

Und in beiden Fällen ist so jemand leider nicht zu gebrauchen. Wichtig ist, dass man weiß was man gut kann und was man nicht zu gut kann.
Und man sollte Wissen, wo man sich bei den Dingen, bei denen man sich nicht gut auskennt, informieren kann. Wenn man gewisse Paradigma nicht so gut kennt ist das kein Problem - sofern man zumindest sich dessen bewusst ist und bei Bedarf, wenn die gerade relevant werden, sich informiert.
 
K

kneitzel

Gast
Also da jetzt zum einen @LimDul eine recht deutliche Aussage getroffen hat und @M.L. das etwas angesprochen hat, möchte ich kurz dazu meinen Senf abgeben und es versuchen, etwas kurz zusammen zu fassen und in Bezug auf die Frage vom TE einzuordnen.

Mit Stack ist in der Regel eine Kombination von Technologien gemeint, die aufeinander aufbauen. Full Stack bedeutet: Ein Entwickler kennt sich mit dem ganzen Stack aus.
Dies findet man vor allem im Bereich Web-Entwicklung. Wenn man nach Full Stack oder Full Stack Developer sucht, findet man nicht wirklich viel. Auf Wikipedia habe ich auch nur an einer Stelle den Full-Stack-Web Developer gefunden - was auch den Bereich aufzeigt, der in der Regel gemeint ist.

Der Stack umfasst dann Backend (incl. Datenbank die Server/Services) und das Frontend (Das ist halt meist Web). Ein Full Stack Web Developer kann also alle Layer angefangen von der Datenbank über die Mittelschicht hin zum Frontend.

Das hat aber mit Programmier-Paradigmen nichts zu tun. Ein Full Stack Web-Developer kann also z.B. mittels mysql / php und html/JS/css irgendwas bauen. Da hat er dann aber ggf. nichts wirklich objektorientiertes gebaut ... die ganzen anderen Paradigmen muss man nicht mal prüfen ...

Und der Stack kann komplett unterschiedlich aussehen. Also jemand, der in allen Bereichen aktiv ist, der hat dann von mir aus:
- Datenbanken (Diverse relationale Datenbanken und nosql oder so ... Aber hier gibt es extrem viel an Möglichkeiten und Optionen!)
- Mittelschicht (Bei Java wäre da JakartaEE und Spring zu nennen sowie die vielen anderen Frameworks sowie das Tooling (Application Server). Aber man will das ja ggf. für C# (Sowohl mit Libraries wie WCF als auch Tooling wie IIS ins Spiel) ... aber warum nicht auch C++? ....
- Frontend - da hat man dann sehr viel. Mobile Applikationen (begrenzen wir mal auf Android, iOS) die auf vielen Wegen unterstützt werden können ... Web-Applikationen mit diversen Frameworks und Möglichkeiten ....)

Nur da spielen die angesprochenen Programmier-Paradigmen keine Rolle. Ich kann das alles Abdecken nur mit JavaScript und irgendwelchen Datenbanken. Node.js als Server, für die mobilen Geräte und den Desktop nehme ich mir einen der vielen Wrapper um dann die Applikation, die ich mit einem Framework meiner Wahl (Angular, React, was auch immer) einmal erstellt habe, auch außerhalb des Browsers laufen zu lassen.
==> Also nix mit Aspektorientiert, nix mit Funktional, nix mit ....

Aber schauen wir einfach mal: Kann man sowas gleich gut?
Das halte ich für unwahrscheinlich, wobei ein Vergleich schwer ist. Wie vergleiche ich meine Java Kenntnisse im Middleware Bereich mit den html/JS/css Kenntnissen?
-> Praxis lässt sich vergleichen. Ich war die letzten Jahre vor allem im Middleware Bereich tätig. Dadurch kann ich dies derzeit am Besten.
-> Breite lässt sich vergleichen: In java ist jemand evtl. auch Spring begrenzt und da nur bestimmte Module. Im Web Bereich kennt jemand zig diverse Frameworks. Dann ist man in einem Bereich breiter aufgestellt. Aber wenn man da den Punkt davor mit einbindet: Man hat in der Regel nur eine oder zwei Technologien pro Bereich, in denen man richtig fit ist. Eine aktuelle ("Wir nutzen derzeit Angular für das Frontend") und dann noch ("Früher haben wir xyz genutzt"). Das wechselt nun einmal nicht so oft. Als Freelancer bekommt man mehr ab. Aber dann hast Du die Projekte und wenn Du vor 5 Jahren im Projekt ein Jahr lang xyz genutzt hast: Da hat sich sehr viel getan in der Zwischenzeit - und man ist aus der Praxis erst einmal raus ...)

Daher: gleich gut kann man da nix. Jeder hat seine Steckenpferde, die er besonders gut kann. Und seine Bereiche, die er eher weniger gut kann.
Und das sollte man sich auch bewusst machen. Zum einen wird man bei Vorstellungsgesprächen gefragt. Wo sind Stärken? Wo sind Schwächen?
Und zum Anderen entspricht dies ja auch dem, was man machen will. Ich will kein FrontEnd machen mit JavaScript und CSS. Da fühle ich mich einfach nicht wohl. Das Tooling ist zwar besser geworden aber ich bevorzuge meine eigene Spielwiese, auf der ich mich wohl fühle.

Und da spiele ich mit diversem Spielzeug, aber ich habe meine bevorzugten Spielzeuge.

Das heißt nicht, dass man sowas nicht kennen soll. Ich schaue mir alle Entwicklungen an, die es in die Berichterstattung schaffen. Flutter ist so ein Beispiel, was vor nicht zu langer Zeit aufgepoppt ist.... Aber ich habe gar nicht den Anspruch, das zu tief zu kennen ....

Aber weg von Technologien eines Stacks und zurück zu Programmierparadigmen:
Auch da gilt es ähnlich: Ich muss vieles nicht vertiefen.
Objektorientierung ist extrem wichtig und da fließen einige Dinge ein. Da muss ich gut sein, um sauberes Design mit Clean Code zu entwickeln.
Aber diese Spezialisierung brauche ich nicht in anderen Bereichen. Funktionelle Entwicklung fließt ein, aber doch nicht in dem Ausmaß, wie es hier teilweise gezeigt wird. Oder Aspektorientierte Entwicklung - ja, das kommt teilweise als wichtiger Baustein dazu, aber doch nicht in der Tiefe.
Also da würde ich dieses "gleich gut" generell in die Tonne treten.

Und dann wurde ja auch von @White_Fox gut herausgestellt:
Wenn ein Programmierer alle Paradigmen beherrschen würde, wäre er sicher kein Angehender mehr.
Gerade ein Angehender "Programmierer" (Ich würde den Begriff nicht verwenden. Es geht ja nicht nur um Programmierung. Das ist ein veraltetes Konzept, das ja gescheitert ist. Das war um 2000 die Vorstellung, dass ein paar weniger Architekten dann z.B. in Rational Rose etwas designen und dann "dumme" Programmierer da nur noch Methoden füllen ... so mit Round Robin und so ...) kann vieles nicht kennen. Um so wichtiger ist es, dass er irgendwo anfängt, Erfahrungen zu sammeln. Ich sehe es kritisch, wenn Leute zig Sprachen gleichzeitig lernen müssen. Das ist teilweise ok, so es um primitive Dinge geht. Aber dann muss man sich davon trennen, denn dann sind Frameworks wichtig. Die Welt besteht halt nicht aus HelloWorld Programmen von Schule und Studium!
 

LimDul

Top Contributor
Ich denke man das ganze etwas wie einen Baukasten sehen, ich hab mal ein Bild gemalt:

1613380415345.png

(Bitte die Begriffe nur als Stellvertreter sehen)

Je weiter unten ein Begriff steht, um so "wichtiger" ist der Begriff und so mehr sollte ein angehender Entwickler sich da drin auskennen. So Dinge Design Patterns sollte jeder kennen. Je weiter man aber dann nach oben geht um so mehr spezialisiert man sich. Und um so unwahrscheinlicher wird es, das man sich mit allen Themen auf einer Ebene auskennt.

Dann gibt es halt Entwickler, bei denen sind deren Kenntnisse eher ein Fernsehturm - in Spezialgebieten sehr gutes Wissen, links und rechts davon aber nix. Und es gibt Entwickler die sind vielleicht eher wie eine Pyramide aufgestellt - recht Breit, dafür an vielen Stellen nicht so sehr in die Tiefe.

Und da muss jeder seine Position finden und die ist halt von vielen Abhängig:

* Was sind die Anforderungen im Job (Wer JEE Anwendungen im Job entwickelt, hat normalerweise wenig Berühungspunkte mit JavaFX)
* Wo hat man Spaß dran (Der eine mag technische Frameworks, der andere interessiert sich mehr GUIs - der eine mag CSS, der andere hasst es)
* Was ist gerade hip und modern und wie sehr verfolgt man gerade die neuste Sau, die durchs Dorf getrieben wird

Edit, Nachtrag:

Was ich auch noch erwähnen möchte - ohne Fundament (Java Grundlagen etc.) nützt das wissen in den oberen Ebene nicht viel. Wir hatten hier schon Threads, wo jemand 37 Frameworks (Spring Boot, Mapstruct und noch zig weitere) zusammengeworfen hat, aber die Grundlagen und das Grundverständnis nicht in dem Ausmaß da war, so dass derjenige verloren war, als es mal nicht out of the box ging.

Deswegen: Grundlagen und Grundverständnis ist wichtiger als Framwork Wissen.
 

Neue Themen


Oben