Como aprender Smalltalk pode fazer de você um desenvolvedor melhor

Abaixo uma tradução do artigo How learning Smalltalk can make you a better developer do Richard Eng, Campaign Director, Smalltalk Renaissance 

O Smalltalk é amplamente percebido como uma linguagem antiga e moribunda – uma antiguidade de uma época passada. Nada poderia estar mais longe da verdade.

Smalltalk ainda é muito relevante. É uma excelente linguagem instrucional para ensinar programação a pessoas que não têm formação técnica. É uma linguagem de prototipagem superlativa para startups. É uma linguagem empresarial de força industrial usada por grandes e pequenas empresas em todo o mundo . Há boas razões para considerar o uso do Smalltalk moderno hoje, já que muita coisa mudou nos últimos anos para melhorar suas perspectivas.

Você não precisa usar o Smalltalk em produção hoje, mas tente codificar algo no Smalltalk e veja qual é a sensação. Isto deve ser familiar, porque a implementação do paradigma orientado a objeto (OO) do Smalltalk é tão excelente que influenciou toda uma geração de linguagens OO, como Objective-C, Python, Ruby, CLOS, PHP5, Perl6 , Erlang. , Groovy, Scala, Dart, Swift e assim por diante.

Ao aprender Smalltalk, você entenderá como todos esses recursos úteis nas linguagens OO de hoje foram criados. Aprender Smalltalk também pode lhe dar uma grande vantagem em habilidades de programação entre seus colegas, e pode ser uma ótima ferramenta para ensinar programação para iniciantes.

O que o Smalltalk nos deu?

  • O Smalltalk apresentou o mundo à máquina virtual para linguagens (ou VM), que permite que o software seja independente de plataforma. Essa é a mesma tecnologia que sustenta o Java (JVM) e o .NET, além do Android (Dalvik).

  • A Smalltalk também foi pioneira na compilação JIT (just-in-time), uma técnica para melhorar drasticamente o desempenho de bytecodes como o Java.

  • Do Smalltalk veio o primeiro IDE (Integrated Development Environment) moderno (ambiente de desenvolvimento integrado), que incluía um editor de texto, um navegador de sistema ou classes, um inspetor de objetos ou propriedades e um depurador. Isso levou a muitos IDEs que os desenvolvedores adotam hoje, como o Visual Studio, o Xcode e o IntelliJ IDEA. Pessoalmente, acho que nenhum desses IDEs pode se comparar com o IDE do Smalltalk em simplicidade, elegância e velocidade de desenvolvimento; o original ainda é o melhor!

  • Desde o início, Smalltalk teve closures , que são funções de primeira classe com escopo léxico. Em essência, uma closure é uma função de retorno de chamada que pode ver variáveis ​​não-locais no local onde elas foram definidas. Isso pode ajudar você a escrever um código muito mais compacto e legível. Os closures estão sendo adotadas em muitas das principais linguagens, como Java, C # e PHP.

  • O Smalltalk foi a primeira ferramenta em linguagem para suportar programação “ao vivo” (“live” programming) e técnicas avançadas de depuração, como inspeção imediata e mudanças de código durante a execução. Hoje, a depuração ao vivo é possível em C # com o “Edit and Continue” do Visual Studio e em Java com HotSwap. 

  • O Smalltalk introduziu o MVC (Model-View-Controller) para o mundo. O MVC é um padrão de arquitetura de software para implementar interfaces de usuário. É popular com aplicativos GUI de desktop e aplicativos da web. Hoje em dia, é a arquitetura que a maioria dos desenvolvedores da Web aprende primeiro. 

  • Em grande parte, Smalltalk é responsável por nos dar desenvolvimento orientado a testes (ou TDD) e programação extrema (ou XP), ambos muito influentes nas práticas agile padrão de hoje. 

  • Smalltalk fez “duck typing” uma coisa comum. Duck typing é quando a “verificação de tipos” é adiada até momento da execução – quando os recursos de reflexão são usados ​​para garantir o comportamento correto. Encontramos a duck typing em muitas linguagens hoje, incluindo Java, Python, Common Lisp, Go, Groovy, Objective-C e PHP. 

  • O Smalltalk foi pioneiro no desenvolvimento de bancos de dados de objetos. Embora não tenham entrado no mainstream, os bancos de dados de objetos têm seus nichos de mercado. O melhor exemplo de um produto de banco de dados de objetos é o GemStone/S , que é bem adequado para sistemas distribuídos escalonáveis, de alto desempenho e multicamadas. 

  • O Smalltalk nos deu o primeiro navegador de refatoração. Naturalmente, o suporte à refatoração pode ser encontrado na maioria dos IDEs hoje.

  • O Smalltalk foi fundamental no desenvolvimento da interface gráfica do usuário (ou GUI) e da interface de usuário do tipo “o que você vê é o que obtém” (WYSIWYG).

