Desarrollo con GeneXus ayudado con Inteligencia Artificial


La industria entera se vio sacudida por las nuevas posibilidades que brindan los modelos de inteligencia artificial del tipo ChatGPT. Por la calidad de las respuestas que brinda, puso nervioso a mas de una empresa, que pueden ver sustituido gran parte de su trabajo por este tipo de herramientas. 

ChatGPT es la cara mas visible de esta nueva ola y tuvo la importancia de mostrar el potencial del uso de la inteligencia artificial para ayudar a hacer tareas que hasta el momento no parecían automatizables.  A mi me gusta verlo como la  oportunidad de hacer un pair-programming con un programa en vez de un ser humano. No será lo mismo, pero tener algo que conteste las dudas que te surgen cuando estoy programando, ayuda muchísimo. 

Pero hay otra cantidad de tareas que no necesitan ese grado de sofisticacion o modelos tan grandes como para poder ser muy útiles, ahorrarnos horas de trabajo y hacernos mas productivos. 

He estado pensando, que cosas podrían automatizarse mas en el ciclo de desarrollo con herramientas como GeneXus.  Veo que hay varias tareas que hoy son difíciles de hacer, fundamentalmente porque son muchos pasos sencillos para un experto, pero difíciles para un principiante y es difícil que los haga sin cometer algún error. 

Aca va una lista de las cosas que se me ocurren que la automatización nos podría ayudar bastante. 

Ciclo "Busco en el Wiki de GeneXus / Copio el ejemplo / Adapto el ejemplo / Incorporo a mi proyecto"

Cuando estoy haciendo algo por primera vez, es muy común este ciclo, con algún complemento de StackOverflow. Si tuviéramos una herramienta integrada, que permita poner un tópico y que nos traiga un ejemplo del mismo, seria muy bueno. 

Ejemplos:
Como enviar un mail por SMTP?
Como leer un mail usando POP3? 
Como hacer un objeto API que use un Business Component? 

Ayuda de cambio de versión de GeneXus. 

Conociendo el estado de mi KB, que generadores, UC y funcionalidades que uso actualmente, me indique cuales son las cosas que debo revisar para cambiar de versión de GeneXus y no tener sorpresas. 

Comparar Interfaz de mi KB (a través del tiempo)


Analizar mi KB y explicarme en que lugares utiliza componentes externos. Considerar servicios, UC, File System, otras base de datos, etc. 
Hacer un análisis de impacto de los cambios que existieron entre dos momentos determinados en la KB. 
Seria como sacar una foto del estado actual y poder compararlo en el futuro cuando se hayan realizado cambios. 

Cambios sin romper compatibilidad hacia atrás. 


Poder tener una guia que me ayude a hacer cambios en mi aplicacion, que no rompan la compatibilidad hacia atrás, o sea que los pueda instalar (en varios pasos) para lograr el cambio necesario. 
Por ejemplo, si quiero cambiar el nombre de un atributo, que me indique:
* Crear el nuevo atributo con el nombre nuevo. 
* Ajustar los programas para que graben el atributo viejo y el nuevo
* Instalar V1
* Ajustar los programas propios para que usen el nuevo atributo (y sigan grabando el viejo)
* Instalar V2
* Ajustar los programas externos para que usen el nuevo atributo
* Dejar de grabar el atributo viejo
* Instalar V3
* Borrar el atributo viejo
* Instalar V4. 

Existen una cantidad de recetas de este tipo, para hacer estos cambios posibles en ambientes de varios nodos, o distribuidos con aplicaciones mobile, que serian buenas poder incorporarlas al desarrollo de forma un poco mas facil. 

Configuraciones. 

Los sistemas pueden ofrecer mas o menos funcionalidades, solamente haciendo cambios en la configuración de algunos de sus componentes. 
Por ejemplo:

Configurar GAM para autenticacion de Twitter/Facebook etc
Necesita varios pasos que están documentados y podrían automatizarse en un wizard. 

Configurar el Log 
Las bibliotecas de Log/Trace que usa GeneXus tienen una gran potencia, muchas veces desaprovechadas. 
Seria bueno tener ayuda en configurar el destino del log (tabla, UDP, archivo, consola, etc), poder definir filtros (que solo capture un programa en particular), poder agregar mas información al log (por ejemplo stacktrace, usuario GAM, etc). 
Existen recetas ya documentadas para todo esto, solo que no es trivial hacerlo sin cometer errores. 

Revisando el Wiki de GeneXus y ver todo lo que tiene varios pasos, permite ver varios candidatos a una automatización. 

Análisis de Vulnerabilidades. 

Si bien el Security Scanner es de ayuda, podria dar instrucciones mas precisas sobre que es lo que hay que cambiar y corregir para hacer mas fácil la programación segura. 

