Softwareschrott: Programmiersprachen

with tags Softwareschrott -

Es ist unglaublich, dass angesichts der Möglichkeiten die es schon seit Jahren (teilweise schon seit Anbeginn der Programmiersprachen) gibt, es heutzutage immernoch Sprachen wie C, PHP oder C++ gibt. Und es gibt sie nicht nur als abschreckendes Beispiel, nein, sie werden tatsächlich ernsthaft eingesetzt. Und es kommen auch noch Sprachen dazu. Sprachen wie Java zum Beispiel oder "Weiterentwicklungen" wie C++0x.

Der durchschnittliche Programmierer denkt ja gerne, dass die Bedeutung eines Ausdrucks immer eindeutig bestimmt ist. Stimmt nicht, wie eins meiner Lieblingsbeispiele in einer der beschissensten Programmiersprachen der Welt. C. (Ja, C läuft wie PHP unter beschissen. Und ich will keine Entschuldigungen lesen)


int i = 5;
i = i++ + ++i;

Ja, und was der Wert von i am ende dieser Sequenz ist ist nicht definiert! und das heisst, dass der Compiler das selber entscheiden darf oder sich sogar selber irgendwie! verhalten darf, zum Beispiel nethack starten oder FNORD rufen.

Man sollte doch erwarten können, dass jeder syntaktisch korrekte elementare Ausdruck auch semantisch wohldefiniert ist.

Dieses "undefined behaviour" wird in der Wikipedia sogar als "feature" verkauft um die Spezifikation zu vereinfachen. Unglaublich. Das mag in der Steinzeit der Programmiersprachen noch zu entschuldigen gewesen sein, aber wir haben 2010, wir haben Web 2.0 und Cloud Computing, Buzzwords bis der Arzt kommt und immernoch basieren alle Ernsthaften Betriebssysteme auf Steinzeitsprachen.

Mein nächstes Lieblingsthema sind Typsysteme. Man mag sich noch streiten wollen ob man ein dynamisches oder ein statisches Typsystem vorzieht, wenn man sich auf eines festgelegt hat darf man aber gerne dabei bleiben. Strikt sollte man aber in jedem Fall sein. Wieder mal eine Gelegenheit auf Sprachen wie C oder PHP rumzuhacken.
Ehrlich, man kann heute Typsysteme bauen die schon zur Compilezeit erkennen können ob man Mist gebaut hat. So Totalunfälle wie PHPs (und wenn man ehrlich ist auch Cs und C++s)


if $a = 5 foo();
if $a == 5 bar();
if $a === 5 baz();

die vorgeben eine strikte Typisierung zu haben sind einfach nur unglaublicher Steinzeitmist. Da werden überall noch Lösungen an Sprachen rangeschraubt um irgendwelche Probleme zu lösen die man mit einem gescheiten Design nicht hätte. Aber auch bei Programmiersprachen setzt Schrott sich durch, hunderte Webseiten wie zum Beispiel auch Facebook können ja nicht irre sein richtig? Falsch.

