La Evolución en el Desarrollo de Software

Es una realidad que la tecnología avanza a pasos agigantados. La humanidad ha evolucionado gracias a la tecnología, como todo en esta vida, con sus puntos a favor y sus puntos en contra. Sin embargo, se considera positivo este avance para el ser humano. La evolución tecnológica y de comunicaciones se debe en una buena parte gracias a la creación del Internet y al desarrollo de la World Wide Web (WWW). Recordemos aquel proyecto que nació en el CERN, el Centro Europeo de Física Nuclear, en Ginebra (Suiza), de la mano del ingeniero y físico británico Sir Tim Berners-Lee como un sistema de intercambio de datos entre los científicos que trabajaban ahí. La WWW es un servicio que opera sobre Internet, como lo es el tan utilizado hoy en día correo electrónico, y ha permitido el desarrollo de software para dicho entorno, así como el surgimiento de nuevos lenguajes (o combinaciones de ellos) para desarrollar aplicaciones que operen en la web de una forma eficiente. Pero, antes de todo esto, una pieza clave fue el desarrollo de software. 

La tecnología hoy en día, para funcionar y/o administrarse, necesita de un software. La Ingeniería de Software (IS) es una disciplina muy antigua, tanto así que se considera que Alan Turing fue el primero que desarrolló una teoría sobre el software en un ensayo de su autoría en el año de 1935 sobre números computables. El término Ingeniería de Software se utilizó por primera vez en la década de los 50s por John W. Tukey y en los inicios de los años 60s. En esa época, la OTAN (Organización del Tratado del Atlántico Norte), a través de su división de ciencias, fue el patrocinador de dos conferencias sobre la IS, en 1968 y en 1969. Esto permitió dar el impulso y difusión que se necesitaba para su exposición global. Algunos investigadores y, por qué no, historiadores, consideran éste el inicio de la IS como profesión. Además, se considera que fue impulsada por una crisis que ocurrió entre 1960 y 1980, conocida en la literatura como la Crisis del Software, durante este periodo los proyectos de desarrollo sobrepasaron su planificación en tiempo, esfuerzo y costo. Incluso, algunos proyectos causaron pérdidas de vidas humanas. 

El desarrollo de software ha evolucionado, desde sus inicios con los primeros lenguajes de programación, pasando por la programación procedimental, orientada a eventos, orientada a objetos, hasta la actualidad con el desarrollo de software dirigido por modelos (Model-Driven Development), conocido también como la antesala o fundamentos del desarrollo sin código (No-Code) y Low-Code (bajo código), así como con el desarrollo de código fuente asistido por la muy de moda Inteligencia Artificial (IA). 

La evolución en el desarrollo de software ha llevado al surgimiento de lo que se conoce como los desarrolladores ciudadanos o citizen developers. Son trabajadores que no tienen un conocimiento especializado en el desarrollo de software, sea para el entorno de escritorio, web o móvil, que no forman parte de un equipo de desarrollo o incluso del departamento de tecnologías de la información de una empresa, pero que pueden crear software para uso empresarial o personal. El concepto de los desarrolladores ciudadanos surge con el desarrollo automatizado y semiautomatizado de software, si bien es verdad que un desarrollador de software profesional no quedará desplazado por un desarrollador ciudadano, es importante mencionar que cierto tipo de aplicaciones móviles, de escritorio o web, si pueden ser realizadas por los desarrolladores ciudadanos. Para comprender mejor esto, explicaremos el significado de Low-Code y No-Code. El primero se utiliza para generar parcialmente un software, es para la semiautomatización, por ejemplo, si necesito crear una aplicación robusta o que repita patrones de comportamiento, es posible generar gran parte del código fuente del software a desarrollar, pero requiere que alguien con al menos un conocimiento básico del código finalice el proceso de construcción e implementación. La segunda, por su parte, permite crear aplicaciones completamente funcionales sin escribir una sola línea de código fuente, claro, de baja complejidad que no requieran conexiones a sistemas software de terceros. Empresas internacionales han presentado herramientas bajo el concepto de Low-Code (Microsoft con Power Apps, WebRatio y Quickbase) y No-Code (Webflow, Wordpress, Xano) que permiten crear software rápidamente. 

La implementación de un proceso de desarrollo de software mediante el Low-Code y el No-Code son opciones sólidas que ayudarán a crear e implementar software rápidamente y a un menor costo en comparación con la programación tradicional. En este contexto, es importante saber cuál elegir para implementar, se recomienda elegir una plataforma No-Code si se tienen recursos limitados y se necesita crear aplicaciones de poca complejidad lo más rápido posible, siendo consciente de las limitaciones funcionales del No-Code. En cambio, es conveniente seleccionar una plataforma de Low-Code si sus aplicaciones son sencillas por naturaleza, pero tienen complejidades que podrían requerir el trabajo de desarrolladores adicionales, por ejemplo, conexiones con software de terceros, o si desea acelerar tanto a los desarrolladores profesionales como a los usuarios empresariales. En la Figura 1, tomada del artículo web: No-Code Landscape, se observa el landscape del No-Code, muestra un panorama de los distintos campos de aplicación en los que existen herramientas No-Code.
Figura 1. Ejemplos de aplicaciones No-Code en distintas áreas.

