Was soll ich tun, um sprachunabhängig zu sein?

52

Mittlerweile arbeite ich mit asp.net und C #. Ich habe auch in Java gute Arbeit geleistet. Ich plane meine Karriere so, dass ich eines Tages sprachunabhängig sein sollte. Was sind die Dinge, die ich lernen muss?

Zuerst würden OOP-Paradigmen, wie es über das Klassendesign spricht. Gibt es noch andere?

Gopi
quelle
2
Versuchen Sie: nicht beschriftet zu werden, keine Flexibilität im Beruf zu haben oder auf einer Vision-Suche zu sein?
JeffO
2
@ Jeff Ja! um nicht beschriftet zu werden und nicht zu bekämpfen, dass meine sprache DIE BESTE ist;)
Gopi
Ich würde eher einen Mann einstellen, der eine starke Meinung hat, die meiner nicht entspricht. Denn dann könnte er Java schreiben.
Erik Reppen
In diesem Fall würden Personalvermittler Ihren Lebenslauf überspringen.
Gonzobrains

Antworten:

67

Um sprachunabhängig zu sein, müssen Sie Erfahrung in allen gängigen Stilen und Arten von Sprachen haben.

  • Eine imperative Sprache (Sie sagen Schritt für Schritt, was zu tun ist. ZB - C)
  • Eine deklarative Sprache (Sie sagen ihr Ziel, sie findet heraus, was zu tun ist. ZB - SQL / HTML / Prolog)

