¿Qué son las Ciencias Computacionales y en qué se diferencian de la Ingeniería de Software?

Imagen
 En esta entrada del blog voy a compartir lo que yo entiendo como Ciencias Computacionales y su diferencia con la Ingeniería de Software. Cuando alguien escucha Ciencias Computacionales , muchas veces piensa: “Ah, eso es programar apps”, pero no. Es mucho más que eso. En este artículo voy a explicarlo sencillo, sin palabras complicadas. ¿Qué son las Ciencias Computacionales? Las Ciencias Computacionales (o Ciencias de la Computación) son la disciplina que estudia cómo funcionan los procesos de cómputo , cómo se representa la información y cómo resolver problemas usando algoritmos. En pocas palabras: es la ciencia que estudia cómo pensar problemas para que una computadora pueda resolverlos. No se trata solo de programar, sino de entender qué es posible calcular, cómo hacerlo eficiente y cómo modelar problemas del mundo real. ¿De dónde provienen? Las Ciencias Computacionales nacen formalmente en la década de 1930 y 1940, cuando matemáticos comenzaron a preguntarse: ¿Qué problemas p...

Siete patrones arquitectónicos de software que debe conocer, según los ingenieros de software.

En esta entrada del blog describiré un resumen de los siete patrones arquitectónicos de software más populares que he encontrado en la literatura (Sommerville, 2011), algunos de ellos los utilicé en proyectos de desarrollo web y de escritorio en los que en un tiempo participé. Estos, según los expertos, se considera que son los que debemos conocer. Si bien es cierto que especializarse en uno no es lo recomendado, pues el implementar tal o cual dependerá de los requerimientos de tu proyecto, si es necesario al menos conocerlos y saber qué es lo que son. A continuación describiré  lo que es 1) arquitectura dirigida por eventos, 2) arquitectura en capas,  3) arquitectura monolítica, 4) arquitectura de microservicios, 5) modelo-vista-controlador, 6) arquitectura master-slave y 7) arquitectura dirigida por modelos.

  1. Arquitectura dirigida por eventos: se basa en componentes desacoplados y con una comunicación asíncrona. En la literatura se propone como ideal para sistemas donde los eventos desencadenan acciones, fomentando la escalabilidad y la capacidad de respuesta.
  2. Arquitectura en capas: es una estructura jerárquica con capas distintas (Presentación, Lógica de Negocio, Datos). Esta arquitectura es común en aplicaciones empresariales, mejorando la mantenibilidad a través de la compartimentación y el desarrollo modular.
  3. Arquitectura monolítica: utiliza un código base unificado y unidad de despliegue, es adecuada, según los expertos, para aplicaciones más pequeñas o instancias centradas en la simplicidad. Agiliza el desarrollo y el despliegue con posibles problemas de escalabilidad.
  4. Arquitectura de microservicios: básicamente es un sistema distribuido con servicios independientes e interoperables, suele ser recomendada para sistemas grandes e intrincados, mejorando la escalabilidad, el aislamiento de fallos y permitiendo el desarrollo de servicios independientes, así como la reutilización de código.
  5. Modelo-Vista-Controlador (MVC): es una muy popular, pero antigua, data desde los años 70s, consiste en la segregación de las preocupaciones (los famosos concerns) en componentes de modelo, vista y controlador. Es común utilizarla en aplicaciones web, mejora la organización y el mantenimiento del código al separar la lógica compleja de la interfaz de usuario. En esta entrada del blog explico más a detalle lo que es el MVC.
  6. Arquitectura maestro-esclavo: maneja un control centralizado (maestro) con múltiples nodos de trabajo (esclavos). De gran utilidad en la informática distribuida, optimizando el procesamiento paralelo y el equilibrio de carga.
  7. Arquitectura dirigida por modelos: surge a inicios del año 2000, es estándar del Object Management Group. Básicamente, consiste en tres capas, en las cuales, especificas todo con modelos, lo que puedes transformar para generar los modelos de la capa independiente de computación (capa 1) a la capa independiente de la plataforma (capa 2) y a su vez de esta obtienes modelos específicos de la plataforma (capa 3), de los cuales obtienes el código fuente. Repito, la idea es no escribir código, casi nada, solo modelar y transformar modelos. Ejemplo en imagen (tomada de Betari 2018).


Recuerda, es importante conocer lo que son, para que, cuando estemos participando en un proyecto tener la idea de cual nos podría ser de utilidad para nuestro desarrollo.

Es cuánto.

Referencias:
  • Betari, Oualid & Filali, Saida & Azzaoui, Amine & Boubnad, Mohamed. (2018). Applying a model driven architecture approach: Transforming CIM to PIM using UML. International Journal of Online Engineering (iJOE). 14. 170. 10.3991/ijoe.v14i09.9137. 
  • Sommerville, I. (2011). Software engineering (ed.). America: Pearson Education Inc.

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

Aguilar-Calderón, J. A. (15 de enero de 2024). Siete patrones arquitectónicos de software que debemos conocer, según los ingenieros de software. ANOVA LAB MX. https://anovalabmx.blogspot.com/2024/01/siete-patrones-arquitectonicos-de.html

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)

Prototipado en Ingeniería de Software: Modelar antes de Construir

Hablemos de Propiedad Intelectual