¿Crear un nuevo lenguaje de secuencias de comandos para la experiencia de aprendizaje? [cerrado]

13

¿Vale la pena crear un lenguaje de script para mi propia experiencia personal de aprendizaje?

La razón por la que pregunto es que ya hay tantos lenguajes de programación disponibles, sé que el mío nunca tendrá un uso real que no sea proporcionar una buena experiencia de aprendizaje. Sin embargo, veo inconvenientes con solo tratar de crear un lenguaje de secuencias de comandos como una experiencia de aprendizaje: tomará mucho tiempo y esfuerzo en lo que podría hacer algo más "productivo".

¿Valdría la pena el tiempo, el esfuerzo y la experiencia de aprendizaje para crear un lenguaje de programación (incluida la redacción de borradores de su propósito, sintaxis, filosofía, intérprete, etc.)? ¿O hay otros proyectos de los que podría beneficiarme más?

Ivan
fuente
3
Otra opción es implementar un lenguaje existente. Lentamente desarrollé un dialecto ECMAScript llamado Machete durante más de un año y aprendí bastante.
ChaosPandion
Interesante, no había pensado en eso.
Ivan
2
1) Aprenda esto ... www1.idc.ac.il/tecs 2) y esto ... mitpress.mit.edu/sicp
Joe Internet
también podría considerar contribuir a proyectos existentes v8, SpiderMonkey o Python
treecoder
3
En mi humilde opinión, la mejor manera de aprender nuevos lenguajes de programación es implementar compiladores para ellos (o al menos para subconjuntos significativos de lenguajes originales). Entonces, sí, de hecho es una experiencia de aprendizaje útil.
SK-logic

Respuestas:

15

Desarrolle sus habilidades y su cartera

En mi opinión, sería una muy buena experiencia de aprendizaje, ya que:

  • obligarte a mirar debajo del capó ,
  • guiarlo para aprender cómo se hacen las cosas internamente ,
  • animarlo a mirar y comparar otras implementaciones ,
  • mantén tus habilidades algorítmicas al día,
  • hacerte codificar (y con suerte documentar ) mucho, lo cual tampoco es malo,
  • darle un proyecto significativo y una base de código que podría compartir en línea para que todos lo vean, para:
    • disfrute personal y gratificación ,
    • mostrando sus habilidades a posibles empleadores,
    • comunicarse e intercambiar con compañeros interesados ​​en la misma área,
    • potencialmente dejarlo crecer en algo más ...

Así que veo esto como producto, útil y en general "vale la pena".

Empezar

Ahora puede usar diferentes enfoques, dependiendo de cuánto tiempo planea gastar en esto ...:

  • Si tiene un período de tiempo limitado, yo diría que se sumerja y codifique la cosa.
  • Si tiene un período de tiempo más amplio, entonces podría ir por el camino largo y escribir especificaciones, tutoriales, manuales, etc.

Empieza pequeño

Preferiría que comenzaras con algo pequeño . Que yo sepa, nadie ha escrito directamente un lenguaje asombroso como ese. Tropiezas y caes, y fallas, y fallas y fallas . Luego tienes éxito, ya que funciona pero todavía apesta, así que comienzas de nuevo una vez más. Y agregas nuevas funciones y finalmente se está volviendo genial, pero de repente te das cuenta de que hay un concepto fundamental que arruinaste al principio. Entonces comienzas de nuevo una vez más ...

Me parece muy educativo.

Adelante (y comparte el enlace con nosotros).

Pequeño, como en "corto"

Pero nuevamente, te recomiendo que comiences con algo pequeño . No tenga miedo si la gente dice que tomará mucho código y tiempo. No necesariamente, si no buscas un lenguaje complicado. Alan Kay y otros ingenieros de Xerox PARC supuestamente desarrollaron una versión inicial de Smalltalk que cabía en una sola hoja de papel , como un objetivo para la concisión (lea Xerox PARC: Dealers of Lightning para obtener detalles sobre la historia del PARC ). Parece un enfoque bueno, educativo y suficientemente limitado (siempre que no sacrifique la legibilidad).

Pequeño, como en "restringido"

No es necesario que admita de inmediato un sistema de tipos avanzado, funciones de orden superior y una combinación de 42 paradigmas diferentes. Podría ser simplemente un lenguaje de expresión matemática.

Reutilizar (y echar un vistazo) al conocimiento de los demás

También es posible que desee echar un vistazo a las herramientas que se utilizan para escribir idiomas desde cero. Puede volver a implementar todo usted mismo, pero tal vez también valga la pena mirar los generadores de analizadores y analizadores existentes, por ejemplo.

Y, obviamente, es posible que desee leer sobre la construcción del compilador en general.


Ahora, si modificamos su pregunta para que sea "¿sería el uso más productivo de su tiempo?" se convierte en un tema completamente diferente :)

Hay muchos otros proyectos de aprendizaje que podría abordar, y que entrenarían y mostrarían sus habilidades igualmente bien, si no mejor. Depende de lo que quieras apuntar.

haylem
fuente
2
+1 para "Entonces tienes éxito, ya que funciona pero todavía apesta"
Ivan
1
@Ivan: Gracias :) Esa es probablemente otra buena parte de la experiencia de aprendizaje: introspección, humildad y perseverancia.
haylem
1
Estoy de acuerdo con haylem. La cantidad que aprenderá acerca de la programación en general, cómo funcionan los idiomas, los diferentes métodos de implementación valdrán la pena. Sí, probablemente serás el único que lo vea, pero se convertirá en tu pequeño proyecto de mascota en el que trabajas para mejorar.
RJay75
3

