banner
Hogar / Noticias / El futuro de la programación: IA e interfaz
Noticias

El futuro de la programación: IA e interfaz

Jul 13, 2023Jul 13, 2023

Eric Elliott

Seguir

Escena de JavaScript

--

2

Escuchar

Compartir

Los modelos de lenguaje de IA, como ChatGPT y Claude, permiten a cualquiera crear software. Estos modelos pueden comprender problemas de manera inteligente, crear soluciones y explicar las soluciones. Pero el lenguaje natural no siempre es la mejor manera de comunicarse con la IA. Si necesita realizar un seguimiento de datos complejos y definir cómo interactúa con esos datos de maneras específicas, SudoLang puede ayudarlo.

Si cree que esto sólo ayudará con el código de IA, piénselo de nuevo. Puede crear cualquier programa en SudoLang y luego transpilarlo a otros lenguajes, como JavaScript, Python, Rust o C, para poder aprovechar estas características sin importar qué tipo de software esté creando.

SudoLang es un lenguaje de programación diseñado para colaborar con modelos de lenguajes de IA, incluidos ChatGPT, Bing Chat, Anthropic Claude y Google Bard. Está diseñado para que sea fácil de aprender y utilizar. También es muy expresivo y poderoso.

Todos los modelos de lenguaje avanzados lo entienden sin ninguna indicación especial. No es necesario pegar la especificación de SudoLang antes de usar SudoLang con su IA favorita.

Lea la documentación de SudoLang para obtener más información sobre el idioma.

Programación orientada a interfazle permite estructurar su programa y declarar fácilmente qué desea que la IA realice un seguimiento y cómo desea interactuar con él.

Las interfaces son una herramienta poderosa para encapsular estados, restricciones, comandos y funciones relacionados. Organizan el código de forma clara, comprensible y reutilizable.

Las características clave de las interfaces en SudoLang incluyen:

He aquí un ejemplo sencillo:

HelloCounter es una interfaz con dos variables de estado: mensaje y recuento. Tiene una restricción que mantiene el valor de conteo menor o igual a 10. /increment es un comando que incrementa el conteo en 1.

Veamos qué sucede con ChatGPT 3.5:

Este programa también funciona en Claude2. Muchos otros modelos de lenguaje de IA no son lo suficientemente sofisticados para ejecutar programas SudoLang. Por ejemplo, Google Bard se olvida de respetar las restricciones y los modelos OSS más pequeños como LLaMA2 tienen dificultades para seguir todas las instrucciones correctamente. Por ahora, recomiendo usar GPT-4 para crear y ejecutar programas complejos de SudoLang.

SudoLang admite la composición de interfaces para crear estructuras más complejas. Este enfoque fomenta la modularidad, promueve la reutilización del código y facilita el razonamiento sobre el programa. A continuación se muestra un ejemplo de composición:

La composición permite separar los datos de la misión, los datos de la historia y los datos del jugador en interfaces lógicas, mientras que Estado los reúne en la representación completa del estado del juego.

Nota: Aquí se muestran algunas características interesantes de SudoLang. Primero, se escriben las interfaces. Si no especifica tipos para las propiedades de la interfaz, la IA los infiere. En este caso, Player.State y Friends comparten el tipo de personaje (no se muestra). Usamos la sintaxis literal de la interfaz para proporcionar un nombre de jugador predeterminado.

Los lenguajes tradicionales basados ​​en clases como Java o C# utilizan la herencia para modelar "es-a" relaciones. Pero "es-un"Las relaciones rara vez son la forma ideal de modelar software y, a menudo, generan confusión y complicaciones.

Por otro lado, la composición representa “tiene-a” relaciones y es una forma de combinar componentes simples para crear interfaces compuestas más complejas. Generalmente se prefiere la composición a la herencia de clases porque:

Gracias a su naturaleza compositiva y orientada a la interfaz, SudoLang permite estructuras de código flexibles, modulares y reutilizables, lo que proporciona importantes ventajas sobre la herencia de clases tradicional.

La herencia de clases fue un experimento fallido de reutilización de código que frecuentemente terminaba en una duplicación forzada de código causada por los siguientes problemas comunes y bien conocidos:

Por esta razón, SudoLang no utiliza herencia de clases y el linter de SudoLang informará errores y sugerirá soluciones si intenta utilizarlo. Para entender por qué, profundicemos un poco más en esos problemas:

El frágil problema de la clase base: Este problema surge en los lenguajes tradicionales de programación orientada a objetos cuando un cambio a una clase base (o superclase) impacta negativamente y de manera involuntaria a las clases (o subclases) descendientes. Si se modifica un método en la clase base, puede provocar una cadena de fallos en cualquier clase que herede de él.

