Code Complete besagt , dass Sie sollten aways Code in einer Sprache zu Code Gegensatz in ihm. Damit meinen sie
Beschränken Sie Ihr Programmierdenken nicht nur auf die Konzepte, die von Ihrer Sprache automatisch unterstützt werden. Die besten Programmierer überlegen, was sie tun möchten, und bewerten dann, wie sie ihre Ziele mit den ihnen zur Verfügung stehenden Programmierwerkzeugen erreichen können. (Kapitel 34.4)
Führt dies nicht dazu, dass in jeder Sprache ein Programmierstil verwendet wird, unabhängig von den besonderen Stärken und Schwächen der jeweiligen Sprache?
Oder um die Frage in ein besser zu beantwortendes Format zu bringen:
Würden Sie vorschlagen, dass man versuchen sollte, sein Problem so sauber wie möglich mit den Einzelheiten seiner Sprache zu kodieren, oder sollten Sie lieber die eleganteste Lösung insgesamt suchen, auch wenn dies bedeutet, dass Sie möglicherweise umständliche Konstrukte implementieren müssen, die nicht nativ existieren in der eigenen Sprache?
quelle
Antworten:
Es gibt einen noch besseren Ansatz: Vergessen Sie überhaupt Ihre erbärmliche feste Programmiersprache. Codieren Sie Ihr Problem in einer Sprache, die Sie gerade erfunden haben und die sich aus den Begriffen der jeweiligen Problemdomäne ableitet, codieren Sie es so natürlich wie möglich und denken Sie erst dann daran, diese neue Programmiersprache zu implementieren oder Ihren Code auf die Grenzen der Sprache zu reduzieren vorhandene Sprache.
Dieser Ansatz wird als sprachorientierte Programmierung bezeichnet . Es gibt viele Techniken, um die domänenspezifischen Sprachen effizient zu implementieren , und dies ist ein besonders heißes Thema für die Ruby-Community.
quelle
Ich glaube, die richtige Antwort und die im Buch vorgesehene lautet:
Beim Programmieren in eine Sprache ging ich immer davon aus, dass Techniken außerhalb des normalen Sprachstils verwendet werden sollten, bei denen dies zu einem Vorteil führen würde . Dies ist ein wesentlicher Unterschied zum Schreiben in einem Stil in allen Sprachen.
Zum Beispiel hat das Erlernen von Haskell meine Fähigkeit, Funktionen höherer Ordnung zu verwenden, erheblich verbessert. Wenn ich jetzt in c # programmiere, verwende ich die verschiedenen
IEnumerable
Methoden, z. B.Select
häufiger, da die Verwendung dieser Methoden zu saubererem Code führt als das Schreiben von for-Schleifen.Func<int, int>
Aufgrund meiner Haskell-Erfahrung neige ich auch dazu, Pass-and-Funktionen (dh ) häufiger zu verwenden. Meine Verwendung der Vererbung ist aus diesem Grund zurückgegangen, und meistens ist das Ergebnis einfacherer Code.Ich verwende jedoch keine Konzepte wie Monaden oder algebraische Datentypen in c #. Dies liegt daran, dass beide in c # nicht eindeutig darstellbar sind und im Austausch für viel Dunkelheit zu wenig Nutzen führen.
Also benutze ich die Werkzeuge der Sprache, um die Fähigkeiten, die ich habe, optimal zu nutzen. Ich glaube, das programmiert in die Sprache.
quelle
Der Punkt ist , dass gute Programmierer haben nicht eine Sprache. Das Zitat aus dem Buch spricht von "Programmierwerkzeugen, die ihnen zur Verfügung stehen" - das heißt, wenn Sie Perl und Java kennen, sollten Sie vielleicht Perl für diese schnelle String-Manipulation verwenden. Programmiersprachen sind keine Boxen, die uns einschränken, sondern Werkzeuge, mit denen wir Probleme lösen. Dies ist (imo) das, worauf Code Complete abzielt. Codieren Sie nicht in einer Programmiersprache / Umgebung, sondern geben Sie die beste Lösung in die beste Programmiersprache / Umgebung für Sie, Ihr Problem und Ihre Lösung ein.
quelle