Análisis de Accesibilidad

Brindar una análisis de la KB y que ayude a cumplir con las normas de accesibilidad que cada dia son mas comunes en los sitios web y aplicaciones móviles. 

Acceso a opciones poco usadas. 


Hoy hay cantidad de funcionalidades que son útiles, pero son poco usadas, porque son difíciles de usar. 
Ejemplo de estas opciones:
Definir un atributo (o formula) como redundante. 
Definir índices en las tablas
Habilitar y definir el cache de tablas (deberia funcionar bien)
Cambios en los Data View (agregar un índice, por ejemplo). 
Usar Business Component (de 2 niveles). 


Operaciones con conjuntos de objetos. 


En KB grandes es común tener que hacer diferentes operaciones con un conjunto grande de objetos. Hacerlo de esta forma, permite corregir muchos programas al mismo tiempo, ahorrando mucho trabajo. 
Seria bueno poder contar con una herramienta que permita

Crear conjuntos de usuario por selección
Seleccionar objetos por un valor de las propiedades, por una referencia, por nombre, por categoría, por contener determinado texto, por usar una determinada regla, por tipo, por fechas, por generador, etc.  

Operaciones entre conjuntos
Poder unir dos conjuntos de objetos (todos los objetos de ambos conjuntos), hacer la intersección de dos conjuntos (los objetos comunes), y restar dos conjuntos (los que están en uno y no estan en el otro).
Otras operaciones útiles son Objetos de un Conjunto, que referencian a otro conjunto. 
Objetos de un conjunto que son referenciados por objetos de otro conjunto. 
Puede haber alguna mas, pero con estas, ya se pueden hacer muchas cosas. 

Operaciones sobre los objetos
Poder exportar, especificar, borrar, analizar, remplazar texto, mover, comparar, etc los objetos de un conjunto resultante. 

Como se usaría esto?
Yo me lo imagino de la siguiente forma, en un trabajar con objetos que permita las selecciones y operaciones de arriba, donde se mantiene una lista de objetos resultado y otra lista de objetos de trabajo y se pueden operar sobre ambas listas. 

Quiero exportar todos los objetos, que tienen referencia a un atributo que este basado en el dominio DOM1. 

Los pasos a hacer serian:
Crear el conjunto de atributos que referencian al dominio DOM1. 
Crear el conjunto de objeto que referencian el conjunto anterior. 
Exportar
Generalemnte se exportar para hacer un Search&Replace para corregir algo en forma masiva. 

También podría implementarse la opción de hacer el Search&Replace como una operación sobre dicho conjunto. 

Tener un prompt de dialogo tipo chat, puede hacer estas tareas mas faciles, pues se puede ir haciendo aproximaciones sucesivas sobre la tarea que quiero realizar. 

Deploy de aplicaciones

Dada una KB y una plataforma destino, definir los pasos a seguir para lograr un deploy exitoso. 
Los ajustes que hay que realizar en cada una de las plataformas, es un tema complejo y convendría poder capturar este conocimiento y traducirlo a scripts que ayuden en la tarea.

Optimización de base de datos. 

Es común que los administradores de base de datos hagan cambios en los índices, estadísticas y demás para lograr que la aplicación funcione mejor. Muchas veces ese conocimiento no vuelve a la KB. Seria bueno poder tener una herramienta que detecte estos cambios y los incorpore a la KB, por ejemplo trayendo los índices que están en la base de datos y no en la KB. 

Creación de Modelos de datos. 


Si se entrena a un modelo de Inteligencia Artificial para que sepa que son determinadas entidades, luego se podría lograr que le pidamos "Quiero una aplicación de Hospitales y manejo de turnos" y con esa información, nos pueda sugerir que usemos las entidades Hospital, Medico, Paciente, Turno, Consultorio, Especialidades Medicas, etc. Teniendo bien definidas las Entidades, Atributos y Dominios, puede ser de gran ayuda para empezar. También puede aplicarle los patrones que tengamos definidos en nuestra instalación y nos quedara un prototipo básico sin demasiado esfuerzo. 

Resumiendo, creo que hay una enorme oportunidad para GeneXus y para las empresas que desarrollan herramientas para acelerar mucho mas el desarrollo. Muchas cosas pueden resolverse con métodos mas o menos tradicionales y otros van a necesitar herramientas que usen inteligencia artificial, sobre todo para entender que es lo que el desarrollador quiere hacer y formalizarlo. 

Comentarios

  1. Buenas Sugerencias!
    Muchas gracias por todo Enrique!
    Saludos,
    gab

    ResponderBorrar
  2. Son increíbles la cantidad de posibilidades. Creo que para el 2024 va a explotar la cantidad y calidad de la creación de software

    ResponderBorrar

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.