Ein weiterer Punkt der unglaublich bescheuert und nervtötend ist ist Javas unglaubliche Explizitheit (welche sich im Übrigen auch in C, C++, PHP oder Assemblern zeigt aber in Java einfach nur extrem zu Tage tritt). Wer mir jetzt mit Abstraktion kommt hat noch nie eine Sprache gesehen, die Abstraktion wirklich beherrscht. Kurze, leicht zu erfassende und überblickende Anweisungen sind das Geheimnis eines guten Designs. Java ist das Gegenteil. Python zeigt hier zum Beispiel, dass man mit einer knapp und simpel gehaltenen Syntax sehr viel erreichen kann.
Ich persönlich bin ein großer Freund von funktionalen Programmiersprachen wie Haskell oder LISP und einige mehr (oh. und nein, F# ist keine funktionale Sprache sondern wieder so eine eierlegende Wollmilchsau wie Java). Aber diese Meinung muss man ja niemandem aufzwingen, jeder Wählt sein Kreuz. Probiert mal eine Funktion zu schreiben, die natürliche Zahlen von 1 bis n aufzusummiert.


Ein letztes Thema welches auch irgendwie zu diesem Komplex gehört ist die Speicherverwaltung. Und ich höre immer wieder wie mir Profis erzählen wie High Performance ihr Code sein muss und da Garbage Collection nur stört oder bremst (das eigentliche Problem ist übrigens nicht, dass Garbage Collection stört oder bremst, sondern das sie meist zu automatisiert abläuft und deswegen nicht zu deterministischen Zeitpunkten läuft, and guess what, vielliecht wäre es angebracht sowas als Sprachfeature anzubieten?). Ehrlich, so ein automatisiertes System macht einem die Speicherverwaltung beweisbar Fehlerarm, warum sollte man sowas nicht einsetzen wollen? Ich will mich beim Lösen eines Problems doch nicht in Details über Speicherverwaltung verlieren, es sei denn mein Problem heisst "Entwickle eine taugliche Speicherverwaltung für eine Programmiersprache".

Das waren jetzt nur einige wenige zentrale Themen. Es gibt für jede Sprache die man auch nur länger als zwei Zeilen lang genutzt hat unglaublich viele Dinge über die man Ranten kann.
Warum ist niemand dahergegangen und hat mal eine sauber definierte Systemsprache entwickelt in der man gut auch Betriebssysteme entwickeln kann? Hat jemand. Viele sogar. Nur: Der Mensch ist faul und geizig. Die Codebasis in C ist da und ehe sich ein Betriebssystem oder ein ganzes System durchsetzen kann, das nicht auf C basiert werden wohl noch viele viele viele Jahre vergehen.

Importierte/Alte Kommentare:

#1407: 22.Jun.2010 11:06 von Dr. Azrael Tod

Java ist eh krank, da bringt man mehr Zeit damit zu, zu definieren welches Objekt wovon Abgeleitet wird als sich um die Lösung des Problemes zu kümmern. Das hat selbst PHP besser gelöst (nicht dass es was bringen würde, bei PHP verwendet es halt keiner).
Aber ich sollte garnicht erst von PHP anfangen, sonst fang ich nur wieder an mich aufzuregen warum Sachen wie http_persistent_handles_clean, getmxrr oder memcache_debug unbedingt von überall aus direkt zugreifbar sein müssen und man sie nicht einfach in irgendeine Lib werfen kann.
Alternativ wären auch mal wieder so Sachen wie array_merge ( http://g33ky.de/blog/1... ) über die ich mich aufregen kann oder warum es str_pad aber strchr lauten muss.. oder wer sich überhaupt solche funktionsnamen merken soll (mit $string->length() statt strlen wäre das nicht passiert).

Aber wie gesagt... ich will nicht schon wieder über PHP ranten.

#1426: 20.Jul.2010 09:07 von Terminar

Ich denke, das hier wieder allgemein der Fehler gemacht wird, alles über einen Kamm zu scheren. Objektivität sowie Akzeptanz bleibt auch etwas auf der Strecke.
Vielleicht einfach auch aus fehlender Erfahrung? Oder weil ranten cool ist?

Wenn ich mich nah an der Hardware befinde (ein richtig gutes Beispiel sind Embedded Systeme) brauche ich gar nicht mit Java, Python, funktionalen Sprachen etc anfangen, das steht außer Frage. Da brauche ich übrigens auch nicht mit GC hantieren. Wer jetzt versucht eine Gegenargumentation zu bringen belügt sich selbst oder hat keine Erfahrungen damit. Es gibt gute Beispiele für GC auf Embedded Systemen, wo genau sowas völlig daneben geht und mehr Ärger bringt als Vorteile - wo auf gleicher Hardware mit einer anderen Sprache (es war sogar das böse C) erhebliche Vorteile und Stabilität erwirtschaftet wurden.

Was das Thema Scriptsprachen angeht: wer sich die Historie auch von PHP anschaut wird merken, das PHP einen ganz bestimmten Sinn verfolgt und sein Ziel erreicht hat. Ich bin auch kein Fan vom Syntax-Würfeln, aber wenn man damit anfängt, kann man auch gleich perl mit ins Boot holen. PHP hat nicht nur schwächen.
Wozu brauche ich Python? Wozu denn Ruby? Hier wurde bisher noch gar nicht über Lua hergezogen. Jede der Sprachen hat schon seine Berechtigung.

Ist es vielleicht möglich, das jede "Sprache" egal welcher Art und Weise in bestimmten Richtungen und für bestimmte Zwecke einfach ihren Sinn erfüllen?

Ich gieße mal noch etwas Öl ins Feuer: RAD unter Windows wie Borland/Embarcadero Developer Studio oder Visual Studio ist Klasse. Was interessieren mich da Optimierungen? Interessieren mich schon, ich muss sie aber nicht in Assembler machen. Das Ding muss Laufen, von Kunden bedient werden und gut ist.

Man sollte schon die grundlegenden Unterschiede machen, wofür man programmieren will.
- Hardware-Plattform?
- OS?
- GUI?
- Open oder Closed Source? (da geht's dann los mit Wegstreichen von Scriptsprachen; ByteCode Compiler wie bei PHP sind für die wirkliche Arbeit und Wirtschaft, wenn man die Hardware und Installation nicht vorgeben kann, indiskutabel)
- Cluster-Systeme?
- HPC?
- Zeitaufwand?
- Prototyp?
- Team-Eigenschaften wenn ich nicht zu Hause in meinem Keller koche, äh code.

Man sollte nicht vergessen:
- dem Kunden ist es egal wie das Ding gebaut ist.
- der Kunde will wenig bezahlen
- es soll laufen und Wartungsarm sein

etc.ppp.

  • #1427: 20.Jul.2010 09:07 von Dr. Azrael Tod

    Also erstmal: FALSCH! (Es gibt ja keine falschen Meinungen, aber deine ist es.)

    Es hat nicht jede Sprache ihre sinnvollen Anwendungsgebiete. Cobol wird heute nur noch verwendet weil es Altlasten gibt, Brainfuck wurde nie für was ernstes verwendet und für Malbolge gibts gerade mal Computergenerierte Hello-World-Programme. Weiterhin wage ich zu behaupten dass ich jedes Problem, für das PHP ideal erscheint, besser mit Python lösen kann. Wenn dem nicht so ist, dann liegt das sicher nicht daran dass PHP so toll ist, sondern eher daran dass auch Python seine Schwachstellen hat.

    Ich bestreite nicht dass man Software für ihren jeweiligen Zweck nutzen sollte. Z.B. Delphi (oder so Borland/Embacardero-Zeugs generell) ist ein prima Werkzeug. Ich fand das Zeug schon immer klasse.. für seinen Einsatzzweck. Ich bezweifel nur dass es sinnvoll ist alle Werkzeuge als gegeben hinzunehmen. Heutzutage verwendet doch keiner Java weil er sich alle möglichen Sprachen angesehen hat und diese als ideal für seinen Bedarf ansieht. Java wird verwendet, weil es andere verwenden.
    Das selbe kann man über C++ sagen. Es steckt fest im Zwischenbereich zwischen Systemnahem Zeugs und einer echten, objektorientierten Sprache. Für beides gibt es auch andere Werkzeuge, aber keiner sieht sie sich an weil es ja C++ gibt (und das ist auch objektorientiert, das MUSS ja quasi besser sein als sein Vorgänger C).

    Sprich: Ich muss profmakx recht geben. Da draußen gibt es verdammt viel Müll, der einfach nur verwendet wird ohne jegliches Anzeichen von Sinn und/oder Verstand.

    BTW: dein Kommentar ist auch beim ersten Mal schon angekommen, du musst dann nicht noch 3x auf absenden drücken ;-)

  • #1428: 20.Jul.2010 10:07 von profmakx

    Ich weiss garnicht woher ich wusste, dass irgendwo ein Embedded-Hampel um die Ecke gebogen kommt und sagt "Ich muss superextraeffizient sein, und da ist NUR C möglich am liebsten Assembler" oder irgendwas in der Richtung. Aber ich habs mir gedacht. Ich frag mich warum das so lange gedauert hat.
    Embedded ist KEINE FUCKING AUSREDE für eine Scheissprogrammiersprache. Niemals. Nicht. Es sind echt jedesmal die verblendeten E-Technik-Hampels die ein total abgefucktes "embedded"-SDK zusammenwürfeln und behaupten "das liegt an C das das so ist, und es gibt keine Alternative".
    Fucking hell, warum gibt es keine Alternative? Oder gibt es sie und man kennt sie nur nicht? Ist der "Embedded"bereich nicht inzwischen so riesig, dass sogar Telefone darunterfallen? Darauf läuft auch Java. Ich hasse diese Embeddedausreden.

    C hat seine Berechtigung: So sollte nie wieder eine Programmiersprache aussehen. C++ auch: Blödsinniges aufpropfen von Features sollte man sein lassen und hoffentlich scheitert D daran. Und Java, diese Sprache hat eine Berechtigung weil durch eine supereffiziente VM versucht wurde die Sprache zu reparieren. Immerhin hat man nun effiziente VMs.
    PHP ist Schrott. Das ist ein Fakt des Lebens, genauso wie "Schrott setzt sich durch". Sieht man überall: Windows, PHP, Linux, C++. Billiger Schrott, Verfügbarer Schrott.

    Und dein Kommentar hat noch eine andere Schwäche: Nein. Man guckt nicht auf das OS, GUI etc um eine gute Sprache auszumachen. Dieser soziale Stuhlkreisschwachsinn von wegen "Best tool for the job" geht in die völlig falsche Richtung. Wenn du mal gelesen hättest was ich geschrieben hab hättest du das auch verstanden.

    Kunden sind mir übrigens auch SCHEISS EGAL! Stell Dir vor, dass nicht jeder sich mit etwas beschäftigt weil er Geld daraus pressen will. Es gibt Leute, die holen sich einen auf Eleganz, Präzision, Fehlerfreiheit oder einfach nur "richtig gemacht" runter. Und ich bin so jemand.

  • #1429: 20.Jul.2010 05:07 von profmakx

    Sag doch mal gleich wieso Fakebook, StasiVZ, Amazon etc. pp. so erfolgreich sind, wenn PHP für richtige Arbeit nicht verwendet werden kann?

    • #1431: 21.Jul.2010 12:07 von Snookie

      Weil sie kein PHP verwenden :)

      HipHop (PHP->C++ brhahahaw krank) zähl ich nu nicht zu PHP

#1485: 06.Nov.2010 02:11 von TheGuru

Wenn ein Programmierer nicht weiß wann eine Sprache unklar ist, und jede Sprache ist irgendwo unklar und nicht eindeutig, hat er den falschen Beruf !!

  • #1486: 06.Nov.2010 03:11 von Dr. Azrael Tod

    Äh.. ja.. klar..
    Weil logisch beschreibende Sprachen ja quasi als Naturgesetz unklare Definitionen haben. Klingt für mich vollkommen logisch.
    Außerdem gibts ja nur vollkommen fähige und kompetente Programmierer da draußen, da muss man nicht auf sinnvolle Sprachen achten.
    Ich wünsche dir viel Spaß im Berufsleben mit so einer Einstellung.

    BTW: 'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Terry Pratchett in Eric

  • #1487: 06.Nov.2010 04:11 von profmakx

    Ich kann heute irgendwie von diesem Spruch nicht weg: Wenn man keine Ahnung hat...

Geschrieben von profmakx
Later article
Festplatte 'putt!
Older article
grep is klasse