Linguagem Moderna na Era da AI
Línguas Modernas
Uma língua moderna refere-se a uma língua que oferece maior produtividade, estabilidade, segurança e manutenibilidade em comparação com as línguas do passado. Essas línguas introduzem ativamente as técnicas e conceitos mais recentes, proporcionando aos desenvolvedores ferramentas de desenvolvimento mais eficientes e seguras. Línguas modernas representativas incluem Java, Rust, Python, TypeScript, entre outras, e elas possuem as seguintes características.
1. Design Orientado a Objetos ( OOP )
A maioria das línguas modernas foi projetada com base no conceito de orientação a objetos. A orientação a objetos suporta princípios como encapsulamento, herança e polimorfismo, e torna a estrutura do programa clara e flexível ao gerenciar sistemas complexos dividindo-os em unidades menores de objetos. Isso é particularmente eficaz para controlar custos de desenvolvimento e esforço em desenvolvimento de software de larga escala, e para reduzir problemas que podem surgir durante a manutenção.
2. "Syntax Sugar" e Expressões
As línguas modernas oferecem uma variedade de "syntax sugar" e sintaxes baseadas em expressões para aumentar a legibilidade do código e a produtividade do desenvolvimento. Funcionalidades como operadores ternários, expressões lambda e "pattern matching" reduzem o código "boilerplate", tornam o código previsível e aumentam a produtividade do desenvolvedor.
3. Sistema de Módulos
As línguas modernas permitem que os programas sejam divididos e gerenciados em várias unidades através de um sistema de módulos. Isso facilita a reutilização de código e o gerenciamento de dependências, tornando a manutenção mais fácil mesmo quando o tamanho do projeto aumenta. Exemplos representativos incluem Maven/Gradle para Java, Cargo para Rust, e npm/yarn para TypeScript, entre outros.
4. Linguagem Intermediária e Máquina Virtual
As línguas modernas introduzem linguagem intermediária e máquinas virtuais para independência de plataforma, otimização de desempenho e segurança. Exemplos representativos incluem JVM, LLVM, WASM, GraalVM, entre outros.
O Desenvolvimento na Era da AI e as Limitações das Línguas Modernas
As línguas modernas surgiram sob a premissa de que os humanos escrevem a maior parte do código. Naturalmente, o objetivo das línguas modernas é reduzir tarefas repetitivas, aumentar a produtividade e implementar software de grande porte de forma eficaz através de uma estrutura que permite a colaboração entre desenvolvedores. No entanto, na era da AI, essa premissa está gradualmente se desfazendo. Ferramentas baseadas em AI como Copilot, Cody, entre outras, estão automatizando grande parte da escrita de código, e a quantidade de código que um único desenvolvedor pode produzir está aumentando exponencialmente. Como resultado, as características das línguas modernas que antes eram percebidas como vantagens estão gradualmente se tornando desvantagens obsoletas.
Design Orientado a Objetos
A AI pode analisar rápida e precisamente estruturas onde todas as informações são explicitamente declaradas dentro de uma única função ou módulo. Por outro lado, à medida que o contexto aumenta, a AI tem mais áreas para inferir, o que diminui sua produtividade e precisão. O código escrito em OOP distribui a lógica por vários objetos, em vez de gerenciá-la em um único local, o que, em última análise, exige mais contexto da AI. Vejamos o código abaixo.
1public class AnimalHandler {
2 public void handle(Animal animal) {
3 animal.speak();
4 }
5}
6
7public class Main {
8 public static void main(String[] args) {
9 AnimalHandler handler = new AnimalHandler();
10
11 Animal a1 = new Dog();
12 Animal a2 = new Cat();
13 Animal a3 = new Horse();
14
15 handler.handle(a1);
16 handler.handle(a2);
17 handler.handle(a3);
18 }
19}
No código acima, a AI deve repetir as seguintes inferências para saber qual ação o método speak() realmente executará:
- De qual classe concreta 'animal' é uma instância?
- Onde o método speak() sobrescrito naquela classe está definido?
- Onde as definições das classes Dog e Cat estão e qual é o comportamento interno delas?
- Existe a possibilidade de as classes Dog e Cat serem sobrescritas por outras classes?
Essas informações não estão reunidas em um único arquivo ou função, e só podem ser compreendidas seguindo as relações entre os arquivos de classe e a estrutura de herança. Além disso, elementos que são decididos em tempo de execução, como "reflection" ou carregamento dinâmico, são como uma caixa preta para a AI, tornando a análise praticamente impossível.
"Syntax Sugar" e Expressões
A AI prefere ações explícitas a ações implícitas e prefere combinar estruturas simples para criar uma única resposta, em vez de usar estruturas complexas. Em contraste, o "syntax sugar" permite várias formas de expressão, mas o comportamento interno é frequentemente o mesmo ou semelhante. A AI deve aprender o significado dessas diversas expressões individualmente, e pode se tornar difícil determinar a prioridade de qual sintaxe recomendar em uma situação específica.
Linguagem Intermediária e Máquina Virtual
A AI aprende principalmente com base no código-fonte. Por outro lado, a linguagem intermediária ("bytecode") tem o significado de nomes de variáveis, etc., removido durante o processo de compilação, e deve ser reinterpretada pela máquina virtual no tempo de execução. Esta é uma tarefa muito difícil para a AI entender ou converter. Por exemplo, a conversão de TypeScript para Go é possível para a AI, mas converter o "bytecode" do V8 engine para o "bytecode" da JVM ou para linguagem de máquina é praticamente impossível.
A Verdadeira Língua Moderna na Era da AI
Através do conteúdo acima, podemos perceber que as características das línguas modernas são, na verdade, elementos obsoletos que não são adequados para a era da AI. Então, qual língua poderia ser a língua moderna mais adequada para a era da AI? Podemos obter pistas dos elementos que as línguas modernas do passado rejeitaram. Uma língua moderna na era da AI
- deve ter uma sintaxe explícita e um fluxo natural.
- deve ter uma estrutura plana e simples, afastando-se de estruturas OOP excessivas.
- em vez de "syntax sugar" desnecessário ou padrões implícitos, deve criar várias funcionalidades apenas com um conjunto limitado de palavras-chave básicas.
- deve ter um sistema de build simples e previsível, em vez de um sistema de build complexo.
A língua que melhor se alinha com esses critérios é o Golang. A língua Go foi projetada para permitir a implementação da maioria das funcionalidades práticas com um mínimo de palavras-chave centrais e combinações de sintaxe simples, e exclui rigorosamente abstrações desnecessárias e comportamento implícito. Esta é uma estrutura vantajosa não apenas para desenvolvedores humanos, mas também para a AI interpretar e gerar código.
As características do Go, como sua estrutura previsível e plana, fluxo explícito e sintaxe consistente, se encaixam melhor em um ambiente de desenvolvimento onde a AI participa ativamente, ao contrário das línguas modernas existentes que foram projetadas com base em desenvolvedores humanos. A filosofia de design conservadora do Go, que antes era considerada obsoleta, acaba por ser a escolha mais avançada na era da AI.