Créer un nouveau langage de script pour l'expérience d'apprentissage? [fermé]

13

La création d'un langage de script pour ma propre expérience d'apprentissage personnel en vaut-elle la peine?

La raison pour laquelle je demande, c'est qu'il y a déjà tellement de langages de programmation disponibles, je sais que le mien n'aura jamais d'autre utilisation réelle que de fournir une bonne expérience d'apprentissage. Cependant, je vois des inconvénients à essayer de créer un langage de script comme une expérience d'apprentissage: cela prendra beaucoup de temps et d'efforts pour que je puisse faire quelque chose de plus "productif".

La création d'un langage de programmation (y compris la rédaction de projets de son objectif, sa syntaxe, sa philosophie, son interprète, etc.) en vaut-elle le temps, l'effort et l'expérience d'apprentissage? Ou y a-t-il d'autres projets dont je pourrais bénéficier davantage?

Ivan
la source
3
Une autre option consiste à implémenter un langage existant. J'ai développé lentement un dialecte ECMAScript appelé Machete pendant plus d'un an et j'ai beaucoup appris.
ChaosPandion
Intéressant, je n'y avais pas pensé.
Ivan
2
1) Apprenez ceci ... www1.idc.ac.il/tecs 2) et ceci ... mitpress.mit.edu/sicp
Joe Internet
vous pouvez également envisager de contribuer à des projets existants v8, SpiderMonkey ou Python
treecoder
3
À mon humble avis, la meilleure façon d'apprendre de nouveaux langages de programmation est de mettre en œuvre des compilateurs pour eux (ou du moins pour des sous-ensembles importants de langages originaux). Donc, oui, c'est en effet une expérience d'apprentissage utile.
SK-logic

Réponses:

15

Développez vos compétences ET votre portefeuille

À mon avis, ce serait une très bonne expérience d'apprentissage car elle:

  • vous obliger à regarder sous le capot ,
  • vous guider pour apprendre comment les choses se font en interne ,
  • vous encourage à regarder et comparer d'autres implémentations ,
  • garder vos compétences algorithmiques à jour,
  • vous faire coder (et, espérons-le, documenter ) beaucoup, ce qui n'est pas mal non plus,
  • vous donner un projet et une base de code importants que vous pourriez partager en ligne pour que tous les voient, pour:
    • plaisir et gratification personnels ,
    • présenter vos compétences à des employeurs potentiels,
    • communiquer et échanger avec des pairs intéressés par le même domaine,
    • potentiellement laisser grandir en quelque chose de plus ...

Je vois donc cela comme un produit, utile et globalement "en vaut la peine".

Commencer

Maintenant, vous pouvez utiliser différentes approches, en fonction du temps que vous prévoyez de consacrer à cela ...:

  • Si vous avez un délai limité, je dirais plonger et coder la chose.
  • Si vous avez un calendrier plus large, vous pouvez en effet suivre le chemin de longue haleine et écrire des spécifications, des tutoriels, un manuel, etc.

Commencer petit

Je vous recommanderais plutôt de commencer petit . Personne n'a jamais, à ma connaissance, écrit directement une langue géniale comme ça. Vous trébuchez et tombez, échouez, échouez et échouez . Ensuite, vous réussissez, en ce sens que ça marche mais ça craint toujours, alors vous recommencez. Et vous ajoutez de nouvelles fonctionnalités et ça devient finalement cool, mais soudain vous vous rendez compte qu'il y a un concept fondamental que vous avez foiré au début. Alors vous recommencez encore une fois ...

Cela me semble très éducatif.

Allez-y (et partagez le lien avec nous).

Petit, comme "court"

Mais encore une fois, je vous recommande de commencer petit . N'ayez pas peur si les gens disent que cela va prendre beaucoup de code et de temps. Pas nécessairement, si vous ne visez pas une langue compliquée. Alan Kay et d'autres ingénieurs de Xerox PARC auraient développé une première version de Smalltalk qui tient sur une seule feuille de papier , comme un objectif de justesse (lire Xerox PARC: Dealers of Lightning pour plus de détails sur l'histoire du PARC ). Semble une bonne approche, suffisamment pédagogique et contrainte (tant qu'elle ne sacrifie pas la lisibilité).