SudoLang evita este problema favoreciendo la composición sobre la herencia. En SudoLang, no tienes subclases que hereden de una clase base; en su lugar, usted define interfaces independientes y autónomas. Cada interfaz puede considerarse como un módulo que encapsula su propio estado y comportamiento. Luego puede crear interfaces más grandes componiendo estas más pequeñas. De esta manera, los cambios en una interfaz no dañarán otra sin darse cuenta.

El problema gorila/plátano: Este es otro problema asociado con la herencia tradicional en programación orientada a objetos. Es un término acuñado por Joe Armstrong, el diseñador de Erlang, refiriéndose a la situación en la que querías un plátano pero lo que obtuviste fue un gorila sosteniendo el plátano y toda la jungla. En otras palabras, cuando una clase hereda de una clase base, se ve obligada a heredar todos sus métodos y datos, incluso aquellos que no necesita, lo que puede generar una complejidad innecesaria.

SudoLang vuelve a abordar este problema a través del diseño de composición de su interfaz. Dado que cada interfaz es un módulo independiente, cuando crea interfaces, solo incluye la funcionalidad granular que necesita. Esto le brinda un alto grado de control sobre la estructura y el comportamiento de su programa, lo que le permite evitar complejidades innecesarias y mantener su base de código ágil y manejable.

Duplicación por Necesidad: En los lenguajes tradicionales de programación orientada a objetos, a veces te ves obligado a duplicar el código para evitar los problemas mencionados anteriormente. Por ejemplo, para evitar el problema de la clase base frágil, puede decidir no utilizar la herencia, lo que provocaría la duplicación del código. O si quieres el plátano, pero el gorila realmente no sirve, copiarás y pegarás el plátano.

El diseño de composición de la interfaz de SudoLang también aborda este problema. Dado que las interfaces se pueden componer, puede definir una funcionalidad común una vez en una interfaz y luego componer esa interfaz donde necesite esa funcionalidad. Esto le permite mantener su código SECO(No te Repitas) sin necesidad de herencia.

En SudoLang, las palabras clave como clase, nueva, hereda y extiende están prohibidas. Tampoco es necesario definir constructores o funciones de fábrica explícitamente, ni mantener los ciclos de vida de la interfaz/objeto.

SudoLang está diseñado para ser simple e intuitivo, con el objetivo de abstraer algunas de las complejidades inherentes a los lenguajes de programación tradicionales orientados a objetos. Como tal, omite algunas de las palabras clave convencionales de programación orientada a objetos en favor de una estructura más directa y componible con interfaces.

clase, nueva, hereda, extiende: Estas palabras clave se utilizan en lenguajes OOP para definir clases y sus relaciones. Por ejemplo, una clase puede heredar o ampliar otra clase y la nueva palabra clave se utiliza para crear una instancia de una clase. Sin embargo, en SudoLang no hay clases y, por lo tanto, no es necesario heredar ni crear instancias con la nueva palabra clave.

En cambio, SudoLang utiliza interfaces que encapsulan el estado y el comportamiento y se pueden componer según sea necesario. Esto mitiga muchas de las complejidades y dificultades asociadas con la herencia y la creación de instancias tradicionales basadas en clases.

Constructores o funciones de fábrica: Muchos lenguajes de programación requieren constructores o funciones de fábrica para crear nuevas instancias de clases u objetos. Son responsables de inicializar el estado de un objeto. Sin embargo, en SudoLang, no defines explícitamente constructores o fábricas. En su lugar, usted define el estado dentro de una interfaz. Cuando se compone o invoca una interfaz, la IA inicializa automáticamente su estado de acuerdo con su definición, lo que hace que el código sea más conciso y menos propenso a errores.

Ciclos de vida de interfaz/objeto: En SudoLang, tampoco es necesario gestionar el ciclo de vida de una interfaz u objeto como lo haría en la programación orientada a objetos tradicional. Las interfaces en SudoLang tienen estado y su estado se administra automáticamente. Esto significa que no tiene que preocuparse por cuándo crear, actualizar o destruir una interfaz u objeto, lo que reduce la carga cognitiva y las posibles fuentes de errores.

En general, la omisión de estos elementos tradicionales de programación orientada a objetos hace que SudoLang sea más simple y fácil de trabajar, al mismo tiempo que proporciona los beneficios de encapsulación y modularidad que ofrece la programación orientada a objetos.

En la programación orientada a objetos (POO) tradicional, la ocultación y la encapsulación de datos son principios clave que se utilizan para gestionar la complejidad y aumentar la capacidad de mantenimiento y la solidez del código. Permiten ocultar el estado interno de un objeto al código externo, lo que garantiza que otras partes del código no puedan acceder directamente ni cambiar el estado interno de un objeto. Esto hace que sea más fácil razonar sobre cómo se comporta un objeto porque su estado interno sólo puede cambiarse a través de una interfaz bien definida.

