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



  • OOP: Smalltalk (sehr rein), C++/Java (sehr verbreitet)



  • Eine Programmiersprache kann man nie "innerhalb von ein paar Wochen" lernen. Eine Programmiersprache ist viel mehr als nur Syntax.

    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.

    Welche Sprachen würdet ihr denn mit diesem Vorhaben eintragen?

    Dreimal darfst du raten ...



  • Assembler (kann man wohl als separate Kategorie nehmen; hier geht es nicht um einen konkreten Assembler, sondern um die Art, wie man damit programmiert) und C++/CLI enthalten in diesem Sinn wohl etwa 95% von allem ab, was wirklich jemals gemacht werden muss. C++/CLI alleine deckt ein so grosses Spektrum ab und ist so schwer, dass man, wenn man es einmal wirklich beherrscht, die meisten anderen Sachen im Handumdrehen lernt.

    Ich habe C++/CLI gelernt und arbeite nun ohne weitere Vorkenntnisse so ziemlich mit allem, an was ich mich erinnern mag, ohne nennenswerte Probleme. Von C bis C# hat man eigentlich alle C-basierten Sprachen gratis dabei. Man bekommt Erfahrung mit verschiedenen Welten, der komfortablen Welt von grossen Frameworks wie .NET/Java, die hocheffiziente Welt von nativen Bibliotheken wie boost und der Standard Library, wo man fast alles selbst machen muss. Und bis man das alles einmal beherrscht, hat man einen solchen Krieg mit der Sprache, dass einem danach die meisten Sachen recht simpel erscheinen.

    Ich konnte so z.B. ohne grosse Einarbeitung recht effektiv im Microsoft Dynamics CRM mit JavaScript programmieren (mit viel XML und SQL), an einem bestehenden, komplexen Silverlight Projekt mit Visual Basic.NET und LINQ weiterarbeiten oder einen ganzen Haufen T-SQL Skripte für die Wartung einer Reihe von Microsoft SQL Server 2008 schreiben. Ich kann über diese Arbeiten mit gutem Gewissen sagen, dass sie einfach waren, solange man eine Dokumentation für die Bibliotheken hatte.

    Dann braucht man wohl noch etwas funktionales, aber damit kenne ich mich nicht aus.



  • knivil schrieb:

    Eine Programmiersprache kann man nie "innerhalb von ein paar Wochen" lernen. Eine Programmiersprache ist viel mehr als nur Syntax.

    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.

    und das kann man bestimmt in wenigen Wochen lernen und meistern, oder? Deine Ausage ändert trotzdem nicht an meiner, du kannst keine Sprache in wenigen Wochen lernen (und beherrschen).



  • 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.



  • 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


Anmelden zum Antworten