Petit, comme dans "contraint"

Vous n'avez pas besoin de prendre en charge immédiatement un système de type avancé, des fonctions d'ordre supérieur et un mélange de 42 paradigmes différents. Il pourrait simplement s'agir d'un langage d'expression mathématique.

Réutilisez (et jetez un œil à) les connaissances des autres

Vous pouvez également consulter les outils utilisés pour écrire des langues à partir de zéro. Vous pouvez tout réimplémenter vous-même, mais il vaut peut-être aussi la peine de regarder les lexers et les générateurs d'analyseurs existants, par exemple.

Et évidemment, vous voudrez peut-être lire sur la construction du compilateur dans son ensemble.


Maintenant, si nous modifions votre question pour qu'elle soit "serait-ce l'utilisation la plus productive de votre temps?" cela devient un problème entièrement différent :)

Il y a des tonnes d'autres projets d'apprentissage que vous pourriez entreprendre, et qui formeraient et présenteraient vos compétences aussi bien, sinon mieux. Cela dépend de ce que vous voulez viser.

haylem
la source
2
+1 pour "Alors vous réussissez, en ce sens que ça marche mais ça craint"
Ivan
1
@Ivan: Merci :) C'est probablement une autre bonne partie de l'expérience d'apprentissage: introspection, humilité et persévérance!
haylem
1
Je suis d'accord avec haylem. Le montant que vous apprendrez sur la programmation en général, le fonctionnement des langues, les différentes méthodes de mise en œuvre en vaudra la peine. Oui, vous serez probablement le seul à l'avoir vu, mais ce sera votre petit projet pour animaux de compagnie sur lequel vous travaillez pour vous améliorer.
RJay75
3

Je dis allez-y.

L'implémentation d'un langage de programmation couvre un large éventail de sujets, et vous en apprendrez beaucoup sur la façon dont les choses fonctionnent sous le capot. Vous vivrez probablement une demi-douzaine de tentatives infructueuses, mais l'expérience d'apprentissage est inestimable.

tdammers
la source
2

Concevoir et implémenter un langage de programmation (jouet mais complet) était en fait l'un des exercices (requis?) Dans l'une de mes classes CS de division supérieure (soit la classe de compilation ou l'enquête sur le langage de programmation, j'oublie lequel ...)

Donc, au moins un professeur CS le pensait.

Vous vous retrouverez avec une bien meilleure appréciation pour toutes ces "bizarreries" que les autres langues ont.

hotpaw2
la source
1

Cela prendrait du temps. Envisagez-vous de le maintenir?

La création d'un langage de programmation (y compris la rédaction de projets de son objectif, sa syntaxe, sa philosophie, son interprète, etc.) en vaut-elle le temps, l'effort et l'expérience d'apprentissage? Ou y a-t-il d'autres projets dont je pourrais bénéficier davantage?

Je suppose que votre situation financière n'est pas infinie, alors je dirais que cela ne vaut pas le temps. Vous pouvez passer votre temps sur d'autres projets utiles qui peuvent vous rapporter de l'argent. Gardez à l'esprit que ce n'est peut-être pas la réponse que vous recherchez, mais d'un point de vue logique, je dirais que votre langage de programmation n'est peut-être pas le bon projet pour le moment. Je considérerais cela si vous étiez un informaticien à la retraite et ressentiez le besoin de contribuer à l'industrie. Il semble que vous ayez une forte passion pour la programmation, et c'est formidable. Mais, construire un tout nouveau langage de script? Ce sera un projet extrêmement long. Pendant ce temps, vous auriez pu créer de nombreuses applications que vous pouvez lancer dans votre portefeuille. Je pense que la question est:

