Qual è il linguaggio di programmazione più ortogonale? [chiuso]

45

Mi trovo più volte infastidito dal dover insegnare a matricole su regole linguistiche speciali (come il decadimento da matrice a puntatore) che non hanno assolutamente nulla a che fare con la programmazione in sé. Quindi mi sono chiesto:

Qual è il linguaggio di programmazione con il più piccolo numero di regole linguistiche speciali, in cui tutto è di prima classe e può essere composto senza fastidiose restrizioni tecniche? Questa lingua non sarebbe la lingua perfetta per l'insegnamento?

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.

    
posta fredoverflow 25.08.2011 - 13:06
fonte

9 risposte

53

Quando si tratta di "pochissime regole", direi, vincerebbe Lisp o Smalltalk. La sintassi nuda può essere scritta su una scheda di birra.

Ma nella mia esperienza, la semplicità di Lisp e Smalltalk non significa che siano semplici da capire e facili da insegnare. Anche se non è il modo "puro", nella mia esperienza lo stile delle "cose da fare" delle lingue imperative è il più facile da capire per i neofiti.

Quindi suggerirei Python, Ruby o qualcosa di simile astrazione : trovi (quasi) ogni concetto base in essi (OK, nessun puntatore), ma non devi capirlo dall'inizio per far funzionare qualcosa.

    
risposta data 25.08.2011 - 13:19
fonte
40

Direi che LISP, o Scheme o una lingua di quella famiglia sarebbe la più ortogonale. Con let , lambda , define , if , cons , list e ( ) puoi insegnare praticamente tutto ciò che vorresti in un corso introduttivo. Non c'è nemmeno bisogno di direttive di pre-elaborazione o int main() e cose del genere che gli studenti includono ma non vedono una ragione.

Nei miei corsi introduttivi di CS, abbiamo fatto molte cose interessanti con Scheme: implementare una macchina di Turing, implementare un computer TC-201, scrivere una grammatica context free, ricorrere alla ricorsione, scrivere merge e insertion sort, implementare i sommatori, e tonnellate di altre cose.

Avevo fatto Java in AP comp sci prima del college, ma Scheme era eccezionale perché potevo ridurre il disordine e concentrarmi sui concetti reali del mio programma. E 'stata una grande lezione e ti consiglio vivamente di provarla per il tuo insegnamento.

    
risposta data 25.08.2011 - 13:24
fonte
17

Pascal è stato specificamente progettato per insegnare la programmazione. È facile da imparare (era uno dei primi linguaggi di programmazione che ho imparato).

    
risposta data 25.08.2011 - 15:49
fonte
14

Logo: è ancora vivo e vegeto !

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

Potrebbe sembrare più un giocattolo che un linguaggio di programmazione, ma non sarebbe un cattivo primo passo per molte persone. La sintassi è molto semplice, ma la tartaruga fornisce una forma più concreta di feedback rispetto alla maggior parte delle lingue / ambienti. Cercando di creare una forma specifica è un ottimo modo per imparare il processo di pensare in anticipo per risolvere un problema.

Se hai un'avversione per le tartarughe, penso davvero che Scheme sia la strada da percorrere.

    
risposta data 25.08.2011 - 23:32
fonte
10

Vorrei proporre sia SML che Haskell. L'ortogonalità è stata un punto di progettazione principale per entrambi. In particolare, il nucleo di SML (ovvero la parte della lingua che non riguarda la modularità) è praticamente un calcolo lambda tipizzato. Di conseguenza, la maggior parte delle funzionalità linguistiche sono guidate dai tipi e i tipi a loro volta guidano i moduli di introduzione ed eliminazione per i valori. Questo è praticamente l'ideale.

Ci sono alcune verruche non di tipo teorico in entrambi i linguaggi (eqtypes in SML, seq in Haskell) ma continuano a battere i pantaloni di qualsiasi altra cosa là fuori in termini di bizzarre interazioni di caratteristiche linguistiche non correlate.

    
risposta data 25.08.2011 - 21:45
fonte
7

Qualunque sia la scelta, vorrei strongmente sollecitare l'insegnamento di una "vera" lingua . Insegnare linguaggi giocattolo funziona per alcune persone, ma per altri è molto, molto frustrante a causa della disconnessione dal mondo reale. Alcune persone hanno bisogno della pertinenza del mondo reale come motivazione per l'apprendimento, e non è il nostro posto per giudicare questa strategia di apprendimento (in realtà, è un malinteso comune).

Questo squalifica linguaggi come Logo, ma anche linguaggi specifici del dominio come Elaborazione . Mentre quest'ultimo è estremamente utile per certe cose (ad esempio per produrre informazioni grafiche), l'uso è troppo limitato per la maggior parte degli usi (e quindi la maggior parte degli utenti). Questo esclude anche Gofer , un sottoinsieme di Haskell inutile. Inoltre esclude Pascal perché sebbene quest'ultimo sia stato usato in progetti reali, non è più rilevante e semplicemente manca di caratteristiche essenziali (ad es. Stringhe incorporate).

Tra le lingue pratiche, sono d'accordo con quelle già citate: i dialoghi Lisp moderni o Scheme, Haskell, Python o Ruby. Personalmente, probabilmente userò Python ma tutte queste scelte hanno la loro parte di vantaggi e svantaggi.

    
risposta data 26.08.2011 - 14:22
fonte
6

Tcl ha 12 regole che regolano l'intera lingua.

[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.

Ci sono pochissimi casi speciali o parole o caratteri riservati.

    
risposta data 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?

Per espandere il mio commento, in Jot tutto è di prima classe (perché è un calcolo lambda) e può essere composto. C'è solo un'istruzione. È un linguaggio di insegnamento assolutamente orribile.

In generale, i tarp di Turing hanno pochissime regole speciali e richiedono di capire molto bene i fondamenti della computazione prima di poter fare qualsiasi cosa. Il linguaggio di insegnamento perfetto consente agli studenti di sperimentare senza estrarre tutti i loro capelli, quindi le astrazioni di livello superiore sono in realtà una buona cosa.

    
risposta data 26.08.2011 - 10:33
fonte
2

Le caratteristiche più importanti in un linguaggio che impari sono:

  • principio di sorpresa minima (PASCAL)

  • leggibilità (Ada)

Secondo me, il secondo trionfa sul primo, dal momento che leggere il codice è ancora più importante della scrittura.

Ancora una volta, scrivo C #, Java, Objective-C e Javascript per vivere, che hanno tutti orribili capricci: D

Tuttavia, se dovessi scegliere una lingua per iniziare, sceglierei C #. È relativamente facile da leggere, ha poche sorprese in sé (sono spesso nascoste negli strumenti / framework MS ...) e una quantità enorme di codice da leggere e documentazione, entrambi essenziali per l'apprendimento.

    
risposta data 26.08.2011 - 00:00
fonte

Leggi altre domande sui tag