No code, low code, high code = CODE

La evolución de la forma de interacción entre humanos y máquinas ha experimentado cambios significativos a lo largo del tiempo. Voy a tratar de mostrar con diagramas como ha evolucionado el proceso de desarrollo de software y la interacción entre los desarrolladores y las computadoras.


En las primeras etapas, se muestra que los desarrolladores interactuaban directamente con las computadoras utilizando lenguaje máquina. En esta fase, el desarrollo de software requería un conocimiento profundo de la arquitectura y los códigos de bajo nivel de las máquinas. Era un enfoque muy técnico y laborioso.

A medida que avanzamos en el tiempo se observa una progresión hacia niveles de abstracción más altos. La siguiente etapa muestra el uso de lenguaje ensamblador (assembler), que proporcionaba una capa de abstracción sobre el lenguaje máquina, facilitando un poco más la tarea de programación. En esta etapa, los programadores tenían que hacer manejo de memoria, acceso a disco y programar las operaciones mas básicas desde cero, para cada una de las maquinas que tenían que programar. 


Luego, con la introducción de los lenguajes de alto nivel permitió a los desarrolladores escribir menos código y en un formato más cercano al lenguaje humano. En esta etapa, los programas escritos en lenguajes de alto nivel debían ser traducidos a lenguaje máquina para que la computadora pudiera entenderlos y ejecutarlos.




La siguiente fase muestra la introducción del bytecode y la máquina virtual (como la de java o los framework de .NET). En este enfoque, el código fuente escrito en lenguajes de programación de alto nivel se compila en bytecode, que es un conjunto de instrucciones de nivel intermedio. La máquina virtual se encarga de interpretar y ejecutar el bytecode en la computadora. Esta abstracción permitió la portabilidad del software, ya que el mismo bytecode podría ejecutarse en diferentes plataformas.

Escribimos menos código y podemos hacer mas aplicaciones mas potentes. 

El avance de esto no es tan lineal como para poder representarlo en diagramas sencillos, pues en el medio tuvimos lenguajes de cuarta generación, manejadores de reglas en runtime, y herramientas graficas para el diseño de flujos de trabajo. Todas estas son forma de código, que permiten explicarle a la computadora que es lo que tiene que hacer. 


El enfoque de "low code" es una tendencia actual en el desarrollo de software. El "low code" se basa en el uso de plataformas y herramientas que permiten a los desarrolladores crear aplicaciones con un mínimo de codificación manual. Estas herramientas proporcionan interfaces visuales y configuraciones simplificadas para agilizar el proceso de desarrollo. Aunque todavía se requiere el lenguaje de máquina para que la computadora ejecute el software, el enfoque de "low code" reduce considerablemente la cantidad de código que los desarrolladores deben escribir manualmente.

En resumen, el diagrama representa la evolución de la interacción entre humanos y máquinas en el desarrollo de software. Ha habido un progreso desde el uso directo de lenguaje máquina hasta enfoques más abstractos y simplificados, como el uso de lenguajes de alto nivel, bytecode, máquinas virtuales, lenguajes de cuarta generación y el enfoque de "low code". Estos cambios reflejan la búsqueda constante de formas más eficientes y accesibles de desarrollar software, permitiendo a los desarrolladores enfocarse más en la lógica del negocio y menos en los detalles técnicos de implementación.

A lo largo de la corta historia de la computación, vemos una evolución grande en todo el ciclo. Tanto los desarrolladores y las computadoras han cambiado y avanzado mucho. 
Han variado mucho la forma en que le damos las instrucciones a las computadoras sobre que es lo que tienen que hacer y hemos avanzado mucho en los tipos de problemas que podemos resolver, pero el código, sigue siendo codigo. La cantidad de instrucciones que tiene que tener una computadora para resolver problemas es mas o menos conocida. Si se puede declarar y definir esas instrucciones de forma mas concisa o mas rapida, hay que aprovecharlo y tener mayor productividad.  Pero el código estará en forma de componentes reutilizables, en parámetros de modelos matemáticos o en códigos difíciles de entender como ADN o jeroglíficos, pero va a existir. 

En todas estas abstracciones es importante tener en claro que debemos hacer sistemas/aplicaciones en forma profesional y responsable para no pasar a futuras generaciones de programadores sistemas que sean difíciles de mantener o que necesiten reprogramarlos, pues eso siempre es un proceso bastante traumático. 

Comentarios

  1. excelente!
    vamos construyendo abstracciones arriba de abstracciones que van permitiendo resolver problemas cada vez mas complejos.
    En ese camino creo que la AI y la GenAI en particular es un nuevo building block que nos permite resolver determinado tipos de problemas de manera más sencilla.

    ResponderBorrar
    Respuestas
    1. Si, es como decis. Abstracciones mas potentes que permiten resolver problemas con menos trabajo humano y mas trabajo de maquina. Es importante no perder de vista, que a pesar que la especificación de las instrucciones (code) sea mas concisa, sigue siendo codigo que vamos a tener que mantener, probar que es correcto, borrar cuando no se use, etc. Por mas que tengamos poco codigo, inteligencia artificial para ayudarnos y una cantidad de ayudas, no debemos olvidar todo lo que aprendimos en los ciclos anteriores.

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.