... wie kann ich Programmierkenntnisse entwickeln, die auf alle Sprachen anstatt nur auf eine angewendet werden können?
Der Schlüssel zu dieser Frage liegt darin, die Sprache zu überschreiten und nicht in der Sprache zu denken, in der Sie programmieren.
Was?
Erfahrene polyglotte Programmierer denken im abstrakten Syntaxbaum (AST) an ihr eigenes mentales Sprachmodell. Man denkt nicht "Ich brauche eine for-Schleife hier", sondern "Ich muss eine Schleife über etwas machen" und übersetzt diese in die für oder während, oder Iterator oder Rekursion für diese Sprache.
Dies ähnelt dem, was man beim Erlernen einer gesprochenen Sprache sieht. Menschen, die viele Sprachen fließend sprechen, denken über die Bedeutung nach und sie kommt in einer bestimmten Sprache zum Ausdruck.
Ein Hinweis auf diesen AST ist in den beiden Eyetracking-Videos Codeverständnis mit Eye-Tracking und Eye-Tracking-Code-Experiment (Anfänger) zu sehen, in denen die Bewegungen des Auges eines Anfängers und eines erfahrenen Programmierers beobachtet werden. Man kann sehen, wie der erfahrene Programmierer den Code in sein mentales Modell "kompiliert" und in seinem Kopf "ausführt", während der Anfänger den Code Schlüsselwort für Schlüsselwort durchlaufen muss.
Der Schlüssel für die Frage, wie Programmierkenntnisse für alle Sprachen entwickelt werden können, liegt also darin, mehrere Sprachen zu lernen, damit man sich vom mentalen Modell einer Sprache distanzieren und die Fähigkeit entwickeln kann, die AST für ein Problem in der Sprache selbst zu generieren eine Kopfsprache, die dann in eine bestimmte Sprache übersetzt wird.
Sobald man diese Fähigkeit hat, das AST im Kopf zu benutzen, wird das Erlernen einer anderen Sprache innerhalb einer ähnlichen Denkschule ( Befunge ist ein kleiner Sprung von Java, aber nicht so viel von Forth ) viel einfacher - es ist 'nur' Übersetzen des AST in eine neue Sprache, was beim 3., 4. und 5. Mal (usw.) viel einfacher ist.
Es gibt einen klassischen Artikel: Echte Programmierer verwenden Pascal nicht . Ein Teil davon lautet:
... der entschlossene Real Programmer Fortran-Programme in jeder Sprache schreiben kann
Es gibt auch Teile, für die Sie nicht nur das mentale AST verwenden können - Sie müssen auch in der Sprache denken. Die Ausführung dieses Vorgangs nimmt einige Zeit in Anspruch (ich bin immer noch beschuldigt, Perl- Code in Python geschrieben zu haben, und mein erster Lisp- Code wurde mit der Meldung "Dies ist ein sehr gutes C-Programm" überprüft.)
Dazu muss ich auf einen Artikel hinweisen, der von der ACM veröffentlicht wurde: Wie man Fortran nicht in einer beliebigen Sprache schreibt . Der dritte Absatz des Artikels (der keine Anführungszeichen enthält) befasst sich direkt mit der vorliegenden Frage:
Es gibt Merkmale einer guten Codierung, die alle allgemeinen Programmiersprachen überschreiten. Sie können gutes Design und transparenten Stil in fast jedem Code implementieren, wenn Sie sich darauf anwenden. Nur weil Sie mit einer Programmiersprache fehlerhaften Code schreiben können, müssen Sie dies nicht tun. Und eine Programmiersprache, die entwickelt wurde, um guten Stil und Design zu fördern, kann immer noch verwendet werden, um schrecklichen Code zu schreiben, wenn der Codierer ausreichend kreativ ist. Sie können in einer Badewanne ertrinken, in der sich ein Zentimeter Wasser befindet, und Sie können problemlos ein völlig unlesbares und nicht wartbares Programm in einer Sprache schreiben, die weder GOTOS noch Zeilennummern enthält. Unabhängig davon, ob Sie Fortran oder Java, C ++ oder Smalltalk schreiben, können (und sollten) Sie guten Code anstelle von schlechtem Code schreiben.
Es ist nicht nur genug, um die AST zu haben - es ist notwendig, die AST zu haben, die man in andere Sprachen übersetzen kann. Ein Fortran AST im Kopf zu haben und Fortran-Code in Java zu schreiben, ist keine gute Sache. Man muss auch mit der Sprache und ihren Redewendungen vertraut genug sein, um in der Sprache denken zu können (trotz dessen, was ich ganz oben gesagt habe).
Ich habe Java-Code von jemandem gesehen, der nicht aufgehört hat, C-Code zu schreiben. Es gab ein Objekt mit einer Hauptmethode. In diesem Objekt befanden sich eine Reihe von statischen Methoden, die von aufgerufen wurden main
, und private innere Klassen, die öffentliche Felder hatten (und daher Streben sehr ähnlich sahen). Es war C-Code, der in Java geschrieben war. Es wurde lediglich die Syntax einer Sprache in eine andere übersetzt.
Um diesen Punkt zu überwinden, muss man weiterhin Code in mehreren Sprachen schreiben und beim Entwerfen des Codes nicht in diesen Sprachen denken, sondern in diesen, wenn das Design in den Code übersetzt wird, um mit den Sprachidiomen korrekt zu arbeiten.
Der einzige Weg dorthin - in der Lage zu sein, Programmierkenntnisse zu entwickeln, die auf alle Sprachen angewendet werden können - besteht darin, weiterhin Sprachen zu lernen und diese mentale Programmiersprache flexibel zu halten, anstatt an eine Sprache gebunden zu sein.
(Ich entschuldige mich bei ChaosPandion, dass ich mich stark von der Idee, die er vorgestellt hat , geliehen habe .)