Criando uma nova linguagem de script para a experiência de aprendizado? [fechadas]

13

Vale a pena criar uma linguagem de script para minha experiência pessoal de aprendizado?

A razão pela qual pergunto é que já existem tantas linguagens de programação disponíveis, sei que a minha nunca terá nenhum uso real além de fornecer uma boa experiência de aprendizado. No entanto, vejo desvantagens em apenas tentar criar uma linguagem de script como uma experiência de aprendizado: levará muito tempo e esforço para que eu possa estar fazendo algo mais "produtivo".

Criar uma linguagem de programação (incluindo rascunhos do objetivo, sintaxe, filosofia, intérprete, etc.) valeria a pena o tempo, o esforço e a experiência de aprendizado? Ou existem outros projetos dos quais eu poderia me beneficiar mais?

Ivan
fonte
3
Outra opção é implementar um idioma existente. Desenvolvi lentamente um dialeto ECMAScript chamado Machete por mais de um ano e aprendi bastante.
precisa saber é o seguinte
Interessante, eu não tinha pensado nisso.
19411 Ivan Ivan
2
1) Aprenda isso ... www1.idc.ac.il/tecs 2) e isso ... mitpress.mit.edu/sicp
Joe Internet
Você também pode considerar contribuindo para existente projectos V8, SpiderMonkey ou Python
treecoder
3
IMHO, a melhor maneira de aprender novas linguagens de programação é implementar compiladores para eles (ou pelo menos para subconjuntos significativos de linguagens originais). Então, sim, é realmente uma experiência de aprendizado útil.
SK-logic

Respostas:

15

Desenvolva suas habilidades e seu portfólio

Na minha opinião, seria uma experiência de aprendizado muito boa, pois:

  • forçá-lo a olhar sob o capô ,
  • orientá-lo a aprender como as coisas são feitas internamente ,
  • encorajamos você a olhar e comparar outras implementações ,
  • mantenha suas habilidades de algoritmo atualizadas,
  • fazer você codificar (e espero documentar ) muito, o que também não é ruim,
  • oferece um projeto e uma base de código significativos que você pode compartilhar on-line para que todos vejam, para:
    • prazer pessoal e gratificação ,
    • mostrando suas habilidades para potenciais empregadores,
    • comunicar e trocar informações com colegas interessados ​​na mesma área,
    • potencialmente deixá-lo crescer em algo mais ...

Então, eu vejo isso como produto, útil e geral "vale a pena".

Iniciar

Agora você pode usar abordagens diferentes, dependendo de quanto tempo planeja gastar com isso ...:

  • Se você tiver um prazo limitado, eu diria que mergulhe e codifique a coisa.
  • Se você tiver um período de tempo mais amplo, poderá realmente seguir o caminho mais longo e escrever especificações, tutoriais, manuais, etc.

Comece pequeno

Prefiro recomendar que você comece pequeno . Eu nunca soube que ninguém escreveu diretamente uma linguagem incrível assim. Você tropeça e cai, e falha, e falha e falha . Então você obtém sucesso, na medida em que funciona, mas ainda é péssimo, para começar de novo. E você adiciona novos recursos e finalmente está ficando legal, mas de repente você percebe que há um conceito fundamental que você estragou no começo. Então você começa de novo ...

Parece muito educativo para mim.

Vá em frente (e compartilhe o link conosco).

Pequeno, como em "curto"

Mas, novamente, eu recomendo que você comece pequeno . Não tenha medo se as pessoas disserem que vai demorar muito código e tempo. Não necessariamente, se você não busca uma linguagem complicada. Alan Kay e outros engenheiros do Xerox PARC supostamente desenvolveram uma versão inicial do Smalltalk que cabe em uma única folha de papel , como um objetivo de concisão (leia Xerox PARC: Dealers of Lightning para obter detalhes sobre a história do PARC ). Parece uma abordagem boa, educacional e restrita o suficiente (desde que não sacrifique a legibilidade).

Pequeno, como em "restrito"

Você não precisa oferecer suporte imediato a um sistema de tipo avançado, funções de ordem superior e uma mistura de 42 paradigmas diferentes. Poderia ser apenas uma linguagem de expressão matemática.

Reutilize (e espreite) o Conhecimento de Outros

Você também pode querer dar uma olhada nas ferramentas usadas para escrever idiomas do zero. Você pode reimplementar tudo sozinho, mas talvez também valha a pena examinar os lexers e geradores de analisadores existentes, por exemplo.

E, obviamente, você pode querer ler sobre a construção do compilador em geral.


Agora, se modificarmos sua pergunta para "seria o uso mais produtivo do seu tempo?" torna-se uma questão totalmente diferente :)

Existem muitos outros projetos de aprendizado que você poderia enfrentar, e isso treinaria e mostraria suas habilidades igualmente bem, se não melhores. Depende do que você deseja buscar.

haylem
fonte
2
+1 para "Então você é bem-sucedido, na medida em que funciona, mas ainda é péssimo"
Ivan
1
@Ivan: Obrigado :) Essa é provavelmente outra boa parte da experiência de aprendizado: introspecção, humildade e perseverança!
haylem
1
Eu concordo com haylem. A quantidade que você aprenderá sobre programação em geral, como as linguagens funcionam, diferentes métodos de implementar as coisas valerão a pena. Sim, você provavelmente será o único que a verá, mas será o seu pequeno projeto de estimação em que você trabalha para se aprimorar.
precisa saber é o seguinte
3