Ebenfalls:

  • Eine funktionale Sprache (Funktionen sind der Schlüssel, Vermeidung von Zuständen und Nebenwirkungen sind die Ziele. ZB - Haskell / OCaml / Lisp / F #)
  • Eine objektorientierte Sprache (Architektur, in der Objekte verwandte Daten und die darauf einwirkenden Methoden kapseln). ZB - Java / C #)

Einige Schreibstile:

  • Eine statisch typisierte Sprache (Datentypen werden zur Kompilierungszeit definiert und überprüft. Beispiel: C #)
  • Eine dynamisch typisierte Sprache (Datentypen werden überprüft zur Laufzeit Eg -. Python / Javascript)
    Erfahrung von starken vs. schwacher Typisierung ist ebenfalls nützlich.

Einige verschiedene Laufzeitstile:

Untergeordnetes Zeug:

  • Etwas ziemlich niedriges Niveau (zB - C)
  • Ein Dialekt der Versammlung (zB - NASM)

Darüber hinaus würde ich sagen, dass Sie Erfahrung mit der gleichzeitigen Programmierung und etwas ereignisgesteuertem benötigen . Sie sollten wahrscheinlich auch sicherstellen, dass Sie etwas über die verschiedenen Bereiche wie Webprogrammierung (Client & Server), Rich-Client-Entwicklung / Desktop, Spiele wissen. Vielleicht möchten Sie auch etwas über Embedded-Programmierung oder dedizierte Hardware (wie Spielekonsolen) lernen, und die Entwicklung von Mobilgeräten gewinnt zunehmend an Bedeutung.

Andere haben auch erwähnt, dass es sich lohnt, etwas Erfahrung mit generischen und Meta-Programmieransätzen zu sammeln .

Wenn Sie diese Paradigmen lernen, vermeiden Sie es, nur die Syntax zu lernen und in Ihrem alten Stil zu schreiben. Ich habe viele C # -Entwickler gesehen, die JavaScript so geschrieben haben, als ob es statisch geschrieben wäre. Tu das nicht, versuche die Sprachparadigmen zu lernen und sie anzunehmen.

Wenn Sie dies alles getan haben, werden die Unterschiede zwischen den Sprachen weitgehend syntaktisch, so dass das Umschalten zu einer relativ einfachen Übung für das Erlernen einer neuen Syntax wird.

Vergessen Sie jedoch nicht, dass moderne Programmierung fast immer von einem Framework abhängig ist. Daher ist es auch wichtig, sich mit den allgemeinen und beliebten Frameworks für jede gelernte Sprache vertraut zu machen. Ohne .net ist es irrelevant, C # zu kennen.

Simon P Stevens
quelle
9
Wie ist HTML deklarativ im gegebenen Sinne? "Ziel -> Aktion"? Es ist nicht tut nichts wirklich.
Felix Dombek
3
Eine großartige deklarative Sprache, die ich nur empfehlen kann, ist Prolog. Es unterscheidet sich von allem anderen - keine Funktionen (aber Beziehungen, die in beiden Richtungen funktionieren), kein expliziter Kontrollfluss (der Interpreter löst alles für Sie), nur eine großartige Datenstruktur (Begriffe, nichts anderes wird benötigt). Es ist unglaublich schnell in Was es tut, Millionen von Vereinigungen und Schlussfolgerungen pro Sekunde zu machen - und die Zeit, die benötigt wird, um etwas zu entwickeln, ist ungefähr so ​​kurz wie in Python im Vergleich zu C / C ++.
Felix Dombek
3
@Felix: HTML, goal = "Ich möchte eine Beschriftung und ein Textfeld". Aktion = Die Layout- und Grafik-Engines ermitteln, wie sie gezeichnet werden. Die Details hängen von den einzelnen Browsern ab. Sie definieren nur, was Sie wollen, nicht, wie Sie es tun sollen. Sehen Sie hier . Ich stimme jedoch zu, es ist nicht wirklich eine "Sprache" als solche. Prolog ist ein besseres Beispiel, ich werde aktualisieren.
Simon P Stevens
1
+1 Für eine gute Liste von Typen sind die Sprachwahlen an manchen Stellen ein wenig vom Paradigma entfernt, aber insgesamt ausgezeichnet.
Orbling
2
Übrigens sollten Sie "Verschiedene Bereiche / Abstraktionsebenen" hinzufügen: Web, interaktives Web, Desktop-Tools, Desktop-Spiele und beständige Spiele sind nicht so aufgebaut, wie Einschränkungen und der Abstand zur Hardware unterschiedlich sind. oder sogar Existenz) offensichtlicher für den, der verstehen will, was es heißt, Agnostiker zu sein.
Klaim
4

Ich glaube nicht, dass Sie wirklich sprachunabhängig werden können. Ich finde, dass ich in meiner aktuellen Sprache "denke" (im Moment C #).

Allerdings denke ich, dass Sie das Design möglicherweise vom Code trennen können, indem Sie versuchen, im Pseudocode statt in einer bestimmten Sprache zu denken und es tatsächlich in diesem Format aufzuschreiben. Dies kann Ihnen helfen, sich auf die Entwurfs- und Architekturentscheidungen anstatt auf die Implementierung in Ihrer aktuellen Sprache zu konzentrieren. Der Nachteil dabei ist, wie Simon betont, dass die Sprache und das Framework, das Sie letztendlich verwenden, unweigerlich das Design beeinflussen. Während sich Ihr Design entwickelt, wird es zunehmend an die Sprache und das Framework gebunden.

ChrisF
quelle
+1 für "Sie können nicht wirklich sprachunabhängig sein". Aber ich stimme Ihrem zweiten Absatz nicht ganz zu. Ich denke, es ist wichtig, für die Sprache und das Framework zu entwerfen, die Sie verwenden werden.
Simon P Stevens
@ Simon - Sie haben ein gutes Argument für das Entwerfen des Frameworks. Ich werde die Antwort aktualisieren.
ChrisF
3

Wenn Sie Ihre Frage und einige der Antworten lesen, können Sie den Eindruck gewinnen, dass Sie "Sprachagnostizismus" mit "Kennen jedes Paradigmas auf Erden" gleichsetzen.

Ich bin mir nicht sicher, ob Sie "sprachunabhängig" sind, wenn Sie jedes existierende Paradigma kennen oder verschiedene Sprachen kennen, wenn Sie mehrere Paradigmen und Arten von Sprachen umfassen.

Es ist, als würde man sagen, wenn man alle Religionen praktiziert, wird man religiös agnostisch.

Ich denke, eine sprachunabhängige Person in Bezug auf Programmiersprachen sollte jemand sein, der in keiner Sprache programmieren kann oder sich nicht darum kümmert, mit welcher Sprache er / sie programmieren soll.

Das heißt, einige Leute sagen, ein echter Programmierer kann in jeder Sprache programmieren, wenn er Zugriff auf die Dokumentation dieser Sprache hat.

Wenn Sie das mit "sprachunabhängig" meinen, kann fast jeder erfahrene Programmierer in jeder Sprache programmieren, mit der er / sie arbeiten muss, wenn er Zugriff auf die Sprachdokumentation hat.

Vielleicht möchten Sie "Sprachpolytheist" werden.

Ich selbst bin in mehreren Sprachparadigmen kompetent, aber ich würde OOP vorziehen, wenn dies zutrifft. Ich bin also nicht agnostisch.

Sie werden kaum jemanden finden, der ein bestimmtes Paradigma oder eine Sprache nicht bevorzugt, wenn er die freie Wahl hat.

Tulains Córdova
quelle
0

Es sind nicht nur die Sprachen, Java selbst hat so viele verschiedene Modi, dass man Jahre damit verbringen könnte, sie alle zu lernen. Sie könnten lernen:

  • J2EE-Funktionen wie Messaging und Persistenz sowie die verschiedenen Server
  • jsp und Apache-orientierte Toolkits
  • Ameisen-, Raben- und andere Build-Systeme (Sprachen selbst).
  • Die ganze Groovy / Grails-Welt
  • Alle Apache Commons APIs
  • Testsysteme (Mocking, JUnit)
  • GUI-Builder wie Swing, GWT ...

Und hundert Dinge, die mir fehlen - NUR in Java.

Wenn Sie Jahre damit verbringen, die Breite abzudecken (jede Sprache zu lernen), werden Sie Schwierigkeiten haben, die Tiefe zu erlangen, um in einer von ihnen effektiv zu arbeiten.

Ich sage nicht, dass das Erlernen einer neuen Sprache NIEMALS ein Problem ist, Sie sollten dies aktiv tun! Ich versuche, meinen nächsten Job basierend auf dem zu wählen, was ich lernen kann (was ich noch nicht getan habe), aber ich wähle nicht oft eine zufällige Sprache und lerne sie nicht mehr - Das letzte Mal, als ich es versuchte, war das mit Scala und mir etwas bescheiden gelassen ...

Bill K
quelle
Zur "ganzen Groovy / Grails-Welt" könnten Sie "die ganze Scala / Play! 2-Welt, die ganze JRuby / Rails-Welt und die ganze Clojure / Noir-Welt" hinzufügen.
Vorg van Geir
1
Ich bin damit einverstanden, habe das vor einiger Zeit geschrieben und mir gerade die Sache aus dem Kopf gerissen - obwohl ich mir wahrscheinlich nur eines der Web-Frameworks aussuchen und mitmachen würde.
Bill K