Sinto-me repetidamente aborrecido por ter que ensinar calouros sobre regras especiais de linguagem (como decaimento de array para ponteiro) que não têm absolutamente nada a ver com a programação em si. Então eu me perguntava:
Qual é a linguagem de programação com o menor número de regras especiais de linguagem, onde tudo é de primeira classe e pode ser composto sem restrições técnicas irritantes? Essa língua não seria a linguagem de ensino perfeita?
Nota do moderador
Estamos procurando respostas longas que forneçam alguma explicação e contexto. Não basta listar um idioma: explique por que você acha que o idioma responde à pergunta. Respostas que não explicam nada serão excluídas. Consulte Subjetivo bom, Subjetivo ruim para obter mais informações.
programming-languages
fredoverflow
fonte
fonte
I=SKK
. O máximo em idiomas ortogonais são idiomas de instrução única, como Jot e RSSB.Respostas:
Quando se trata de "muito poucas regras", eu argumentaria que Lisp ou Smalltalk venceria. A sintaxe vazia pode ser escrita em uma guia de cerveja.
Mas, na minha experiência, a simplicidade do Lisp e do Smalltalk não significa que eles sejam simples de entender e fáceis de ensinar. Embora não seja o caminho "puro", na minha experiência, o estilo de lista de tarefas das linguagens imperativas é o mais fácil de entender para iniciantes.
Portanto, sugiro Python, Ruby ou algo de abstração semelhante : você encontra (quase) todos os conceitos básicos neles (OK, sem ponteiros), mas não precisa entendê-lo desde o início para fazer algo funcionar.
fonte
Eu diria que o LISP, ou Scheme ou uma linguagem dessa família seria a mais ortogonal. Com
let
,lambda
,define
,if
,cons
,list
, e(
)
você pode ensinar praticamente qualquer coisa que você iria querer em um curso de introdução. Também não há necessidade de diretivas de pré-processamento ouint main()
coisas do tipo que os alunos apenas incluam, mas não veem uma razão para isso.Nos meus cursos introdutórios de CS, fizemos muitas coisas realmente interessantes com o Scheme: implementar uma máquina de Turing, implementar um computador TC-201, escrever uma gramática livre de contexto, usar recursão, escrever mesclagem e inserção, implementar somadores e toneladas de outras coisas.
Eu tinha feito Java na AP compi antes da faculdade, mas Scheme era ótimo porque eu podia reduzir a confusão e me concentrar nos conceitos reais do meu programa. Foi uma ótima aula e eu recomendo que você experimente para ensinar.
fonte
Pascal foi projetado especificamente para ensinar programação. É fácil de aprender (foi uma das primeiras linguagens de programação que aprendi).
fonte
Logo: ainda está vivo e chutando !
Pode parecer mais um brinquedo do que uma linguagem de programação, mas não seria um primeiro passo ruim para muitas pessoas. A sintaxe é muito simples, mas a tartaruga fornece uma forma mais concreta de feedback do que a maioria dos idiomas / ambientes. Tentar criar uma forma específica é uma ótima maneira de aprender o processo de pensar adiante para resolver um problema.
Se você tem aversão às tartarugas, acho que Scheme é o caminho a seguir.
fonte
Eu proporia o SML e o Haskell. A ortogonalidade tem sido o principal ponto de projeto para ambos. Em particular, o núcleo do SML (ou seja, a parte da linguagem que não se preocupa com a modularidade) é praticamente um cálculo lambda digitado. Como resultado, a maioria dos recursos de idioma é orientada por tipos e os tipos, por sua vez, orientam os formulários de introdução e eliminação dos valores. Isso é praticamente ideal.
Existem algumas verrugas não-teóricas em ambos os idiomas (eqtypes em SML, seq em Haskell), mas elas ainda superam qualquer coisa por aí em termos de interações bizarras de recursos de linguagem não relacionados.
fonte
Qualquer que seja a escolha, eu recomendaria fortemente o ensino de uma linguagem "real" . O ensino de línguas de brinquedo funciona para algumas pessoas, mas para outras é muito, muito frustrante devido à desconexão com o mundo real. Algumas pessoas precisam de relevância no mundo real como motivação para o aprendizado, e não é nosso lugar para julgar essa estratégia de aprendizado (na verdade, esse é um equívoco comum).
Isso desqualifica idiomas como logotipo, mas também idiomas específicos de domínio como processamento . Enquanto o último é extremamente útil para certas coisas (por exemplo, produzindo gráficos de informação), o uso é muito restrito para a maioria dos usos (e, portanto, a maioria dos usuários). Isso também exclui o Gofer , um subconjunto inútil de Haskell. Ele também exclui Pascal porque, embora o último tenha sido usado em projetos reais, ele não é mais relevante e simplesmente não possui recursos essenciais (por exemplo, seqüências de caracteres embutidas).
Das linguagens práticas, eu concordo com as já mencionadas: dialetos Lisp ou Scheme modernos, Haskell, Python ou Ruby. Pessoalmente, eu provavelmente usaria Python, mas todas essas opções têm sua parcela de vantagens e desvantagens.
fonte
O Tcl possui 12 regras que governam o idioma inteiro.
Existem muito poucos casos especiais, palavras ou caracteres reservados.
fonte
Para expandir meu comentário, no Jot, tudo é de primeira classe (porque é um cálculo lambda) e pode ser composto. Existe apenas uma instrução. É uma linguagem de ensino absolutamente terrível.
Em geral, os tarpits de Turing têm muito poucas regras especiais e exigem que você compreenda bem os fundamentos da computação antes de poder fazer qualquer coisa. A linguagem de ensino perfeita permite que os alunos experimentem sem puxar todo o cabelo, então abstrações de nível superior são realmente boas.
fonte
Os recursos mais importantes em um idioma que você aprende são:
princípio da menor surpresa (PASCAL)
legibilidade (Ada)
Na minha opinião, o segundo supera o primeiro, pois a leitura do código é ainda mais importante do que escrevê-lo.
Agora, novamente, eu escrevo C #, Java, Objective-C e Javascript para viver, todos com peculiaridades horríveis: D
Ainda assim, se eu tivesse que escolher um idioma para começar, eu usaria o C #. É relativamente fácil de ler, possui poucas surpresas sérias (elas geralmente estão ocultas nas ferramentas / estruturas do MS ...) e uma quantidade enorme de código a ser lido e documentação, os quais são essenciais para se aprender bem.
fonte