Was die Leute umgangssprachlich als "Programmiersprachen" bezeichnen, sind meiner Meinung nach eigentlich drei verschiedene Dinge:
- Sprachtyp und Syntax
- Sprach-IDE
- Verfügbare Bibliotheken für eine Sprache
Wenn zum Beispiel jemand C # in einer Diskussion aufruft, denken Sie vielleicht, er / sie spricht über die Sprachsyntax (1), aber es ist zu 95% sicher, dass die Diskussion das .Net-Framework (3) beinhalten wird. Wenn Sie keine neue Sprache entwerfen, ist es schwierig und normalerweise sinnlos, (1) zu isolieren und (2) und (3) zu ignorieren. Das liegt daran, dass IDE und Standardbibliothek "Komfortfaktoren" sind, die sich direkt auf die Erfahrung mit einem bestimmten Tool auswirken.
In den letzten Jahren habe ich auch an Google Code Jam teilgenommen. Zum ersten Mal habe ich mich für C ++ entschieden, weil es eine gute Unterstützung für das Lesen der Eingabe bietet. Das Lesen von drei Ganzzahlen aus einer Standardeingabe in C ++ sieht beispielsweise folgendermaßen aus:
int n, h, w;
cin >> n >> h >> w;
Während in C # das gleiche wie folgt aussehen würde:
int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);
Das ist viel mehr Aufwand für eine einfache Funktionalität. In C # wird es mit mehrzeiligen Eingaben noch komplizierter. Vielleicht habe ich damals einfach keinen besseren Weg gefunden. Wie auch immer, ich habe die erste Runde nicht bestanden, weil ich einen Fehler hatte, den ich vor dem Ende der Runde nicht korrigieren konnte. Ironischerweise hat die Methode zum Lesen von Eingaben den Fehler verschleiert. Das Problem war einfach, die Eingabe enthielt eine Zahl, die für 32-Bit-Ganzzahlen zu groß war. In C # int.Parse(string)
würde eine Ausnahme ausgelöst, aber in C ++ würde der Dateieingabestream ein bestimmtes Fehlerflag setzen und im Hintergrund fehlschlagen, sodass der ahnungslose Entwickler kein Problem bemerkt.
Beide Beispiele zeigen, wie die Bibliothek anstelle der Sprachsyntax verwendet wurde. Der eine zeigt die Ausführlichkeit und der andere die Zuverlässigkeit. Viele Bibliotheken sind auf mehrere Sprachen portiert, und einige Sprachen können Bibliotheken verwenden, die nicht speziell für sie erstellt wurden (siehe @ vartecs Antwort zu Python mit C-Bibliotheken).
Um dies zusammenzufassen, hilft es, den richtigen Algorithmus zu kennen. Bei Codierungswettbewerben ist dies von entscheidender Bedeutung, insbesondere wenn Ressourcen wie Ausführungszeit und Arbeitsspeicher absichtlich begrenzt sind. In der Anwendungsentwicklung ist es willkommen, aber im Allgemeinen nicht entscheidend. Dort ist die Wartbarkeit wichtiger. Dies kann durch die Anwendung korrekter Entwurfsmuster, einer guten Architektur, lesbarem Code und relevanter Dokumentation erreicht werden. Alle diese Methoden hängen stark von internen Bibliotheken und Bibliotheken von Drittanbietern ab. Umso wichtiger finde ich es, zu wissen, welche Arten von Rädern bereits erfunden wurden und wie sie passen, um meine eigenen zu bauen.