Apprendimento di ogni tipo di linguaggio di programmazione


24

Ho sentito più volte che ogni programmatore dovrebbe imparare uno di ogni tipo di lingua. Ora, questo non è necessariamente vero, ma credo sia una buona idea.

Ho imparato un linguaggio procedurale (Perl), ma quali sono gli altri tipi?

Quali sono le differenze tra loro e quali sono alcuni esempi di ciascuno?


8
Dovresti essere consapevole che ci sono innumerevoli modi sovrapposti per classificare le lingue. Il più comune è la programmazione di paradigmi, ma anche in questo caso esistono distinzioni maggiori e minori, molti assi completamente separati e molte lingue rientrano in diversi paradigmi.

1
Mi dimenticherei delle categorie: se sei veramente interessato all'apprendimento da una lingua, suggerirei sia Lisp che Scala, se riesci a gestire quelle due hai coperto molto terreno.
Bill K,

3
Il consiglio di Peter Norvig : impara almeno una mezza dozzina di linguaggi di programmazione. Includi un linguaggio che supporti le astrazioni di classe (come Java o C ++), uno che supporti l'astrazione funzionale (come Lisp o ML), uno che supporti l'astrazione sintattica (come Lisp), uno che supporti le specifiche dichiarative (come i modelli Prolog o C ++), uno che supporta le coroutine (come Icona o Schema) e una che supporta il parallelismo (come Sisal).
legends2k,

Risposte:


34

Anche se la terminologia è tutt'altro che standardizzata, un modo comune per classificare i principali paradigmi di programmazione

  • Procedurale
  • Funzionale
  • Logico
  • Orientato agli oggetti
  • Generico

Sembra che tu sappia già com'è la programmazione procedurale.

In funzionali lingue funzioni vengono trattate come oggetti di prima classe. In altre parole, è possibile passare una funzione come argomento a un'altra funzione oppure una funzione può restituire un'altra funzione. Il paradigma funzionale si basa sul calcolo lambda e esempi di linguaggi funzionali sono LISP, Scheme e Haskel. È interessante notare che JavaScript supporta anche la programmazione funzionale.

Nella programmazione logica si definiscono predicati che descrivono le relazioni tra entità, come president(Obama, USA)o president(Medvedev, Russia). Questi predicati possono diventare molto complicati e coinvolgere variabili, non solo valori letterali. Dopo aver specificato tutti i predicati, è possibile porre domande al proprio sistema e ottenere risposte logicamente coerenti.

La grande idea nella programmazione logica è che invece di dire al computer come calcolare le cose, gli dici quali sono le cose. Esempio: PROLOG.

Il paradigma orientato agli oggetti è in qualche modo un'estensione della programmazione procedurale. Nella programmazione procedurale hai i tuoi dati, che possono essere tipi primitivi, come numeri interi e float, tipi composti, come matrici o elenchi, e tipi definiti dall'utente, come strutture. Hai anche le tue procedure che operano sui dati. Al contrario, in OO hai oggetti, che includono sia dati che procedure. Questo ti consente di avere cose carine come l'incapsulamento, l'eredità e il polimorfismo. Esempi: Smalltalk, C ++, Java, C #.

La programmazione generica è stata introdotta per la prima volta in Ada nel 1983 e si è diffusa dopo l'introduzione dei modelli in C ++. Questa è l'idea che è possibile scrivere codice senza specificare i tipi di dati effettivi su cui opera e che il compilatore lo capisca. Ad esempio invece di scrivere

void swap(int, int);
void swap(float, float);
....

tu scriveresti

void swap(T, T);

una volta e fare in modo che il compilatore generi codice specifico per qualsiasi cosa Tpossa essere, quando swap()viene effettivamente utilizzato nel codice.

La programmazione generica è supportata a vari livelli da C ++, Java e C #.

È importante notare che molti linguaggi, come il C ++, supportano più paradigmi. È anche vero che anche quando si dice che una lingua supporta un particolare paradigma, potrebbe non supportare tutte le caratteristiche del paradigma. Per non parlare del fatto che vi è molto disaccordo su quali caratteristiche sono richieste per un particolare paradigma.


2
In quale categoria rientrerebbe SQL?
Kirk Kuykendall,

