Qual é a linguagem de programação mais ortogonal? [fechadas]

45

Eu me vejo repetidamente incomodado por ter que ensinar calouros sobre regras especiais de linguagem (como decaimento de array a ponteiro) que não têm absolutamente nada a ver com programação em si. Então eu me perguntei:

Qual é a linguagem de programação com o menor número de regras de linguagem especial, onde tudo é de primeira classe e pode ser composto sem restrições técnicas desagradáveis? Essa linguagem não seria perfeita para ensino?

Moderator Note

We're looking for long answers that provide some explanation and context. Don't just list a language: please explain why you think the language answers the question. Answers that don't explain anything will be deleted. See Good Subjective, Bad Subjective for more information.

    
por fredoverflow 25.08.2011 / 13:06
fonte

9 respostas

53

Quando se trata de 'muito poucas regras', eu diria, Lisp ou Smalltalk venceria. A sintaxe nua pode ser escrita em uma guia de cerveja.

Mas na minha experiência, a simplicidade de Lisp e 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 listas de idiomas imperativos é o mais fácil de entender para novatos.

Portanto, eu sugeriria Python, Ruby ou algo semelhante à abstração : você encontra (quase) todos os conceitos básicos neles (OK, sem ponteiros), mas não precisa entendê-lo desde o começo para fazer algo funcionar.

    
por 25.08.2011 / 13:19
fonte
40

Eu diria que o LISP, ou Scheme ou uma linguagem daquela família seria a mais ortogonal. Com let , lambda , define , if , cons , list e ( ) , você pode ensinar praticamente qualquer coisa que desejar em um curso de introdução. Também não há necessidade de diretivas de pré-processamento ou int main() e coisas assim que os alunos apenas incluem, mas não vêem um motivo para isso.

Em meus cursos introdutórios de CS, fizemos um monte de coisas muito legais com Scheme: implementar uma máquina de Turing, implementar um computador TC-201, escrever uma gramática livre de contexto, usar recursão, mesclar gravação e inserção, implementar implementadores, e toneladas de outras coisas.

Eu fiz Java em AP sci sci antes da faculdade, mas o Scheme foi ótimo porque eu poderia cortar a desordem e focar nos conceitos reais do meu programa. Foi uma ótima aula e eu recomendo que você experimente para o seu ensino.

    
por 25.08.2011 / 13:24
fonte
17

O Pascal foi especificamente projetado para ensinar programação. É fácil aprender (foi uma das primeiras linguagens de programação que aprendi).

    
por 25.08.2011 / 15:49
fonte
14

Logotipo: ainda é vivo e funcionando !

; draws a triangle
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120

Pode parecer mais um brinquedo do que uma linguagem de programação, mas não seria um mau primeiro passo 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 à frente para resolver um problema.

Se você tem uma aversão às tartarugas, eu realmente acho que o Scheme é o caminho a ser seguido.

    
por 25.08.2011 / 23:32
fonte
10

Eu proporia SML e Haskell. Ortogonalidade tem sido o principal ponto de design para ambos. Em particular, o núcleo do SML (ou seja, a parte da linguagem não relacionada à modularidade) é praticamente um cálculo lambda tipado. Como resultado, a maioria dos recursos de linguagem é orientada por tipos e os tipos, por sua vez, direcionam os formulários de introdução e eliminação para os valores. Isso é praticamente ideal.

Existem algumas verrugas não-teóricas em ambas as linguagens (eqtypes em SML, seq em Haskell), mas elas ainda superam as calças de qualquer outra coisa lá fora, em termos de interações bizarras de características de linguagem não relacionadas.

    
por 25.08.2011 / 21:45
fonte
7

Qualquer que seja a escolha, recomendo enfaticamente ensinar 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 cabe a nós julgar essa estratégia de aprendizado (na verdade, isso é um equívoco comum).

Isso desqualifica idiomas, como o logotipo, mas também idiomas específicos do domínio, como Processing . 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 Haskell inútil. também exclui Pascal porque embora o último tenha sido usado em projetos reais, ele simplesmente não é mais relevante e simplesmente carece de recursos essenciais (por exemplo, strings embutidas).

Entre os idiomas práticos, eu concordo com os já mencionados: os modernos dialetos Lisp ou Scheme, Haskell, Python ou Ruby. Pessoalmente, eu provavelmente usaria o Python, mas todas essas escolhas têm suas vantagens e desvantagens.

    
por 26.08.2011 / 14:22
fonte
6

O Tcl tem 12 regras que governam todo o idioma.

[1] Commands. 
[2] Evaluation. 
[3] Words. 
[4] Double quotes. 
[5] Argument expansion. 
[6] Braces. 
[7] Command substitution. 
[8] Variable substitution.
[9] Backslash substitution.
[10] Comments. 
[11] Order of substitution. 
[12] Substitution and word boundaries.

Existem muito poucos casos especiais ou palavras reservadas ou caracteres.

    
por 25.08.2011 / 22:03
fonte
4

What is the programming language with the smallest number of special language rules, where everything is first class and can be composed without annoying technical restrictions? Wouldn't such a language be the perfect teaching language?

Para expandir meu comentário, em Jot tudo é de primeira classe (porque é um cálculo lambda) e pode ser composto. Existe apenas uma instrução. É uma linguagem de ensino absolutamente horrível.

Em geral, os tarts de Turing têm muito poucas regras especiais e exigem que você entenda os fundamentos da computação muito bem antes de poder fazer qualquer coisa. A linguagem de ensino perfeita permite que os alunos experimentem sem arrancar todo o cabelo, de modo que abstrações de alto nível são realmente boas.

    
por 26.08.2011 / 10:33
fonte
2

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, já que ler código é ainda mais importante do que escrevê-lo.

Agora, mais uma vez, eu escrevo C #, Java, Objective-C e Javascript para ganhar a vida, todos os quais têm peculiaridades horríveis: D

Ainda assim, se eu tivesse que escolher uma língua para começar, eu escolheria C #. É relativamente fácil de ler, tem poucas surpresas sérias em si (elas estão mais escondidas em ferramentas / frameworks da MS ...) e uma grande quantidade de código para ser lido e documentado, ambos essenciais para um bom aprendizado.

    
por 26.08.2011 / 00:00
fonte