Yo digo adelante.

La implementación de un lenguaje de programación cubre una amplia gama de temas, y aprenderá mucho sobre cómo funcionan las cosas bajo el capó. Probablemente vivirá media docena de intentos fallidos, pero la experiencia de aprendizaje es invaluable.

tdammers
fuente
2

Diseñar e implementar un lenguaje de programación (¿juguete pero completo?) Fue en realidad uno de los ejercicios (¿obligatorios?) En una de mis clases de CS de división superior (ya sea la clase de compilador o la encuesta del lenguaje de programación, olvido cuál ...)

Entonces, al menos un profesor de CS pensó que sí.

Terminará con una apreciación mucho mejor por todas esas "peculiaridades" que tienen otros idiomas.

hotpaw2
fuente
1

Llevaría un tiempo hacerlo. ¿Planeas mantenerlo?

¿Valdría la pena el tiempo, el esfuerzo y la experiencia de aprendizaje para crear un lenguaje de programación (incluida la redacción de borradores de su propósito, sintaxis, filosofía, intérprete, etc.)? ¿O hay otros proyectos de los que podría beneficiarme más?

Supongo que su estado financiero no es infinito, por lo que diría que no vale la pena el tiempo. Puedes dedicar tu tiempo a otros proyectos útiles que pueden hacerte ganar dinero. Tenga en cuenta que esta puede no ser la respuesta que está buscando, pero desde un punto de vista lógico, diría que su lenguaje de programación puede no ser el proyecto correcto en este momento. Lo consideraría si fuera un informático retirado y sintiera la necesidad de contribuir a la industria. Parece que tienes una gran pasión por la programación, y eso es genial. Pero, ¿construyendo un nuevo lenguaje de scripting? Ese será un proyecto extremadamente largo. En ese momento, podría haber creado muchas aplicaciones que puede incluir en su cartera. Creo que la pregunta es:

Ryan
fuente
2
No lo sé ... una gran labor de amor triunfa sobre veinte aplicaciones descartables que podrían hacerte cien dólares cada una.
ChaosPandion
La implementación de lenguajes específicos de dominio en realidad podría acelerar significativamente el desarrollo de un proyecto práctico. Por lo tanto, podría ser bastante gratificante tanto financieramente como estéticamente agradable.
SK-logic
1
Algunas personas crean cosas porque les gusta crear cosas ... no porque dicho acto de creación les dará algo de dinero.
Jetti
@Jetti. Sí, lo sé. Es por eso que dije que esta respuesta podría no ser la que estás buscando, y podría decirte que te apasiona la programación. Sin embargo, agradezco su aporte, ya que estaba esperando que alguien dijera algo como lo que ha dicho sobre esta respuesta.
Ryan
@ Ryan - lo siento, me perdí esa parte.
Jetti
-2

Mi consejo para ti es

No reinventes la rueda

La inspiración para esta metáfora idiomática reside en el hecho de que la rueda es el arquetipo del ingenio humano, tanto en virtud del poder agregado y la flexibilidad que ofrece a sus usuarios, como también en los orígenes antiguos que le permiten subyacer mucho, si no todos , de tecnología moderna. Como ya se ha inventado, y no se considera que tenga fallas operativas, un intento de reinventarlo no tendría sentido y no agregaría valor al objeto, y sería una pérdida de tiempo, desviando los recursos del investigador de objetivos posiblemente más valiosos que sus habilidades podrían avanzar más sustancialmente.

Deberías preguntarte a ti mismo:

  • ¿Por qué necesitas crear un script? ¿El script existente no es lo suficientemente bueno?
  • ¿Lo mantendrá y publicará, y está seguro de que su script será utilizado por otros programadores? Si su respuesta es no, no lo haga.

Entiendo que desea tener más experiencia de aprendizaje y, por esa razón, personalmente, creo que crear un marco le brindará más experiencia de aprendizaje y con la ventaja de que usted / su equipo / comunidad puede reutilizarlo más tarde que crear un script.

Y este cómic xkcd es un poco relevante, simplemente cambie los "estándares" a "lenguaje" también:

ingrese la descripción de la imagen aquí

Rudy
fuente
-1, dijo claramente que esto sería para una experiencia de aprendizaje personal.
GrandmasterB
Solo quiero ser sincero de que crear un guión no le dará una experiencia de aprendizaje personal real y un beneficio para sí mismo y para la comunidad. También agregué mi respuesta de que crear un marco realmente lo beneficiaría más a él y a la comunidad. No me importa obtener más votos negativos, si crees que no es cierto.
Rudy
2
Sí, tienes razón: ningún programador de primer año jamás escribirá su primer "¡Hola, mundo!" - después de todo, sería mucho mejor simplemente descargar uno existente. ¿Y qué es el " marco " en este contexto?
SK-logic
55
@Rudy, implementar un compilador o un intérprete es una habilidad tan trivial y básica que está muy cerca de "¡Hola, Mundo!". Por eso es obligatorio en cualquier curso de CS decente. Y, a pesar de ser trivial, esta tarea enseña una serie de habilidades muy útiles, aplicables en la práctica en casi cualquier área. No es necesario mencionar que la implementación de DSL es extremadamente importante (tenga en cuenta que esa cosa de Hibernate que ha mencionado es un DSL, y hay una serie de intérpretes y compiladores integrados, algunos de los cuales están bastante mal implementados).
SK-logic
3
@ SK-logic - No estás ayudando a mi autoestima aquí ... :)
ChaosPandion