Vladimir diciamo che Smalltalk, oggi piuttosto in disuso, è stato utile in quanto precursore della programmazione ad oggetti e ha influenzato successivi linguaggi (Objective C, C#, Java... linguaggi di programmazione ad oggetti, appunto). Nato nel 1970, l'obiettivo era questo:
Smalltalk è stato creato come un linguaggio per sostenere "un nuovo mondo" di programmazione, ovvero come "la simbiosi dell'umano con il calcolatore"
Nel 2017 Samlltalk è stato votato come il secondo linguaggio più amato (grazie alla sua importanza, non attuale ma l'influenza su ciò che ha contribuito a creare), secondo un sondaggio di Stack Overflow (il più odiato invece Visual Basic e poi VBA, sempre di proprietà Microsoft, fa intendere qualcosa...).
La differenza fra Smalltalk-80 e ANSI Smalltalk la sintetizza chiaramente la pagina Wikipedia inglese:
The language was first generally released as Smalltalk-80. Smalltalk-like languages are in active development and have gathered loyal communities of users around them. ANSI Smalltalk was ratified in 1998 and represents the standard version of Smalltalk.
Quindi ANSI Smalltalk è stato l'aggiornamento della versione iniziale Smalltalk-80, quindi un'estensione, aggiornamento, con alcune migliorie, bug fix, come in genere avviene.
Più in generale, la programmazione orientata agli oggetti (OOP) è uno dei paradigmi di programmazione. Diciamo che diventa comoda, necessaria, per programmi complessi, dove è richiesta una certa modularità e astrazione concettuale: crei un'entità, "oggetto" (di solito viene definito "classe") e lo richiami, gestisci. Molto più funzionale e concettualmente chiaro rispetto a creare una serie di variabili separate indipendenti, che poi non sai più come far interagire fra loro. Esempio semplice: crei una classe "persona", che contiene una stringa (array di caratteri) che è il nome, un numero intero che è l'età, altre variabili che vuoi, eventuali funzioni/procedure che magari interagiscono con queste variabili (che ne so, se l'età<18 minorenne, altrimenti maggiorenne). Definita la classe "persona", vuoi creare un array, insieme di persone, un linguaggio di programmazione ad oggetti ti consente di farlo. Quindi strutturare il codice in questo modo, con modularità, aiuta nella lettura e manutenzione, organizzazione del codice per progetti di grandi dimensioni.
Ovviamente i linguaggi di programmazione ad oggetti attuali sono altri, più moderni e funzionali, principalmente Python, C#, C++, Java.