Para referirnos a nuestra profesión (o a aspectos de ella) de una forma más o menos
formal, solemos usar términos como “Ciencias de la computación”, “Ingeniería
de Software” o “Arquitectura de Software”, muchas veces de manera
intercambiada, y sin distinguir entre cada uno de ellos. En el siguiente artículo
voy a establecer puntos que nos ayuden a diferenciarlos entre sí.
Dejemos claro para comenzar que el objetivo de nuestra profesión es hacer sistemas
software. Ese es el punto que no debemos perder de vista, y debemos enfocarlo todo
a través de él.
¿Qué es un sistema?
Un sistema, para la finalidad que nos ocupa, es un conjunto de elementos, de diversa
índole, que trabajan juntos para poder conseguir un objetivo.
¿Qué es un sistema software?
Es un conjunto de elementos (principalmente) software y de otra índole que interactúan
entre sí para ofrecer una funcionalidad.
En cuento al software puede incluirse aplicaciones, servicios, portales web, programas
propios o desarrollo de terceros.
¿Incluye los sistemas software, la parte hardware? Si. Es imposible ver un
sistema software como algo aislado del hardware. El software está diseñado para
instalarse en determinado hardware (Teléfonos, PC, MAC, servidores…) y en determinada
estructura (como ciertas redes, o arquitecturas cliente servidor, o incluso modelos
menos convencionales).
¿Los usuarios son parte del sistema? Si, en el sentido que estos cumplen
roles que contempla el software. Es necesario diseñar siempre el software desde
el punto de vista de las necesidades de los usuarios.
Ante de nada…
En cuento a las definiciones aquí expuestas, no son tratadas de forma académica,
o dicho de otra forma no se busca empatar los conceptos con títulos universitarios
ya que estos varían en cada país y muchas veces usan los términos equivalentes o
casi equivalentes.
En este artículo se busca obtener en cada definición un fin práctico, casi laboral.
Arquitectura de Software
La arquitectura de software se encarga de la creación de sistemas, enfocándose en
los puntos:
- Formaliza el cómo se debe diseñar un sistema.
- Define (identifica) los componentes de un sistema, las relaciones entre ellos y
su funcionalidad.
- Las conexiones con otros sistemas.
- La escalabilidad y la capacidad de mantenimiento de un software.
- La sencillez en general de un código.
- Identifica los puntos reutilizables de un código, y crea un escenario donde esto
es posible.
La importancia de una arquitectura es que garantiza que el código de un sistema
siga siendo compatible “hacia atrás” (lo existen), y “hacia delante”,
hacia las necesidades futuras y todavía no determinadas. En otras palabras posibilidad
el cambio.
Ingeniera de Software
La Ingeniera del Software abarca más puntos y de índole más diversa que la Arquitectura
de Software, o dicho de otra forma la Arquitectura de Software es un punto más,
perteneciente a la Ingeniera de Software.
La Ingeniera de Software abarca todos los procesos de la creación de software, desde
la identificación apropiada de las necesidades, hasta más allá de la creación de
un sistema como producto ("más allá", porque la ingeniera de software no
acaba con la entrega del mencionado sistema).
Los puntos en los que se enfoca la Ingeniera de Software son los siguientes:
- Definir la metodología de trabajo. Dicha metodología puede varias según las necesidades
del cliente, equipo (de trabajo), o producto.
- Gestionar los proyectos, así como de los recursos asignados (que pueden ser humanos,
físicos, o económicos)
- Define apropiadamente todas las fases del proyecto, y las necesidades y objetivos
de cada uno.
- Define los roles a cumplir en el proyecto.
- También se encarga de la relación (en varios niveles) con el cliente y de detectar
sus necesidades.
- Como ya mencionamos la arquitectura del software es gestionada como un subconjunto.
- En general, define de manera formal todos los pasos de creación y mantenimiento
de un sistema, abarcando no solo aspectos tecnológicos, sino de procesos y de gestión.
Ciencias de la computación
Las ciencias de la computación pertenecen a un rublo diferente a los anteriores,
su fin es menos práctico y más teórico, enfocándose más a asuntos académicos y de
investigación y menos en conseguir un producto funcional.
Las ciencias de la computación se encarga de descubrir que es lo
“que se puede hacer”
y
“por qué”. La ingeniería se encarga de encontrar un sentido práctico, funcional
e incluso laboral, al conociendo obtenido.