Eu digo vá em frente.

A implementação de uma linguagem de programação abrange uma ampla gama de tópicos, e você aprenderá muito sobre como as coisas funcionam. Você provavelmente viverá meia dúzia de tentativas fracassadas, mas a experiência de aprendizado é inestimável.

tdammers
fonte
2

Projetar e implementar uma linguagem de programação (de brinquedo, mas completa) foi, na verdade, um dos exercícios (obrigatório?) Em uma das minhas aulas de CS da divisão superior (tanto na classe do compilador quanto na pesquisa da linguagem de programação, esqueço qual ...)

Então, pelo menos um professor de CS achou que sim.

Você terminará com uma apreciação muito melhor por todas essas "peculiaridades" que outros idiomas têm.

hotpaw2
fonte
1

Levaria um tempo para fazer. Você planeja mantê-lo?

Criar uma linguagem de programação (incluindo rascunhos do objetivo, sintaxe, filosofia, intérprete, etc.) valeria a pena o tempo, o esforço e a experiência de aprendizado? Ou existem outros projetos dos quais eu poderia me beneficiar mais?

Estou assumindo que seu status financeiro não é infinito, então diria que não vale a pena. Você pode gastar seu tempo em outros projetos úteis que podem lhe render dinheiro. Lembre-se de que talvez essa não seja a resposta que você está procurando, mas, do ponto de vista lógico, eu diria que sua linguagem de programação pode não ser o projeto certo no momento. Eu consideraria isso se você fosse um cientista da computação aposentado e sentisse a necessidade de contribuir com a indústria. Parece que você tem uma forte paixão pela programação, e isso é ótimo. Mas, construindo uma nova linguagem de script inteira? Esse será um projeto extremamente longo. Nesse período, você poderia ter criado muitos aplicativos para lançar em seu portfólio. Eu acho que a pergunta é:

Ryan
fonte
2
Eu não sei ... um grande trabalho de amor supera vinte aplicativos descartáveis ​​que podem custar cem dólares cada.
ChaosPandion
A implementação de linguagens específicas de domínio pode realmente acelerar significativamente o desenvolvimento de um projeto prático. Portanto, poderia ser bastante gratificante financeiramente e esteticamente agradável.
SK-logic
1
Algumas pessoas criam coisas porque gostam de criar coisas ... não porque o dito ato de criação lhes dê algum dinheiro.
Jetti
@Jetti. Sim eu conheço. Foi por isso que eu disse que essa resposta pode não ser a que você está procurando, e posso dizer que você tem uma paixão pela programação. Agradeço sua opinião, pois estava esperando alguém dizer algo como o que você disse sobre esta resposta.
Ryan
@ Ryan - desculpe, eu perdi essa parte.
Jetti
-2

Meu conselho para você é

Não reinvente a roda

A inspiração para essa metáfora idiomática reside no fato de que a roda é o arquétipo da engenhosidade humana, tanto em virtude do poder e flexibilidade adicionais que ela proporciona a seus usuários, como também nas origens antigas que lhe permitem estar subjacente a muito, se não a todos. , da tecnologia moderna. Como ele já foi inventado e não possui falhas operacionais, uma tentativa de reinventá-lo seria inútil e não agregaria valor ao objeto e seria uma perda de tempo, desviando os recursos do investigador de objetivos possivelmente mais valiosos. quais suas habilidades poderiam avançar mais substancialmente.

Você deve se perguntar:

  • Por que você precisa criar um script? O script existente lá fora não é bom o suficiente?
  • Você irá mantê-lo e publicá-lo e está confiante de que seu script será usado por outros programadores? Se sua resposta for não, não faça.

Entendo que você deseja ter mais experiência de aprendizado e, por esse motivo, pessoalmente, acho que a criação de estrutura fornecerá mais experiência de aprendizado e com o bônus de que você / sua equipe / comunidade poderá reutilizá-la mais tarde, do que criar um script.

E esse quadrinho do xkcd é um pouco relevante, basta alterar "standards" para "language" também:

insira a descrição da imagem aqui

Rudy
fonte
-1, ele disse claramente que isso seria uma experiência de aprendizado pessoal.
GrandmasterB
Só quero ser franco que a criação do script não proporcionará experiência e benefícios pessoais reais de aprendizado para ele e para a comunidade. Também acrescentei minha resposta de que a criação de uma estrutura realmente beneficiará ele e a comunidade. Não me importo de obter mais votos negativos, se você achar que isso não é verdade.
Rudy
2
Sim, você está certo - nenhum programador de calouros jamais escreverá seu primeiro "Olá, Mundo!" Afinal, seria muito melhor fazer o download de um já existente. E o que é " estrutura " neste contexto?
SK-logic
5
@ Rudy, implementar um compilador ou intérprete é uma habilidade tão trivial e básica que é bem parecida com "Olá, Mundo!". É por isso que é obrigatório em qualquer curso de CS decente. E, apesar de trivial, essa tarefa ensina várias habilidades muito úteis, aplicáveis ​​na prática em quase todas as áreas. Desnecessário mencionar que a implementação de DSLs é extremamente importante (lembre-se - o que você mencionou no Hibernate é uma DSL, e há vários intérpretes e compiladores incorporados, alguns dos quais são mal implementados).
SK-logic
3
@ SK-lógica - Você não está ajudando a minha auto-estima aqui ... :)
ChaosPandion