Ich argumentiere einfach mal aus meiner Erfahrung:
Angefangen hat es bei mir mit den Üblichen Lehrsprachen und später PHP in meiner Freizeit. Über Java wurde mir die OOP vermittelt. Das hatte Seiteneffekte, die ich heutzutage als schädlich ansehe. Primär, dass ich OO das für ein Sprachfeature hielt und Garbage Collection toll fand.
Die funktionale Progammierung mit Scheme hat mir gar nicht zugesagt. Eine Schleife programmiert man mit Tail-End Rekursion. Der Compiler/Interpreter macht dann wieder eine Schleife draus, weil Rekursion nicht skaliert (rühmliche Ausnahme ist bei O(log(n))) und langsam ist, da man damit Caching aus-hebelt. Das ist natürlich ganz Schick, denn rekursiver Code ist oft sehr einfach und gut verständlich (im Vergleich zur iterativen Variante, gerade wenn man durch Bäume navigiert). Blöderweise muss man dann aber auch wissen, was der Compiler optimieren kann. Denn wenn's nicht klappt fliegt es einem um die Ohren, da programmiere ich lieber gleich iterativ.
Python finde ich eigentlich schön. Inzwischen kommt mir aber immer wieder die Garbage Collection ins Gehege. Genau wie bei meiner letzten Begegnung mit Java. Wenn Java der Speicher aus geht gäbe es 3 Möglichkeiten:
- JVM bittet das OS um mehr Speicher
- JVM stoppt die Ausführung und wirft die Garbage Collection an
- JVM wirt OutOfMemoryException
Java macht natürlich letzteres, selbst wenn der Garbage Collector GB-Weise Daten weg zu räumen hat (KABUMM). Mehr Speicher holt sich Java nie. Python ist da schön flexibel. Es wird halt einfach langsam.
Kommen wir zu C, damit mache ich Low-Level Echtzeit zeug. Auf Plattformen auf denen die einzige Alternative Assembler ist. Wie schon gesagt - alternativlos, das ist einfach nicht wegzudiskutieren.
Dann wäre da noch C++. Damit mache ich Anwendungen bei denen es auf Performance ankommt. Klar kann man das auch in Java oder Python machen, ist dann halt bloß um Faktor 10 langsamer. Die Ausdrucksstärke von C++11 ist wie eine Droge von der man nicht mehr runter kommt. C++14 ergänzt das vielversprechend.
Immer wieder komme ich auf die Idee etwas mit Python zu machen und entscheide mich dann doch für awk. Für Dinge bei denen AWK nicht in Frage kommt, kommt für mich auch Python nicht in Frage. Das Zeug mit GC skaliert einfach nicht ausreichend.
Klar, bei 90% der Anwendungen ist das vollkommen unerheblich. Aber diese Anwendungen schreiben andere Leute.
Code:
Schule | Studium Bachelor | Studium Master | Post-Studium
| | |
QBasic
Pascal ---
Delphi
PHP ----------------------------
Java ----------------------------- -------
MIPS 2000 ASM
Scheme
sh -----------------------------------------------------------
C ---- -------------------------------------
awk ------------------------------------------------
Python-- ------- -----
8051/52 ASM
C++ --------------------
Angefangen hat es bei mir mit den Üblichen Lehrsprachen und später PHP in meiner Freizeit. Über Java wurde mir die OOP vermittelt. Das hatte Seiteneffekte, die ich heutzutage als schädlich ansehe. Primär, dass ich OO das für ein Sprachfeature hielt und Garbage Collection toll fand.
Die funktionale Progammierung mit Scheme hat mir gar nicht zugesagt. Eine Schleife programmiert man mit Tail-End Rekursion. Der Compiler/Interpreter macht dann wieder eine Schleife draus, weil Rekursion nicht skaliert (rühmliche Ausnahme ist bei O(log(n))) und langsam ist, da man damit Caching aus-hebelt. Das ist natürlich ganz Schick, denn rekursiver Code ist oft sehr einfach und gut verständlich (im Vergleich zur iterativen Variante, gerade wenn man durch Bäume navigiert). Blöderweise muss man dann aber auch wissen, was der Compiler optimieren kann. Denn wenn's nicht klappt fliegt es einem um die Ohren, da programmiere ich lieber gleich iterativ.
Python finde ich eigentlich schön. Inzwischen kommt mir aber immer wieder die Garbage Collection ins Gehege. Genau wie bei meiner letzten Begegnung mit Java. Wenn Java der Speicher aus geht gäbe es 3 Möglichkeiten:
- JVM bittet das OS um mehr Speicher
- JVM stoppt die Ausführung und wirft die Garbage Collection an
- JVM wirt OutOfMemoryException
Java macht natürlich letzteres, selbst wenn der Garbage Collector GB-Weise Daten weg zu räumen hat (KABUMM). Mehr Speicher holt sich Java nie. Python ist da schön flexibel. Es wird halt einfach langsam.
Kommen wir zu C, damit mache ich Low-Level Echtzeit zeug. Auf Plattformen auf denen die einzige Alternative Assembler ist. Wie schon gesagt - alternativlos, das ist einfach nicht wegzudiskutieren.
Dann wäre da noch C++. Damit mache ich Anwendungen bei denen es auf Performance ankommt. Klar kann man das auch in Java oder Python machen, ist dann halt bloß um Faktor 10 langsamer. Die Ausdrucksstärke von C++11 ist wie eine Droge von der man nicht mehr runter kommt. C++14 ergänzt das vielversprechend.
Immer wieder komme ich auf die Idee etwas mit Python zu machen und entscheide mich dann doch für awk. Für Dinge bei denen AWK nicht in Frage kommt, kommt für mich auch Python nicht in Frage. Das Zeug mit GC skaliert einfach nicht ausreichend.
Klar, bei 90% der Anwendungen ist das vollkommen unerheblich. Aber diese Anwendungen schreiben andere Leute.