Alan Kay, uno de los pioneros de la programación orientada a objetos, puso gran énfasis en el principio de encapsulación. Describió los objetos como células biológicas o computadoras individuales en una red, capaces de comunicarse entre sí pero que tenían su propio estado local al que otros objetos no podían acceder. Esto hizo que el sistema en su conjunto fuera más resistente, porque los cambios en un objeto no afectarían directamente a otros.

Sin embargo, SudoLang utiliza un paradigma diferente. Dado que está diseñado para interactuar con una IA, el concepto de ocultación de datos es menos aplicable. La IA es un agente inteligente con el que se puede razonar, más que un mecanismo que sigue ciegamente un conjunto de reglas. Esto conduce a un cambio en la forma en que pensamos sobre la seguridad y privacidad de los datos.

En cambio, debemos tener cuidado de crear restricciones sólidas sobre cómo se puede acceder y manipular los datos, en lugar de ocultarlos por completo. Para la seguridad de la información, se debe especificar claramente a qué datos se puede acceder en un contexto particular, qué se puede hacer con ellos y quién puede hacerlo.

Esto no significa que la protección de datos sea menos importante en SudoLang; al contrario, es igualmente crucial. Sin embargo, las estrategias utilizadas para lograrlo son diferentes y reflejan las capacidades y limitaciones únicas de la IA.

Recuerde que la IA es inteligente y capaz de razonar, por lo que también podría ser manipulada o engañada para revelar o modificar datos. Esta es una forma de ataque de ingeniería social. Para mitigar este riesgo, recuerde definir claramente las restricciones sobre cómo y cuándo la IA puede acceder y manipular los datos, y asegurarse de que estas restricciones se apliquen de manera estricta.

No todos los modelos de IA son buenos para imponer restricciones. En términos generales, necesitará un modelo de lenguaje de IA de nivel GPT-4 o superior para obtener algo parecido a una buena protección de datos, e incluso eso no es infalible.

La programación orientada a interfaz en SudoLang ofrece un enfoque refrescante y eficaz para el diseño de software. Ayuda a evitar varios de los errores asociados con la programación orientada a objetos tradicional y ofrece la estructura y el control necesarios para crear aplicaciones complejas.

La naturaleza declarativa de las interfaces y restricciones en SudoLang lo hace muy expresivo, permitiéndole definir fácilmente comportamientos complejos. Esto hace que sea más fácil de usar en comparación con los lenguajes tradicionales con un código más rígido y detallado.

Eso es todo por la lección, ¡pero hay más que aprender!

Ofrezco tutoría 1:1 sobre susurros de IA para ayudar a las personas interesadas en potenciar su experiencia con la IA para resolver problemas complejos. Registrate aquí.

¿Qué me califica para hacer eso? El procesamiento del lenguaje natural (PNL) es lo que me atrajo a la programación en primer lugar cuando era un adolescente. He estado interactuando con LLM diariamente desde el verano de 2020 y con chatbots en general durante mucho tiempo antes de eso. Llevo años escribiendo y hablando sobre IA.

Aparezco en el nuevo documental de Cyborg Society, que estará disponible próximamente.

Profesionalmente, fui líder de tecnología en una red social de videos derivada del Instituto de Investigación de Stanford nominada por Webby y he implementado modelos de IA a escala con decenas de millones de usuarios.

Juntos, exploraremos las interfaces de usuario que dan prioridad a la IA, el futuro de la IA, los desafíos pendientes, como el aprendizaje continuo, cómo incorporar increíbles funciones de IA en productos de consumo que puede comercializar hoy y más.

¿Interesado? Comuníquese aquí.

Eric Elliott es asesor de plataformas y productos tecnológicos, autor de “Composing Software”, creador de SudoLang (el lenguaje de programación de IA), cofundador de EricElliottJS.com y DevAnywhere.io, y mentor del equipo de desarrollo. Ha contribuido a experiencias de software para Adobe Systems, Zumba Fitness,El periodico de Wall Street,ESPN,BBC,y los mejores artistas como Usher, Frank Ocean, Metallica,y muchos más.

Disfruta de un estilo de vida remoto con la mujer más bella del mundo.

Programación orientada a interfazEstado:Restricciones:/Comandos y métodos:Nota:"es un""es un""tiene un"Flexibilidad mejorada:Complejidad reducida:Interfaces más claras:Promueve la reutilización de código:El frágil problema de la clase base:El problema del gorila y el plátano:Duplicación por Necesidad:SECOclase, nueva, hereda, extiende:Constructores o funciones de fábrica:Ciclos de vida de interfaz/objeto:Programación orientada a interfaces:Composición sobre herencia:Gestión de instancias automatizada:Ocultación y protección de datos:Ataques de ingeniería social:Eric ElliottSistemas Adobe, Zumba Fitness,El periodico de Wall Street,ESPN,BBC,Usher, Frank Ocean, Metallica,