Smalltalk è ampiamente percepito come un vecchio linguaggio moribondo—un antico di un’epoca passata. Niente potrebbe essere più lontano dalla verità.
Smalltalk è ancora molto rilevante. È un eccellente linguaggio didattico per insegnare la programmazione a persone che non hanno un background tecnico. È un linguaggio di prototipazione superlativo per le startup. È un linguaggio aziendale di forza industriale utilizzato da aziende grandi e piccole in tutto il mondo. Ci sono buone ragioni per considerare l’utilizzo di Smalltalk moderno oggi, dal momento che molto è cambiato negli ultimi anni per migliorare le sue prospettive.
Non è necessario utilizzare Smalltalk in produzione oggi, ma provare a codificare qualcosa in Smalltalk e vedere come ci si sente. Dovrebbe sembrare familiare, perché l’implementazione di Smalltalk del paradigma orientato agli oggetti (OO) è così eccellente che ha influenzato un’intera generazione di linguaggi OO, come Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift e così via.
Imparando Smalltalk, capirai come sono nate tutte queste utili funzionalità nelle lingue OO di oggi. Imparare Smalltalk potrebbe anche darti un grande vantaggio nelle abilità di programmazione tra i tuoi coetanei e potrebbe essere un ottimo strumento per insegnare la programmazione ai principianti.
- Cosa ci ha dato Smalltalk?
- Ma come può imparare Smalltalk rendermi uno sviluppatore migliore?
- Come funziona Smalltalk? L’approccio basato sulle immagini alla programmazione
- Tutto in Smalltalk è un oggetto
- Riflessione computazionale in Smalltalk
- Rinascimento di Smalltalk
- L’eredità di Smalltalk: Rendere divertente la programmazione
Cosa ci ha dato Smalltalk?
Smalltalk ha una ricca eredità di contributi all’industria del software. Basta guardare questo elenco di caratteristiche e tecnologie che ha introdotto:
- Smalltalk ha introdotto il mondo alla macchina virtuale del linguaggio (o VM), che consente al software di essere indipendente dalla piattaforma. Questa è la stessa tecnologia che è alla base di Java (JVM) e.NET, così come Android (Dalvik).
- Smalltalk ha anche aperto la strada alla compilazione JIT (just-in-time), una tecnica per migliorare notevolmente le prestazioni del software bytecode come Java.
- Da Smalltalk è arrivato il primo IDE moderno (Integrated Development environment), che includeva un editor di testo, un browser di sistema o di classe, un ispettore di oggetti o proprietà e un debugger. Ciò ha portato ai molti IDE che gli sviluppatori preferiscono oggi, come Visual Studio, Xcode e IntelliJ IDEA. Personalmente, penso che nessuno di questi IDE possa essere paragonato all’IDE di Smalltalk in semplicità, eleganza e velocità di sviluppo; l’originale è ancora il migliore!
- Fin dall’inizio, Smalltalk aveva chiusure, che sono funzioni di prima classe con ambito lessicale. In sostanza, una chiusura è una funzione di callback che può vedere le variabili non locali nella posizione in cui sono state definite. Questo può aiutarti a scrivere codice molto più compatto e leggibile. Le chiusure stanno trovando la loro strada in molti linguaggi importanti, come Java, C# e PHP.
- Smalltalk è stato il primo strumento linguistico a supportare la programmazione “live” e tecniche di debug avanzate come l’ispezione al volo e le modifiche al codice durante l’esecuzione. Oggi, il debug live è possibile in c# con “Modifica e continua” di Visual Studio e in Java con HotSwap.
- Smalltalk ha introdotto MVC (Model-View-Controller) nel mondo. MVC è un modello architettonico software per l’implementazione di interfacce utente. E ‘ popolare con le applicazioni GUI desktop e applicazioni web. In questi giorni, è l’architettura che la maggior parte degli sviluppatori web imparano prima.
- In larga misura, Smalltalk è responsabile dello sviluppo basato su test (o TDD) e della programmazione estrema (o XP), che sono entrambi molto influenti nelle pratiche agili standard di oggi.
- Smalltalk ha reso “duck typing” una parola familiare (beh, se la tua casa ha un programmatore). La digitazione Duck è dove il “controllo del tipo” viene posticipato fino al runtime, quando vengono utilizzate le funzionalità di riflessione per garantire un comportamento corretto. Troviamo anatra digitando in molte lingue oggi, tra cui Java, Python, Common Lisp, Go, Groovy, Objective-C, e PHP.
- Smalltalk ha aperto la strada allo sviluppo di database di oggetti. Mentre non ce l’hanno fatta nel mainstream, i database di oggetti hanno i loro mercati di nicchia. Il miglior esempio di un prodotto di database di oggetti è GemStone / S, che è adatto a sistemi distribuiti scalabili, ad alte prestazioni e multilivello.
- Smalltalk ci ha dato il primo browser refactoring. Naturalmente, il supporto per il refactoring può essere trovato nella maggior parte degli IDE oggi.
- Smalltalk è stato determinante nello sviluppo dell’interfaccia utente grafica (o GUI) e dell’interfaccia utente “what you see is what you get” (WYSIWYG).
Ma come può imparare Smalltalk rendermi uno sviluppatore migliore?
Smalltalk ha diverse caratteristiche killer che erano molto più avanti del loro tempo:
- Persistenza basata su immagini
- Oggetti: tutto è un oggetto e gli oggetti comunicano solo tramite messaggi (l’OO “più puro” e uno dei primi)
- Programmazione”Live”
- Tecniche avanzate di debug come modifiche al codice al volo
- Un’interfaccia IDE semplice e ordinata
- Lingue specifiche del dominio (DSL): L’unico modo in cui Smalltalk funziona, quindi i programmatori devono concentrarsi sul dominio del problema usando un linguaggio e una notazione naturali per quel dominio
E ci sono alcune altre caratteristiche che rendono anche Smalltalk speciale.
In sostanza, il vantaggio chiave di Smalltalk come linguaggio produttivo e strumento di apprendimento è che elimina la maggior parte, se non tutti, dello stress cognitivo nei linguaggi OO tradizionali come Java. Smalltalk non presenta disordine sintattico o funzioni di distrazione. Si ottiene semplicemente fuori del vostro modo in modo da poter concentrare tutta la vostra attenzione sul problema o l’applicazione a portata di mano. Non è che Java sia un cattivo linguaggio per essere più complesso (e avere nomi di classi di 30 caratteri); quello che sto dicendo è che imparare un linguaggio OO non gravato può effettivamente renderti un programmatore Java migliore una volta compreso i suoi concetti OO da un’altra prospettiva.
Eliminare lo stress cognitivo è un obiettivo fondamentale di molte lingue, ad esempio Python, Ruby, Elixir, Elm e Go. Anche se non lo senti, lo stress è lì. Si dice spesso che la programmazione in Smalltalk o Python è un po ‘ come Zen; la tua mente scorre semplicemente senza sforzo con il compito. Questa è la bellezza e il valore della semplicità del linguaggio, e Smalltalk ha questo in picche.
In Smalltalk, OO viene distillato ai suoi concetti più basilari di classi e metodi, metaclassi e riflessione e, soprattutto, passaggio di messaggi. Smalltalk, in virtù della sua purezza e coerenza dell’oggetto, ti darà una comprensione profondamente migliore della programmazione orientata agli oggetti e come usarla al meglio.
La semplicità di Smalltalk lo rende anche un linguaggio didattico ideale per l’apprendimento della programmazione, soprattutto se non si dispone di un background tecnico. La semplicità del linguaggio e degli strumenti ti consente di concentrare le tue energie sull’apprendimento delle tecniche di programmazione, non sulle formalità linguistiche.
Come funziona Smalltalk? L’approccio basato sulle immagini alla programmazione
La principale rivendicazione di Smalltalk alla fama è il suo approccio basato sulle immagini alla creazione di software. Un’immagine è un’istantanea della memoria che contiene tutti gli oggetti nell’applicazione o nel sistema in esecuzione. Incapsula l’intero stato di esecuzione del programma. Un’immagine può essere salvata su disco, e l’esecuzione può poi essere ripreso esattamente da dove si era interrotto!
L’immagine di Smalltalk può sembrare un po ‘ stravagante, ma in realtà ha una forte somiglianza con qualcosa di ampiamente usato in esso oggi: immagini di sistema nella virtualizzazione del sistema operativo come troviamo in VMware e VirtualBox. Bisogna ricordare che Smalltalk era originariamente un sistema operativo stand-alone quando è stato creato a Xerox PARC nel 1970.
L’immagine di Smalltalk ha anche una forte somiglianza con il DOM di una pagina web (Document Object Model). Si noti che un’applicazione web è essenzialmente un sistema a sé stante, sequestrato nel browser web e negato l’accesso diretto al file system dell’host e altre risorse. Quando un browser Web si chiude, lo stato del sito Web dinamico può essere salvato o memorizzato nella cache, e la prossima volta che il browser riprende, il sito Web può essere ripristinato nel browser (con alcune limitazioni).
Anche il foglio di calcolo umile hews strettamente al concetto di immagine. Incapsula l’intero stato di esecuzione. Non può accedere alle risorse di sistema dell’host. Può essere salvato e ripristinato. E si deve sapere che i fogli di calcolo sono ancora utilizzati per sviluppare modelli sofisticati e applicazioni con il proprio linguaggio.
Quindi il concetto di immagine è abbastanza prevalente. È un modo così bello per sviluppare software che una versione del concetto di immagine è stata creata per JavaScript nel kernel Lively.
Tutto in Smalltalk è un oggetto
Nessuna eccezione: tutto è un oggetto. Non esistono tipi di dati primitivi. Non ci sono strutture di controllo come la selezione e l’iterazione! Tutto in Smalltalk viene fatto inviando messaggi agli oggetti. Questo è ciò che rende Smalltalk così semplice, elegante e facile da imparare. Questo è ciò che rende il linguaggio così completamente pulito sintatticamente.
Ad esempio, il seguente frammento di codice estende la classe Number per supportare un’operazione fattoriale non ricorsiva:
Number extend
ifFalse: .
^ (c fold: ) ]]].
7 factorial printNl.
7 my_factorial printNl. "should be the same result as the previous line"
Qui, ifTrue: è un messaggio di parole chiave inviato all’oggetto booleano che risulta dalla valutazione dell’espressione (self < 2). L’argomento del messaggio della parola chiave è un blocco di codice (delineato da parentesi quadre). In realtà, ifTrue: è la prima parte di un messaggio di parole chiave in due parti, la seconda parte è ifFalse:.
Il messaggio unario new viene inviato alla classe OrderedCollection per creare una nuova raccolta. Il messaggio printNl viene inviato al risultato (che è un oggetto) di inviare il messaggio my_factorial al numero 7. Il tutto si legge quasi come un linguaggio naturale!
Riflessione computazionale in Smalltalk
Riflessione in Smalltalk è particolarmente prezioso come mezzo per un programma di ispezionare la propria struttura e il calcolo in fase di esecuzione. Ciò conferisce un enorme potere, consentendo ai programmi di estendersi con nuove classi e metodi o chiedere “chi mi ha inviato questo messaggio?”
La riflessione computazionale viene utilizzata per implementare un modo efficace per gestire gli errori. Quando un oggetto viene inviato un messaggio che non implementa, riceve un messaggio doesNotUnderstand:, insieme a una reificazione del messaggio originale. Ci sono molte cose che il programma può fare con il doesNotUnderstand: messaggio, tra cui si estende con nuove funzionalità!
Il concetto e la riflessione dell’immagine consentono anche a Smalltalk di eliminare il limite dell’applicazione/IDE. Tutto ciò di cui hai bisogno per sviluppare, eseguire il debug ed eseguire l’applicazione è nell’immagine. Non è necessario lasciare mai l’ambiente dell’applicazione. È un approccio completamente olistico allo sviluppo del software che rende tutto più zen e produttivo.
Rinascimento di Smalltalk
Gli ultimi 15 anni di sviluppo nel mondo di Smalltalk hanno reso il linguaggio molto più attraente.
Smalltalk è ora disponibile per la programmazione web front-end utilizzando Amber Smalltalk, che traspiles a JavaScript. Lo sviluppo di Amber avviene interamente nel browser. Una delle cose incredibili di Amber è che quando si importa una libreria JavaScript, i suoi oggetti possono essere trattati proprio come gli oggetti Smalltalk.
Nel 2002, Seaside web framework è stato rilasciato, diventando lo strumento più popolare per lo sviluppo web in Smalltalk. Il suo approccio basato sulla continuazione ha fornito un meccanismo convenzionale di “chiamata / ritorno” per l’applicazione Web. Può aiutare a risolvere problemi come la doppia richiesta e i problemi del pulsante indietro. Abbastanza rivoluzionario per il suo tempo, e ancora non comunemente adottato in altri framework web.
Il progetto Pharo è iniziato nel 2008 per concentrarsi sulle moderne tecniche di ingegneria e sviluppo del software. Ha portato Smalltalk molto più avanti rispetto al precedente progetto open-source chiamato Squeak, che era basato sul venerabile dialetto Smalltalk-80. Il progetto Pharo ha anche generato la ricerca in un nuovo tipo di IDE chiamato Glamorous Toolkit. Si basa sull’idea che il tuo ambiente di programmazione dovrebbe essere “modellabile” per soddisfare le tue esigenze.
L’anno scorso, l’apprezzato Dolphin Smalltalk è diventato open source, offrendo un’altra meravigliosa opzione per gli appassionati di Smalltalk. Dolphin Smalltalk è stato spesso elogiato per avere una delle migliori implementazioni dell’IDE Smalltalk.
L’eredità di Smalltalk: Rendere divertente la programmazione
Quando si utilizzano le numerose strutture dello sviluppo software moderno come JVM, Eclipse IDE, closures,” live coding”, MVC, TDD, VMware e persino la semplice vecchia app web, ripensare alle loro origini in Smalltalk e mantenere un maggiore rispetto per quello che stai facendo. Avere un maggiore apprezzamento per le lingue che si utilizzano, siano essi Objective-C, Python, Ruby, Groovy, Scala, Dart, o Swift.
Lavorare con il linguaggio che ha dato origine a tutte queste grandi caratteristiche e tecnologie offre un’opportunità unica per migliorare notevolmente le tue conoscenze, la tua acuità mentale e la tua produttività come sviluppatore di software. La parola “divertimento” non sempre entra in discussioni sull’ingegneria del software, ma penso che Smalltalk—e i suoi fratelli OO—forniscano la bassa barriera cognitiva e la facilità di programmazione che possono rendere divertente l’ingegneria del software.