Ryan
la source
2
Je ne sais pas ... un gros travail d'amour l'emporte sur vingt applications à jeter qui pourraient vous faire cent dollars chacune.
ChaosPandion
La mise en œuvre de langages spécifiques à un domaine pourrait en fait accélérer considérablement le développement d'un projet pratique. Cela pourrait donc être très gratifiant financièrement et esthétiquement.
SK-logic
1
Certaines personnes créent des choses parce qu'elles aiment créer des choses ... pas parce que ledit acte de création leur rapportera de l'argent.
Jetti
@Jetti. Oui je sais. C'est pourquoi j'ai dit que cette réponse n'était peut-être pas celle que vous recherchiez, et je pourrais vous dire que vous avez une passion pour la programmation. J'apprécie votre contribution cependant, car j'attendais que quelqu'un dise quelque chose comme ce que vous avez dit à propos de cette réponse.
Ryan
@Ryan - désolé d'avoir raté cette partie.
Jetti
-2

Mon conseil est

Ne réinventez pas la roue

L'inspiration de cette métaphore idiomatique réside dans le fait que la roue est l'archétype de l'ingéniosité humaine, à la fois en raison de la puissance et de la flexibilité supplémentaires qu'elle offre à ses utilisateurs, et aussi dans les origines anciennes qui lui permettent de sous-tendre beaucoup, sinon la totalité , de la technologie moderne. Comme il a déjà été inventé et n'est pas considéré comme présentant des défauts de fonctionnement, une tentative de réinvention serait inutile et n'apporterait aucune valeur à l'objet, et serait une perte de temps, détournant les ressources de l'enquêteur d'objectifs éventuellement plus louables. ses compétences pourraient progresser de manière plus substantielle.

Vous devez vous demander:

  • Pourquoi avez-vous besoin de créer un script? Le script existant n'est-il pas assez bon?
  • Allez-vous le maintenir et le publier, et vous êtes sûr que votre script sera utilisé par d'autres programmeurs? Si votre réponse est non, ne le faites pas.

Je comprends que vous voulez avoir plus d'expérience d'apprentissage et pour cette raison, personnellement, je pense que la création d'un cadre vous donnera plus d'expérience d'apprentissage et avec le bonus que vous / votre équipe / communauté pouvez réutiliser plus tard, que la création d'un script.

Et cette bande dessinée xkcd est un peu pertinente, il suffit de changer "standards" en "langue" également:

entrez la description de l'image ici

Rudy
la source
-1, il a clairement dit que ce serait pour une expérience d'apprentissage personnelle.
GrandmasterB
Je veux juste être franc: la création d'un script ne donnera pas une véritable expérience d'apprentissage personnelle et des avantages à lui-même et à la communauté. J'ai également ajouté ma réponse selon laquelle la création d'un cadre lui profitera davantage à lui et à la communauté. Cela ne me dérange pas d'obtenir plus de votes négatifs, si vous pensez que ce n'est pas vrai.
Rudy
2
Oui, vous avez raison - aucun programmeur de première année n'écrira jamais son premier "Hello, World!" - après tout, il serait préférable de simplement télécharger un fichier existant. Et qu'est-ce que le « cadre » dans ce contexte?
SK-logic
5
@Rudy, l'implémentation d'un compilateur ou d'un interprète est une compétence si triviale et basique qui est assez proche de "Hello, World!". C'est pourquoi il est obligatoire dans tout cours CS décent. Et, bien qu'elle soit triviale, cette tâche enseigne un certain nombre de compétences très utiles, applicables dans la pratique dans presque tous les domaines. Inutile de mentionner que la mise en œuvre des DSL est extrêmement importante (rappelez-vous que le truc Hibernate que vous avez mentionné est un DSL, et qu'il contient un certain nombre d'interprètes et de compilateurs intégrés, dont certains sont assez mal implémentés).
SK-logic
3
@ SK-logic - Vous ne contribuez pas à l'estime de moi ici ... :)
ChaosPandion