Erstellen einer neuen Skriptsprache für die Lernerfahrung? [geschlossen]

13

Lohnt es sich, eine Skriptsprache für mein persönliches Lernerlebnis zu erstellen?

Der Grund, den ich frage, ist, dass es bereits so viele Programmiersprachen gibt, dass ich weiß, dass meine niemals eine andere Verwendung haben werden, als eine gute Lernerfahrung zu bieten. Ich sehe jedoch Nachteile, wenn ich nur versuche, eine Skriptsprache als Lernerfahrung zu machen: Es wird viel Zeit und Mühe kosten, etwas "Produktiveres" zu tun.

Wäre das Erstellen einer Programmiersprache (einschließlich des Schreibens von Entwürfen für den vorgesehenen Zweck, die Syntax, die Philosophie, den Dolmetscher usw.) die Zeit, den Aufwand und die Lernerfahrung wert? Oder gibt es andere Projekte, von denen ich mehr profitieren könnte?

Ivan
quelle
3
Eine weitere Option ist die Implementierung einer vorhandenen Sprache. Ich habe über ein Jahr lang langsam einen ECMAScript-Dialekt namens Machete entwickelt und viel gelernt.
ChaosPandion
Interessant, daran hatte ich nicht gedacht.
Ivan
2
1) Lerne dies ... www1.idc.ac.il/tecs 2) und dies ... mitpress.mit.edu/sicp
Joe Internet
Sie können auch einen Beitrag zu bestehenden Projekten, v8, SpiderMonkey oder Python
Treecoder,
3
Meiner Meinung nach ist der beste Weg, um neue Programmiersprachen zu lernen, die Implementierung von Compilern für sie (oder zumindest für wichtige Untergruppen von Originalsprache). Ja, es ist in der Tat eine nützliche Lernerfahrung.
SK-logic

Antworten:

15

Bauen Sie Ihre Fähigkeiten und Ihr Portfolio auf

Meiner Meinung nach wäre das eine sehr gute Lernerfahrung.

  • zwinge dich, unter die Motorhaube zu schauen ,
  • führen Sie zu lernen, wie die Dinge intern gemacht werden ,
  • ermutigen Sie, andere Implementierungen zu betrachten und zu vergleichen ,
  • Halten Sie Ihre algorithmischen Fähigkeiten auf dem neuesten Stand,
  • machen Sie Code (und hoffentlich dokumentieren ) eine Menge, die auch nicht schlecht ist,
  • Sie erhalten ein umfangreiches Projekt und eine Codebasis, die Sie online für alle zugänglich machen können.
    • persönlicher Genuss und Befriedigung ,
    • potenziellen Arbeitgebern Ihre Fähigkeiten zu präsentieren ,
    • mit Gleichgesinnten kommunizieren und sich austauschen ,
    • potenziell lassen Sie es in etwas mehr wachsen ...

Ich sehe dies als produktiv, nützlich und insgesamt "wert".

Loslegen

Jetzt können Sie verschiedene Ansätze verwenden, je nachdem, wie viel Zeit Sie dafür einplanen ...:

  • Wenn Sie einen begrenzten Zeitrahmen haben, würde ich sagen, tauchen Sie ein und kodieren Sie das Ding.
  • Wenn Sie einen größeren Zeitrahmen haben, können Sie in der Tat den langwierigen Weg gehen und Spezifikationen, Tutorials, Handbücher usw. schreiben.

Fangen Sie klein an

Ich würde Ihnen eher empfehlen, klein anzufangen . Niemand, von dem ich weiß, hat jemals direkt eine großartige Sprache so geschrieben. Sie stolpern und fallen und scheitern und scheitern und scheitern . Dann gelingt es dir, dass es zwar funktioniert, aber trotzdem nervt, also fängst du noch einmal von vorne an. Und wenn Sie neue Funktionen hinzufügen, wird es endlich cool, aber plötzlich stellen Sie fest, dass es ein grundlegendes Konzept gibt, das Sie am Anfang vermasselt haben. Also fängst du noch einmal von vorne an ...

Scheint mir sehr lehrreich.

Fahren Sie fort (und teilen Sie den Link mit uns).

Klein wie "kurz"

Aber auch hier würde ich empfehlen, dass Sie klein anfangen . Haben Sie keine Angst, wenn die Leute sagen, es wird viel Code und Zeit in Anspruch nehmen. Nicht unbedingt, wenn Sie keine komplizierte Sprache anstreben. Alan Kay und andere Xerox PARC Ingenieure angeblich eine frühe Version entwickelt Smalltalk , dass fit auf einem einzigen Blatt Papier , als Ziel für Prägnanz (lesen Xerox PARC: Händler von Blitz für Details über die Geschichte des PARC ). Scheint ein guter, lehrreicher und eingeschränkter Ansatz zu sein (solange er die Lesbarkeit nicht einschränkt).