@KirkKuykendall SQL sarebbe una lingua specialistica, o "piccola".
Kevin Lacquement,

17
SQL è un linguaggio dichiarativo. Dici quello che vuoi, capisce come ottenerlo. (Le lingue "logiche" come Prolog sono un sottoinsieme diverso delle lingue dichiarative)
Izkata

3
Potremmo avere una descrizione procedurale, al fine di rendere la risposta più completa?
deworde,

3
@Dima Riassunto. Tuttavia, un nitpick relativamente minore: la "programmazione generica" ​​non è nata dall'uso dei template in C ++, ed è anche molto frequentemente usata in linguaggi funzionali come Haskell.
Andres F.

11

I linguaggi di programmazione hanno un numero di caratteristiche prevalentemente ortogonali; il più importante risiede nel paradigma o nei paradigmi che supportano. L' articolo di Wikipedia tratta in modo esauriente i paradigmi; i paradigmi più importanti sono probabilmente questi:

  • Procedurale / strutturato
  • Funzionale
  • Orientato agli oggetti
  • Guidato dagli eventi e orientato all'aspetto
  • Generico
  • Logica

Ma le lingue differiscono anche in altri modi:

  • Sistema di tipizzazione (tipizzazione dinamica vs. statica e tipi forte vs. debole)
  • Compilare il processo e l'ambiente di runtime (interpretato, compilato per codice, completamente compilato)
  • Gestione della memoria (manuale come C / C ++, garbage collection automatica obbligatoria come Java, GC opzionale come D, ...)
  • Disciplina di valutazione (desiderosa o pigra; la maggior parte delle lingue è desiderosa per impostazione predefinita, ma molte forniscono costrutti pigri)
  • Regole di scoping (confronta come funziona scope in PHP, Javascript e C, tre lingue che sono altrimenti abbastanza simili in termini di sintassi)

2

Esistono diversi paradigmi di programmazione attualmente in voga:

  • Orientato agli oggetti - VB.NET, C #, Java rientrano in questa categoria. Il codice è organizzato attorno ad oggetti che presentano comportamenti e dati correlati e che comunicano tra loro passando messaggi.
  • Funzionale - Haskel, Scheme, Lisp e F # rientrano in questa categoria. Funzioni pure che non hanno effetti collaterali. Pensa a funzioni come in matematica. Spesso si può estendere il linguaggio stesso attraverso i suoi costrutti.

Questi sono gli unici altri tipi?
Dinamico

@ perl.j - No, ma questi sono i principali che vedono un uso diffuso in questi giorni. Vedi Wikipedia - Paradigma di programmazione .
Oded,

@ perl.j c'è anche basato su Stack: come Forth e Postscript. Logica: come Prolog.
Jetti,

2
E il tipo zeroth è C;)
yati sagade

La vera domanda è di quanti di questi uno sviluppatore ha bisogno per codificare efficacemente la maggior parte dei problemi di programmazione.
JeffO,

0

Prolog è un linguaggio di programmazione logica ed è relativamente facile iniziare. Richiede un pensiero completamente diverso rispetto alla programmazione procedurale, quindi è bene esplorare quando si tenta di allungare il cervello.

Se vai al college, dovresti seguire un corso sui linguaggi di programmazione in quanto è orientato all'introduzione dei diversi tipi di linguaggi di programmazione e a cosa servono meglio.


0

La maggior parte dei linguaggi tradizionali mescola aspetti della programmazione imperativa, funzionale e dichiarativa. Le lingue di nicchia tendono ad essere più esotiche o introdurre nuove idee interessanti che, per una ragione o per l'altra, non sono adatte alla programmazione per scopi generali. Alcuni esempi non esaustivi:

  • Lingue del foglio di calcolo (Excel, Google Forms): progettato per gestire dati tabulari.
  • Array Languages (APL, J): progettato per elaborare rapidamente array multidimensionali. In J, (+/ % #)&.:*:calcola l'RMS di un array. Famoso per essere conciso, noto per essere illeggibile.
  • Linguaggi di automazione (AutoHotkey, Bash): progettato per semplificare le attività comuni, come la compilazione di moduli, il caricamento di file, ecc.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.