Programmiersprachen
Ich grüble.
Ich habe vor 20 oder 30 Jahren mal so eine Aufstellung gesehen, wie sich Informatiker bei Software je nach Wissensstand unterscheiden. War so in sieben oder acht Stufen des Wissens dargestellt. Anfänger bemerkt die Fehler gar nicht, Fortgeschrittener fällt auf die Fehler rein, Profi kennt die Fehler und kann sie umgehen, Guru macht eine Kunst draus, alles drehte sich nur darum, auf welche Art und Weise die Leute mit Fehlern umgehen und elegante Workarounds finden. Und die höchste Stufe, der Weise? Da stand ganz banal, dass ihn Fehler nerven. Sonst nichts. Während die anderen eine Kunst daraus machen, um Fehler und Schwächen herumzutanzen, ist der Weise der Meinung, dass die Fehler einfach nicht da sein dürften, dass man sie einfach nicht hinnehmen, sondern beheben sollte.
Nach dieser Hierarchie bin ich bei den Weisen angekommen. Was das Programmieren angeht.
Ich habe in meinem Leben sicherlich so zwischen 20 bis 30 Programmiersprachen verwendet, früher ganz viele. Geht mir mittlerweile auf den Senkel. Die 97. Syntax für if oder for. Und was mir vor allem auf den Wecker geht ist, dass Leute ständig neue Programmiersprachen »erfinden« und sich dabei nicht darauf konzentrieren, wirkliche Fortschritte zu machen, sondern Kopien dessen, was es schon gibt, und dem Zeugs nur kreative neue Namen und abgefahrene Syntax-Varianten zu geben. Schrecklich.
Ich habe mich in den letzten Jahren stark auf Ruby reduziert. Die Syntax, der Stil, die Denkweise finde ich wunderbar, passt mir wie angegossen. Man kann in Ruby sehr effizient, kurz, fehlerarm und trotzdem noch relativ lesbar schreiben. Aber als Interpretersprache ist es langsam, und für größere Projekte taugt es nicht. Die fehlende Typbindung (die man bei Bedarf selbst ausprogrammieren muss) kann zwar ganz lustig sein, aber viele Fehler werden dadurch erst zur Laufzeit entdeckt. So sehr ich Ruby (und derzeit nur Ruby) mag und schätze: Für größere Projekte ist es nichts.
Von C und C++ bin ich abgekommen. Früher habe ich sehr viel darin geschrieben, aber die C++ Standardlibrary ist fürchterlich, und die Fehlerträchtigkeit der Sprachen ist enorm. Security und so. Java finde ich behindernd, da komme ich mir vor, als würde ich mit Lego Duplo spielen, die großen Lego-Steine für Zweijährige, die es früher mal gab. Scala ist keine Sprache, sondern ein Betriebsunfall, und hat nur überlebt, weil bei Informatikern das Labor leider nicht explodiert und niederbrennt, wenn sie dieselben Fehler wie Chemiker machen. Außerdem macht mich die Java Virtual Machine nicht so an.
Worin also programmieren? Was gibt’s an neuen Sprachen?
Go?
Nee, auch nicht mein Fall. So primitiv und gleichzeitig so schwerfällig und klobig. Und in vielem, was ich mache, einfach zu unmächtig. Außerdem habe ich mich ja schon drüber aufgeregt, dass schon ein popeliges Hello World nicht mehr auf eine Diskette passen würde, auf die man früher ganze Betriebssyteme packte.
Rust?
Schon eher. Die haben sich was überlegt und interessante Speicherkonzepte. Mal reingeguckt. Scheint deutlich besser als Go zu sein. Aber bei allem, was sie nicht hingekriegt haben, erklärten sie, dass sie das einfach weglassen, „Das brauchst Du nicht!”. Sowas nervt mich auch. Vor allem aber, dass Go und Rust nicht wirklich objektorientiert sind, sondern nur so eine Art Nachbildung betreiben, man kann Prozeduren syntaktisch an Strukts binden.
So ne richtig gute Programmiersprache gibt’s wohl gerade nicht. Aber Rust werde ich mir mal näher anschauen.
113 Kommentare (RSS-Feed)
> Warum nicht einfach Lisp?
Ich habe das mal im dritten Semester und danach noch einige Male für Emacs-Erweiterungen gemacht. Grausam.
Ich hasse Sprachen, bei denen das Auszählen von Klammern eine zentrale Debugging-Tätigkeit ist.
Schon mal “D” angeschaut?
https://de.wikipedia.org/wiki/D_%28Programmiersprache%29
http://dlang.org/
Wollte ich immer schon mal machen, habe mir aber bisher nie Zeit dafür genommen. Falls man damit jedoch auch Windows Kernel-Treiber programmieren kann, könnte ich mich möglicherweise dazu durchringen.
🙂
ich haette ja von dir erwartet, dass du auf https://github.com/ErisBlastar/cplusequality wartest
> ich haette ja von dir erwartet, dass du auf https://github.com/ErisBlastar/cplusequality wartest
*GRUSEL*
Eine neue Sprache die ich mir gerade anschaue:
Gerade zum Thema Concurrency (-> Go) wird ja immer wieder das jahrzehntealte Erlang erwähnt. Vor ein paar Jahren habe ich mal versucht bisschen was in Erlang zu programmieren, hatte den Versuch aber relativ schnell nach massivem WTF-Kopfweh wieder abgebrochen.
Vor einiger Zeit bin ich über Elixir gestolpert, was von einem Ruby-Guru ins Leben gerufen wurde, und der Versuch ist das Erlang-Ecosystem zu modernisieren:
Das ist gerade meine Experimentiersprache zum abends Spaßprogrammieren geworden. Macht im Gegensatz zu Erlang echt Laune. Erinnert sehr an Ruby, ist aber funktional und vor allem Aktoren-basiert. Halt eben auch dynamisch typisiert, und deshalb die Frage ob man damit wirklich größere Projekte so gut hinkriegt. Jedenfalls gibts als Vorzeigeprojekt dazu bereits ein von Ruby-on-Rails inspiriertes Webframework (‘Phoenix’)
@steffen:
Ich habe neulich versucht, in dem überaus nützlichen Programm unison etwas zu ergänzen. In Erlang geschrieben. Da sitzt man dafür und sucht und sucht und findet nicht, wo in dem Gewust die wesentliche Funktion versteckt ist. Fürchterbar.
So’n Quatsch. Es gibt keine beste Sprache. Es gibt nur immer die beste Sprache für eine spezifische Aufgabe. Wer das nicht kapiert, kann auf keinen Fall weise sein.
Wonach sich die die Eignung bemisst hängt von vielen Faktoren ab. Persönliche Vorlieben sollten nicht dazugehören.
Der erste und grösste Faktor besteht oft in einer legacy cade base. Wenn einfach schon hunderttausende an Zeilen in C++ vorhanden sind, und das ganze Drumherum an Werkzeuginstallationen und Arbeitsabläufen, dann besteht oftmals keine andere Wahl, schon gar nicht für einen Neuzugang im Team. Mit die grössten überkommenen Codebasen finden sich im Finanz,- Wirtschafts- und Verwaltungsbereich, Stichwort Brontosaurus, sorry, Cobol. Es gab mal eine Zeit, wo Cobol-Programmierer sich so richtig fett und rund verdienen konnten, als alle dachten, die Sprache wäre aus der Mode.
Abgesehen von legacy, hier einige typische Anwendungsbereiche
from scratch:
C: Immer noch unverzichtbar für vieles, was low-level bzw. embedded ist. So ziemlich sämtliche Autos laufen auf C bis hin zum Multimediadisplay. Das hat allerdings auch damit zu tun, das eingebettete Software oft von Nicht-Informatikern geschrieben wird, die alles ausser C als Humbug ansehen.
C++: High performance desktop, also vor allem Spiele. Schonmal The Sims installiert? Da kommt ein Verweis auf die Microsoft C++ Runtime. Kein Wunder, dass The Sims so teuer ist.
Java: Die am weitesten verbreitete Sprache. Sind die alle blöd, die
sich für Java entscheiden? Und dann das mit “Außerdem macht mich die Java Virtual Machine nicht so an.” Schon mal C++-Software von Windows/Visual Studio nach Linux/GCC portiert? Oftmals ein Albtraum. Mit Java ein Nicht-Thema.
C#: Microsofts Java-Alternative mit lessons learned. Für sich genommen unbestreitbar die bessere Sprache, es hapert jedoch an Bibliotheken und guten virtuellen Maschinen. Ihr freundlicher Personalchef wird bestätigen, dass Leute, die Microsofttechnologien beherrschen, oft gute Aussichten haben. Dazu gehören ausser C# das ganze .NET, MFC usw.
Ruby: Skriptsprache, nicht mehr und nicht weniger. Ungeeignet für alles über ein paar tausend Zeilen Code und damit das meiste.
Dito für alle anderen Skriptsprachen.
Scala: Der Java-Nachfolger. Wer die Sprache zu schwierig findet, kann ja die Finger davon lassen. Wer sie zu meistern versteht, schreibt oftmals deutlich weniger Code im Vergeleich zu Java.
Go: Wurde als kompilierte Sprache mit garbage collection konzipiert. Daher hat es keine Existenzberechtigung, denn Java _ist_ eine kompilierte Sprache mit garbage collection, denn niemand zwingt einen, die erhältlichen konventionellen Java-Compiler _nicht_ anzwuwenden.
Das Problem sind nicht die Sprachen bzw Platformen. Das Problem sind das Schubladendenken und die Unflexibilität vieler, die sich Informatiker nennen.
> So’n Quatsch. Es gibt keine beste Sprache. Es gibt nur immer die beste Sprache für eine spezifische Aufgabe.
Diese Sichtweise halte ich für die allermeisten Aufgaben für falsch und für eine Ursache des Misstandes.
Denn das Programm, nicht die Sprache, soll an die Aufgabe angepasst sein.
Solange wir Dutzende von Spezialsprachen haben, die alle für irgendein spezifisches Problem geschaffen sind, taugen die eigentlich alle nichts.
Denn ich arbeite auch nicht nur an einem Problem und will nicht 30 Sprachen schreiben, nur weil ich an 30 verschiedenen Problemen arbeite.
> So ziemlich sämtliche Autos laufen auf C bis hin zum Multimediadisplay.
Jo. Neulich haben sie eines ferngesteuert.
Und wer „Auto” als Programmieraufgabe und nicht als Ansammlung von vielen verschiedenen Aufgaben ansieht, den kann ich sowieso nicht ernst nehmen.
> C++: High performance desktop, also vor allem Spiele.
High performance Desktop soll eine „spezifische Aufgabe” sein? So’n Blödsinn.
> Java: Die am weitesten verbreitete Sprache. Sind die alle blöd, die sich für Java entscheiden?
Tolle Beschreibung einer Aufgabenstellung.
Die entscheiden sich auch nicht alle freiwillig für Java.
Und viele derer, die sich für Java entscheiden, tun das, weil sie nicht mehr als das können.
> Schon mal C++-Software von Windows/Visual Studio nach Linux/GCC portiert? Oftmals ein Albtraum. Mit Java ein Nicht-Thema.
Ein Design-Problem von C++ ist keine Stärke von Java.
> Scala: Der Java-Nachfolger. Wer die Sprache zu schwierig findet, kann ja die Finger davon lassen.
Scala ist nicht zu „schwierig” (vielen schon, mir nicht), sondern ein planloser Haufen akademischer Ejakulate, die nicht zusammenpassen.
> Wer sie zu meistern versteht, schreibt oftmals deutlich weniger Code im Vergeleich zu Java.
Die Umständlichkeit von Java ist kein Verdienst von Scala. Ich kann in Ruby nochmal wesentlich kürzer, prägnanter und lesbarer schreiben als in Scala. Und damit sind Syntax und Semantik von Ruby denen von Scala weit überlegen.
> Das Problem sind das Schubladendenken
Und Du willst mir erzählen, man bräuchte für jede Aufgabe eine andere Sprache?
> und die Unflexibilität vieler, die sich Informatiker nennen.
Informatiker sind weit flexibler, als Du die vorstellen kannst, denn die lernen, Automaten mit denen ganz anderer Paradigmen zu simulieren, das ist mehr Flexibilität, als Du Dir vorstellen kannst.
Aber Deine Beispiele sind ziemlicher Müll und hören sich nach Laiengefasel an. Kein einziges Argument, was auch nur irgendwie zieht.
Hast du dir D angesehen?
“So ne richtig gute Programmiersprache gibt’s wohl gerade nicht.”
Gabs noch nie. Hängt ausserdem doch total von deinem Programmierparadigma ab (funktional, prozedural, oo etc…) und ist auch persönlicher Geschmack.
Gegen Scheme (funktional/prozedural mit Lambdas und Closures) gibts konzeptuell an sich übrigens wenig einzuwenden…
o.t. aber dennoch sehr interessant: Edward Snowden zum Thema Zensur an Unis und die Reaktionen der SJW’s
https://twitter.com/snowden/status/653724738280386561
Ist „in wenigen Jahren nicht die 98. Sprache lernen zu wollen“ nicht gerade _das_ Argument gegen Rust? Jedenfalls wäre es möglich, dass in wenigen Jahren kein Hahn mehr danach kräht. Im Gegensatz zu anderen Programmiersprachen.
Wie wär’s denn mit C#? Wer’s – wie ich – gerne MS-frei hat, kann’s ja unter Mono laufen lassen.
In einer kleinen C-.EXE verpackt, habe ich darin sogar schon eine tausendfach auf USB-Stick ausgelieferte GUI-Software hinbekommen. Die Anwendung hat die minimal notwendige Mono-Laufzeitumgebung mit Cairo, sqlite usw. usf. selbst mit ausgeliefert, ins Temp-Verzeichnis entpackt und war im Nu gestartet. Lief ohne jegliche Fehlermeldung von Win 2000 bis Win 7 und hat – trotz irgendwie verdächtigem Verhalten – auch keinen Virenscanner geweckt.
Mit noch ’ner Woche Aufwand wäre das auch auf OS X gelaufen. Unter Linux lief’s sowieso, denn dort habe ich’s ja entwickelt gehabt 😀
Oder halt bei Java bleiben. Da tut sich in letzter Zeit viel mit Frameworks. Mit den Closures und Generics kommst’ auch relativ gut vorwärts.
Die bisher schon jahrelang in diese Sprache investierten Aufwände im Business-Bereich sprechen auch dafür, dass Java nicht so schnell ausstirbt.
Könnt ihr freundlicherweise Java dort lassen wo es hingehört…
Kuck Dir mal Gosu an. Java auf Dope, geopensourcte, einstmals proprietäre Programmiersprache einer Firma, die Versicherungsanwendungen entwickelt. Kompiliert zur Laufzeit auf die Java-VM. Damit hast Du die kompletten Java-Libraries zur Verfügung. Guten IDE-Support (IntelliJ only) gibts genauso wie die Möglichkeit, mit dem Ding nur per Texteditor mal eben ein simples Skripten zu hacken. Und die Sprache hat ein echt interessantes (statisches, aber dennoch durch’s Programm erweiterbare) Typsystem.
Leider ein Geheimtip, verbreitet ist sie nicht wirklich. Aber sie hätte echt verdient, mal einen anständigen Hype zu erfahren.
Das macht ja Emacs (Tipp: paredit-mode) für dich. Oder Vim, wenn’s beliebt (jemand hat paredit auf VimL portiert).
Ich bin seit 20 Jahren in professioneller C++-Entwicklung. Viele Umgebungen als Freiberufler, natuerlich trotzdem limitiert im Blick. Aber da ist ein ziemlicher breiter thematischer Querschnitt dabei. Ich hab mal mit Turbo Pascal angefangen, spaeter gelegentlich Projekte mit hoeherem C#-Anteil (selber Erfinder wie Turbo Pascal) betrieben. Nett. Plus Python.
Und ehrlich gesagt, das reicht mir auch. Ich hatte nie das Bestreben Dutzende Programmiersprachen zu lernen, weil Tiefe eben nur begrenzte Breite vertraegt. Das ist einfach Heisenbergsche Unschaerfe, der Mensch ist endlich.
Wie schon erwaehnt, ist mit der Auswahl der Sprache auch mehr verbunden. Rein merkantil, aber auch die technischen Oekosyteme. Beherrscht man die und hat man gut gewaehlt, dann kann man auf beliebige Probleme damit losgehen. C++ ist fuer mich eine gute Wahl gewesen. Bewegt sich ja auch i.M. einiges Erfreuliches in der Sprache selbst und fuer meine Probleme mit Anspruch an Geschwindigkeit und Datenmengen verschiedenster Auspraegung war/ist es letztlich kaum umgehbar, wie sich immer wieder neu zeigt.
Zur Portierbarkeit nur kurz. Mag ja sein, dass das in Java ein kleineres Problem ist (aber so ganz ohne ist das vom Hoerensagen her auch nicht). C++-Compiler gibt es allerdings fuer jede interessante Plattform. Schreibt man gescheiten Code, ist das Uebertragen eher unkritsch. Bei mir oft C++ und OpenGL (+Qt fuer manche GUI’s). CMake dazu und dann laufen Crossplatformdinge eher klaglos. Ich schreib Vieles parallel fuer Windows und Unixoide. Auch an immer mehr Sachen in Android komme ich mit NDK heran, den Java-Wrapper koennen andere machen.
in der Web ecke ist neben Ruby nun CoffeeScript stark im Trend. In Verbindung mit Node.js für den Server code….
Ich halte Sprachen für irrelevant und sehe es wie der Profi: Die zur Aufgabe passende Sprache.
Heißt in meinem Fall zum Beispiel C für Echtzeitanwendungen im embedded Bereich, Java für 08/15 Geschäftssoftware und irgendwas logisches für Businesslogiken.
Weil ich wie Du so unzählige Sprachen gelernt habe, als Schüler mangels Kohle Maschinencode geschrieben habe (ein Assembler war zu teuer) und als mir damals C als traumhafte Hochsprache voller Eleganz vorkam, kann ich sagen: Wenn ich eine neue Sprache brauche, ziehe ich sie mir am Wochenende kurz rein.
Das spannende ist nicht die Sprache, sondern die Welt in der die Sprache lebt. Also Bibliotheken, Frameworks, IDE, Dokumentation. Zumal im Projektgeschäft, wo jedes Projekt seine eigene dunkle Vergangenheit mitschleppt.
Das verrückteste was ich mal hatte war die Entwicklung eines eigenständigen Compilers, der eine Sprache für ein einziges konkretes Projekt bereitstellen sollte. Gefüttert wurde der Compiler dann mit Zeugs die aus einem Makrogenerator kam… 🙂
Mir hat mal eine Frau (ja, ernsthaft!) sinngemäß gesagt: Das wichtigste Werkzeug eines echten Programmierers ist nicht der Computer sondern ein Whiteboard und der Mund. Der Computer dient nur zum aufschreiben.
> Wenn ich eine neue Sprache brauche, ziehe ich sie mir am Wochenende kurz rein.
Ja. Wobei das früher mal gut ging, bei heutigen Sprachen könnens dann auch mal drei oder vier Tage sein.
Das Problem sind die Libraries, die man alle neu schreiben müsste.
> Mir hat mal eine Frau (ja, ernsthaft!) sinngemäß gesagt: Das wichtigste Werkzeug eines echten Programmierers ist nicht der Computer sondern ein Whiteboard und der Mund. Der Computer dient nur zum aufschreiben.
Wenn sie es dann schafft, das ordentlich aufzuschreiben, soll mir das recht und egal sein, wie sie das sieht. Wenn sie das aber nur als Ausrede dafür nimmt, nicht zu programmieren, geht das gar nicht. Und am Whiteboard Pfeile und Kästchen anzumalen ist leicht.
> Von C und C++ bin ich abgekommen. Früher habe ich sehr viel darin geschrieben,
> aber die C++ Standardlibrary ist fürchterlich …
Hast du dir mal C++11 bzw. C++14 angeschaut? Die haben da ein paar nette Sachen aus anderen Programmiersprachen eingebaut.
Zum Scripten kommt bei mir serverseitig zunehmend Javascript zum Einsatz (beispielsweise node.js). Das hat den Vorteil, dass man die gleiche Sprache wie auf dem Client verwenden kann. Wenn man sich mal an die Eigenheiten gewöhnt hat, lässt sich damit recht elegant programmieren.
> Hast du dir mal C++11 bzw. C++14 angeschaut?
Nein.
Java = Cobol der 90 und ist es bis heute geblieben. Inzwischen genauso vermurkst und rangeflickt wie andere Altsprachen.
D: Der gescheiterte Versuch C++ besser zu machen, lag aber an mangelndem Talent, Weitsicht des Entwicklers und vor allem tieferen C++ Kentnissen. Man hat den Eindruck der hat noch gar nicht intensiv mit C++ gearbeitet und dessen Mängel klar erkannt. Herausgekommen ist ein bischen Syntaxkosmetik und praktisch tot und irrelevant.
Rust: Ja klingt für mich auch interessant und finde das weglassen von üblichen Features genauso strange wie Herr Danisch.
Scala: Siehe Beschreibung v. Hr. Danisch. Wie man diesen Müll toll finden kann? Mein Eindruck das verwenden nur Poser die sich wichtig machen und abheben wollen aber weder von Lisp oder OO tiefere Kenntnisse haben, da wird halt blind vom Guru nachgeplappert ohne das Hirn einzuschalten, nur der Guru hat recht.
Ruby: Kenne ich nicht wirklich. Sah für mich auf den ersten Blick immer so aus wie “Perl mit richtigem OO”, von der Performance hat es mich auch nie vom Hocker gerissen, soweit ich das getestet habe. Zudem ist das die Sprache der Railslesben, Feministinnen die in Frauenseminaren programmieren lernen, sowas will ich nicht nutzen.
C++: Wird mit jeder Version verkorkster wo man denkt, wat hat das Standardgremium wieder geraucht? Zudem hat man den Eindruck dort tummeln sich nur noch Stümper und ein paar Wichtigtuer die unbedingt ihre lib xy oder Idiotenfeature in den Standard hiefen wollen. Dort gehts mehr um Politik und “ich bin im C++ Standardgremium um meinen Lebenslauf und mein grottiges Buch zu pushen” Die Sprache ist die verhunzteste und verschlimmbesserte wie keine andere, ein barocker Müllhaufen, lustig anzusehen der zum nachdenken und abschrecken anregt wo man sich an jeder Stelle fragt: ‘Wie besoffen muss man sein…’ Stroustrup sollte die Entwicklung einstellen und auch sonst die Finger von neuen Sprachen lassen, das Experiment ist gescheitert. Herausgekommen ist ein Clonschaf das 10 Beine hat aber nicht laufen kann: 5 unten, 3 am Rücken, eines am Kopf, eines am A*. Dazu alle Fellsorten die es gibt, kann so ähnlich Pfeifen wie ein Vogel aber mehr wie eine Krähe…. eine Sprachmissgeburt. Wenn ich schon die Fannboys vom “Standard” schwafeln höre,… Typen die noch nie was anderes als C++ gesehen haben, deshalb finden sie es u.a. auch so toll, so doof war ich früher auch mal als ich mit dem Schrott begonnen habe. Ja ich könnte noch stundenlang weiterlamentieren.
In der beruflichen Praxis hat man eh keine Wahl: Je nachdem wo man unterwegs ist muss man DIE Sprache die dort dominant ist verwenden, von ein ‘wir machen das anders’-Kaspern mal abgesehen.
> Java = Cobol der 90
Eher der 2000er, aber der Vergleich ist gut.
> Sah für mich auf den ersten Blick immer so aus wie “Perl mit richtigem OO”
Der Eindruck ist auch nicht ganz falsch, in seinen ersten Formen hat Ruby tatsächlich als Perl-Verbesserung angefangen (so wie Perl eignetlich als sed-und-awk-Verbesserung angefangen hat), es hatte mal einige Perl-Features, die man wieder rausgeworfen hat. Man hat nur den ganzen Kram mal ziemlich gut aufgeräumt und orthogonalisiert. Perl habe ich auch mal sehr viel gemacht (90er Jahre), ist aber eine ziemliche Katastrophe.
@Profi
Es gab mal eine Zeit, wo Cobol-Programmierer sich so richtig fett und rund verdienen konnten, als alle dachten, die Sprache wäre aus der Mode.
Das war um 2000 ? Als der Jahrtausendcrash der Bankensoftware aus dem Kaffeesatz der Nachkommastellen prognostiziert wurde ? Hab ich nur mal so am Rande mitgenommen, ist nicht wirklich mein Metier.
Aber ganz allgemein, wenn einer z.B. Humanmedizin studiert, dann 20
Jahre lang stattdessen was GANZ anderes macht, anschließend dann
doch wieder eine Praxis eröffnet – so what.
Nach 2 Monaten kennt er alle aktuellen Pharmareferenten, und legt los. Das Studienobjekt selbst verändert sich jedenfalls eher im
Jahrtausende-abstand.
Ganz anders der Programmierer, oder auch viele MINT Fächer.
Extrem undankbar, was die eigene Obenschwimmerei betrifft.
Nach all den Programmiersprachen, mit denen ich arbeiten musste, mag ich C und C++ auch heute noch am liebsten. Im Gegensatz zu so vielen anderen Codern hatte ich nie ein Problem mit C++. Ich kann praktisch alles damit machen (ja, auch schönen Code darin schreiben) und es ist zu Recht noch immer der Industriestandard in Sachen Gamedev. Java mag ich auch sehr, wo ich das Verbosity-‘Problem’ nicht sehe, das manche zu haben scheinen. Ich denke aber, ich verstehe Deine Punkte.
Ich habe mich nun auch eine Weile auf Hacker News rumgetrieben. Alle zwei Tage wird eine neue Sprache vorgestellt, eine noch weniger mein Fall als die andere. Bei Go bin ich derselben Meinung wie Du. Ich habe es auch mit Rust versucht, aber die Entwickler dahinter sind mir ganz einfach zu arrogant und unsympathisch. Bei meinem letzten Versuch, das offizielle Book durchzulesen, musste ich fast loskotzen und daher aufgeben. Dumm, aber so kann ich mich nicht damit befassen, zumal ich nicht mal einen Verwendungszweck für Rust hätte. Und ich komme ganz gut ohne Schwimmring zurecht.
Ich stosse btw auch immer wieder auf die Aussage ‘use the right tool for the right job’. Gesagt von genau den Leuten, die kurz darauf einen Riesenaufwand dafür aufbringen, JavaScript auf einem Server lauffähig zu machen. Mir scheint es, als wäre die aktuelle (englischsprachige?) Programmierercommunity nicht sonderlich begabt. Diese Leute werden dann von anderen Leuten ‘Brogrammer’ genannt, die aber wiederum den hässlichsten Code im gesamten Universum schreiben.
Naja, das musste jetzt endlich mal raus. Von deutschsprachigen Programmierern höre ich übrigens normalerweise die intelligenteren Kommentare, also sollte ich wohl wieder mehr dort aktiv werden. Die ganzen neuen Programmiersprachen für Scriptkiddies und die “Wir müssen alles nach JavaScript porten!”-Mentalität gehen mir mittlerweile wirklich auf den Sack.
Happy coding!
> Mir scheint es, als wäre die aktuelle (englischsprachige?) Programmierercommunity nicht sonderlich begabt.
Das ist durchaus der Fall.
Die Arroganz ist jedenfalls weit höher als das Talent. (Sag’s keinem weiter, aber insoweit haben Frauen, die sich über den Stil beschweren, manchmal sogar Recht, aber sie beschweren sich halt in die falsche Richtung und machen alles noch schlimmer.)
Aber man muss ihnen lassen, dass sie fleißig sind.
Aber viele Entwicklunge, Libraries, Programmiersprachen usw. sind misslungen, weil die Leute eigentlich ziemlich untalentiert sind. Java beispielsweise ist als Sprache eine Katastrophe, weil der, der sie entworfen hat, drangegangen ist wie ein Bauer.
dev.clojure.org/display/doc/Getting+Started
Ich meine, dieser Post schreit ja förmlich nach unsinnigen Vorschlägen.
> “Ich hasse Sprachen, bei denen das Auszählen von Klammern eine zentrale Debugging-Tätigkeit ist.”
Das wird aber später anders, wenn man dann kein Anfänger mehr in der Lisp-Programmierung ist!
> Das wird aber später anders, wenn man dann kein Anfänger mehr in der Lisp-Programmierung ist!
Ich glaube, ich habe es lange genug gemacht, um kein Anfänger mehr gewesen zu sein, und ich habe die Sprache durchaus verstanden und beherrscht, mochte sie aber trotzdem nicht. Lisp ist etwas, was ich mir als Zwischencode des Compilers, aber nicht als Eingabesprache vorstelle. Es ist Aufgabe des Compilers, ein Programm in so einer vereinheitlichen Listenstruktur darzustellen, und nicht des Programmierers, sie darin einzugeben. Deshalb programmiere ich im Alltag ja auch keinen Assembler mehr. Lisp ist ja auch kein Compiler, sondern nur ein Eingabesystem, um das Compilat gleich selbst einzugeben.
Davon ganz abgesehen kann ich solche Pseudoargumente nicht leiden wie „Die Super-Sprache X mögen nur Anfänger nicht, jeder, der Profi sein will, muss sie einfach lieben, weil ich sie liebe.” Das ist keine greifbare Aussage.
schau dir newspeak mal an. ist zwar nur experimentell und hat so gut wie keine anwender, aber vom konzept her genial.
> schau dir newspeak mal an. ist zwar nur experimentell und hat so gut wie keine anwender, aber vom konzept her genial.
Was macht man mit so einer Inselsprache?
@ Hadmut
Ich kann dir empfehlen mal einen Blick auf Swift zu werfen. Damit habe ich mich vor kurzem, bisher aber nur oberflaechlich, beschaeftigt und auf den ersten Blick gefaellt mir die Sprache sehr gut. Funktional ist ja fuer dich ein Reizwort, optionals als grundlegendes Sprachelement und Funktionen als first class citizens sind aber sehr praktisch und imo auch angenehmer zu verwenden als bspw. in Java8. Und man muss den funktionalen Kram ja nicht nutzen, wenn man nicht will.
Insgesamt muss man sehr wenig boilerplate tippen. Neben recht knapper, aber gut lesbarer, Syntax fuer viele Standardkonstrukte ist auch die Typinferenz recht maechtig und erspart einem in vielen Faellen die Typisierung, in denen es so offensichtlich ist, dass man es wirklich nicht hinschreiben muesste. Ich bin auch auf einige angenehme Kleinigkeiten gestossen, wie bspw. verschachtelte Funktionen, die ich sehr praktisch finde.
Wenn du Objective-C kennst, ist eigentlich wenig richtig Neues dabei. Die dort schoene Option notfalls rohes C mit malloc, free und Pointern zu schreiben faellt unter Swift weg. Dafuer ist alles andere simpler und nicht fast alles in eckigen Klammern. Speichermanagement funktioniert ueber ARC, automatisierte Referenzzaehlung, und ist angenehm, weil man sich nicht drum kuemmern muss und gleichzeitig nicht die Probleme mit bspw. mangelndem Determinismus bei der JVM hat.
Ach ja, doch, Templates, die zumindest syntaktisch auf den ersten Blick aussehen wie C++, gab es frueher nicht. Damit habe ich mich noch nicht beschaeftigt, vermute aber mal ganz optimistisch, dass der Kram weniger eingeschraenkt ist als die Generics in Java, die unter der Type Erasure leiden, oder die Templates in C++, die zwar extrem maechtig sind, aber so gut zu handhaben wie eine kugelfoermige Rasierklinge.
Bisher ist das zwar nur fuer Macs eine Option, aber Apple hat ja angekuendigt die Sprache unter eine Open Source Lizenz zu stellen. Ich bin mir ziemlich sicher, dass Swift in absehbarer Zeit das typsichere, Gegenstueck zu Python wird.
Ansonsten bin ich auch mal gespannt, was aus Rust wird. Vom Prinzip finde ich die Idee einer weniger fehlertraechtigen Sprache fuer low-level Systemprogrammierung sehr ansprechend. Ich habe aber meine Zweifel daran, dass jemals noch irgendetwas dem Traegheitsmoment von C Einhalt gebietet.
Grundsaetzlich geht es mir aber aehnlich wie dir, was Programmiersprachen angeht. Alles hat irgendwelche Pferdefuesse.
@Hanz: Ich programmiere gerne funktional und habe nichts dagegen. Aber nur, wenn es zum Problem passt.
Mir gehen die Leute auf den Geist, die funktionales Programmieren als das allein selig machende und das Hauptparadigma ansehen. Das halte ich für falsch, und halte Objektorientiertheit für viel wichtiger.
Stört mich auch an Scala. Die machen auf funktional, aber brechen sich dabei einen ab. In Ruby, das gar nicht mal explizit als funktional ausgelegt ist, das aber einfach besser umgesetzt hat, kann ich viel kürzer, einfacher, lesbarer und prägnanter funktional programmieren als in Scala.
Swift würde ich mir anschauen, wenn ich für Mac/iOS entwickeln würde. Meines Wissens gibt es Swift aber nur auf Mac, weil von Apple.
Ich sollte mal die Gegenfrage stellen: Was ist für dich eine “gute” Programmiersprache?
Und: Ist es überhaupt möglich, eine Sprache ohne Nachteile zu kreieren?
>Ich sollte mal die Gegenfrage stellen: Was ist für dich eine “gute” Programmiersprache?
Eine, die nach dem Stand des Wissens Fehler vermeidet, in sich orthogonal und vollständig ist, Überflüssiges und überladene Syntax vermeidet, gut schreibbar und gut lesbar ist, die meines Erachtens wichtigen Paradigmen wie Objektorientierung, Exceptions usw. unterstützt, hierarchisches vollständiges Typsystem, gute Metaprogrammierung, Effizienter Workflow, Sicherheit,…
> Und: Ist es überhaupt möglich, eine Sprache ohne Nachteile zu kreieren?
Das vielleicht nicht.
Aber man muss sie nicht noch zusätzlich mit Nachteilen anreichern.
Und man muss auch nicht zwei neue Sprachen pro Jahr neu entwickeln, weil die bisherigen immer so viele Nachteile hatten.
@ Hadmut
Genau das sagte ich ja. Derzeit ist es eine reine OSX/iOS Sache, aber sie haben angekuendigt die Sprache unter einer Open Source Lizenz zu veroeffentlichen. Dann wird es interessant.
Du könntest natürlich zu den Quellen Deiner Jugend zurückgehen und wieder Forth verwenden. Ausufernde Syntax wäre dann jedenfalls kein Problem mehr; nur die Typisierung fehlt.
Haskell böte sich noch an, auch wenn der GHC mittlerweile unangenehm groß geworden ist.
> Du könntest natürlich zu den Quellen Deiner Jugend zurückgehen und wieder Forth verwenden.
Forth war, was die damalige Zeit betraf, eine der geilsten Sprachen überhaupt und ist meiner Einschätzung nach bis heute von allen Sprachen, die mir untergekommen sind, die effizienteste, die in ein paar hundert oder tausend Byte eine komplette Entwicklungs- und Laufzeitumgebung unterbringt, und aus einem 6502 richtig was rausgeholt hat.
Für heutige Aufgaben allerdings nicht mehr geeignet, und mit UPN können die meisten auch nichts mehr anfangen.
> Aber als Interpretersprache ist es langsam, und für größere Projekte taugt
es nicht. Die fehlende Typbindung (die man bei Bedarf selbst ausprogrammieren
muss) kann zwar ganz lustig sein, aber viele Fehler werden dadurch erst zur
Laufzeit entdeckt. So sehr ich Ruby (und derzeit nur Ruby) mag und schätze:
Für größere Projekte ist es nichts.
Exakt. Ruby skaliert nicht. Ich beschreibe es als “Disziplinbasierend korrekt.
Da die verfügbare Disziplin pro Tag allerdings endlich ist, und dazu noch
volatil: Kommt es vor das man an einem schlechten Tag in einem Ruby die
Vorhandene Code Basis zu schwächen – ohne es zu merken.
Meiner Meinung nach ist dieses Problem allen dynamisch typisierten Sprachen
inhärent. Man bekommt keine wichtigen Invarianten so dargestellt das man sie
“garantiert” nicht im Projektverlauf bricht.
Egal wieviel man testet, egal welche coverage Metrik man erreicht: Viele
Fehler die man erst zur Laufzeit findet – währen durch ein Typsystem zu
vermeiden. Natürlich nicht alle, aber halt eine wichtige Fehlerklasse.
Wie im Artikel und den Kommentaren erwähnt gehört Ruby noch zu den
“saubereren” Interpreter Sprachen, Gegenbeispiel Perl. Leider sehe ich keinen
möglichen Fortschritt für die Sprache, um meiner Meinung nach vorhandene
semantische Schwächen aufzuräumen.
Schlechte APIs oder Implementierungsdetails der Sprache die im worst-case
undokumentiert Einfluss auf die Semantik haben können nicht einfach aufgeräumt
werden. Gerade wegen der dynamischen Typen, denn:
Man nehme an eine neue Version der Sprache wird veröffentlicht, die Syntax ist
noch die gleiche, und semantische Schwächen wurden aufgeräumt, insbesondere in
der core/stdlib. Nun gibt es bis auf per Definition “löchrige” (unit) test
suites keine automatisiere Möglichkeit festzustellen ob man seinen Code
erfolgreich auf die neue Version portiert hat.
Das Problem existiert auch bei Sprachen mit Typenbindung, allerdings gilt hier
wieder: Zumindest wird einem ein signifikanter Teil der Arbeit durch den
Type-Checker abgenommen. Den bei einem Typ-Fehler gilt: Hier passt garantiert
was nicht. Das ist schon mal um Längen besser als in Sprachen wie Ruby bei
denen hinter jedem conditional eine call side für eine nicht mehr vorhandene
/ geänderte API stecken kann.
Daher haben Maintainer von Ruby (und allen anderen Dynlangs) gerechtfertigterweise
immer die “Heilige Kuh der Abwärtskompatibilität” im Kopf. Änderungen haben
also einen bias hin zu: Neue APIs hinzufügen, neue Syntax Optionen etc.
Grundsätzlich aufräumen ist in einer dynamisch Typisierten Sprache aber
deutlich teurer. Für alle Teilnehmer des Spiels, Maintainer, Library Autoren
und Nutzer.
Das alles betrifft auch typisierte Sprachen, allerdings mit etwas weniger
“Friktion” im gesamt Prozess. Und daher sind diese meiner Meinung nach
mittel-langfristig die bessere Wahl.
Und welche bin ich selber am suchen 😉 Aktuell gucke ich mir Idris an, primär
aber zum Lernen von Typetheory, nicht so sehr für Kunden Projekte.
OCaml
Hach, was bin ich froh, seit knapp 15 Jahren nur noch horstige Monolithen via old school-Gedöns zu beackern, lies, die dicken IBM-Hobel. .)
Mein Tagwerk am Institut bestreite ich mit FORTRAN und PL/I, bei gelegentlichen Aushilfstätigkeiten tippe ich RPG und COBOL.
Es gab mal eine Zeit, wo Cobol-Programmierer sich so richtig fett und rund verdienen konnten, als alle dachten, die Sprache wäre aus der Mode. Das war um 2000?
Ich glaube, da irrst Du Dich, und zwar gewaltig. Meine gerade erst fertige gelernte, jüngste Nichte hat Anfang des Jahres bei einer überaus bekannten, deutschen, doch auch international tätigen, uns allen bekannten Bank angeheuert; als COBOListin.
Sie verdient dort mehr Zaster im Jahr, als die allermeisten, frischen Uni-Absolventen in deren dreie. Von Sozialleistungen, Fortbildungen und sonstigen ‘goodies’ gar nicht erst anzufangen.
Versuch mal Swift. Ich bin absolut kein Apple-Mensch, ich hasse sie sogar, daher stand mein Urteil eigentlich schon vorher fest. Allerdings lag ich total falsch. Sie bringt einige sinnvolle Neuerungen mit (Optionals, Named Parameters.. für alle die bisher ohne Obj-C gelebt haben), von daher handelt es sich nicht um den gleichen Abklatsch und die 100. Neuauflage derselben Dinge. Aber man ist eben an Apple gebunden, vielleicht wird da in Zukunft noch mal was draus.
@Fabian:
> Aber man ist eben an Apple gebunden, vielleicht wird da in Zukunft noch mal was draus.
Ja, das ist das Problem. Ich habe zwei Macs im Einsatz, aber nur für kommerzielle Software. Alles sonst wichtige mache ich unter Linux (teils in einer virtuellen Maschine auf dem Mac). Swift taugt daher für mich nicht, einfach weil es eine Mac-spezifische Sprache ist.
> und aus einem 6502 richtig was rausgeholt hat
Yo, yo, das Titelbild der 64er hab’ ich direkt vor Augen. Aber auch in Forth ist es uns nicht gelungen die Zetmaschine zu bauen, insofern nur ein weiterer Reinfall.
Was spricht eigentlich dagegen für ‘ne Web App das Backedn aus Forth zu stricken?
Ähem, zur eigentlichen Frage:
1. Die Sachen von Apple sind gut. Ja. Emotionelles kann man ja mal beiseite packen. Obj-C gibts auch von GNU, zur Not. Swift schon mal eine Chance gegeben? Nöö, ne is ja blöd. Apple is ja blöd. Wolln wa nicht, nur Computah.
2. Perl 6 ist die Sprache für die Weisen aus dem Blogbeispiel. Als Runtimedingens die Parrot.
3. Es schwirrt irgendwo so ein Video rum, wo John Carmack ablabert, was er über Haskell denkt. Ist sehenswert.
4. Und eigentlich ist die Antwort ja: Ja,ja, Javascript. Gibts ja auch serverseitig und für die Kommandozeile, ist nen vollwertiges Scheme, hat voll viele Programmierer und alles.
Und schön finde ich es als Sprache auch. Also ich jetzt zumindest.
Sehr geehrter Hadmud, bitte schreib dann auch mal ein Posting was es denn dann geworden ist.
@Supraperplex:
> Swift schon mal eine Chance gegeben? Nöö, ne is ja blöd. Apple is ja blöd. Wolln wa nicht, nur Computah.
Warum soll ich mich mit einer Sprache beschäftigen, wenn ich zu deren Einsatz alle meine Rechner gegen teure Macs austauschen müsste?
> Nöö, ne is ja blöd. Apple is ja blöd. Wolln wa nicht, nur Computah.
Das habe ich (hier) nicht gesagt. Aber ich brauche für meine Zwecke nun mal Linux-Rechner, und da gibt es bisher kein Swift.
Und einfach nur mit „Gib einer Sprache eine Chance” daherzukommen ist ziemlich dämlich. Da muss man schon mal sagen können, warum ich mich damit befassen soll.
> als wäre ich mit Lego Duplo spielen
“würde” oder “spielte” statt “wäre”?
@Heinz: Ja, Danke!
Die beste aller Programmiersprachen existiert seit über 40 Jahren und heißt ML. Heute populäre Abkömmlinge sind OCaml und Haskell.
Mal ehrlich: Sprachen die heute populär/mainstream sind, sind es nicht weil sie besonders gut sind, sondern weil sie gutes Marketing hatten bzw. gute finanzielle Anreize. C? Unix. C++? Windows. Java? Sun. Objective-C? iOS.
Und dann gibt es noch die Reihe der sich verselbständigten Frickel-Interpreter von Perl über Javascript bis PHP, die aus einem konkreten Bedarf heraus entstanden sind und dann für alles-andere-auch verwendet wurden/werden, auch wenn sie schlecht geeignet sind. Frei nach dem Motto, ich habe einen Hammer, alles ist ein Nagel.
Es interessiert also niemanden, ob die Sprache wirklich gut ist, ob er sie verwendet, sondern man wird i.A. dazu gezwungen sie zu verwenden. Du willst die Bibliothek/OS/Application-Server/.. xy verwenden? Tja, die ist in A geschrieben. Also codest Du A.
Die ML-Sprachen sind primär im Elfenbeinturm Uni zu finden, da wo der Druck eine bestimmte Technologie zu verwenden am niedrigsten ist. Im Feld programmieren dann alle Java.
Mir persönlich ist Haskell etwas zuviel Elfenbeinturm, da es Dich zwingt alles über Monaden zu machen und es für alles lazy-evaluation benutzt. OCaml ist imho die beste real-world Sprache, da man damit auch imperativ programmieren kann, man kann also auch Standard-Algorithmen benutzen bzw. der Umstieg von imperativen Sprachen ist einfacher. Das Typ-System ist einfach nur geil und bläst das von Java/C++ einfach aus dem Wasser: Ich kann schreiben wie in einer Skriptsprache und bekomme mehr Fehler beim Kompilieren gefunden als in Java/C++. Als kleiner Bonus ist OCaml dann auch noch rattenschnell und hat einen großen Haufen Bibliotheken.
Naja, wie eingangs angeführt entscheiden sich aber die meisten aber auf Grund äußerer Umstände für eine Programmiersprache und bleiben dann im “lokalen Maximum” hängen. Und viele von denjenigen die die Chance haben in der Uni eine Sprache wie ML kennenzulernen, denen wird es oft gleich vergällt, da diese Sprachen eben nicht für die coolen Übungen benutzt werden, sondern für Vorlesungen der theoretischen Informatik, um Typsysteme, Berechenbarkeit etc. zu erklären, was dann die meisten eher abschreckt. Und die landen dann bei Python oder Ruby, die von der Sprache her zwar weniger bieten, dafür aber schnelle Erfolgserlebnisse durch Bibliotheken.
tldr; Menschen wählen Programmiersprachen i.A. aus emotionalen, sozialen oder finanziellen Gründen. OCaml rockt; rational gesehen. 🙂
In den 90ern habe ich sehr viel mit Pascal programmiert (davor Basic). Die integrierten Entwicklungsumgebungen von Borland waren ein Traum.
Mit Linux kam dann C dazu und dabei blieb es dann auch. Die ganzen Sprachen mit C-ähnlicher Syntax habe ich dann schon nicht mehr angerührt, um meine C-Skills damit nicht zu vermatschen. Am Ende kann man dann alles nur ein bißchen und gar nichts mehr richtig, weil man fünf subtil verschiedene Parser im Gehirn braucht für sonst gleich aussehenden Code. Da bring ich mir lieber mal über ein Wochenende Cobol bei. Das stört nämlich die gespeicherten Muster nicht und kann kompiliert werden.
Seit dem Internetzeitalter habe ich aber eh kaum noch programmiert, höchstens hin und wieder mal Shellprogrammierung. Neulich mal zum Spaß einen Prototyp mit VB.net erstellt, nur mal zu sehen, wie es mit RAD inzwischen aussieht. Pascal ist tot und C wird ständig mit dem mutierten Monstrum C++ gleichgesetzt.
Was hältst du eigentlich von Python, Hadmut? Ist jetzt die angesagte Anfänger- und Hobbyistensprache. Ich finde es schlimmer als Basic je war.
> Was hältst du eigentlich von Python, Hadmut?
Bisher Abstand. Habe mich nicht näher damit beschäftigt, weil es mich nicht reizt, simple Brot- und Buttersprache, aber wohl deutlich besser als Perl. Werde mich aber nicht darum drücken können, weil einige Programme das als Skriptsprache verwenden.
FreBasic 😉 Ist auch quelloffen. Bisher Windows, x86-Linux und ein ARM-Beginn (weiß nicht, wie weit das schon gediehen ist).
Nein, ehrlich. Basic oder Assembler. Die erzeiugen bei FreeBasic einen Zwischencode, denn man dann einfach einem C-Compiler zu fressen gibt und damit hast du dann so im Groben die Vorteile beider Sprachen. Man kriegt weniger Gehirnknoten, wenn jeder Anfang eines Strukturelements ein definiertes eigenes Ende hat, statt bloß ner Einheitsklammer. Dadurch muss man den Code bereits weniger aufteilen und sowieso braucht dasselbe Programm, wenn man es 1:1 schreibt, ungefähr die Hälfte der Zeilen.
Wobei ich trotzdem C-like schreibe und vorgehe.
Ist bei mir die “Ausstiegs”-Sprache, nachdem ich die Nase voll habe von den ganzen spinnerten Entwicklungen, wo kleinste Tools bereits Monster an Langsamkeit und Größe sind.
Dinosaurier sind auch ausgestorben sag ich mir, warum soll da Java und .NET überleben. Und OLE ist sowieso wie eine Fabrik, wo Tausend Leute in der Verwaltung sind und ein einziger am Schraubstock.
Man muss noch anmerken, dass viele alte Sprachen Kinder ihrer Zeit und historisch gewachsen sind. C++ sollte ein besseres C mit Objekten sein, gleichzeitig kompatibel zu C. Erst mal ne gute Idee. Aber das ist Vor und Nachteil zugleich, was zu vielem Mischmaschcode führt. Entwickler die von C kommen entwickeln auch unter C++ weiterhin C-mässig, wenn sie sich nicht am Riemen reissen und das war in der Praxis oft der Fall. Andererseits war man auch z.T. dazu gezwungen weil viele C++ Features nur im Standard gut funktionierten und lange nicht in die Compiler Einzug hielten oder defekt waren. Der Vorteil war aber dass man jede hundsgewöhnlich C-Lib andocken konnte -> automatisch Zugriff auf eine riesige vorhanden Codebasis was aber den Mischmascheffekt noch mehr verstärkte.
In Java hat man am Anfang vieles weggelassen weil es als zu schwierig, überflüssig und fehleranfällig galt, es sollte sowas wie eine Sprache für Durchschnittsentwickler sein, damit der schnell reinkommt und sich nicht selber auf die Finger kloppt (keine Zeiger, automatische Speicherverwaltung), was ja auch nicht verkehrt ist.
Nur hat man dann später wieder alles rangeflickt, was draussen bleiben sollte und das mehr oder weniger gut und die Libs dazu sind bzw. waren lange teilweise noch auf dem alten Stand. Als Genercis kamen wurde das noch viel schlimmer, ein grauenhafter Mischmasch in den Basis-Bibliotheken. Die Boilerplatecoderate stieg rasant an, auch so ein Punkt in Java. Man tippt sich nen Wolf für trivialste Dinge. Eine einschlägige IDE nimmt einem vieles ab aber der Code bleibt einfach unübersichtlich bei der Geschwätzigkeit.
Überhaupt die Libs in Java, die wurden über mehrer Versionen einfach nicht gepflegt, bekannte Bugs oder Mängel wurden nicht gefixt, selbst wenn kein Bruch in der Kompatibilität zu erwarten war. ‘Fixen wir vielleicht im nächsten oder übernächsten Release’. Hier war man gezwungen inoffizielle Fixes oder Alternativen zu nutzen, was wieder Probleme bei Auftraggebern machte, weil die nur 100% pure Java haben wollte, keinen Fremdcode, wegen evt. Lizenzärger,… Zum Kotzen.
Also ich habs immer pragmatisch gesehen. Ich hab immer das genommen was da war oder was ich nehmen mußte. Während des Zweitstudiuns hab ich mir für 6000 DM einen Apple IIe gekauft (hatte ja keine Ahnung, dass der außer fürs Hobby zu nichts nutze war) und hatte da zunächst keine Disketten. Außerdem war das Apple Pascal (nochmal 700 DN) noch nicht lieferbar. Also hab ich im Basic angefangen das Spiel Halma zu programmieren. Da ich noch keine Disketten hatte habe ich das Programm immer zu Papier gebracht und am nächsten Tag bis zu dieser Stelle wieder neu eingegeben. Das Studium lief nebenbei. Aber als ich die 80 Zeichenkarte (was die wieder gekostet hat, weiß ich nicht) und das Apple Pascal abholen konnte schenkte man mir eine gebrauchte Diskette dazu. Das war ein gewaltiger Fortschritt und dann hab ich das natürlich nach Pascal übertragen. Viel Prozeduren behielten lange dem Namen der Zeile (der go to Adresse) in der sie in Basic bekommen hatten. Ich hab dann wie verrückt ptogrammiert und war mit Pascal eigentlich glücklich. Später konnte ich dann mal 5 Jahre ien Expertenstem in Prolog schreiben. Aber die Expertensysteme waren oin Flop, so dass ich dann in C programmieren mußte. Später waren es dann neben der Systemadministration die kryptischsten Werkzeuge.
Privat bin ich bis heute bei C geblieben. Problematisch sind die Arrays wenn man da über den Rand hinaus schreibt. Vor allem wenn das über Jahre gut geht und dann nach einer Programmänderung ein Speicherfehler kommt oder es am Montag unter VMS lief und am Dienstag unter UNiX nicht Anfangs hab ich mal einen ganzen Tag gesucht bis mir klar war, dass der Fehler einfach darin lag, dass ich bei array[4] auf [5] geschrieben habe. aber wenn man das einmal verinnerlicht hat, dann kann in C nichts mehr schief gehen; (denn der Fehler ist immer derselbe. Immer die Arrays oder dynamisch allokierter Speicher) und dann macht auch *** irgendwann Spaß. C++ hab ich mal anprogrammiert, aber es ging in C immer so schnell, dass ich nie den Aufwand getrieben habe privat umzusteigen. Letztlich haben mich immer nur die Knobeleien interessiert und da habe ich nie die Veranlassung gesehen auf C++, Bibliotheken oder gar MFC zu gehen.
Manchmal stößt man in C darauf, dass man gerne eine zusätzliche Eigenschaft hätte, also z.B. Zuweisung von arrays in einem Schritt. Da könnte man eine Sprache doch vielleicht ausbauen. Aber ich habe mir nie Gedanken gemacht warum das wohl nicht so einfach möglich ist.
Ocaml? Schnell, sauber, funktional, typsicher, module, oo.
Ich bin bei Sprachen Agnostiker. Für schnell mal aus dem Ärmel rotzen nehme ich Perl, i.A. Java weil der Rotz dann auch auf dem Smartphone rennt. Was mich bei Java nervt ist das ständige Exception Handling. Mir ist ein ehrlicher “Segementation fault” lieber 😉
Ansonsten, nenn mir die Aufgabe, sag mir die gewünschte Sprache und los gehts. Hat mal jemand OCCAM gemacht? War damals bei der NSA der letzte Schrei für Codeknacker. 😉
> Mir ist ein ehrlicher “Segementation fault” lieber
Ein Segmentation fault ist nicht ehrlich, weil man da schon ziemlich weit danebengreifen muss, um den auszulösen. Ein normaler Pufferüberlauf wird davon noch nicht erkannt. Übel.
> Hat mal jemand OCCAM gemacht? War damals bei der NSA der letzte Schrei für Codeknacker.
Ja, ich habe damals an der Uni das Transputer-System am IAKS programmiert und viel in OCCAM gemacht.
> So’n Quatsch. Es gibt keine beste Sprache. Es gibt nur immer die
> beste Sprache für eine spezifische Aufgabe.
Das halte ich für Unfug. Solange die Sprache Turing-vollständig ist, kann ich damit prinzipiell jedes Problem lösen, was mit einem Computer lösbar ist. Deshalb heisst es ja *universelle* Turingmaschine. Eine gute Sprache ist eben universell einsetzbar, wie man das von einem Werkzeug erwartet.
Davon abgesehen ist die beste Sprache für eine spezifische Aufgabe meistens die, die man am besten kennt.
Meistens beschränkt sich die sogenannte Innovation sowieso nur auf die Syntax. Ich weiss auch nicht wozu wir 100 Syntaxen für dasselbe Konzept brauchen.
Die sehen einfach den Wald vor lauter Bäumen nicht. Das ist so als würde jede Firma, statt den Meter zu akzeptieren, ihr eigenes Längenmaß definieren. Nach dem Motto Hauptsache mein Meter ist länger als deiner. ;o) Dabei merken sie nicht, dass sie im Grunde alle dasselbe machen: eine Entfernung zwischen zwei Punkten messen. Abstraktion kann manchmal ganz hilfreich sein.
@ Hadmut
[…] mit Lego Duplo spielen, die großen Lego-Steine für Zweijährige, die es früher mal gab.
Lego Duplo gibt es immer noch und ist eine sehr gute Möglichkeit, schon in diesem jungen Alter die Feinmotorik und die Auge-Hand-Koordination zu trainieren, zusätzlich zu der räumlichen Denkweise und der Kreativität, eigenes zu entwickeln.
Mann könnte ganz salopp sagen, Lego Duplo ist der erste Schritt zum Informatiker (oder Ing. oder Architekt oder Forscher oder sonstwer, der/die/das neues macht). 😉
Steinige Grüße,
Euer Dirk
Ich gebe mal als Anfänger mal meinen Senf dazu:
ein weiteres Problem sind die unterstützten Plattformen
und dass die Sprachen in der Regel nicht kompatibel
sind (einige schon: zum Beispiel ermöglichen es gewisse
JVM Sprachen anscheinend Bibliotheken von verschiedenen
JVM Sprachen zu verwenden).
Ich habe ein kleines privates Repository wo
ich meine ganzen Programme zusammenfasse.
Ist größtenteils Java und hat nur eine
eingebette Datenbank als Abhängigkeit.
Momentan beschäftige ich mich,
unter anderem, mit der
zukünftigen Sprache für dieses Repository,
wobei dass wichtigste ist, dass es ohne
großen Aufwand überall läuft
(Smartphone,PC,…). Zudem sollten gewisse
Features zumindesten optional untestützt werden
(bsp. präemptives Multitasking brauch
ich nicht immer aber es sollte auf wenigsten der
Hauptplattform vorhanden sein; Objektorietierung).
Momentan sieht es aus, dass ich Javascript verwenden
werde, wobei ich die benötigten Features
via selbstgemachter ‘Standardbibliothek’ hinzufügen
werde (dass scheint bis jetzt ohne großen Probleme
zu gehen. Schnittstelle definieren, danach simples
Fallback erzeugen, wobei in einigen Fällen es reicht,
dass man so tut als ob das Feature vorhanden wäre
und dann eine open source Bibliothek als Backend verwenden)
und auch so die bekannten Tücken der Sprache
umschiffen kann.
Da merkt man dabei die ganzen Problem, wie
dass es keine Module gibt bzw. mehrere Moduldefinitionen
=>Schnittstelle erzeugen die zu allen kompatibel
ist(UMD funktioniert nicht wie gewollt).
Letztendes find ich das Thema zum Kotzen.
Auch wenn das meistens (leider) der Fall ist, muss Perl-Code nicht hässlich oder unmodern sein. Ein gutes Beispiel dafür, wie das Entwickeln von Webseiten mit Perl heutzutage aussehen kann ist das (von Sinatra inspirierte) Mojolicious-Framework[1]. Hier[2] ist eine Einfürung, die die wichtigsten Features zusammenfasst.
[1] http://mojolicio.us
[2] http://mojolicio.us/perldoc/Mojolicious/Guides/Tutorial
Puh, da bin ich ja wirklich froh, dass ich kein Informatiker/Programmierer bin und nur mal ab und an ein wenig C zum Rumstümpern in DLLs brauche. Naja, und vielleicht MATLAB, falls man das dazu zählen kann und will.
Andererseits habe ich dank dem IT-Schrott-Container noch einen HP 48g rumliegen, vielleicht sollte ich mal Reverse Polish LISP lernen 😀
@hexcode forever:
Java = Cobol der 90
Haha, wenn du wüsstest… Hier inner Firma wurde sogar eine Art objektorientierter Aufsatz zu Cobol entwickelt. Dieser ist heute noch im Einsatz und da ist nichts mit “am Wochenende kurz reinziehen”, sondern es braucht etwa 14 Tage Schulung, um das zu verstehen und dann programmiermäßig anzuwenden. Cobol ist ja an sich schon englische Prosa in Großbuchstaben ab Spalte 8 und das ganze dann “objektorientiert” *shudder*
@Markus:
Viele Fehler, die man erst zur Laufzeit findet, wären durch ein Typsystem zu vermeiden.
Au ja, PL/1 ist da ein spezieller Kandidat: Da darf man auch gerne gepackte Dezimalzahlen über Zeichenketten legen (oder andersherum), ohne dass der Compiler meckert. Im Idealfall bekam man einen Laufzeitfehler (0C7 oder 0C4 oder so), im weniger schönen Fall wurden dann vier Leerzeichen zur Kontonummer 40404040 oder 04040404, die dann immer ganz merkwürdige Buchungen bekamen und erst nach intensiven Forschungsarbeiten ermittelt wurde, wo die erzeugt wurden.
“Forth war, was die damalige Zeit betraf, eine der geilsten Sprachen überhaupt und ist meiner Einschätzung nach bis heute von allen Sprachen, die mir untergekommen sind, die effizienteste, die in ein paar hundert oder tausend Byte eine komplette Entwicklungs- und Laufzeitumgebung unterbringt, und aus einem 6502 richtig was rausgeholt hat.”
Als fachfremder Mensch, der in die Programmierung damals nur mal so interessehalber hineingerochen hat (Weltherrschaftsphantasien und so 🙂 ), hat mich ebenfalls keine andere Sprache so fasziniert wie Forth: unglaublich flexibel (Rekursion – die damals noch nicht Standard in Forth war – als Strukturelement zu implementieren war ein Einzeiler!), enorme Effizienz (man konnte z. B. beliebige Unterroutinen ohne weitere Umstände in Assembler umschreiben, wo der – an sich schon sauschnelle – Interpreter mal nicht schnell genug war), und konkurrenzlos einfache und vollständige Testbarkeit auf jedem Level zwischen Einzeldefinition und Gesamtprogramm – so konnte man mit Forth in Rekordzeit zu einem zuverlässigen, praktisch fehlerfreien Programm kommen. Ich habe nie verstanden, warum diese Sprache letztlich so wenig praktische Bedeutung erlangt hat; das bißchen Umgewöhnung mit der UPN kann doch nicht ernsthaft als Hindernis gelten?
> Was macht man mit so einer Inselsprache?
man erweitert sein fachwissen und bekommt eine einführung in features die dann 5 bis 10 Jahre später in den mainstream sprachen landen. 😉
> … mit Lego Duplo spielen, die großen Lego-Steine für Zweijährige, die es früher mal gab.
Die gibt es immer noch und die sind sogar kompatibel mit den “echten” Legos, haben sozusagen ein passendes Interface-Layer/ähnliche API. 🙂
Und man kann auch mit Lego Programmieren (Mindstorm: Kästchen zusammenklicken, wenn man nicht gleich auf C++ geht).
In Forth hatte ich meine größten Erfolgserlebnisse auf dem C64 …
… zurück zum Thema. Zusammen mit Funktional hat Objekt als Core-Element unbestreitbar Prio 1, sonst hätte ich Scheme empfohlen. (Jeder Scheme-Programmierer hat ein Objekt-System programmiert, manche auch zwo bis drei, z. B. ich damals).
Ansonsten. Ruby aufbohren nach skalierbar und compilierbar. Freiwillige vor?
Und viele derer, die sich für Java entscheiden, tun das, weil sie nicht mehr als das können.
Das mag so zumindest für Universitäten und deren Umfeld seit Mitte der 90er-Jahre gelten. Da wird ja oft schon Java im Grundstudium (bzw. Bachelor) als einzige Programmiersprache richtig gelehrt. Alle anderen Sprachen werden nur mal beleuchtet, um andere Programmierparadigmen zu erläutern oder eben dann, wenn ein Dozent in seinen Praktika oder Seminaren etwas anderes wünscht (was dann heute oft Scala oder C/C++ ist). Wenn sich Studenten bei uns bewerben, können die oft nur Java ganz passabel, ein wenig C und sind ganz stolz auf Grundkenntnisse in Haskell.
Der oben zitierte Satz ist im industriellen Umfeld aber in der Regel BLÖDSINN! Wenn eine Codebasis seit Jahrzehnten gepflegt wird, dann steht damit die Programmiersprache fest. Bei uns ist das C, denn damit haben wir unsere Firma ist ein kleiner Mittelständler, der industrielle Steuerungen fertigt und progammiert. Einzelne Anlagen werden seit den 80er-Jahren hergestellt und deren Codebasis ist ebenso alt. Man entwirft nicht für jeden Kunden was neues, sondern pflegt und erweitert diese Codebasis nach Kundenwünschen. Niemand wird das ernsthaft mal eben so auf eine andere Sprache umstellen, das kann die Firma sich wirtschaftlich überhaupt nicht leisten. Die Kunden, die die dann wohl unvermeidlichen Bugs aussitzen müssen, auch nicht.
Von daher könnte morgen die ultimative und universelle Programmiersprache veröffentlicht werden, durchsetzen würde die sich in manchen Bereichen nur sehr sehr langsam.
@Realist:
> Der oben zitierte Satz ist im industriellen Umfeld aber in der Regel BLÖDSINN!
Lies ihn nochmal. Ich habe geschrieben „…für Java entscheiden…” und Du setzt ein Gegenbeispiel dagegen, bei dem es gar keine Entscheidung mehr gibt, sondern Java zwingend ist. Also ist das kein Gegenbeispiel. Denn dann entscheiden sie sich ja nicht für Java.
Was haltet ihr von Python?
Was ist mit Ada? *duck & renn*
Endlich mal eine interessante Diskussion 🙂
Ich suche bereits seit vermutlich mehr als 20 Jahren nach der “besten” Sprache. Anfänglich mit viel Begeisterung, mittlerweile mit viel Frust.
Über C zu C++ zu Java zu C#. Seit einiger Zeit die “Exoten”, da eine meiner Erkennntnisse ist: Mainstream ist scheiße – von Idioten für Idioten! In der Regel getrieben von Betriebswirten (sprich Geld).
Den Beteiligten (Microsoft, Oracle, IBM, …) geht es nicht um Qualität, sondern nur um Geld. Wenn dabei etwas Qualität mit abfällt ist das eher Unfall denn Absicht.
@Hadmut: Wenn Du bei Ruby angekommen bist, bist Du IMO noch nicht am Ende Deines Weges und somit auch noch kein Weiser 😉
Ich bin mittlerweile auch der Ansicht, dass es nicht “die” beste Sprache gibt. Dazu gibt es zu viele verschiedene Anforderungen an eine solche. Was dabei herauskommt, wenn man versucht, verschiedene Paradigmen zu vereinen und/oder vom Embedded Bereich bis zu “großen” Answendungen alles abzudecken, kann man an Monstern wie C++ sehen.
(Zu C++: Ja, die Macher haben wohl auch erkannt, dass C++ irgendwie “unhandlich” geworden ist und versuchen gegenzusteuern.
Aber was soll passieren, wenn man einem Monster ein paar Arme abschlägt? Es bleibt ein Monster und schlimmstenfalls wachsen mehr nach…
Außerdem: Aus eigener Erfahrung weiß ich, dass man mit der gesamten “Geschichte” leben muss. Nur wenige sind in der glücklichen Lage, einmal verzapften Scheiß hinter sich zu lassen und von Neuem zu beginnen. Na ja, bei C++-Projekten klappt das in der Regel bei der Speicherverwaltung (“Diesmal machen wir es aber wirklich richtig!”))
Heutezutage reicht es auch nicht mehr aus, eine “tolle” Sprache zu haben, sondern das Drumherum (Bibliotheken, Entwicklungswerkzeuge u.a.) ist auch sehr wichtig.
@Wolf-Dieter
> Ansonsten. Ruby aufbohren nach skalierbar und compilierbar. Freiwillige vor?
IMO unmöglich. Sprachen mit dynamisch typisierten “Kern” zu fixen ist es nicht wert. Ruby 3.0 wird optional typing unterstützen, allerdings habe ich meine Zweifel, da die heilige Kuh der Abwärzkompatibilitat geopfert wird. Denn wenn man das macht (um Richtig aufzuräumen) kann man die nun auf Ruby 3.0 zu portierende Applikation auch gleich in einer statisch typisierten Sprache neuschreiben.
Es gab versuche Ruby “aufzubohren” hier ein fehlgeschlagener mit globaler Typinference:
* http://whitequark.org/blog/2013/12/21/foundry-has-been-cancelled/
Ein anderer ist noch aktiv: http://crystal-lang.org/ Meiner Meinung nach wird das aber in die gleiche Sackgasse laufen wie oben genanntes eingestelltes Projekt.
Zuminstest hard Crystal kein Runtime Metaprogramming, nur boot time Metaprogramming. Es ermöglicht also die Metaprogrammierung ab einen bestimmten punkt “Zwangsweise” einzustellen. Eine Verbesserung gegenüber Ruby.
Forth? War das nicht als Masken-ROM beliebt? D.h. man hat es gerne als Interpreter ins ROM für Microcontroller,… gequetscht?
Ich glaube ausserhalb dessen war es nie der grosse Renner, z.B. aufm PC zur Applikationsentwicklung, oder?
Die meisten heutigen Sprachen sind sich doch sehr ähnlich, bzw. lassen sich in ein paar wenige Gruppen zusammenfassen. Wichtiger als die Sprache ist doch das Erlernen der Standart-Bibliothek und eines größeren Frameworks.
Dynamischer Typisierung wird man mit einer IDE Herr. IMHO ist das alles nicht so wild, aber mir fehlt da vielleicht noch etwas der Weitblick.
Hi Josh,
danke für den Hinweis. Ich bin da nicht im Thema. Dann sieht es ja
aber wirklich so aus, als ob Cobol und Bankenwesen zusammengehören,
auch heute. Ich war verblüfft.
Trotzdem die Basis so alt zu sein scheint, das man sich um die Jahrtausendwende Sorgen um den Adressraum machen musste.
Das hatte ich jedenfalls noch in Erinnerung.
Klar auch, warum eine solcherart gewachsene Codebasis
( nicht billig – bzw. die Nichte verdient gut ) allein schon
aus Sicherheitsgründen dann weiterläuft.
Da hackt sich wahrscheinlich keiner so schnell mal eben durch ?
Diesen Thread hatte ich verstanden als Frage an die Modernität
der Sprachen. Übrigens auch für Laien wie mich überaus
interessant zu lesen. Schlüsselbegriffe fliegen einem sonst nicht
ständig um die Ohren, meistens ist es ja eher schon ein
“nicht in die Karten schauen lassen”, da draussen.
Ganz allgemein. Deine Nichte hat vermutlich einen 1a Job !-)
Manche* Leute sollen ja immer noch auf Eiffel schwören 😉
(* heisst nur Bertrand Meyer)
Was bin ich, wenn ich bei den Fehlern einen Wutanfall ob der Dummheit der Menschheit bekomme?
Ruby schien mir auch nett, über TCL denke ich gerade nach, weil C geht wegen Sicherheit nicht. Aber sind halt nur Skriptsprachen. Echt schwierig, was Gutes zu finden. Zu Swift frage ich mich, ob man Sprachen vertrauen kann, die aus Amiland kommen. Wir wissen, dass Hintertüren in PRNG und Verschlüsselungen aus Amiland sind. Nach deren Denke wäre eine Schwäche in einer Programmiersprache das Non Plus Ultra, die wäre dann überall. Wir wissen ja, Apple und die NSA..
> über TCL denke ich gerade nach
Ich dachte, TCL wäre seit 15 Jahren tot…
Was Go angeht war ich Anfangs auch skeptisch, bin es nach wie vor ein wenig, aber: einfache Abstraktion der gaengisten PC-Betriebssysteme, Cross-compilation, native-code Executables, Nebenlaeufigkeitsprimitive, Parallelitaet, was will man denn erstmal mehr?
Die Sprache ist sehr einfach, so einfach, dass es sich nicht lohnt 1000 Seiten lange Buecher darueber zu schreiben und von einer Konferenz zur naechsten zu touren (vgl. C++).
Die Standardbibiliothek bietet viel, aber die ganzen einfachen Sachen fehlen (die kann man selber bauen).
Irgendwo las ich Go sei die “anti-abstraction language” und das passt eigentlich auch ganz gut.
@Horst Hiesig
> Eine gute Sprache ist eben universell einsetzbar, wie man das von einem Werkzeug erwartet.
Werkzeuge sind immer auf die Aufgabe zugeschnitten. Universalwerkzeuge können nichts richtig.
In der obigen Liste des Grauens fehlen noch ein paar nette Sprachen. Man sollte auch sowas wie PHP und Javascript nicht vergessen, laufen doch große Bereiche des Internets darauf (z.B. Wikipedia und FB…).
Meine ersten Programmierer Schritte machte ich mit “Elan” eine Lehrsprache, dann kommerziell Pascal, Modula-2, Basic etc.
DOS und frühe Windoofs Zeiten.
Dann war ich ein “paar” Jahre raus in anderen Themen, um vor ein paar Jahren wieder ein zu steigen (Mediawiki Extensions Entwickler…).
Zuerst habe ich mir die Frage gestellt, warum haben die Entwickler z.B. von PHP nicht schon Jahre (Jahrzente) vorhandenes Wissen genutzt, und statt dessen einen Mega Krampf gebaut. Der Informatiklehrer unseres Kindes fragte ihn mal was ich mache. Er sagte PHP programmieren für Wiki. Der Lehrer antwortete: “Wer PHP programmiert frißt auch Kinder”… Recht hat er ja…
Dann kam ich natürlich nicht drum herum mich auch mit JavaScript zu beschäftigen. Seit dem frag ich mich, was die Entwickler von JS wohl für Drogencocktails genommen haben wärend der Entwicklung…
Inzwischen treibt mich dann die Frage um, ob das nicht etwa boshafter Vorsatz war um unzählige Entwickler weltweit in den Wahnsinn zu treiben, und Milliarden an überflüssigen Kosten zu verursachen… Wäre sicher mal eine schöne V-Theorie wert…. lol
Aber Deine Beispiele sind ziemlicher Müll und hören sich nach Laiengefasel an.
Wieder einmal persönlicher Angriff als Argumentationsersatz.
Sag mal Hadmut, pöbeln Sie eigentlich jeden an, der nicht bei Drei Ihren Standpunkt nachbetet?!??
@WikiMANNia:
> Sag mal Hadmut, pöbeln Sie eigentlich jeden an, der nicht bei Drei Ihren Standpunkt nachbetet?!??
Hatten Sie mir nicht neulich erst noch versprochen, hier zu verschwinden? 3 Tage weg und gleich wieder da?
Ich brauche keinen Blogwart und keine Erzieherin.
u.a. @Slartibartfast:
Als imo guten Kompromiss aus ML und vielen Libs, Interop usw. verwende ich gerne F#, wenn mir niemand was anderes vorschreibt, Bare Metal angesagt ist oder nicht das letzte Quentchen Performance gefordert ist.
Nette Features: REPL, das oben zu C#/Mono gesagte funktioniert ebenso, Type Provider, um sehr einfach, typisiert und Code Completion mit Daten wie JSON, XML, CSV oder Datenbanken umzugehen (einfache Beispiele z.B. auf http://fsharp.github.io/FSharp.Data/)
Lego Duplo gibt es immer noch und ist eine sehr gute Möglichkeit, schon in diesem jungen Alter die Feinmotorik und die Auge-Hand-Koordination zu trainieren, zusätzlich zu der räumlichen Denkweise und der Kreativität, eigenes zu entwickeln.
Mann könnte ganz salopp sagen, Lego Duplo ist der erste Schritt zum Informatiker (oder Ing. oder Architekt oder Forscher oder sonstwer, der/die/das neues macht).
Ist auch der Grund, warum das mit der Genderei so fulminant gegen die Wand geht: Die denken, man steckt Frauen in ein MINT-Studium und dann lernen sie dort alles, was sie brauchen.
Dabei beginnt die Grundlagenausbildung eines Maschinenbauers auf dem Kinderzimmerteppich, währenddessen Mädchen sich eben anderweitig beschäftigen (zum Beispiel mit den Beziehungsproblemen ihrer Puppen), alles ungezwungen und interessengeleitet.
Sobald die Immatrikulation ansteht, haben die Girls dann schon einen beinahe 20jährigen Ausbildungsrückstand, den sie realistischerweise nie mehr aufholen können. Zudem man bestimmte Dinge auch nur in einem bestimmten Alter richtig lernen kann.
Ich glaube, das Konzept, daß sich ein Mensch von Geburt an startend vom Erwerb allgemeiner Fähigkeiten (wie aufrechter Gang und Sprechen) immer weiter spezialisiert, ist völlig aus dem Blick geraten. Dabei vollzieht jeder in seinem Leben praktisch eine Art Evolution im Schnelldurchlauf. Das heutige linksgerichtete Menschenbild ist das der formbaren Drohne, die man jederzeit nach Belieben umschulen und umerziehen kann.
@Hadmut
Wer z.B. DejaGnu (Framework für Regressiontests) nutzen möchte, muss sich mit Tcl und expect (basiert auf Tcl) beschäftigen.
Nachfolgender Text soll DejaGnu-Interessierten einen allgemeinen Überblick geben, um Aufwand /Erfordernisse abschätzen zu können.
Falls man zum Beispiel einen Cross-Compiler gebaut hat und testen will, ob bei der Kompilierung und/oder zur Laufzeit von Modulen Fehler auftreten.
Zumeist werden dabei auch Kombinationen von alten/neuen Compiler- und Linker-Optionen getestet.
Die Moduln müssen einzeln lauffähig sein.
Der Aufwand für eine TestSuite ist relativ hoch und lohnt nicht bei wenigen Moduln.
Die Abarbeitung der TestSuite kann man mit einem Shell-Skript auf der Konsole anstossen.
Dann kommt meistens noch die Skriptsprache vom Debugger dazu, damit der Debugger am Ende des Tests failed oder passed an DejaGnu übergibt.
Die Applikation des Debuggers kann dann z.B. auch noch die Beschäftigung mit Python erfordern. Dafür findet man aber oft gute Beispiele in der Doku.
Um Herauszufinden, ob nun ein Fehler im Code, in der Kommunikation, durch das Compilieren (z.B. Compiler- oder Linker-Option passt nicht zur Aufgabe) oder gar in der Hardware (Selbstbau enthält Design-Fehler; z.B. Pin’s vertauscht ) vorliegt, kann es erforderlich sein, den Assembler-Code durchzusteppen (Registerbelegung).
Glücklicherweise sitzt das Problem meistens vor dem Monitor und eine Code-Analyse anhand von ReturnErwartungswert macht schnell Bingo. 🙂
Ich hoffe, ich habe niemanden gelangweilt.
Falls ich etwas Wichtiges vergessen oder gar falsch beschrieben haben sollte, bitte ich um Ergänzung bzw. Korrektur.
Ansonsten Dank an Hadmut und an alle konstruktiv kommentierenden.
1. Es gibt zu viele Programmiersprachen.
2. Keine ist wirklich gut.
Konsequenz: Siehe https://xkcd.com/927/
Hier sind einfach die Mechanismen der Evolution am Werk.
Und um auch meinen Senf über meine Lieblingssprache dazuzugeben: Brainfuck!
und Du setzt ein Gegenbeispiel dagegen, bei dem es gar keine Entscheidung mehr gibt, sondern Java zwingend ist.
Das ist nicht zielführend argumentiert, Hadmut.
Du schriebst, dass sich viele Leute für Java entschieden, weil sie nichts anderes können. Ich hielt dagegen, dass viele nichts anderes können, weil sie nie etwas anderes gelernt haben. Auf den Trichter, dass Java nicht das Allheilmittel ist, für den Herr Professor es verkauft, muss ein junger Student erst mal kommen. Und der Groschen fällt eben oft erst, wenn er die erste Stelle antritt, also zu spät. Denn eine Entscheidung bzw. Wahl, sich intensiv mit anderen Sprachen zu befassen, die hat jeder Student in seiner Freizeit.
Ferner schriebst Du in einem anderen Kommentar (sinngemäß), es könne sehr wohl eine “universelle” Programmiersprache geben, die das heutige Problem von “einer Sprachen pro Nischenanwendung” lösen könnte. Hier wies ich darauf hin, dass es auch dann noch Jahre wenn nicht Jahrzehnte bräuchte, bis sich das in der Industrie durchsetzt.
@Realist:
> Das ist nicht zielführend argumentiert, Hadmut.
Das soll und kann es auch gar nicht sein, weil es weder interessen- noch zielorientiert ist, sondern eine neutrale Feststellung.
@ Knirsch der Hirsch
Dann sieht es ja aber wirklich so aus, als ob Cobol und Bankenwesen zusammengehören, auch heute. Ich war verblüfft.
Never touch a running system. Vor allem, wenn die Gefahr besteht, dass das keiner mehr versteht bzw. warten kann (also den Source Code). Die Alternative: Alles neu machen. Das kostet aber.
Trotzdem die Basis so alt zu sein scheint, das man sich um die Jahrtausendwende Sorgen um den Adressraum machen musste.
Das hatte ich jedenfalls noch in Erinnerung.
War das nicht die Y2K-Geschichte, wo heraus kam, dass Banken (damals) noch immer Programme aus den 70ern verwendeten?
So nebenbei: Ich bin mir sicher, dass das Y2K-Problem (nicht Bug!) einen ganz einfachen Hintergrund hat: Als die ersten Großrechnersysteme in Banken in Behörden so Anfang der 70er aufkamen, dürfte es Probleme mit den Sachbearbeitern gegeben haben, wenn die die Jahreszahl 4stellig hätten eingeben müssen, anstatt, wie gewohnt, 2stellig. Und das Jahr 2000 lag ja auch weit entfernt. Und da die Programme, wie wir inzwischen wissen, recht lange genutzt wurden, schleppte sich das Problem eben mit durch. Man hätte damals natürlich in den Datensätzen das Jahrhundert vorbelegen können…
Klar auch, warum eine solcherart gewachsene Codebasis
( nicht billig – bzw. die Nichte verdient gut ) allein schon
aus Sicherheitsgründen dann weiterläuft.
Security by alte Programmiersprache und Spaghetti-Code? Sorry, aber wenn sich da wirklich jemand reinhacken und die Bankensoftware zu seinen eigenen Vorteil modifizieren will, dann schafft der das auch. Nur weil heute kaum noch jemand außerhalb des Bankensektors COBOL verwendet, sollte man sich da nicht allzu sicher sein. Gerade umfangreiche “gewachsene” Software ist schwer zu warten und enthält Bugs, die keiner mehr findet, weil die schon seit Jahren irgendwie umschifft werden. Bevorzugt mit neuen Bugs und Sicherheitslücken.
Da hackt sich wahrscheinlich keiner so schnell mal eben durch ?
Doch, wenn der/die/das jemand wirklich will. Das heißt, falls sich da nicht schon jede Menge Selbstbereicherer drin tummeln. Bei den zu erwartenden Sicherheitslücken solch einer alten Code-Basis sollte es einen eher wundern, wenn dem nicht so wäre. Einfach ein paar dutzend Etats mit jeweils ein paar zehntausend Euronen anzapfen, das merkt da keiner so schnell. Die Banken werden solche Vorfälle, sollten sie die überhaupt bemerken, sicherlich nicht veröffendlichen.
Lückenlose Grüße,
Euer Dirk
Für einen User macht diese Diskussion einen katastrophalen Eindruck, die Programmierer scheinen sich über rein gar nichts einig zu sein und diskutieren völlig an der Realität vorbei.
Z.B. scheinen die meisten relativ wenig von Perl/Python zu halten, ok, nur, von den rund 25.000 Ports im aktuellen FreeBSD-Ports-Tree benötigen 6.361 Perl5.20 für Build ind 6.234 für Run, Python27 wird von 3.274 für Build und 3.167 für Run benötigt – zu Vergleich: “nur” rund 1.300 Ports benötigen das hochgelobte Ruby21.
D.h. egal für wie mehr oder weniger schlecht eine Sprache von den Profis gehalten wird, der User muß damit leben, und da sich daran auch nichts ändern wird, ist das alles auch völlig belanglos, und es ist kein Wunder, wenn auch weiterhin NSA, Spammer, Kriminelle leichtes Spiel haben werden, daher: Viel Spaß noch.
@Hans: Nur weil xx.xxx Leute Perl brauchen, wird die Sprache keinen Deut besser. Und man muss damit auch nicht leben. Die meisten sind einfach nur zu faul, was zu aktualisieren.
Das ist eine Frage, die mich vor Jahren einmal umtrieb.
Zuerst lernte ich Basic, dann Pascal, und machte mit Delphi eigentlich alles. Mit C++, was in den 90ern sehr gehypt wurde, bin ich nie richtig warm geworden, irgendwie schreibe ich lieber C. Auch finde ich es angenehmer, in Java zu schreiben als in C++.
2003 bin ich an Python geraten und daran hängen geblieben; in Python mache ich alles, wo es keine Vorgabe gibt und was klein ist. Das ist wie Perl, kurz was hinrotzen und läuft. Es gibt inzwischen sehr viele Python Module für alles mögliche, von Datenbanken über GUI über Numerik zu PDF-Generierung; Python ist quasi das neue Pascal für mich.
Für numerischen Code ist Fortran 95/2003 nicht zu toppen, und mit Matlab kann man sich super schnell funktionierenden numerischen Code zusammenhacken.
Klar kriegt man mit C alles hin, was Matlab auch kann. Aber es ist für den programmierenden Anwender einfacher, ein Softwarepaket mit Interpreter zu haben, mit dem er schnell seine Arbeit erledigen kann, als in C passende Bibliotheken finden zu müssen und herauszufinden, wie man das überhaupt compiliert und gelinkt bekommt. Das kann je nach Bibliothek auch mal ziemlich kompliziert werden.
Ich denke mal, je näher eine Sprache an der Hardware ist, desto universeller ist sie einsetzbar, aber desto mehr Aufwand muss man treiben, um Abstraktionen zu formulieren.
Je höher der Abstraktionsgrad, desto mehr kommt man mit Sprachen in Berührung, die für spezielle Anwendungsdomänen entworfen wurden.
Ich könnte mir z.B. schlecht vorstellen, mit SQL eine GUI programmierung zu wollen. Aber trotzdem kann man mit SQL recht gut DB-Abfragen formulieren.
Insofern denke ich, dass der Weg zur allein seligmachenden Sprache wahrscheinlich eine Sprache mit sauberem, konsistenten Design ist, für die Bibliotheken verfügbar sind, die die Programmierung von speziellen Anwendungsfeldern erleichtern.
Gibt’s eine Sprache mit sauberem, konsistenten Design? Kann ich echt nicht beurteilen. Bin in meiner eigenen Suche nach der perfekten Sprache zu sehr in die Breite gegangen.
@Hadmut – Tcl habe ich mir, der Not folgend, angeeignet; und nach nicht mehr als 5-6 Jahren haben sich meine Vorurteile gelegt … (also allerhöchstens sieben Jahre)
@Joe:
Pascal ist tot
Deine Definition von “tot” scheint mir nicht sehr realitätsbezogen:
* FreePascal (incl. Lazarus)
* DelphiWebScript
Ich dachte, TCL wäre seit 15 Jahren tot…
Nein, es lebt noch 🙂 Auch bei uns gibt es noch ein absolut aktuelles Projekt auf TCL Basis.
Python!
Sehr reduzierte Syntax (keine {} zum Klammern von Blöcken, keine ; am Zeilenende). Sehr mächtige Sprache. Sehr lebendige Community, ständige Weiterentwicklung. Es gibt auch viele Libraries, ob die Deinen Ansprüchen genügen müßtest Du mal schauen.
Du erwähntest außerdem die Anwendung für Webkrams. Mit Django hat Python ein sehr gut strukturiertes und sehr mächtiges Webframework nach dem Model Controller View Modell. Für fast jedes gängige Webdeveloperproblem wird eine gut funktionierende Lösung mitgeliefert.
Z.B. Formulare: Django erzeugt aus definierten Models (die entsprechen Objekten) fast vollautomatisch die passenden Formulare inklusive Auswertung der eingegebenen Daten. Es gibt ein fertiges Modul für Paging.
TCL – LOL. Ich sage nur expr, Grüsse aus der Steinzeit.
Erstens, ich habe nicht behauptet, das Perl bessser als XY ist, das kann ich nicht beurteilen, ich habe nur festgestell, daß ohne Perl vieles nicht mehr geht, TeX, hal, gimp, xorg/xf86-videodriver, qt4, gtk und, und, und, sprich ohne Perl kann ich meine Computer wegwerfen, d.h. ich muß damit leben, ob ich will oder nicht.
Zweitens, die Behauptung: “Die meisten sind einfach nur zu faul, was zu aktualisieren.”, trifft auf mich nicht zu, ich aktualisiere OS und Ports jeden Tag. Das ändert aber doch nichts an den Dependencies der installierten Programme!
Wenn ich OCCAM lese, werde ich immer ganz sentimental. 🙂
Dann muss ich an INMOS und ein mit TRAM Modulen vollgepacktes IMSB008 Board denken, mit dem ich vor nun beinahe einem viertel Jahrhundert (man, bin ich alt geworden) herumspielen durfte um ein bisschen Bildverarbeitung zu machen. Es ging damals um Kontur- und Lageerkennung von zweidimensionalen Gegenständen anhand eines Binärbildes mittels Randliniencode bzw. RLC-Verfahrens. Hier ein Link zu einer (groben) Beschreibung des Verfahrens
Etwas später folgte dann optische Schwingungsmessung mit einer selbstentwickelten PC-Interfacekarte (damals noch für ISA Bus) mit Zeilenkamerainterface, einem diskret aufgebautem Korrelator (aus Hardwaremultiplizierern und einer Menge PALs und SRAM) sowie einem T425. Wenn ich mich noch richtig erinnere konnte man damit optische Schwingungsmessungen mit Abtastraten von bis zu 1kHz machen und das bei 30MHz CPU Takt!
Das waren noch Zeiten, da machte Programmieren, egal in welcher Sprache (selbst in Assembler für den Transputer) noch richtig Spaß. Vor allem deshalb, weil man sich dabei nicht mit irgend welchen dämlichen, unausgegorenen fehlerhaften Müllhaufen genannt Libraries sowie halbgaren Betriebssystemen herumschlagen musste und frei loslegen konnte. Echte Pionierarbeit eben. Man, wie ich die Zeit vermisse.
Heutzutage kommt mir die ganze Programmiererei eher wie “Brainfuck” vor, womit ich noch eine esoterische Programmiersprache vorstellen möchte (nur falls diese noch nicht bekannt ein sollte) 🙂
https://de.wikipedia.org/wiki/Brainfuck
Für Interessierte noch einige Infos zu Transputern:
https://en.wikipedia.org/wiki/Transputer
http://www.inmos.com/
http://www.cs.bris.ac.uk/~dave/transputer.html
http://www.transputer.net/welcome.asp
http://www.classiccmp.org/transputer/
Nichtsdestotrotz sollte man aber auch erwähnen, dass Inmos höchstwahrscheinlich vom britischen und/oder amerikanischen Geheimdienst gepimpert wurde. http://www.inmos.com/images/historical_photos/index.html
Ich muss jetzt Schluss machen, sonst kommen mir die Tränen.
Meine derzeitige Lieblingssprache ist Smalltalk.
Es ist eine der wenigen objektorientieren Sprachen.
Ich kenne derer nur drei: Smalltalk, Self und Lisp (CLOS).
Ich vermute, dass man ohne Smalltalkkenntnisse OO nur sehr schwer
verstehen kann. Bis vor Kurzem dachte ich, dass das gar nicht möglich sei. Dann traf ich aber auf den alten Blog von Carlo Pescio und musste
verwundert feststellen, dass man sogar als C++-Entwickler OO lernen kann. Das hat mich ziemlich überrascht.
@ Joe
Ist auch der Grund, warum das mit der Genderei so fulminant gegen die Wand geht: Die denken, man steckt Frauen in ein MINT-Studium und dann lernen sie dort alles, was sie brauchen.
Für MINT braucht man eben ein Faible, sonst klappt das nicht. Meine Töchter sind auch nicht auf MINT gelandet, obwohl sie ein durchaus technikorientiertes Umfeld während ihrer Kindheit gehabt haben. Also, von der väterlichen Seite aus.
Dabei beginnt die Grundlagenausbildung eines Maschinenbauers auf dem Kinderzimmerteppich, währenddessen Mädchen sich eben anderweitig beschäftigen (zum Beispiel mit den Beziehungsproblemen ihrer Puppen), alles ungezwungen und interessengeleitet.
Meine Mädels haben auch ganz gerne mit DUPLO gespielt, aber auch eben gerne mit Puppen. Wobei, je älter sie wurden, desto mädchenhafter haben sie sich ihr Spielzeug ausgesucht.
Sobald die Immatrikulation ansteht, haben die Girls dann schon einen beinahe 20jährigen Ausbildungsrückstand, den sie realistischerweise nie mehr aufholen können. Zudem man bestimmte Dinge auch nur in einem bestimmten Alter richtig lernen kann.
Ich würde ganz einfach sagen, dass mehr Männer ein Faible für MINT haben als Frauen. Warum das so ist, kann man gerne unideologisch erforschen. Wäre ohnehin interessant, was am Verhalten biologisch bedingt ist und was kulturell-sozial. Sollte man aber ordentliche Wissenschaftler ran lassen und nicht Genderisten, weil das eben nicht das Ziel der Gender-“Forschung” ist, auch wenn die so tun als ob.
Ich glaube, das Konzept, daß sich ein Mensch von Geburt an startend vom Erwerb allgemeiner Fähigkeiten (wie aufrechter Gang und Sprechen) immer weiter spezialisiert, ist völlig aus dem Blick geraten.
Wenn wir uns darauf einigen können, dass jeder Mensch schon früh individuelle Fähigkeiten und Vorlieben entwickelt und die in seinem weiteren Leben weiterverfolgen sollte, dann bin ich mit dir einer Meinung.
Dabei vollzieht jeder in seinem Leben praktisch eine Art Evolution im Schnelldurchlauf.
Während der Entwicklung im Mutterleib auf jeden Fall.
Das heutige linksgerichtete Menschenbild ist das der formbaren Drohne, die man jederzeit nach Belieben umschulen und umerziehen kann.
Ja, ist aber falsch, wie so vieles, was aus der linken Ecke kommt. Die haben ein echtes Realitätsproblem. Dafür Sendungsbewusstsein.
Sendungsfreie Grüße,
Euer Dirk
>Ich vermute, dass man ohne Smalltalkkenntnisse OO nur sehr schwer
verstehen kann.
Man muss OO vegan erklären, also ohne eine Objekthierarchie von Säugetieren und Methoden laufen(), wuff() und miau().
Als ich diesen dummen Scheiß in den 90ern gelesen habe, habe ich nicht einmal ansatzweise begriffen, was der Schwachsinn überhaupt soll.
Access control, klar, also quasi structs (oder records) mit Zugriffskontrolle. Aber Hunde und Katzen?
Ich denke mal, neben der Datenkapselung sind Polymorphie und Subtyping die wichtigsten OO-Konzepte, denn Subtyping garantiert, das ein Objekt ein bestimmtes Verhalten implementiert. Oder, besser gesagt, eine bestimmte Methode.
Vererbung hat sich ja seit dem Fragile Base Class Problem mehr oder weniger erledigt.
Obwohl, ich glaube es waren Barton und Nackman, die haben Mitte der 90er empfohlen, auch die klitzekleinste Codemodifikation durch Vererbung von einer Superklasse zu realisieren. Aber damals war noch nicht klar, dass das Scheiße ist.
PS. OO-Autoren, die mit Säugetierhierarchien kommen, gehören verprügelt. Wie kommt man auf so komplett schwachsinnige Beispiele?
Deine Definition von “tot” scheint mir nicht sehr realitätsbezogen:
Wo werden denn neue Projekte in Pascal gestartet?
Relevante Open-Source-Projekte in Pascal?
Offene Stellen für Pascalprogrammierer?
Selbst in Cobol ist deutlich mehr Leben als in Pascal.
@Andreas: Da würde ich zumindest noch Eiffel und IO 1) dazu zählen, ansonsten sehe ich es genauso. “Witzig” waren zu meiner Uni-Zeit die kläglichen Versuche der Profs OO (mit anderen Sprachen) zu erklären und man selber zu Hause ein Smalltalk-80 auf dem ST laufen hatte…
Später gab es eine sehr interessante Entwicklung mit Strongtalk (Smalltalk mit statischer Typisierung) bis die Entwickler von Sun aufgekauft wurden und dort Java “the most distressing thing to hit computing since MS-DOS” (Alan Kay) favorisiert wurde.
1) grob gesagt könnte IO als Mischung aus Smalltalk mit Operatorpräzedenz, Self und Lisp bezeichnet werden
< Man muss OO vegan erklären, also ohne eine Objekthierarchie von Säugetieren und Methoden laufen(), wuff() und miau().
Wie bereits geschrieben: Ich kenne nur drei echte OO-Sprachen. Die von dir benutzte Syntax gibt es in diesen Sprachen nicht. Daher nehme ich an, dass Du bisher nur mit fake OO konfrontiert wurdest.
Alan Kay, der Namensgeber von OO, hat eine gänzlich andere Vorstellung davon, was OO eigentlich ist. Wenn man möchte, kann man dazu einige interessante Sachen lesen. Der von mir bereits erwähnte Carlo Pescio hat bis 2013 einige sehr interessante Blog-Einträge geschrieben.
Sehr schön zu lesen ist
http://www.carlopescio.com/2012/03/life-without-controller-case-1.html
(auch die anschließenden Diskussionen und Erwiderungen).
C++, C#, Java (und zu einem gewissen Grad auch Scala) haben gemein, dass sie versuchen verschiedene Programmier-Paradigmen zu vereinen. Das gelingt aber m.M.n. nicht. Keine schafft es an die jeweils spezialisierten Sprachen (wie Haskell für das funktionale Paradigma oder eben Smalltalk für das objektorientierte Paradigma). Es sind allesamt Monstersprachen mit aufgeblähter Syntax und riesigen Regelwerken. Die Bürokratie schafft die Freiheit ab und ist ätzend langweilig.
Kleine Korrektur: Unison ist in OCaml geschrieben, nicht in Erlang. Die Erfahrung mit Erweiterungen kann ich bestätigen 🙂
@Andreas
> Daher nehme ich an, dass Du bisher nur mit fake OO konfrontiert wurdest.
Das stimmt schon. Ich wollte mir vor 3,4 Jahren mal Smalltalk reinziehen, um die Konzepte besser zu verstehen, bin aber aus Zeitgründen nicht dazu gekommen.
Stroustrup sagt ja explizit, dass C++ eine Multi-Paradigmensprache ist. “Trust the programmer”. Man kann auch in C++ Programme schreiben, die mehr oder weniger aussehen wie Java-Programme, bis auf die syntaktischen Unterschiede und dass man die Speicherverwaltung selbst implementieren muss, es sei denn, man benutzt eine Runtime, die Garbage Collection implementiert.
In C++ hat man den Referenztyp, der automatisch einen Zeiger dereferenziert, sodass man ein ganz ähnliches Verhalten wie in Java bekommt (ich möchte nicht sagen gleich, da muss man immer vorsichtig sein).
Ich will damit sagen, dass man auch in C++ vernünftige Programme schreiben kann, wenn man sich auf einen Ausschnitt der angebotenen Syntax beschränkt und einen konsistenten Coding-Stil pflegt.
Viele Leute, die Computer benutzen und kleinere Programme schreiben, tun das, weil sie ein Ziel erreichen wollen. Ihnen ist die reine informatische Lehre scheißegal.
Wenn ein Wissenschaftler einen numerischen Algorithmus testen will, oder noch weniger: Er will testen, ob er einen Algorithmus überhaupt verstanden hat, dann kann er mit Matlab ratzfatz einen Code zusammenhacken, der genau das leistet.
Da kann mir der Blog-Betreiber erzählen, was er will: Das geht in Matlab sehr viel schneller als in jeder anderen Sprache.
Das ist aber der entscheidende Faktor für den User.
Es gibt nicht mehr wie früher die binäre Unterscheidung zwischen Full-Stack-Softwareentwickler und reinem Anwender.
Heute gibt es Anwender, die kleine Sachen programmieren. Und die wollen schnell ihre Arbeit erledigen, und sich nicht einen darauf hobeln, wie irgend ein obskures Theorem eines theoretischen Informatikers syntaktisch implementiert wurde.
Wenn ich in Matlab eine Matrix transponieren will, schreibe ich B=A’. Brauche ich die Inverse, schreibe ich C=inv(A).
Da soll mir mal einer zeigen, wie das Transponieren in C in weniger Code geschrieben wird als B=A’.
Natürlich kann man in C einfach die Schleifenreihenfolge vertauschen, um dasselbe zu erreichen. Das geht halt aber auf Kosten der Lesbarkeit, und man muss eben viele Stunden mehr investieren, um auf das Niveau zu kommen, die Dinge mit dem Computer zu tun, das man mit Matlab nach wenigen Stunden erreicht.
Interessant finde ich in diesem Zusammenhang übrigens Julia, das vom MIT entwickelt wurde. Das hat eine Matlab-ähnliche Syntax, ist aber sehr viel schneller als Matlab.
Wenn es das wirklich gäbe, dass man mit der einen tollen Sprache universell alle Ziele gleich schnell erreichen kann, dann gäbe es das schon längst, und solche Geschichten wie SQL, JavaScript, Matlab u.ä. würden überhaupt nicht existieren.
Das gibt es alles nur, weil sich Leute Arbeit sparen wollten. C gibt es nur, weil sich Systemprogrammierer die Arbeit sparen wollten, alles in Assembler zu schreiben.
@.Manfred P
1. Multiparadigmensprachen sind von der Idee her klasse – leider werden in der Realität immer Monster erschaffen.
2. Man kann sich nur theoretisch “einen kleinen Teil” der C++-Syntax aussuchen und dann benutzen. Ersten spricht dagegen, dass sich jeder einen anderen Teil aussuchen kann und wenn man dann mit anderen zusammen arbeitet fängt man sich wieder Sachen ein, die man eigentlich nicht möchte. Zweitens benutzt man vermutlich einige Bibliotheken (mindestens die STL und vermutlich auch Boost). Damit bekommt man dann quasi alles. Versuch mal die STL oder Boost zu debuggen…
3. Zum Thema Richtlinien kann man eine eigene Diskussion füllen.
Tatsächlich helfen sie Anfängern und behindern Experten. In Firmen dienen sie hauptsächlich dazu, “Qualität” zu erzeugen. Meiner Erfahrung nach kann man Richtlinien gar nicht so genau verfassen, um das wirklich zu erreichen. Ich kenne Beispiele, wo sich Leute haargenau an umfangreichen Richtlinien gehalten haben und trotzdem Müll erzeugt haben.
4. Dein Vergleich von MatLab und C ist unfair. Sicherlich wird man entsprechende Bibliotheken für Matrixoperationen auch für C finden und dann sind die Operationen auch nicht viel umfangreicher (so etwa transp(a, b). Das sagt aber nicht über die Sprache aus.
Was mir an Smalltalk gefällt ist:
1. sehr wenig Syntax (d.h. wenige Regeln, keine Ausnahmen)
2. sehr mächtig (nicht ganz so möchtig wie Lisp, aber Java und C# kacken komplett dagegen ab)
3. Smalltalk ist nicht nur eine Sprache, sondern eine Objektwelt.
Die Sprache allein ist noch mit Ruby o.ä. vergleichbar, aber Smalltalk ist noch viel mehr.
Die Sprache wurde mal für Kinder entwickelt. Daher ist sie leicht zu lernen. Gewöhnungsbedürftig ist aber die Syntax. Sie orientiert sich an der englischen Sprache.
Dein MatLab-Beispiel würde man, eine geeignete Bibliothek vorausgesetzt, vermutlich so schreiben:
b := a transposed.
Gambas3. Wenn man unter Linux arbeitet und Visual Basic oder MS VBA mochte, ist Gambas eine sehr schöne Lösung, alten Code wiederzuverwenden. Es bietet eine feine, praktische IDE mit hervorragendem Formulareditor und eine ganz brauchbare Library. Ich habe lange nach einer guten RAD-Umgebung für die Programmierung von Datenbank-Frontends und GUIS unter Linux gesucht. Gambas ist es dann geworden.
@Andreas
Deinen Bemerkungen über C++ kann ich durchaus zustimmen. Es ist ein Monster, und ich habe nicht einmal annähernd das Gefühl, die Komplexität der Sprache zu beherrschen.
Der Vergleich zwischen C und Matlab mag unfair sein, aber ich wollte damit etwas anderes verdeutlichen. Solche Softwaresysteme sind eine super Sache für Leute, die entweder nicht die Zeit oder den Willen haben, Jahre zu investieren, bis sie die Kompetenz in C erlangt haben, um alles schnell coden zu können.
Dieses Ziel erreichen sie mit Matlab sehr viel schneller, in wenigen Stunden. Und sie müssen nicht auch noch lernen, wie man C-Programme gegen Bibliotheken linkt, korrekte Makefiles schreibt und weiteres. Das waren Sachen, die für mich als Anfänger damals ziemlich schwierig waren, weil ich anfangs gar nicht kapiert hatte, was Präprozessor, Compiler, Linker und Loader den ganzen Tag so machen.
Das sind alles Probleme, die man nicht hat, wenn man Matlab installiert. B=A’ läuft dann einfach, ohne Brimborium.
Das dahinter ein C-Programmier steht, der Ahnung von dem hat, was er macht, ist doch klar und eine ganz andere Frage.
Was mich nachdenklich macht, ist die Tatsache, dass es früher solche Standardsprachen gab. Fortran und Cobol sind zu nennen. Sogar in den alten Airbussen wurde die Steuersoftware in Fortran programmiert, bis sie auf C umgestellt haben.
Aber vielleicht ist es einfach nur so, dass wir viel zu wenig Erfahrung haben. Industriekomponenten sind auch erst seit wenigen Jahrzehnten standardisiert, vielleicht 100 Jahre. Vorher haben in den Fabriken Handwerker individuell herumgedengelt. Und so ist das heute wohl auch in der Informatik.
Gib der Sache noch 50 Jahre, dann ist das Erfahrungswissen so groß, dass man vielleicht verstanden hat, wie man Sprachen konstruieren muss, um die gröbsten Schwächen zu vermeiden.
Wie gesagt: Es gab diese beiden Linguas Francas, und jetzt gibt es hunderte. Warum ist man überhaupt davon weg?
Wer einmal Fortran-77-Coderelikte warten musste, weiß genau, was ich meine.
Also ich habe auch nicht die endgültige Antwort. Zumindest kann man mathematische Problemstellungen zwar objektorientiert formulieren, man muss es aber nicht. Es bringt eigentlich keine Erleichterung. Man hat Daten, und irgendwelche Funktionen machen irgendwas damit – strukturierte Programmierung eben, und das ist für viele Anwendungen auch ausreichend.
Ich muss aber zugeben, dass ich keine nennenswerten Erfahrungen mit der Wartung riesiger Softwaresysteme habe, also kann ich da nicht wirklich kompetent mitreden.
Ach leute, programmiert einfach APL, und dann ist der Job auch die nächsten paar Jahrhunderte gesichert 🙂
Was Sprachen angeht: MS hat mE mit PowerShell einen recht guten Wurf gelandet.
(Objekt-Pipelining ist top)
Noch strenge Typisierung einschaltbar und mir wär’s perfekt.
Warum nicht einfach Lisp? 😉