Creazione di un nuovo linguaggio di scripting per l'esperienza di apprendimento? [chiuso]


13

Vale la pena creare un linguaggio di scripting per la mia personale esperienza di apprendimento?

Il motivo per cui chiedo è che ci sono già così tanti linguaggi di programmazione disponibili, so che il mio non avrà mai un reale utilizzo se non quello di fornire una buona esperienza di apprendimento. Tuttavia, vedo degli svantaggi nel provare a fare un linguaggio di scripting come un'esperienza di apprendimento: ci vorrà molto tempo e sforzi in cui potrei fare qualcosa di più "produttivo".

Creare un linguaggio di programmazione (compresa la stesura di bozze del suo scopo, sintassi, filosofia, interprete, ecc.) Meriterebbe il tempo, lo sforzo e l'esperienza di apprendimento? O ci sono altri progetti di cui potrei beneficiare maggiormente?


3
Un'altra opzione è implementare una lingua esistente. Ho sviluppato lentamente un dialetto ECMAScript chiamato Machete per più di un anno e ho imparato parecchio.
ChaosPandion,

Interessante, non ci avevo pensato.
Ivan,

2
1) Impara questo ... www1.idc.ac.il/tecs 2) e questo ... mitpress.mit.edu/sicp
Joe Internet

potresti anche prendere in considerazione la possibilità di contribuire ai progetti esistenti v8, SpiderMonkey o Python
treecoder,

3
IMHO, il modo migliore per imparare nuovi linguaggi di programmazione è implementare compilatori per loro (o almeno per sottoinsiemi significativi di linguaggi originali). Quindi sì, è davvero un'esperienza di apprendimento utile.
SK-logic,

Risposte:


15

Costruisci le tue abilità E il tuo portafoglio

Secondo me sarebbe un'ottima esperienza di apprendimento in quanto:

  • ti costringono a guardare sotto il cofano ,
  • guidarti ad imparare come vengono fatte le cose internamente ,
  • incoraggiarti a guardare e confrontare altre implementazioni ,
  • mantieni aggiornate le tue abilità algoritmiche ,
  • farti codificare (e possibilmente documentare ) molto, il che non è neanche male,
  • darti un progetto e una base di codice significativi che puoi condividere online affinché tutti possano vederli, per:
    • godimento personale e gratificazione ,
    • mostrando le tue capacità ai potenziali datori di lavoro,
    • comunicare e scambiare con colleghi interessati alla stessa area,
    • potenzialmente lasciarlo crescere in qualcosa di più ...

Quindi vedo questo come prodotto, utile e nel complesso "ne vale la pena".

Iniziare

Ora puoi usare approcci diversi, a seconda di quanto tempo pensi di spendere per questo ...:

  • Se hai un periodo di tempo limitato, direi di immergermi e codificare la cosa.
  • Se hai un periodo di tempo più ampio, potresti davvero seguire la strada lunga e scrivere specifiche, tutorial, manuali, ecc ...

Inizia in piccolo

Preferirei raccomandarti di iniziare in piccolo . Nessuno ha mai, che io conosca, scritto direttamente un linguaggio fantastico proprio così. Inciampi e cadi, e fallisci, e fallisci e fallisci . Quindi ci riesci, in quanto funziona ma fa ancora schifo, quindi ricomincia ancora una volta. E aggiungi nuove funzionalità e finalmente sta diventando interessante, ma all'improvviso ti rendi conto che c'è un concetto fondamentale che hai rovinato all'inizio. Quindi ricomincia ancora una volta ...

Mi sembra molto educativo.

Vai avanti (e condividi il link con noi).

Piccolo, come in "corto"

Ma di nuovo, ti consiglio di iniziare in piccolo . Non aver paura se la gente dice che ci vorrà molto tempo e codice. Non necessariamente, se non miri a un linguaggio complicato. Alan Kay e altri ingegneri PARC di Xerox avrebbero sviluppato una prima versione di Smalltalk che si adattava a un singolo foglio di carta , come obiettivo di terseness (leggi Xerox PARC: Dealers of Lightning per dettagli sulla storia del PARC ). Sembra un approccio buono, educativo e abbastanza limitato (purché non sacrifichi la leggibilità).

Piccolo, come in "vincolato"

Non è necessario supportare subito un sistema di tipo avanzato, funzioni di ordine superiore e un mix di 42 paradigmi diversi. Potrebbe essere solo un linguaggio di espressione matematica.

Riutilizzare (e sbirciare) le altre conoscenze

Potresti anche dare un'occhiata agli strumenti che sono usati per scrivere lingue da zero. Puoi reimplementare tutto da solo, ma forse vale anche la pena guardare i lexer e i generatori di parser esistenti, per esempio.

E ovviamente, potresti voler leggere sulla costruzione del compilatore in generale.


Ora, se modifichiamo la tua domanda in "sarebbe l'uso PIÙ produttivo del tuo tempo?" diventa un problema completamente diverso :)

Ci sono un sacco di altri progetti di apprendimento che potresti affrontare e che potrebbero allenare e mostrare le tue abilità allo stesso modo, se non meglio. Dipende da cosa vuoi mirare.


2
+1 per "Allora hai successo, in quanto funziona ma fa ancora schifo"
Ivan

1
@Ivan: Grazie :) Questa è probabilmente un'altra buona parte dell'esperienza di apprendimento: introspezione, umiltà e perseveranza!
haylem,

1
Sono d'accordo con haylem. La quantità che imparerai sulla programmazione in generale, su come funzionano le lingue, vari metodi di attuazione delle cose ne varrà la pena. Sì, probabilmente sarai l'unico che lo vedrà mai, ma diventerà il tuo piccolo progetto su cui lavori per migliorarti.
RJay75,