O Smalltalk tem um rico legado de contribuições para a indústria de software. Basta olhar para esta lista de recursos e tecnologias que ele introduziu:

Mas como o aprendizado do Smalltalk pode me tornar um desenvolvedor melhor?

O Smalltalk tem vários recursos importantes que estavam à frente de seu tempo:

E existem alguns outros recursos que tornam o Smalltalk especial também.

Em essência, a principal vantagem do Smalltalk como uma linguagem produtiva e ferramenta de aprendizado é que ela retira a maior parte, se não todo, o estresse cognitivo de linguagens OO tradicionais como Java. O Smalltalk não apresenta desordem sintática ou características de distração. Simplesmente sai do seu caminho para que você possa concentrar toda a sua atenção no problema ou na aplicação em questão. Não é que o Java seja uma linguagem ruim para ser mais complexa (e ter nomes de classe de 30 caracteres); o que estou dizendo é que aprender uma linguagem OO desembarçada pode realmente fazer de você um programador Java melhor, uma vez que você entende seus conceitos OO de outra perspectiva.

A eliminação do estresse cognitivo é um objetivo fundamental de muitas linguagens – por exemplo, Python, Ruby, Elixir, Elm e Go. Mesmo que você não perceba, o estresse está presente. Costuma-se dizer que a programação em Smalltalk ou Python é semelhante ao Zen; sua mente simplesmente flui sem esforço. Esta é a beleza e o valor da simplicidade da linguagem, e o Smalltalk tem isso em mente.

Em Smalltalk, o OO é destilado para seus conceitos mais básicos de classes e métodos, metaclasses e reflexões, e o mais importante é a passagem de mensagens. O Smalltalk, em virtude de sua orientação a objeto pura e consistência, lhe dará uma compreensão profundamente melhor da programação orientada a objetos e como usá-la para um melhor resultado.

A simplicidade do Smalltalk também o torna uma linguagem instrucional ideal para programação de aprendizado, especialmente se você não tiver formação técnica. A simplicidade da linguagem e das ferramentas permite que você concentre suas energias no aprendizado de técnicas de programação, não em formalidades de linguagem.

Como o Smalltalk funciona? A abordagem baseada em imagem (image-based) para programação

A principal reivindicação da Smalltalk para a fama é sua abordagem baseada em imagem (image-based) para a criação de software. Uma imagem (image) é um instantâneo de memória que contém todos os objetos em seu aplicativo ou sistema em execução. Ele encapsula todo o estado de execução do seu programa. Uma imagem (image) pode ser salva em disco, e a execução pode ser retomada mais tarde exatamente de onde você parou!

A imagem (image) do Smalltalk pode soar um pouco excêntrica, mas na verdade tem uma forte semelhança com algo amplamente usado hoje em TI: imagens do sistema na virtualização do Sistema Operacional, como encontramos no VMware e no VirtualBox. Devemos lembrar que o Smalltalk era originalmente um sistema operacional independente quando foi criado no Xerox PARC nos anos 70.

A imagem do Smalltalk também tem uma forte semelhança com o DOM (Document Object Model) de uma página da web. Observe que um aplicativo da Web é essencialmente um sistema em si mesmo, isolado no navegador da Web e com acesso direto negado ao sistema de arquivos do host e a outros recursos. Quando um navegador da Web é fechado, o estado do site dinâmico pode ser salvo ou armazenado em cache e, na próxima vez que o navegador for retomado, o site poderá ser restaurado no navegador (com algumas limitações).

Até mesmo a planilha simples segue bem de perto o conceito de imagem. Ela encapsula todo o estado de execução. Não pode acessar os recursos do sistema do host. Pode ser salva e restaurada. E você deve saber que as planilhas ainda são usadas para desenvolver modelos e aplicativos sofisticados com linguagem própria.

Portanto, o conceito de imagem é bastante prevalente. É tanto uma ótima maneira de desenvolver software que uma versão do conceito de imagem foi criada usando JavaScript no Lively Kernel .

No Smalltalk tudo é objeto

Sem exceções: tudo é objeto. Não há tipos de dados primitivos. Não há estruturas de controle, como seleção e iteração! Tudo no Smalltalk é feito enviando mensagens para objetos . Isto é o que torna o Smalltalk tão simples, elegante e fácil de aprender. É isso que torna a linguagem tão completamente sintática.

Por exemplo, o snippet de código a seguir [adaptado para o Pharo Smalltalk] estende a classe Number para suportar uma operação de fatorial não recursiva:

Number>>my_factorial
      (self < 2) ifTrue: [ ^ 1 ]
                 ifFalse: [ |c|
                   c := OrderedCollection new.
                   2 to: self do: [ :i | c add: i ].
                   ^ (c fold: [ :a :b | a * b ] ) ]].
7 factorial printString.
7 my_factorial printString. "deve obter o mesmo resultado que a linha acima"

Aqui, ifTrue: é uma mensagem de keyword message enviada ao objeto Boolean que resulta da avaliação da expressão (self <2). O argumento para a keyword message é um bloco de código (delineado por colchetes). Na verdade, ifTrue: é a primeira parte de uma mensagem de palavra-chave em duas partes, sendo a segunda parte ifFalse:.

A mensagem unária new é enviada para a classe OrderedCollection para criar uma nova coleção. A mensagem printString é enviada para o resultado (que é um objeto) do envio da mensagem my_factorial para o número 7. A coisa toda quase se lê como linguagem natural! [Daí vem o nome Smalltalk, eu acho, ou do bate-papo original que gerou a linguagem]

Reflexão em Smalltalk

A reflexão computacional é usada para implementar uma maneira poderosa de lidar com erros. Quando um objeto recebe uma mensagem que não implementa, ele recebe uma mensagem doesNotUnderstand:, juntamente com uma reificação da mensagem original. Há muitas coisas que o programa pode fazer com a mensagem doesNotUnderstand:, inclusive se estendendo com novas funcionalidades!

Reflexão em Smalltalk é particularmente valiosa como um meio para um programa inspecionar sua própria estrutura e computação em tempo de execução. Isso confere enorme poder, permitindo que os programas se estendam com novas classes e métodos ou obtenham uma resposta para “quem enviou essa mensagem para mim?”

O conceito de imagem e a reflexão também permitem que o Smalltalk elimine a fronteira entre o aplicativo e o IDE. Tudo o que você precisa para desenvolver, depurar e executar seu aplicativo está na imagem. Não há necessidade de sair do seu ambiente de aplicativos. É uma abordagem completamente holística para o desenvolvimento de software que torna tudo mais Zen e produtivo.

Renascimento do Smalltalk

Os últimos 15 anos de desenvolvimento no mundo da Smalltalk tornaram a linguagem muito mais atraente.

Smalltalk está agora disponível para programação front-end web programming usando Amber Smalltalk , que transpila [compilação de código fonte para código fonte] para JavaScript. O desenvolvimento usando Amber ocorre inteiramente no navegador. Uma das coisas surpreendentes sobre o Amber é que, quando você importa uma biblioteca JavaScript, seus objetos podem ser tratados exatamente como os objetos do Smalltalk.

Em 2002, o web framework Seaside foi lançado, tornando-se a ferramenta mais popular para desenvolvimento web em Smalltalk. Sua abordagem baseada em continuation forneceu um mecanismo convencional de “call/return” para seu aplicativo da web. Ele pode ajudar a resolver problemas, como os problemas de double request e uso do back button do web browser. Bastante revolucionário para o seu tempo, e [seu enfoque] ainda não é comumente adotado em outros frameworks web.

O projeto Pharo começou em 2008 para enfocar técnicas modernas de engenharia e desenvolvimento de software. Ele levou o Smalltalk bem mais longe do que o projeto de código aberto chamado Squeak, baseado no venerável dialeto Smalltalk-80. O projeto Pharo também gerou pesquisas sobre um novo tipo de IDE chamado Glamorous Toolkit . É baseado na ideia de que seu ambiente de programação deve ser “moldável” para atender às suas necessidades.

No ano passado [2008], o altamente considerado Dolphin Smalltalk tornou-se open source, oferecendo outra opção maravilhosa para os fãs do Smalltalk. O Dolphin Smalltalk tem sido frequentemente elogiadopor ter uma das melhores implementações do Smalltalk IDE.

O legado do Smalltalk: tornando a programação divertida

Quando você usa as muitas facilidades do desenvolvimento de software moderno, como a JVM, o Eclipse IDE, closures, live coding, MVC, TDD, VMware e até mesmo o aplicativo da web antigo, pense em suas origens no Smalltalk e mantenha uma maior respeito pelo que você está fazendo. Tenha um maior apreço pelas linguagens que você usa, sejam elas Objective-C, Python, Ruby, Groovy, Scala, Dart ou Swift.

Trabalhar com a linguagem que originou todos esses excelentes recursos e tecnologias oferece uma oportunidade única para melhorar muito seu conhecimento, sua acuidade mental e sua produtividade como desenvolvedor de software. A palavra “diversão” nem sempre entra em discussões sobre engenharia de software, mas acho que o Smalltalk – e seus irmãos OO – fornecem a baixa barreira cognitiva e a facilidade de programação que podem tornar divertida a engenharia de software.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s