En esta evolución se encuentra el desarrollo de software asistido por IA. Este cambio de paradigma está impulsado por Codex, un modelo de aprendizaje automático de la empresa de investigación y desarrollo de IA OpenAI. La importancia de Codex radica en el hecho de que puede traducir comandos de lenguaje natural en código en más de una docena de lenguajes de programación. Codex desciende de GPT-3, el modelo de lenguaje natural autorregresivo de OpenAI. A continuación, se mencionan algunos ejemplos de aplicaciones de la IA en la generación de código fuente: AlphaCode, un nuevo sistema de inteligencia artificial para desarrollar código desarrollado por DeepMind que entiende el lenguaje natural y lo traduce a un lenguaje determinado. Se encuentra también GitHub Copilot, el cual es una herramienta que utiliza también el modelo OpenAI Codex para sugerir código y funciones completas en tiempo real, directamente desde tu editor. Amazon CodeWhisperer, que permite a los desarrolladores crear aplicaciones de manera rápida y segura. Proporciona sugerencias de código en tiempo real que van desde fragmentos hasta funciones completas, seguimiento de referencias y análisis de seguridad. Por último, Code GPT es una extensión que nos permite utilizar la API (Application Programming Interface) REST (REpresentational State Transfer) oficial de OpenAI en Visual Studio Code. En la Figura 2, se observan las tendencias en la aplicación de la Inteligencia Artificial en la Ingeniería de Software.

Figura 2. Tendencias en la aplicación de la IA como auxiliar en el desarrollo de software.

Finalmente, como dato interesante, Gartner predice que se prevé que las plataformas de aplicaciones de código bajo (Low-Code) sean el componente más grande del mercado de tecnología de desarrollo de código bajo, con un crecimiento del 25 % hasta alcanzar casi 10 mil millones de dólares en 2023. Además, que para 2026, los desarrolladores fuera de los departamentos de tecnología formales representarán al menos el 80% de la base de usuarios de herramientas de desarrollo de código bajo, frente al 60% en 2021, es decir, los ciudadanos desarrolladores.

Si quieres citar este artículo en tu texto, documento, etc. puedes hacerlo de la siguiente forma:

Aguilar-Calderón, J. A. (29 de agosto de 2023). La Evolución en el Desarrollo de Software. ANOVA LAB MXhttps://anovalabmx.blogspot.com/2023/08/la-evolucion-en-el-desarrollo-de.html

Es cuánto.

Fuentes consultadas: 
[1] Sitio Web Oficial World Wide Web Consortium (2023): https://www.w3.org/People/Berners-Lee/ 
[2] Artículo Web (2023): Alan Turing y el nacimiento de la computación: https://blogs.uoc.edu/informatica/alan-turing-ii-el-nacimiento-de-la-computacion/
[3] Randell, Brian. (1979). Software Engineering: As it was in 1968.. 1-10. 
[4] Martínez, R. N. (2015). El proceso de desarrollo de software. IT Campus Academy. 
[5] Pastor, O., España, S., Panach, J. I., & Aquino, N. (2008). Model-driven development. Informatik-Spektrum, 31, 394-407. 
[6] Lebens, M., Finnegan, R. J., Sorsen, S. C., & Shah, J. (2022). Rise of the citizen developer. Muma Business Review, 5, 101-111. 
[7] Artículo Web (2023): ¿Qué es el Low-Code?: https://neuronic.com.ar/low-code-que-es.html 
[8] Artículo Web (2023): No-Code Landscape: https://community.nasscom.in/communities/it-services/rapidly-expanding-no-code-landscape 
[9] Sitio Web Oficial OpenAI (2023): https://openai.com/ 
[10] Sitio Web Oficial de GPT-3 (2023): https://openai.com/product 
[11] Sitio Web Oficial de AlphaCode (2023): https://alphacode.deepmind.com/ 
[12] Sitio Web Oficial de GitHub Copilot (2023): https://github.com/features/copilot 
[13] Sitio Web Oficial de Amazon CodeWhisperer (2023): https://aws.amazon.com/es/codewhisperer/ 
[14] Sitio Web Oficial de CodeGPT (2023): https://codegpt.co/ 
[15] Artículo Web (2023): Gartner Forecasts Worldwide Low-Code Development Technologies Market to Grow 20% in 2023. https://www.gartner.com/en/newsroom/press-releases/2022-12-13-gartner-forecasts-worldwide-low-code-development-technologies-market-to-grow-20-percent-in-2023


Comentarios

Mi foto
José Alfonso Aguilar
Mazatlán, Sinaloa, Mexico
Me gusta aprender y escribir sobre tecnología y desarrollo. Soy Ingeniero en Sistemas Computacionales, trabajo como Profesor-Investigador en la Facultad de Informática Mazatlán, de la Universidad Autónoma de Sinaloa. México. Me gusta combinar la docencia-investigación con el giro profesional del desarrollo de software y gestión de proyectos de innovación.

Entradas más populares de este blog

Historia y versiones de HTML (HyperText Markup Language)

Todo lo que debes saber sobre el Model-View Controller (MVC) para Aplicaciones Web

Conceptos Básicos de la Arquitectura REST (REpresentational State Transfer)