Welche Sprachen muss man kennen um alle zu können?



  • knivil schrieb:

    Nein, ich habe die Frage so verstanden: Welche Sprache muss man koennen (vielleicht 10 Jahre lang gelernt), um andere Sprachen binnen weniger Wochen zu lernen. Es heisst also nicht, Scheme sei in wenigen Wochen zu lernen.

    Man "kann" Scheme also erst, wenn man Prolog damit als Makro implementiert hat, und alle wichtigen Kombinatoren geschrieben, alle wichtigen imperativen Methoden, und alles, was man als halbwegs übliches Paradigma auffassen kann, in Scheme nachgebaut hat?

    Denn eingebaut bietet Scheme das alles nicht, und um es in kurzer Zeit in anderen Sprachen lernen zu können, muss man es vermutlich für Scheme nachimplementieren. Außer man ist ein Supergenie, natürlich.



  • Was ist denn so tolles in Scheme programmiert wurden, als das so ein Wind hier darum gemacht wird?



  • Mr. N schrieb:

    Man "kann" Scheme also erst, wenn man Prolog damit als Makro implementiert hat, und alle wichtigen Kombinatoren geschrieben, alle wichtigen imperativen Methoden, und alles, was man als halbwegs übliches Paradigma auffassen kann, in Scheme nachgebaut hat?

    Was mir so alles in den Mund gelegt wird ... Jeder wird darueber eine andere Meinung haben. Der amb-Operator ist so alt, wie Lisp selbst, ist aber nicht Bestandteil von Lisp.

    Was ist denn so tolles in Scheme programmiert wurden, als das so ein Wind hier darum gemacht wird?

    Es enthaelt alle Konzepte, bzw. die Grundlagen. Zwar kann ich auch alles mit C oder Asm nachbauen, aber so meine ich das nicht.



  • Ist ja ganz toll das die Sprache alles enthält, aber wen interessiert das wenn so gut wie keiner mit programmiert?

    Gibt es zum Beispiel einen der eine Desktopanwendung erstellen möchte und dann sagt: "Oh wieso machen wie das nicht in Scheme?".



  • Ist ja ganz toll das die Sprache alles enthält, aber wen interessiert das wenn so gut wie keiner mit programmiert?

    Den Threadersteller vielleicht. Mir schon klar, dass es dich nicht interessiert.

    "Oh wieso machen wie das nicht in Scheme?".

    Weil es keiner kennt, weil es nicht Hip ist und weil es nicht von einer Firma promotet wird, wie z.B. Java oder C#. Es sind vergleichsweise (mit Java) wenige, die damit arbeiten, aber es sind genug. Genug in dem Sinne, dass die Sprache weiterentwickelt wird und ernsthafte Anwendungen entstehen. Des weiteren kann man in ihr mit Konzepten experimentieren, die dann in der echten Anwendung mit einer anderen Sprache implementiert werden.

    Auch kopieren mehr und mehr Sprachen die Konzepte, wie z.B. Closures in Java 7. Ich bin ja gespannt. Und alle sprechen dann Java dieses "modernes" Element zu, und wie toll doch die Sprache ist und, und, und ... Alles kalter Kaffee.



  • knivil schrieb:

    Mr. N schrieb:

    Man "kann" Scheme also erst, wenn man Prolog damit als Makro implementiert hat, und alle wichtigen Kombinatoren geschrieben, alle wichtigen imperativen Methoden, und alles, was man als halbwegs übliches Paradigma auffassen kann, in Scheme nachgebaut hat?

    Was mir so alles in den Mund gelegt wird ... Jeder wird darueber eine andere Meinung haben. Der amb-Operator ist so alt, wie Lisp selbst, ist aber nicht Bestandteil von Lisp.

    Wenn ich dir etwas "in den Mund lege", dann ist das höchstens ein Missverständnis. Und wenn du das hier sagst:

    Ja, aber vielleicht gibt es eine Programmiersprache, in der alle Konzepte enthalten sind. Wie in Scheme ... eine Implementation a la Prolog ist ohne Probleme mittels Continuations moeglich, siehe Schelog. Das ist auch ein Killerfeature und in wenigen (Mainstream)Programmiersprachen zu finden. Desweiteren unterliegen sie in anderen Programmiersprachen einigen Einschraenkungen und sind durch die Syntax manchmal schwerer benutzbar.

    Oder das hier:

    Es enthaelt alle Konzepte, bzw. die Grundlagen. Zwar kann ich auch alles mit C oder Asm nachbauen, aber so meine ich das nicht.

    Dann verstehe ich das genau so, wie ich es vorhin verstanden habe.

    Es ist auch ziemlich absurd, dass Scheme alle Konzepte enthalten solle. Klar, man kann mit Continuations Exceptions simulieren (mal als Beispiel), und das ist vielleicht sogar praktikabel und nützlich. Aber es ist definitiv nicht "in Scheme enthalten". Scheme enthält keine Exceptions, es enthält Werkzeuge, um Exceptions zu bauen.

    Ich denke also nicht, dass es reicht, "Scheme zu lernen", um alle Sprachen in kurzer Zeit lernen zu können, dafür muss man viele Dinge lernen, die nicht in Scheme enthalten sind, und die auch nicht jeder gute Scheme-Programmierer beherrschen wird.



  • Scheme enthält keine Exceptions, es enthält Werkzeuge, um Exceptions zu bauen.

    Aber wie aufwendig wird es wohl sein, etwas aehnliches wie Exceptions zu realisieren? Genauso wie der amb-Operator nirgends in Scheme oder Lisp zu finden ist, da er leicht zu implementieren ist, genauso braucht man Exceptions nicht definieren. Obwohl manche Schemesysteme wie Chicken Scheme sie enthalten (z.b. ueber Makros), ist man nicht auf ein Sprachfeature angewiesen. Wahrscheinlich um Continuations zu verbergen, wenn nur das Verhalten Exit-Continuation/Exception benoetigt wird. In diesem Zusammenhang sei noch dynamic-wind zu erwaehnen.

    (begin
      ...
      (let ((ex (call/cc (lambda (throw)                           ; try
                           ( ...
                               (throw MyException) ... )))))
        (cond ((eq? ex MyException) ...      )                     ; catch
              ((eq? ex MyOtherException) ... )
              ...
              (else                                                ; no exception
    
      ...                                                          ; next code
    )
    

    Aber ich will mich jetzt nicht an Exceptions und so aufhaengen, andere Konzepte sind Closures, Funktionen hoeherer Ordnung oder hygienische Makros. Wobei diese Features mehr Verbreitung gefunden haben. Sicher gibt es Konzepte, die nicht in Scheme enthalten sind, wie die ganzen Designpatterns. Aber manche sind in Scheme (oder anderen funktionalen Sprachen) einfach ueberfluessig.



  • Wir werden uns sicher einig, dass Scheme viel bietet und sich definitiv lohnt. Es ist leichter zu lernen als Lisp, und enthält doch vieles, was einen zu einem besseren Programmierer machen kann.

    Aber eben nicht alles! Was zum Beispiel extrem durch Abwesenheit glänzt ist statische Typisierung. 🙂 (Zumindest in R5RS. Es gibt ja angeblich Dialekte, die teilweise statische Typen haben.)



  • Wenn ich das richtig verstanden habe ist Scheme also eine Programmiersprache die man programmieren kann?



  • supertux schrieb:

    Ich würde sagen, gar keine? Eine Programmiersprache kann man nie "innerhalb von ein paar Wochen" lernen. Eine Programmiersprache ist viel mehr als nur Syntax.

    Ich habe c++ innerhalb von einer woche gelernt (ausgehend von C und Java) und seitem programmiere ich c++ code der bei unseren Kunden im Produktivbetrieb läuft

    Die ganzen Konzepte kann man schnell lernen. Die wesentlichen Probleme sind Funktionskenntnisse, z.B. kenn ich viele typen der stream lib, und der STL lib nicht, da ich sie noch nicht verwenden musste.(Bei Java kenne ich auch nur ein kleines subset der Klassen in den 3 millionen mitgelieferten packages)

    Ich denke beim Programmieren geht es darum die wesentlichen Konzepte der Sprache zu verstehen, und nicht um reines Lernen von Funktionsheadern.



  • Die armen Kunden, die einen brauchen Jahre für C++ trotz Vorkenntnisse und die anderen halt eine Woche. Was stimmt hier nicht 😕 Ich möchte bitte als Kunde das du mir kein Framework zusammenfrickelst, tut mir leid.



  • Kinski schrieb:

    Ich habe c++ innerhalb von einer woche gelernt (ausgehend von C und Java) und seitem programmiere ich c++ code der bei unseren Kunden im Produktivbetrieb läuft

    Na, wenn der Kunde gar keine Exceptions und kaum Metaprogrammierung benutzt, kann das sogar sein, wobei ich mir vorstellen könnte, daß in einer Woche Du RAII nicht verinnerlichst, sondern weiter open/close benutzt.

    Kinski schrieb:

    Die ganzen Konzepte kann man schnell lernen. Die wesentlichen Probleme sind Funktionskenntnisse, z.B. kenn ich viele typen der stream lib, und der STL lib nicht, da ich sie noch nicht verwenden musste.

    C++ ohne vector? Kommt mir wie 1999 vor. Der Rest hat sich wohl erledigt.

    Wenn man erstmal ein paar Sprachen kann, lernt man jede weitere in ein paar Tagen gut genug, daß man in normalen Projekten produktiv mitarbeiten kann.


  • Mod

    Assembler



  • hibbes schrieb:

    Wenn ich das richtig verstanden habe ist Scheme also eine Programmiersprache die man programmieren kann?

    Ja, aber das gilt auch fuer Lisp ebenfalls. Sehr eindrucksvoll das PLT-Scheme/Racket Macro-System: click

    extrem durch Abwesenheit glänzt ist statische Typisierung.

    Ja das stimmt.



  • mazal schrieb:

    Vll. auch noch Prolog, obwohl es keine große Rolle mehr spielt. Ich wurde damit in der Uni gequält, kann aber nicht behaupten, dass es mir geschadet hat.

    Hat Prolog jemals eine wirklich große Rolle gespielt?

    Naja, ich habs jedenfalls exzessiv in meiner Diplomarbeit für diversen Compilerbaukrams benutzt und ich kenne auch jemanden, der irgendwelche Ampelsteuerungsgeschichten damit implementiert



  • Wer will schon alle Programmiersprachen kennen und können? 😕

    Da man aus Zeitgründen nicht vieles parallel lernen kann, sollte man sich gute Kenntnisse in C und C++ aneignen. Damit ist dann prozedurales Programmieren, OOP, und eine gewisse Systemnähe gut abgedeckt. Auch hat man eine grosse Portabilität zwischen den heute verfügbaren Betriebssystemen. Dies war der Grund, warum die Mehrzahl der alten Programmierer von ALGOL, FORTRAN, BASIC, PL1, PASCAL, etc. erst auf C und dann auf C++ umgestiegen sind. Man fand das bekannte wieder und bekam neue Möglichkeiten hinzu.

    Für Webzeug gilt das allerdings nicht unbedingt.



  • Wenn du Kiddie bist und unsichere Webapps (Clanhomepage) frickeln
    willst: PHP

    Wenn du mittelgroße Webapps entwickeln willst, Latte-Macchiato
    schlürfender Hipster und Twitterer der ersten Stunde bist: Ruby

    Wenn du große Webstores und n-tier Enterprise-SOA-Architekturen
    entwickeln willst: Java

    Wenn dir Java zu langweilig geworden ist, du aber auf der gleichen
    Plattform bleiben willst: Scala

    Wenn du Microsoft-Fanboy bist: C#

    Wenn du Kernel, Kerneltreiber, Systembibliotheken oder für
    Microcontroller entwickeln willst: C

    Wenn du Apple-Kram entwickeln willst: Objective C

    Wenn du Hobbyentwickler bist und eine einfache und saubere
    Programmiersprache suchst, die auch von Profis geschätzt wird: Python

    Wenn du 3D-Engines oder Office-Suites entwickeln willst und kein
    Problem mit einem barocken Frankenstein-Monster als Sprache hast: C++

    Wenn du das bessere C++ suchst und dir nichts ausmacht, dass das kaum
    jemand benutzt: D oder Eiffel

    Wenn du Java-Entwickler bist und ein wenig neidisch auf die
    Latte-Macciato-schlürfenden Ruby-Hipster blickst aber noch nicht von
    Scala gehört hast: Groovy

    Wenn du WinBriefmarkenverwaltung 2000 zusammenklicken willst: Visual
    Basic

    Wenn du schnauzbärtiger Unix-Admin bist, Logdateien parsen willst und
    Hieroglyphen deine Passion sind: Perl

    Wenn du graumelierter Herr bist, der in den 80er und 90ern seine
    größten Erfolge feierte, dessen Regal mit Data-Becker-Büchern gefüllt
    ist (von denen er selbst eins geschrieben hat) und der nicht mehr
    jeden Hype ("Java") mitmachen will: Delphi

    Wenn du das Web zappeln lassen willst: ECMAScript (JavaScript,
    ActionScript)

    Wenn du Gamelogik skripten willst: Lua

    Wenn du Informatikstudent im Grundstudium bist, der endlich mal
    Funktionale Programmierung beigebracht kriegen soll: Scheme oder
    Haskell

    Wenn du Informatikstudent im Grundstudium bist, der endlich mal
    Logische Programmierung beigebracht kriegen soll: Prolog

    Wenn du zottelbärtiger Ex-Hippie-Nerd der 70er bist und/oder Emacs
    benutzt: LISP

    Wenn du Hacker werden willst: C und LISP

    Wenn du wissen willst wie Objektorientierung gemeint ist: Smalltalk

    Wenn du "Rocket Science" betreibst: Ada

    Wenn du planst dich einfrieren zu lassen um beim Jahr-10000-Problem
    kräftig abzukassieren: COBOL

    Wenn du sonst nix zu tun hast: Google Go



  • Wenn und keine Ahnung hast, aber viel Kohle verdienen willst, dann ABAP.


Anmelden zum Antworten