Klein, wie in "eingeschränkt"

Sie müssen nicht sofort ein erweitertes Typsystem, Funktionen höherer Ordnung und eine Mischung aus 42 verschiedenen Paradigmen unterstützen. Es könnte nur eine mathematische Ausdruckssprache sein.

Das Wissen anderer wiederverwenden (und einsehen)

Vielleicht möchten Sie sich auch die Tools ansehen, mit denen Sprachen von Grund auf neu geschrieben werden. Sie können alles selbst neu implementieren, aber vielleicht lohnt es sich auch, sich zum Beispiel vorhandene Lexer und Parser-Generatoren anzuschauen.

Und natürlich möchten Sie vielleicht mehr über die Compilerkonstruktion im Allgemeinen erfahren .


Wenn wir Ihre Frage dahingehend ändern, dass sie "die produktivste Nutzung Ihrer Zeit ist"? es wird ein ganz anderes Thema :)

Es gibt Unmengen anderer Lernprojekte, die Sie angehen könnten, und die Ihre Fähigkeiten ebenso gut trainieren und präsentieren würden, wenn nicht sogar besser. Es kommt darauf an, was Sie anstreben.

Haylem
quelle
2
+1 für "Dann gelingt es dir, dass es funktioniert, aber immer noch saugt"
Ivan
1
@Ivan: Danke :) Das ist wahrscheinlich ein weiterer guter Teil der Lernerfahrung: Selbstbeobachtung, Demut und Ausdauer!
Haylem
1
Ich stimme Haylem zu. Die Menge, die Sie über das Programmieren im Allgemeinen, die Funktionsweise von Sprachen und verschiedene Methoden zur Implementierung von Dingen lernen werden, ist es wert. Ja, Sie werden wahrscheinlich der einzige sein, der es jemals sieht, aber es wird Ihr kleines Lieblingsprojekt, an dem Sie arbeiten, um sich zu verbessern.
RJay75
3

Ich sage, mach weiter.

Die Implementierung einer Programmiersprache deckt eine breite Palette von Themen ab, und Sie erfahren viel darüber, wie die Dinge unter der Haube funktionieren. Sie werden wahrscheinlich ein halbes Dutzend gescheiterter Versuche durchleben, aber die Lernerfahrung ist von unschätzbarem Wert.

tdammers
quelle
2

Das Entwerfen und Implementieren einer (Spielzeug-, aber vollständigen) Programmiersprache war tatsächlich eine der (erforderlichen?) Übungen in einer meiner CS-Klassen der oberen Klasse (entweder die Compilerklasse oder die Programmiersprachenumfrage, ich vergesse welche ...)

Mindestens ein CS-Professor hat das gedacht.

Sie werden am Ende eine viel bessere Wertschätzung für all die "Macken" haben, die andere Sprachen haben.

hotpaw2
quelle
1

Es würde eine Weile dauern. Planen Sie es zu pflegen?

Wäre das Erstellen einer Programmiersprache (einschließlich des Schreibens von Entwürfen für den vorgesehenen Zweck, die Syntax, die Philosophie, den Dolmetscher usw.) die Zeit, den Aufwand und die Lernerfahrung wert? Oder gibt es andere Projekte, von denen ich mehr profitieren könnte?

Ich gehe davon aus, dass Ihr finanzieller Status nicht unendlich ist, daher würde ich sagen, dass es die Zeit nicht wert ist. Sie können Ihre Zeit für andere nützliche Projekte verwenden, mit denen Sie Geld verdienen können. Denken Sie daran, dass dies möglicherweise nicht die Antwort ist, nach der Sie suchen. Aus logischer Sicht würde ich jedoch sagen, dass Ihre Programmiersprache derzeit möglicherweise nicht das richtige Projekt ist. Ich würde es in Betracht ziehen, wenn Sie ein pensionierter Informatiker wären und das Bedürfnis verspüren, zur Industrie beizutragen. Es scheint, dass Sie eine starke Leidenschaft für das Programmieren haben, und das ist großartig. Aber eine ganz neue Skriptsprache erstellen? Das wird ein extrem langes Projekt. In dieser Zeit hätten Sie viele Anwendungen erstellen können, die Sie in Ihr Portfolio aufnehmen können. Ich denke die Frage ist:

Ryan
quelle
2
Ich weiß nicht ... eine große Liebesarbeit übertrifft zwanzig wegwerfbare Apps, die Sie zu je einhundert Dollar machen könnten.
ChaosPandion
Die Implementierung domänenspezifischer Sprachen kann die Entwicklung eines praktischen Projekts erheblich beschleunigen. Es könnte also sowohl in finanzieller als auch in ästhetischer Hinsicht durchaus lohnend sein.
SK-logic
1
Manche Menschen erschaffen Dinge, weil sie Dinge gern erschaffen ... nicht, weil ihnen durch den genannten Schöpfungsakt etwas Geld einfällt.
Jetti
@ Jetti. Ja, ich weiß. Deshalb habe ich gesagt, dass diese Antwort möglicherweise nicht die ist, nach der Sie suchen, und ich kann Ihnen sagen, dass Sie eine Leidenschaft für das Programmieren haben. Ich freue mich über Ihre Beiträge, da ich darauf gewartet habe, dass jemand etwas sagt, wie Sie es zu dieser Antwort gesagt haben.
Ryan
@ Ryan - Entschuldigung, ich habe diesen Teil verpasst.
Jetti
-2

Mein Rat an Sie ist

Das Rad nicht neu erfinden

Die Inspiration für diese idiomatische Metapher liegt in der Tatsache, dass das Rad der Archetyp des menschlichen Einfallsreichtums ist, sowohl aufgrund der zusätzlichen Kraft und Flexibilität, die es seinen Benutzern bietet, als auch in den antiken Ursprüngen, die es ihm ermöglichen, viel, wenn nicht alles zu unterlegen , der modernen Technologie. Da es bereits erfunden wurde und keine Funktionsstörungen aufweist, wäre ein Versuch, es neu zu erfinden, sinnlos und würde dem Objekt keinen Wert hinzufügen. Es wäre Zeitverschwendung, die Ressourcen des Ermittlers von möglicherweise wertvolleren Zielen abzulenken was seine oder ihre Fähigkeiten wesentlich verbessern könnte.

Sie sollten sich fragen:

  • Warum müssen Sie ein Skript erstellen? Ist das vorhandene Skript da draußen nicht gut genug?
  • Wirst du es warten und veröffentlichen und bist sicher, dass dein Skript von anderen Programmierern verwendet wird? Wenn Ihre Antwort nein ist, tun Sie es nicht.

Ich verstehe, dass Sie mehr Lernerfahrung haben möchten, und aus diesem Grund denke ich, dass das Erstellen eines Frameworks Ihnen mehr Lernerfahrung verschafft und mit dem Bonus, dass Sie / Ihr Team / Ihre Community es später wiederverwenden können, als das Erstellen eines Skripts.

Und dieser xkcd-Comic ist ein bisschen relevant, ändern Sie einfach "Standards" in "Sprache".

Bildbeschreibung hier eingeben

Rudy
quelle
-1, sagte er klar, dies wäre für eine persönliche Lernerfahrung.
GroßmeisterB
Ich möchte nur ehrlich sein, dass das Erstellen von Skripten weder für sich selbst noch für die Community eine echte persönliche Lernerfahrung und einen Nutzen bringt. Ich fügte auch meine Antwort hinzu, dass das Erstellen von Frameworks ihm und der Community tatsächlich mehr nützt. Es macht mir nichts aus, mehr Stimmen abzugeben, wenn Sie der Meinung sind, dass dies nicht der Fall ist.
Rudy
2
Ja, Sie haben Recht - kein Neuling-Programmierer wird jemals sein erstes "Hallo, Welt!" Schreiben. - Es wäre doch viel besser, nur ein vorhandenes herunterzuladen. Und was ist in diesem Zusammenhang " Rahmen "?
SK-logic
5
@Rudy, die Implementierung eines Compilers oder Interpreters ist eine so triviale und grundlegende Fähigkeit, die "Hello, World!" Ziemlich nahe kommt. Deshalb ist es in jedem anständigen CS-Kurs obligatorisch. Und obwohl diese Aufgabe trivial ist, lehrt sie eine Reihe sehr nützlicher Fähigkeiten, die in der Praxis in nahezu jedem Bereich anwendbar sind. Es erübrigt sich zu erwähnen, dass das Implementieren von DSLs extrem wichtig ist (wohlgemerkt - das, was Sie im Ruhezustand erwähnt haben, ist ein DSL, und es gibt eine Reihe eingebetteter Interpreter und Compiler, von denen einige ziemlich schlecht implementiert sind).
SK-logic
3
@ SK-Logik - Sie helfen nicht mein Selbstwertgefühl hier ... :)
ChaosPandion