Back-End

18 jan, 2016

Como é a “cara” de uma nova linguagem de programação?

Publicidade

É comum uma linguagem de programação evoluir e apresentar diversas mudanças significativas. Também não é raro encontrar novas linguagens de programação que desafiam as pessoas a aprender coisas novas. Neste artigo, vou discutir um pouco sobre o processo de aprendizado de uma nova linguagem de programação.

Quem trabalha na área de programação deve estar acostumado a aprender novos conceitos, sintaxes, elementos e, em termos gerais, novas maneiras de resolver problemas com as linguagens de programação. Talvez isso não seja verdade para todos, pois sempre vamos ter aquele tradicional cenário padrão COBOL, no qual as coisas não evoluem muito ou quando evoluem o fazem de maneira muito lenta.

Figura2_Cobol

Recentemente, fiquei pensando um pouco sobre esse processo de aprender algo novo em relação a uma linguagem de programação, especialmente no que diz respeito à sintaxe. O que me motivou para pensar sobre isso foi a atualização que muitos desenvolvedores vêm enfrentando para gradualmente migrar do Objective-C para o Swift e também o estudo que fiz para criar a nova caneca com sintaxe para datas do DatabaseCast. Contudo, pelo que descobri, esse tipo de atualização é relativamente frequente em diversos cenários. Quer dizer, olha só o novo tipo de sugestão de estilo de programação desenvolvimento com o Java 8! Praticamente não se recomenda mais utilizar loops ou variáveis, e sim depender muito de técnicas como métodos anônimos, lambdas e outros.

Figura3_why-lambda2-730x320

Quais são os recursos, técnicas ou recomendações para esse tipo de atualização profissional? Ou, em um contexto mais geral, que tipo de ajuda fornecer para quem está aprendendo uma nova linguagem de programação? Sei que existem muitos recursos técnicos tradicionais como livros, cursos e outros para quem quer aprender algo do zero e se atualizar, mas será que não existem novas abordagens específicas para esse tipo de atualização?

Por exemplo, uma forma muito comum de descrever a sintaxe de elementos de uma linguagem é através de diagramas de sintaxe, também chamados de “diagramas de ferrovia” (RailRoad diagramas). As figuras abaixo mostram exemplos desse tipo de diagrama para a sintaxe de um comando de decisão tipo IF e também um diagrama para a sintaxe de um comando CREATE da linguagem PL/SQL.

Figura4_ebnf

Figura5_FiagramaCREATE

Esse tipo de representação visual é interessante para quem desenvolve compiladores, parses e analisadores de linguagem. Contudo, muitos desenvolvedores preferem uma notação mais textual quando procuram a documentação, como a definição de uma gramática na notação BNF (Backus–Naur Form).

Figura6_FormaBNF

De qualquer maneira, esses recursos para apresentação de sintaxe são pouco amigáveis para quem quer identificar mudanças e novos elementos. Seria interessante se eles tivessem recursos como animações, cores diferentes e destaques que facilitassem a visualização do que efetivamente mudou, foi inserido ou é novo. Dessa forma, ficaria mais simples, rápido e fácil descobrir a nova “cara” da linguagem ou o seu “jeitão”. Outra abordagem interessante é utilizar técnicas de visualização de dados para essa simplificação. Por exemplo, que tal usar um TreeMap ou as famosas nuvens de palavras (tag cloud) para ver os elementos mais comuns em um código Object-C e Swift? A imagem abaixo mostra um exemplo disso.

Figura7_TagCloud

Existem muitas outras formas que podem ser exploradas para facilitar a atualização de um profissional que deseja aprender o que foi modificado em uma linguagem ou se atualizar rapidamente. Mesmo sem um esforço adicional de quem fornece a linguagem de programação, acredito que investir nesse tipo de recurso pode facilitar para novos desenvolvedores utilizarem o que é novo e também incentivar a adoção de propostas diferentes para resolver problemas antigos ou novos. Isso vale tanto para sintaxe, novas linguagens e paradigmas (estou me referindo a você, programação funcional!, versões de API e até recursos adicionais que envolvam novos conceitos fundamentais.