GoSuda

El lenguaje moderno en la era de la IA

By Rabbit Princess
views ...

Lenguajes Modernos

Un lenguaje moderno se refiere a un lenguaje que ofrece mayor productividad, estabilidad, seguridad y mantenibilidad en comparación con los lenguajes del pasado. Estos lenguajes incorporan activamente las últimas técnicas y conceptos, proporcionando a los desarrolladores herramientas de desarrollo más eficientes y seguras. Ejemplos representativos de lenguajes modernos incluyen Java, Rust, Python y TypeScript, los cuales poseen las siguientes características.

1. Diseño Orientado a Objetos (OOP)

La mayoría de los lenguajes modernos se basan en el concepto de orientación a objetos. La orientación a objetos soporta principios como la encapsulación, la herencia y el polimorfismo, y hace que la estructura del programa sea clara y flexible al dividir sistemas complejos en objetos de unidades más pequeñas. Esto es particularmente efectivo para controlar los costos de desarrollo y el esfuerzo en el desarrollo de software a gran escala, y para reducir los problemas que pueden surgir durante el mantenimiento.

2. "Syntactic Sugar" y Expresiones

Los lenguajes modernos ofrecen una variedad de "syntactic sugar" y gramáticas basadas en expresiones para mejorar la legibilidad del código y la productividad del desarrollo. Características como el operador ternario, las expresiones lambda y el "pattern matching" reducen el código repetitivo, hacen que el código sea predecible y aumentan la productividad del desarrollador.

3. Sistema de Módulos

Los lenguajes modernos permiten gestionar programas dividiéndolos en varias unidades a través de un sistema de módulos. Esto facilita la reutilización del código y la gestión de dependencias, y simplifica el mantenimiento incluso a medida que el proyecto crece en escala. Ejemplos representativos incluyen Maven/Gradle de Java, Cargo de Rust y npm/yarn de TypeScript.

4. Lenguaje Intermedio y Máquina Virtual

Los lenguajes modernos adoptan lenguajes intermedios y máquinas virtuales para la independencia de la plataforma, la optimización del rendimiento y la seguridad. Ejemplos representativos incluyen JVM, LLVM, WASM y GraalVM.

Desarrollo en la Era de la IA y Limitaciones de los Lenguajes Modernos

Los lenguajes modernos surgieron bajo la premisa de que los humanos escribirían la mayor parte del código. Naturalmente, el propósito de los lenguajes modernos es reducir tareas repetitivas, aumentar la productividad e implementar eficazmente software a gran escala a través de estructuras que permitan la colaboración entre desarrolladores. Sin embargo, en la era de la IA, esta premisa se está erosionando. Herramientas basadas en IA como Copilot y Cody están automatizando gran parte de la escritura de código, y la cantidad de código que un solo desarrollador puede producir está aumentando exponencialmente. Como resultado, las características de los lenguajes modernos que antes se consideraban ventajas se están convirtiendo gradualmente en desventajas obsoletas.

Diseño Orientado a Objetos

La IA puede analizar de forma rápida y precisa una estructura en la que toda la información se especifica dentro de una única función o módulo. Por el contrario, a medida que el contexto aumenta, el número de secciones a inferir también lo hace, lo que disminuye la productividad y precisión de la IA. El código escrito en OOP distribuye la lógica entre varios objetos en lugar de gestionarla en un solo lugar, lo que en última instancia requiere más contexto para la IA. Considere el siguiente código.

 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}

En el código anterior, la IA debe repetir las siguientes inferencias para saber qué acción realizará realmente el método speak():

  1. ¿De qué clase concreta es la instancia 'animal'?
  2. ¿Dónde está definido el método speak() sobrescrito en esa clase?
  3. ¿Dónde están las definiciones de las clases Dog y Cat, y cuál es su comportamiento interno?
  4. ¿Existe la posibilidad de que las clases Dog y Cat sean sobrescritas por otras clases?

Esta información no se encuentra agrupada en un solo archivo o función, y solo puede entenderse siguiendo las relaciones y la estructura de herencia entre los archivos de clase. Además, elementos que se deciden en tiempo de ejecución, como la "reflection" o la carga dinámica, son como una "caja negra" para la IA, lo que hace que su análisis sea prácticamente imposible.

"Syntactic Sugar" y Expresiones

La IA prefiere acciones explícitas sobre las implícitas, y prefiere combinar estructuras simples para crear una única respuesta en lugar de utilizar estructuras complejas. Por el contrario, el "syntactic sugar" permite una variedad de expresiones, mientras que su funcionamiento interno suele ser idéntico o similar. La IA debe aprender el significado de estas diversas expresiones una por una, y puede resultarle difícil determinar la prioridad de qué sintaxis recomendar en una situación específica.

Lenguaje Intermedio y Máquina Virtual

La IA aprende principalmente a partir del código fuente. Por otro lado, en el lenguaje intermedio ("bytecode"), el significado de los nombres de las variables, entre otros, se elimina durante el proceso de compilación, y la máquina virtual debe reinterpretarlo en el momento de la ejecución. Esta es una tarea extremadamente difícil de entender o transformar para la IA. Por ejemplo, la transformación de TypeScript a Go es posible para la IA, pero la conversión del "bytecode" del motor V8 al "bytecode" de JVM o a código máquina es prácticamente imposible.

El Verdadero Lenguaje Moderno en la Era de la IA

A través de lo anterior, podemos observar que las características de los lenguajes modernos son, en realidad, elementos obsoletos que no son adecuados para la era de la IA. Entonces, ¿qué lenguaje podría ser el lenguaje moderno más adecuado en la era de la IA? La respuesta se puede encontrar en los elementos que los lenguajes modernos del pasado rechazaron. El lenguaje moderno de la era de la IA debe:

  1. Tener una sintaxis explícita y un flujo natural.
  2. Evitar estructuras OOP excesivas y adoptar una estructura plana y simple.
  3. Crear múltiples funcionalidades con un conjunto limitado de palabras clave básicas, en lugar de "syntactic sugar" innecesario o patrones implícitos.
  4. Poseer un sistema de compilación simple y predecible, en lugar de uno complejo.

El lenguaje que mejor se ajusta a estos criterios es Golang. El lenguaje Go está diseñado para implementar la mayoría de las funcionalidades prácticas con un número mínimo de palabras clave esenciales y una combinación de sintaxis simple, y excluye rigurosamente las abstracciones innecesarias y las acciones implícitas. Esta estructura es ventajosa no solo para los desarrolladores humanos, sino también para que la IA interprete y genere código.

Las características de Go, que buscan una estructura predecible y plana, un flujo explícito y una sintaxis consistente, se adaptan mejor a un entorno de desarrollo en el que la IA participa activamente, a diferencia de los lenguajes modernos existentes diseñados para desarrolladores humanos. La filosofía de diseño conservadora de Go, que alguna vez se consideró anticuada, se convierte ahora en la opción más avanzada en la era de la IA.