Naja, es gibt diesen "Glaubenskrieg" um die Programmiersprachen ja schon sehr lange zwischen den Programmierern. Die Frage nach der besten Sprache ist in diesem Sinne wohl die Frage nach der besten Religion. Und alle Religionen die ich kenne haben ihre Vor- und Nachteile. Die Wahrheit wird man in dem Bereich wohl nicht finden , sondern nur Meinungen. Hier ist dann also meine:
Mein persönlicher Favorit unter den Sprachen ist C bzw C++. Warum ist das so? Ich schätze an C die syntaktischen Freiheiten, die man als Programmierer hat. Überspitzt betrachtet reduziert C durch die Expression Syntax ein kleines Regelwerk auf eine Regel: Es muss irgendwie einen Wert ergeben. Wie gesagt: Überspitzt. Einige Konstruktionen, die bei anderen Sprachen eher durch ein starres, fixes Format definiert werden sind in C so flexibel, dass ich den Code leichter meiner Denkweise anpassen kann. Mir persönlich fällt es häufig leichter Programmcode "in einem Ruck" zu erfassen und C ist eine sehr kompakte Sprache, bei der man Vieles in einen Ausdruck packen kann was in anderen Hochsprachen über mehrere Ausdrücke verteilt werden müsste.
C zu beherrschen ist für mich aber auch deswegen wichtig, weil es viele andere Sprachen gibt, die syntaktisch eine vereinfachte C-Variante darstellen. So stellen solide C-Grundkenntnisse bereits ein gutes Grundgerüst zum Erlernen anderer Sprachen dar. Ein weiterer Punkt für C ist die Tatsache dass es sehr Laufzeit- und Speichereffizient ist. Darüberhinaus hat man in C die Möglichkeit sehr maschinennahe zu programmieren ohne dabei auf den Komfort einer Hochsprache verzichten zu müssen.
Ich habe noch niemals in Lisp, Ruby oder Dylan programmiert und kann demzurfolge auch keine Vergleiche mit diesen Sprachen anstellen. Es gibt jedoch einiges was an C tatsächlich scheusslicher ist als an anderen Hochsprachen wie Java, Pascal, Basic etc. und vielleicht ist es mit Lisp etc. ähnlich gelagert.
Die Gründe dafür liegen wohl im Aufbau dieser Sprache, die manchmal relativ hartnäckig sein kann. So kann z.b. die von mir so geschätzte Freiheit in C dazu führen, dass man extrem kryptischen Code produziert. Hinzu kommen eine Reihe technischer Details von C, die in anderen Hochsprachen entweder leichter umgesetzt oder teilweise garnicht vorhanden sind. Der Umgang mit Zeichenketten kann sich in C beispielsweise schwieriger gestalten, alleine schon deswegen weil C keine eigenen Operatoren für sie bereit hält.
Das Konzept der Zeiger ist in C praktisch nicht nur unumgänglich, sondern auch noch komplizierter in der Notation. Für Leute die sich mit Zeigern schwer tun ist C sicherlich unattraktiver, denn bereits ein Ausdruck wie "Hallo" wird durch C als Zeiger behandelt. Die Art und Weise wie C die Manipulation von Speicherbereichen zulässt kann ebenfalls als kritisch gewertet werden. Der Speicher kann zunächst wie in anderen Sprachen über eine statische Variable oder einem zuvor deklarierten Zeiger anberaumt werden. In beiden Fällen sind die Speichergrenzen im Allgemeinen bekannt. In C jedoch können Zeiger auf Speicherbereiche zeigen deren Grösse unbekannt ist und es gibt wahrscheinlich keinen C Programmierer, der nicht schonmal versehentlich über Speichergrenzen hinweg gelesen oder geschrieben hat.
Desweiteren ist es in C schwieriger im Kopf zu behalten wie bestimmte Datenstrukturen angesprochen werden. Wie war das noch gleich mit dem Zeiger auf ein Array bestehend aus Zeigern auf Klassen mit Strukturzeigern auf dynamisch-verkettete Listen? Ok, das Beispiel ist ein bisschen unrealistisch und krank. Die Typüberprüfung in C ist sehr inkonsequent realisiert und diesbezüglich sind die Unterschiede zwischen Compilern teilweise gewaltig. Bei Zuweisungen mit unterschiedlichen Typen führen einige Compiler eine automatische Conversion durch während bei anderen ein explizites Typecasting notwendig ist. Hierdurch wird das Schreiben von portabelem Code zusätzlich erschwert.
In komplexeren Ausdrücken oder bei Typdeklarationen ist es häufig schwierig die Rangfolge bestimmter Operatoren und Teilausdrücke zu erfassen. Ein kleines Quiz für alle: x = (int)y++; und x = ((int)y)++; Wo liegt der genaue Unterschied zwischen diesen beiden Zuweisungen? Ich habe wohlgemerkt bewusst ein recht einfaches Beispiel gewählt und doch glaube ich, dass es den ein oder anderen ins Schwanken bringt.
Ich selbst habe in diesem Text die Laufzeit- und Speichereffizienz pro C ins Feld geführt, aber auch dieses Argument wird durch die voranschreitende Entwicklung des Computers langsam immer unwichtiger. Was nützt uns schon eine theoretische Effizienz, die in der Praxis nicht mehr spürbar ist?
Ingesamt summieren sich diese kleinen Details in C zu einem grossen Schwachpunkt: Schwere Handhabung.
Manchmal würde C die Disziplin von Pascal wirklich gut tun, insbesondere wenn es um die Datentypen geht.
Ich glaube, dass abgesehen von bestimmten technischen Erwägungen, die Wahl der Programmiersprache eine Frage des persönlichen Geschmacks ist oder sein sollte. In der Praxis kommt es mir jedoch so vor, dass bei der Wahl auch häufig das persönliche Image von Belang ist. Ich will garnicht leugnen, dass dies auch bei mir ein bisschen so ist.

Programmieren ist auch ein Weg sich gedanklich intellektuell in den Vordergrund zu stellen und viele Programmierer halten sich insgeheim für Genies oder hoffen darauf eines zu sein. Wenn man erstmal erkannt hat, dass einem C-Programmierer mehr Kompetenz zugesprochen wird als einem VB-Programmierer und einem Assembler-Programmierer wieder mehr als den anderen, dann ist dies oft der letzte Anstoss sich mit diesen Sprachen zu beschäftigen. Ich glaube aber dass man die wahre Erleuchtung des Programmierens nicht in einer Programmiersprache findet, sondern vielmehr in der Erkenntnis das man Probleme so stark abstrahieren kann, dass die verwendete Sprache fast zur Nebensache wird.
Trotzdem ist die Diskussion darüber immer wieder interessant und amüsant.
mfG, Softrunner