El software es una pieza fundamental de la informática en nuestros días. Estés familiarizado con este concepto o no, se trata de algo tan complejo y variado que seguro que en este artículo puedes aprender mucho, acerca de sus tipos, cómo funciona y se desarrolla, y mucho más. Así que no dudes quedarte a leer. ¡Comenzamos!
Índice de contenidos
Hay mil maneras de definir el software, y una de las más sencillas es hablar de una colección de instrucciones y datos que le dicen a un ordenador qué tiene que hacer. Son los programas del ordenador, ni más ni menos, incluyendo además aplicaciones web y móviles, y básicamente cualquier otra cosa que entre dentro de esta definición.
El objetivo del software es desempeñar una determinada función cumpliendo una serie de requisitos, como pueden ser:
También podemos irnos a definiciones más sofisticadas del software, como la detallada en el libro Ingeniería del Software. Un Enfoque Práctico de Roger S. Pressman, que nos dice que el software es:
Esta sería una definición más amplia, pues lo que entendemos intuitivamente por software sería solo el primer punto, mientras que los otros dos lo acompañan necesariamente.
La diferencia entre el hardware y el software es evidente en el sentido de que son tangibles e intangibles, respectivamente, y de aquí podemos sacar una de las características del software más importantes, propuestas por Pressman: el software se desarrolla, no se fabrica.
Tampoco se «estropea», al no ser susceptible de los factores externos que llevan al hardware al estropearse, pero sí se deteriora si no se desarrolla adecuadamente, algo de lo que hablaremos luego (mantenimiento del software).
Es realmente complicado clasificar algo tan amplio como el software, pero podemos intentarlo, haciéndolo en base a distintos criterios, como el tipo de usuarios al que se dirige o su manera de distribuirse. Veamos algunas clasificaciones importantes.
La clasificación del software más obvia es según a qué se dirija, siendo un ámbito tremendamente amplio.
Este será el software pensado para controlar e interactuar con el hardware de la máquina, y que tendrá tan poca interacción con el usuario que podemos ignorar su existencia. A su vez, es absolutamente fundamental, pues sin él no podría funcionar el software de aplicación, que es el que nos interesa a los usuarios.
Aunque no tengan por qué estar a muy bajo nivel ni interactuar con el hardware, podemos añadir una parte más en esta clasificación:
Pasamos ahora a hablar del software que usamos, con el que interactuamos deliberadamente para obtener un resultado específico, más que para permitir que el equipo funcione.
Destacar también que se podría entender que el sistema operativo está dentro de esta clasificación, ya que interactuamos con él. Pero realmente estamos interactuando con su interfaz gráfica, y no con su núcleo, que es algo mucho más próximo al hardware que a nosotros.
Y es que, como decimos, absolutamente todo lo que sea tecnológico hoy en día cuenta con algún software. Podemos ir desde un mini-programa que escribe por pantalla “Hola Mundo” hasta los complejos y vitales sistemas que controlan un avión moderno.
En el artículo, para hacer ejemplos simples y entendibles nos estamos centrando en aplicaciones de escritorio de ordenador y aplicaciones web para hablar de software. Lo dejamos claro para evitar que se asocie únicamente al software con un programa de un ordenador.
Esta es una clasificación bastante evidente, aunque podemos encontrar muchos tipos distintos. Como decimos, el software está en todo tipo de dispositivos, pero nos vamos a quedar solo con los tipos de plataformas que «se nos quedan cerca» a los usuarios:
Dentro de cada categoría, o incluso entre varias, podemos hablar de software multiplataforma para todo aquel que puede ejecutarse en distintos sistemas operativos. Podríamos continuar la clasificación hablando de aspectos como el software usado en el internet de las cosas, pero en este caso lo dejaremos así.
Un aspecto muy importante por el que podemos clasificar es la manera de distribuirse del software, relacionada con el tipo de licencia que tiene, pues puede dar más o menos poder a los usuarios, y el modelo de negocio de la compañía que lo desarrolla. En muchos casos se obtendrán ingresos directamente con la venta del producto, en otros se buscará por otras vías.
No vamos a entrar a detallar los distintos tipos de licencia de software, ya que hay muchas opciones distintas, pero sí en una de las clasificaciones más comunes de software que se suelen hacer: freeware, freemium, shareware y adicionalmente SaaS.
Comprende todo programa que está disponible de manera gratuita, de forma que cualquiera puede utilizarlo, pero viene acompañado de una licencia que impide modificar su estructura o su código.
Hay ejemplos muy buenos de freeware como buena parte de las aplicaciones de mensajería que usamos en el día a día (WhatsApp) o navegadores como Opera.
Así, se nos atrae a usar el programa proporcionando funcionalidades gratuitas, pero en cuanto queramos expandir el uso hasta ciertas otras tendremos que pagar, de ahí viene el beneficio de ese tipo de aplicaciones.
Hay todo tipo de ejemplos de software freemium, como podría ser Spotify, pues dependiendo de si paguemos o no tendremos más o menos funcionalidades en sus distintas aplicaciones.
Realmente, se suele considerar al freemium como un tipo de shareware, pero vamos a indicarlos por separado. En este caso hablamos de programas que se proporcionan de forma gratuita solo durante un período de prueba determinado, para que así los usuarios puedan probarlo, y decidir a posteriori si comprarlo o no.
La gran diferencia con el modelo freemium es que en este último el período de uso es ilimitado, pero simplemente tendremos acceso a un conjunto de características bastante inferior. En todo caso, este es también un modelo muy empleado, por ejemplo en la suite de programas de Adobe.
Este tipo de programas no solo son gratuitos, sino que además el desarrollador hace público su código fuente, algo que generalmente se acompaña de una licencia altamente permisiva que da la potestad a cualquiera de cambiarlo a su gusto, e incluso en muchos casos aceptar contribuciones de los usuarios. Así es cómo se consigue, por ejemplo, cualquier sistema basado en Linux, lleno de pequeñas piezas creadas por miles de personas.
Con código fuente nos referimos a todos los ficheros en los que están las líneas de programación que hacen posible que el programa funcione, por lo que todo su desarrollo está expuesto.
Entre los ejemplos más importantes de software de código abierto, que la mayoría de nosotros usamos, están:
Pero sobre todo hay que tener en cuenta una cosa: casi todo el software que usamos hace uso de bibliotecas (os hablaremos de ellas) de código abierto. Es decir, que aunque sea privativo usa partes de terceros que son de código abierto, o incluso hace públicas algunas, como es común en grandes empresas como Google y Facebook. El software libre es fundamental para entender el mundo tal y como lo conocemos.
Hay que tener en cuenta que los términos de software de código abierto y software libre no son totalmente intercambiables, ya que se pueden diferenciar en su filosofía. Es algo que depende mucho de a quién preguntes y de cómo de rigurosos queramos ser. Conceptualmente, hablar de “código abierto” no tiene por qué implicar que esté permitida su redistribución, mientras que cuando hablamos de “software libre” sí lo incluimos.
En todo caso, hemos tratado por igual al software libre y al de código abierto en esta definición porque nos ha parecido lo más razonable, y porque en la mayoría de casos son perfectamente intercambiables.
Este modelo comprende un software basado en suscripciones pero de una manera muy peculiar: cuando un usuario obtiene una suscripción, no se le proporciona el software para que lo instale en su ordenador, sino que se le permite acceder a él a través de la nube, pues este estará siempre en los servidores de la empresa desarrolladora, incluidos los datos usados por el cliente.
Así, se consiguen importantes ventajas, como es no depender del hardware del usuario para funcionar, ya que tan solo requiere un navegador web, lo que puede reducir la inversión en ordenadores de las empresas (lo mismo ocurre para el almacenamiento, que queda en la nube).
En todo caso, todos usamos el SaaS hoy en día, pues también puede ser gratuito, como es el caso de Google Drive y su suite de ofimática. Por la banda empresarial hay SaaS por todas partes, solo hay que ver (por ejemplo) el catálogo de Attlasian.
Que un software funcione se explica gracias a la programación. Vamos a intentar dar una explicación simplificada y fácil de entender.
Se trata básicamente de decirle al ordenador qué es lo que debe hacer, en base a qué instrucciones, algoritmos y procedimientos. Para ello se emplea un lenguaje de programación, que nos permitirá básicamente dar estas órdenes usando palabras y símbolos en base a una sintaxis concreta, sin la necesidad de definir estas órdenes directamente en código binario, que es lo que la máquina puede entender.
#include <stdio.h> int main() { int numero; printf("Introduce un número: "); scanf("%d", &numero); printf("Has introducido el número %d\n", numero); return 0; }
Primero indicamos que queremos incluir la biblioteca stdio. Esta contiene funciones básicas para interactuar con el sistema operativo y el usuario. Luego, entramos en la sección principal del programa, que se acota por esos corchetes { }.
Ahí, se define una variable, de la que tenemos que especificar de qué tipo será. En este caso un número entero. En las variables es donde almacenamos los números, cadenas de caracteres y demás con los que estaremos trabajando y operando. Ahora, siempre que hagamos una referencia a “numero”, se referirá a esa variable.
Como pretendemos dar una introducción extremadamente superficial a la programación, es posible que no hayas entendido qué supone todo lo usado en el código de arriba, como las variables. Pero si es un tema que te interesa, no te preocupes porque no es nada difícil, e intenta olvidarte de lo hostil que puede parecer al principio. Con interés y un poco de esfuerzo, enseguida lo entenderás.
En el bajo nivel encontramos el lenguaje ensamblador, que depende de la arquitectura del ordenador, mientras que en el alto nivel seguramente hayas oído hablar de muchos de ellos como son Java, Python, PHP, JavaScript, C# y más. También los fundamentalísimos C y C++, que algunos consideran de “nivel medio”.
La manera en que se pasa de las sentencias escritas por el programador a acciones realizadas por el hardware depende de muchos factores. Entre ellos, obviamente, el lenguaje de programación de origen. Pero vamos a dar un caso genérico, correspondiente a un programa normal que es compilado, es decir, traducido a código ejecutable.
Para que se pueda pasar de las líneas de código a la “acción” por parte del procesador, es necesario traducirlas a un lenguaje ensamblador, más cercano a lo que entiende la máquina debido a que cada una de sus líneas será una instrucción del procesador, que luego se puede pasar al código binario que, ahora sí, la CPU es capaz de procesar y ejecutar, a base de separar las distintas partes de ese código binario, identificando el tipo de instrucción y sus operandos.
Además de esto, también hay que tener en cuenta otras interacciones con el hardware que vienen dadas gracias a las gestiones realizadas por el propio sistema operativo, que se pueden solicitar desde el programa mediante llamadas al sistema (syscalls).
Para mucha gente, dedicarse a programar o a desarrollar software es una magia que solo unos pocos son capaces de hacer. Sin embargo, esto no es cierto. Programar no requiere ser el mejor del mundo en matemáticas o pensamiento lógico. Son obviamente facultades muy importantes (sobre todo esta última), pero está al alcance de mucha más gente de lo que parece.
Está muy bien que quien quiera ser programador/a estudie algo relacionado con ello, pero no es estrictamente necesario, a diferencia de otras muchas profesiones. En cualquier empresa dedicada al software habrá programadores con todo tipo de titulaciones. Lo importante es formarse adecuadamente, y de hecho con los estudios de una titulación seguramente no sea suficiente.
Sin duda, lo mejor para intentar entrar en ese mundo es partir de un aprendizaje relativamente autónomo, pues será una habilidad necesaria en toda tu vida profesional. Hay muchas academias y cursos, tanto gratuitos como de pago, con los que dar los primeros pasos. Piensa en pequeños proyectos que te interesen o te solucionen algún problema, y enfréntate a ellos.
Finalmente, respecto a las expectativas económicas de dedicarse a esto, deberías tener cuidado con tus pretensiones. Si te quieres dedicar a programar solamente porque crees que “ganarás mucho dinero”, y no por interés y afición, entonces olvídate de ello. Los salarios varían mucho respecto a la posición y el país, así que no está 100% asegurado que tengas acceso a posiciones muy bien pagadas. Al menos en este caso, centrarse en el dinero no es la clave para conseguirlo.
Hay un montón de conceptos, procesos y maneras de trabajar asociadas a esto. Pero vamos a dar una clasificación bastante sencilla de entender, la del proceso de construcción del software detallado en Ingeniería del Software. Un Enfoque Práctico de Roger S. Pressman.
En esta primera fase, debemos definir qué vamos a hacer, es decir, cuál va a ser el problema que vamos a intentar suplir y solucionar, y una vez conseguido empezaremos a pensar en la funcionalidad y rendimiento esperados, además de qué SO y hardware usaremos en esta tarea. La fase comprende un análisis del sistema, de requisitos del software, y una planificación de las tareas que se llevarán a cabo en el proyecto.
Si estuviésemos realizando un trabajo para un cliente concreto, que nos pide que le desarrollemos un software, tendríamos que realizar esta fase en conjunto con el cliente.
En esta fase respondemos a la pregunta de cómo vamos a implementar el software, entrando ya a un nivel de gran detalle, que comprende los siguientes puntos:
También es muy importante optimizar todos los programas en general, algo que se enmarcaría entre la parte de “adaptación” y la de “mejora”. Dos de los mayores ejes de optimización son los accesos a datos, que si se hacen fuera de la memoria caché del procesador pueden ser muy costosos, y la paralelización. Actualmente todos los procesadores tienen más de un núcleo, pero no todo software es capaz de aprovecharlo.
Eso sí, no todos los programas tienen la misma necesidad de optimización. Si un reproductor de música simple no optimiza la manera en que almacena una lista de canciones, no pasa nada. En cambio, si un juego no está bien optimizado, será todo un sufrimiento para quien tenga un equipo modesto.
En Profesional Review, somos una web principalmente dedicada al hardware, así que para nosotros hay ciertos tipos de software que son fundamentales: estamos hablando de:
Dentro del grupo del software de monitorización, quizás el más importante sea HWinfo64, al ser líder en cuanto a compatibilidades y funcionalidades, y totalmente gratuito. Dentro de los benchmarks, todo depende de qué componentes queremos testar:
También podemos hablar de programas muy especiales para explicar la relación entre el software y el hardware, como son las suite de profiling, como Intel VTune Amplifier, que son de lo más avanzado que pueden encontrar los desarrolladores para analizar cómo interactúa su programa con CPU, GPU y memorias, a un nivel muy bajo y detallado. Así, la optimización de la que hablábamos se vuelve mucho más posible.
En este artículo nos hemos dedicado a analizar a fondo qué es el software, esto es, la colección de instrucciones y datos que le dicen a un ordenador qué debe hacer, para desempeñar una función concreta.
Está claro que se nos han quedado un montón de cosas en el tintero, pero es normal: el software es sin duda uno de los grandes motores del mundo en el que vivimos, por lo que escribir un artículo dando una visión general del mismo es algo realmente complicado. Si consideras que hay una información que sea una “gran ausente” en este artículo, no dudes en compartirlo con nosotros en los comentarios, ya que es un tema apasionante.
Os recomendamos los siguientes tutoriales sobre software:
Aquí finaliza nuestro repaso sobre el software, no dudes dejarnos tus comentarios para dar tu opinión, y consultar todas las guías y tutoriales que te enlazamos arriba. ¡Gracias por leernos!