Können Sie Ihre Programmierkenntnisse verbessern, indem Sie andere Sprachparadigmen lernen?

9

Wenn ja, können Sie mir sagen, wie das Erlernen eines neuen Paradigmas Ihren Ansatz zur Lösung von Programmierproblemen verändert hat, selbst wenn das Problem in einem anderen Paradigma / einer anderen Sprache / Technologie liegt?

Ich werde es sehr schätzen Wenn Sie mir auf eine bestimmte Weise sagen können, wie sich Ihre X-Programmierfähigkeiten (dh JAVA / C # / C ++) durch das Erlernen von Y (dh Scheme / Prolog / Lisp) verbessert haben.

Welche Paradigmen schlagen Sie vor, um ein guter Programmierer zu werden?

Meine Erfahrungen sind nur strukturiert - OOP, imperativ - prozedural und in gewissem Maße Template-Meta-Programmierung, aber mein Ziel ist es nicht, eine andere Sprache zu lernen, sondern verschiedene Ansätze zur Lösung von Problemen zu lernen.

Vielen Dank!

Armando
quelle
1
Ich glaube, die Antworten darauf werden eine Art klares Ja sein .
R0MANARMY

Antworten:

7

Ich versuche jedes Jahr mindestens 1-2 neue Sprachen zu lernen. Das meiste, was ich gewonnen habe, war das Erlernen einer funktionalen Sprache (F #), die meine Sicht auf das Lösen von Problemen verändert hat. Ich = jetzt versuche ich, der Maschine zu sagen, was zu tun ist, anstatt wie es zu tun ist, insbesondere in C #, wo ich Linq häufig benutze und unveränderliche Objekte, jetzt wo ich die Vorteile ihrer Verwendung kenne. Ich verwende auch ziemlich oft Funktionen höherer Ordnung (Methoden als Parameter) und mein Codierungsstil hat sich dadurch geändert (verbessert).

Dror Helfer
quelle
1
Das Gleiche gilt für meine Python-Programmierung. Ich hätte es kläglich versäumt, all diesen Code zu knabbern und Parser zu generieren, wenn ich nicht die Techniken gelernt hätte, die ich letztendlich verwendet habe (Bäume implizieren so ziemlich Rekursion oder eine handgerollte Version davon, der Parser-Generator besteht aus von Funktionen höherer Ordnung und wird von Parser-Kombinatoren usw. inspiriert) durch Lernen von Haskell.
Danke, Sie haben erneut bestätigt, was ich vermutet habe ... Nochmals vielen Dank!
Armando
2

Absolut. Jede Programmiersprache, die Sie lernen, hat eine andere Art, bestimmte Dinge zu tun. Manche Dinge werden dich verrückt machen, manche Dinge wirst du lieben und andere Dinge werden langsam auf dir wachsen.

Es ist nie Zeitverschwendung, zumindest die Grundlagen einer neuen Sprache zu lernen.

Toby Allen
quelle
1

Ok, hier ist ein Beispiel, das mir begegnet ist.

Ich habe eine relativ alte Sprache (VB6) für ein Projekt mit einem alten Code gelernt, den wir hatten.
Die Sprache ist sehr fensterorientiert, aber es gibt nicht so viele leistungsstarke Klassen auf hoher Ebene wie im .NET-Framework.

Ich musste einige Bildmanipulationen durchführen, und das führte mich in die Windows-API-Funktionen für die Bildmanipulationen ein.

Nachdem ich erfahren habe, dass ich die GDI-Klassen von .NET besser verstehen kann. Und das Verständnis, dass die Verwendung der Windows-API manchmal viel schneller ist (weniger Funktionsumbruch).

Das soll zeigen, dass Sie auch dann noch eine andere Perspektive erhalten können, wenn Sie alten Code lernen.

Yochai Timmer
quelle
1

Können Sie Ihre Programmierkenntnisse verbessern, indem Sie andere Sprachparadigmen lernen?

Nach meiner Erfahrung definitiv ja. Verschiedene Möglichkeiten, ein Problem anzugreifen, sind wie eine Palette von Werkzeugen. Eines Tages werden Sie (wie ich) diese anderen Werkzeuge verwenden können. Oder vielleicht auch nicht. Es hängt alles ab. Einige Beispiele:

Sprachen stehen im Allgemeinen nicht alleine da, sie haben eine Umgebung. Ich habe ein bisschen Zeit damit verbracht, eine seltsame Sprache zu lernen, die als awk bekannt ist . Es basiert auf dem Mustervergleich unter Verwendung von "regulären Ausdrücken". Durch den Versuch, die C ++ STL zu lernen (nicht sehr erfolgreich), habe ich etwas über Karten gelernt. Durch die Kombination dieser beiden Konzepte konnte ich sehr schnell einige Dienstprogramme zur Texttransformation in Pearl (der einzigen auf der Plattform verfügbaren Sprache) schreiben .

Meistens zum Spaß habe ich versucht, Erlang zu lernen (nicht sehr erfolgreich). Es verfügt über eine Funktionsbibliothek, die als OTP bezeichnet wird und unter anderem eine Methode zur Behandlung von Fehlern implementiert. Manchmal wird dies auch als Fehler bezeichnet, und ein Monitor startet die Funktionen neu. Ich habe diese Idee in einigen Bereichen verwendet und manchmal einfach Dinge scheitern lassen, anstatt endlose Tests durchzuführen.

Der Versuch, Haskell zu lernen (wieder nicht sehr erfolgreich), hat mir wirklich die Augen für andere Arten geöffnet, Probleme anzugreifen. Die funktionale Programmierung beginnt (meiner Meinung nach) mit dem Schreiben von Code, der angibt, welches Ergebnis Sie möchten, und nicht mit dem Schreiben der Schritte, die erforderlich sind, um dorthin zu gelangen. Ich finde, dass mir das wirklich geholfen hat, besseren SQL-Code zu schreiben.

In letzter Zeit habe ich ein bisschen Javascript ausprobiert. Und fand eine Umgebung, die als nodered bekannt ist. Zum Erstellen eines kleinen Hausautomationsservers wird kein Code benötigt.

Um es in die richtige Perspektive zu bringen: Die meisten meiner Versuche in verschiedenen Sprachen waren (und sind) eher flach, hauptsächlich um ein Gefühl dafür zu bekommen, worüber die Leute sprechen. Es gibt nur sehr wenige Sprachen, in denen ich tatsächlich produktiv sein kann.

Ghellquist
quelle
0

Ich habe auch viel gelernt, indem ich mich einige Zeit in einer funktionalen Sprache versucht habe. Was ich daraus ableitete, war jedoch weniger, Dinge anders zu machen als imperative Sprachen, als vielmehr, wie man die Parallelität einfacher macht. Es kann in einer imperativen Sprache genauso einfach angewendet werden wie in einer funktionalen Sprache, aber aus irgendeinem Grund waren die meisten Beispiele, die mir in imperativen Sprachen begegnet sind, komplizierter. (Andere Dinge erwiesen sich in funktionalen Sprachen als viel komplizierter.)

Eine andere Sache, die ich aus einer neuen Sprache gelernt habe, waren zusätzliche Programmiermuster. Ich hatte über viele von ihnen gelesen, aber das Sehen und Verwenden mehrerer wirklich guter Implementierungen von ihnen machte es einfacher, ihre Nützlichkeit zu verstehen und wirklich nach Hause zu bringen, und wann sie angemessen sind.

user1118321
quelle