3

Dico di andare avanti.

L'implementazione di un linguaggio di programmazione copre una vasta gamma di argomenti e imparerai molto su come funzionano le cose sotto il cofano. Probabilmente vivrai una mezza dozzina di tentativi falliti, ma l'esperienza di apprendimento è preziosa.


2

La progettazione e l'implementazione di un linguaggio di programmazione (giocattolo ma completo) era in realtà uno degli esercizi (obbligatori?) In una delle mie classi CS della divisione superiore (o la classe del compilatore o l'indagine del linguaggio di programmazione, dimentico quale ...)

Quindi almeno un professore di CS lo ha pensato.

Concluderai con un apprezzamento molto migliore per tutte quelle "stranezze" che altre lingue hanno.


1

Ci vorrebbe un po 'di tempo per farlo. Pensi di mantenerlo?

Creare un linguaggio di programmazione (compresa la stesura di bozze del suo scopo, sintassi, filosofia, interprete, ecc.) Meriterebbe il tempo, lo sforzo e l'esperienza di apprendimento? O ci sono altri progetti di cui potrei beneficiare maggiormente?

Suppongo che il tuo stato finanziario non sia infinito, quindi direi che non vale la pena. Puoi trascorrere il tuo tempo in altri progetti utili che possono farti guadagnare. Tieni presente che questa potrebbe non essere la risposta che stai cercando, ma da un punto di vista logico, direi che il tuo linguaggio di programmazione potrebbe non essere il progetto giusto al momento. Lo prenderei in considerazione se tu fossi uno scienziato informatico in pensione e sentissi la necessità di contribuire al settore. Sembra che tu abbia una forte passione per la programmazione, ed è grandioso. Ma costruire un linguaggio di scripting completamente nuovo? Sarà un progetto estremamente lungo. In quel momento avresti potuto creare molte applicazioni da inserire nel tuo portafoglio. Penso che la domanda sia:


2
Non lo so ... una grande manodopera d'amore batte le app a venti passi di distanza che potrebbero farti guadagnare cento dollari l'una.
ChaosPandion,

L'implementazione di linguaggi specifici di dominio potrebbe effettivamente accelerare notevolmente lo sviluppo di un progetto pratico. Quindi potrebbe essere abbastanza gratificante finanziariamente ed esteticamente piacevole.
SK-logic,

1
Alcune persone creano cose perché a loro piace creare cose ... non perché il detto atto della creazione li farà guadagnare un po 'di soldi.
Jetti,

@Jetti. Si, lo so. Ecco perché ho detto che questa risposta potrebbe non essere quella che cercavi e potrei dirti che hai una passione per la programmazione. Apprezzo il tuo contributo però, mentre aspettavo che qualcuno dicesse qualcosa di simile a quello che hai detto su questa risposta.
Ryan,

@Ryan - scusa se ho perso quella parte.
Jetti,

-2

Il mio consiglio è per te

Non reinventare la ruota

L'ispirazione per questa metafora idiomatica sta nel fatto che la ruota è l'archetipo dell'ingegno umano, sia in virtù del potere aggiunto e della flessibilità che offre ai suoi utenti, sia anche nelle origini antiche che gli consentono di sostenere molto, se non tutti , di tecnologia moderna. Poiché è già stato inventato e non si ritiene che abbia alcun difetto operativo, un tentativo di reinventarlo sarebbe inutile e non aggiungerebbe alcun valore all'oggetto, e sarebbe una perdita di tempo, deviando le risorse dell'investigatore da obiettivi forse più meritevoli che le sue abilità potrebbero avanzare in modo più sostanziale.

Dovresti chiederti:

  • Perché devi creare uno script? Lo script esistente non è abbastanza buono?
  • Lo manterrai e lo pubblicherai e sei sicuro che il tuo script verrà utilizzato da altri programmatori? Se la tua risposta è no, non farlo.

Capisco che vuoi avere più esperienza di apprendimento e per questo motivo personalmente penso che la creazione di un framework ti darà più esperienza di apprendimento e con il bonus che tu / il tuo team / comunità potete riutilizzare in seguito, rispetto alla creazione di uno script.

E questo fumetto di xkcd è un po 'rilevante, basta cambiare "standard" in "lingua" anche:

inserisci qui la descrizione dell'immagine


-1, ha detto chiaramente che questo sarebbe per un'esperienza di apprendimento personale.
GrandmasterB,

Voglio solo essere sincero sul fatto che la creazione di una sceneggiatura non offrirà un'esperienza di apprendimento personale reale e benefici per se stesso e la comunità. Ho anche aggiunto la mia risposta che la creazione di un framework andrà a beneficio di lui e della comunità. Non mi dispiace ottenere più voti negativi, se ritieni che non sia vero.
Rudy,

2
Sì, hai ragione - nessun programmatore matricola potrà mai scrivere il suo primo "Hello, World!" - dopo tutto, sarebbe molto meglio scaricarne uno esistente. E cos'è il " framework " in questo contesto?
SK-logic,

5
@Rudy, implementare un compilatore o un interprete è un'abilità così banale e di base che è abbastanza vicina a "Hello, World!". Ecco perché è obbligatorio in qualsiasi corso CS decente. E, nonostante sia banale, questo compito insegna una serie di abilità molto utili, applicabili nella pratica in quasi ogni area. Inutile dire che l'implementazione di DSL è estremamente importante (badate bene: Hibernate è un DSL, e in esso ci sono un certo numero di interpreti e compilatori incorporati, alcuni dei quali sono implementati in modo piuttosto scadente).
SK-logic,

3
@ SK-logic - Non stai aiutando la mia autostima qui ... :)
ChaosPandion
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.