El software es una parte fundamental de la informática en la actualidad. Ya sea que esté familiarizado con el concepto o no, es algo tan complejo y variado que ciertamente puedes aprender mucho de este artículo, incluidos los tipos, cómo funciona, cómo crece y más. Así que no dudes en quedarte y leer.
Hay miles de formas de definir el software, y una de las más simples es hablar de un conjunto de instrucciones y datos que le dicen a la computadora qué hacer. Estos son programas de computadora, nada más, así como aplicaciones web y móviles y básicamente todo lo que cae dentro de esta definición.
El propósito del software es realizar funciones específicas que cumplan con algunos requisitos, tales como:
También podemos encontrar definiciones de software más complejas, como las detalladas en los libros de Ingeniería de Software. Un enfoque práctico de Roger S. Pressman, quien nos dijo que el software es:
Esta sería una definición más amplia ya que nuestra comprensión intuitiva del software es solo el primer punto y los otros dos necesariamente lo acompañan.
La diferencia entre hardware y software es evidente en el sentido de que son tangibles e inmateriales, de lo que podemos deducir una de las características más importantes del software Pressman: el software se desarrolla, no se debe producir.
No se “bloquea” y es menos propenso a fallas de hardware por factores externos, pero es peor si no se desarrolla correctamente, lo cual veremos más adelante (mantenimiento de software).
Es realmente difícil categorizar algo tan amplio como el software, pero podemos intentar hacerlo en función de diferentes criterios, como el tipo de usuarios a los que se dirige o cómo se distribuye. Veamos algunas clasificaciones importantes.
La clasificación más obvia de software es su propósito, que es una gama muy amplia.
Sería un software diseñado para controlar e interactuar con el hardware de la máquina, con tan poca interacción del usuario que podríamos ignorar su existencia. Al mismo tiempo, esto es absolutamente fundamental, porque sin él no puede funcionar el software de la aplicación, que es de interés para nuestros usuarios.
Si bien no son de muy bajo nivel ni interactivos con el hardware, podemos agregar uno más a esta categoría:
Ahora pasamos al software que usamos con el que interactuamos intencionalmente para lograr ciertos resultados, en lugar de hacer que el dispositivo funcione.
Además, recuerda que los sistemas operativos se entienden de este tipo porque interactuamos con ellos. Pero en realidad estamos interactuando con su interfaz gráfica, no con el núcleo, que está más cerca del hardware que nosotros.
Esta es una clasificación bastante obvia, aunque podemos encontrar muchos tipos diferentes. Como dijimos, el software funciona en una amplia gama de dispositivos, pero nos ceñiremos a los tipos de plataforma que están “más cerca” del usuario:
En cada categoría, e incluso en algunas categorías, podemos hablar de software multiplataforma para todos que puede ejecutarse en diferentes sistemas operativos. Podríamos categorizar aún más discutiendo aspectos como el software utilizado en IoT, pero en este caso lo dejaremos como está.
Un aspecto muy importante que podemos catalogar como método de distribución de software está relacionado con el tipo de licencia que se posee, ya que puede dar más o menos derechos al usuario y el modelo de negocio de la empresa lo genera. En muchos casos los ingresos se obtendrán directamente de la venta de productos, en otros casos se buscarán ingresos de alguna otra forma.
No entraremos en detalles sobre los diferentes tipos de licencias de software porque hay muchas opciones diferentes, pero cubriremos una de las clasificaciones más comunes de software comúnmente creado: software gratuito, freeware, shareware y SaaS adicional.
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.
Este tipo de software es probablemente el más común en todas las plataformas en la actualidad. Básicamente, ofrece una parte de forma gratuita, por lo que tenemos un montón de funciones que se pueden usar de forma totalmente gratuita y otra parte pagada, generalmente como parte de la tarifa de suscripción.
Es por eso que nos atrae el programa al proporcionar funciones gratuitas, pero cuando queremos extender su uso a otros, tendremos que pagar una tarifa, por lo que los beneficios de este tipo de aplicación.
Hay diferentes ejemplos de software premium como Spotify porque dependiendo de si pagamos o no tendremos más o menos funcionalidad en sus diferentes aplicaciones.
De hecho, los bonos a menudo se consideran un tipo de shareware, pero los enumeraremos por separado. En este caso, estamos hablando de programas que solo se ofrecen de forma gratuita durante un determinado período de prueba para que los usuarios puedan probarlos antes de tomar la decisión de comprarlos.
La gran diferencia con el modelo premium es que este último tiene una vida útil ilimitada, pero solo teníamos acceso a un conjunto de funciones mucho más bajo. En cualquier caso, también es un modelo muy utilizado, por ejemplo, en la suite de programas de Adobe.
Otras variantes del shareware son:
Un programa es software libre si proporciona al usuario todas estas libertades de forma adecuada. De lo contrario, no es gratis. Hay muchas alternativas a la distribución que no son gratuitas, y aunque podemos distinguirlas en función de lo cerca que están de la libertad, las consideramos igualmente poco éticas.
En cualquier caso, estas libertades se aplicarán a cualquier código que tengamos la intención de usar o permitir que otros usen. Tomemos el ejemplo del programa A, que ejecuta automáticamente el programa B para realizar un trabajo. Si tiene la intención de distribuir A tal cual, significa que los usuarios necesitarán B, por lo que debe considerar si tanto A como B son gratuitos. Sin embargo, si va a modificar A para que no use B, entonces solo A debe estar libre; en este caso, B no es relevante.
“Software libre” no significa “no comercial”. En su lugar, los programas gratuitos deben estar disponibles para uso comercial, programación comercial y distribución comercial. Esto es necesario para que el software libre no pueda lograr su objetivo. Queremos invitar a todos a usar el sistema GNU, incluidas las empresas y sus empleados. Debe permitir el uso comercial. Queremos que el software libre reemplace el software propietario similar, pero no si las empresas tienen prohibido usarlo. Se espera que los productos de software comerciales incluyan el sistema GNU, que se distribuirá comercialmente a cambio de dinero. El desarrollo comercial de software libre ya no es común, y el software libre comercial es muy importante. El soporte profesional pagado para software gratuito cubre una necesidad crítica.
Por lo tanto, excluir el uso comercial, el desarrollo comercial y la distribución comercial será un obstáculo para la comunidad del software libre y su éxito. Debemos concluir que los programas licenciados con tales restricciones no pueden ser considerados software libre.
Un programa gratuito debe otorgar cuatro libertades a cualquier usuario potencial para obtener una copia del software y sujeto a los términos de licencia gratuita que se aplican al software en todas las distribuciones del software. Privar a algunos usuarios de cualquier libertad o exigir el pago en efectivo o en especie por su uso equivale a no garantizar su libertad, lo que hace insostenible la gratuidad del programa. Dibuje la línea entre software gratuito y software propietario
Más adelante en este artículo, explicaremos con más detalle hasta qué punto cada una de estas libertades debe estar en diferentes situaciones para que un programa sea libre.
La libertad de ejecutar un programa significa que cualquier tipo de persona u organización puede utilizar libremente el programa en cualquier sistema informático, para cualquier tipo de trabajo y propósito, sin notificar al desarrollador u otra entidad específica. En esta libertad, es el objetivo del usuario, no el programador, lo que importa. Como usuario, eres libre de ejecutar el programa para tus propios fines, y si lo distribuyes a otros, esa persona puede ejecutar el programa según sus necesidades, no tienes derecho a imponer tus objetivos a los demás.
La libertad de ejecutar un programa según sea necesario significa que no se le prohíbe ni se le impide ejecutarlo. No tiene nada que ver con el tipo de funcionalidad del programa, su capacidad técnica para ejecutarse en un entorno dado o el hecho de que el programa sea útil o inadecuado para ciertas operaciones computacionales.
Por ejemplo, si su código rechaza arbitrariamente un comando importante (o incluso sin motivo), haciendo que el programa sea inútil o incluso completamente inútil, pero el usuario no se ve privado de la libertad de ejecutar el programa, el programa no funciona. Gratis . Si el programa es gratuito, los usuarios pueden restaurar su usabilidad porque Freedom 1 y 3 permiten a los usuarios y colectivos crear y distribuir versiones modificadas de código problemático que se ha dañado para borrar.
“Si es necesario” incluye una opción de “Nada” si lo desea. Por lo tanto, no es necesario agregar “libertad para no ejecutar el programa”. Libertad para estudiar y modificar el código fuente.
Para que las libertades 1 y 3 (hacer cambios y publicar versiones modificadas) tengan sentido, debe tener acceso al código fuente del programa. Por lo tanto, obtener el código fuente es un requisito previo para tener software libre. El “código fuente” oculto no es código fuente real, ni se considera código fuente.
Freedom incluye la libertad de usar una versión modificada en lugar de la original. Si el programa enviado con un producto está diseñado para ejecutar una versión modificada por un tercero, pero se niega a ejecutar su propia versión, este método se denomina “verificación” o “bloqueo” o (en los términos técnicos de los profesionales) “lanzamiento seguro”. ” “… Freedom se convierte más en una simulación vacía que en algo real. Aunque se compilan a partir de un código fuente gratuito, estos binarios no son software libre.
Una forma importante de modificar un programa es agregarle subrutinas existentes y módulos libres. Si la licencia del programa establece que no puede agregar módulos que ya existen y que tienen la licencia adecuada, por ejemplo, si requiere que usted sea el propietario de los derechos de autor del código agregado, la licencia de uso es demasiado limitada. .
Si una enmienda es una mejora es una cuestión subjetiva. Un programa no es gratuito si sus derechos para modificarlo se limitan esencialmente a modificaciones que otros consideran una mejora. Un caso especial de la libertad 1 es la libertad de eliminar código de un programa para invalidar su ejecución o llamar a otros programas. Por lo tanto, Freedom 1 incluye “Freedom to Remove Programs”.
Si lo desea, puede distribuir copias: requisitos básicos
La libertad de distribución (Libertad 2 y 3) significa que puede distribuir copias, con o sin modificaciones, a cualquier persona y en cualquier lugar, de forma gratuita o mediante el pago de una tarifa. La libertad de hacer esto significa que, entre otras cosas, no tienes que pedir ni pagar ningún permiso para hacerlo.
También eres libre de modificarlos y usarlos de forma privada para tu propio trabajo o pasatiempos, sin mencionar su existencia. Si publica cambios, no es necesario que notifique a nadie de manera específica ni de ninguna manera en particular.
Freedom 3 incluye la libertad de publicar versiones modificadas como software libre. Una licencia libre también puede permitir otras formas de publicación, es decir, no tiene que ser una licencia copyleft. Sin embargo, una licencia que requiera una versión modificada que no sea gratuita no puede considerarse gratuita.
La libertad de redistribuir copias debe extenderse a la forma binaria o ejecutable del programa, así como a las versiones modificadas y no modificadas del código fuente. (Los programas deben distribuirse como archivos ejecutables para facilitar la instalación de un sistema operativo gratuito). Si no hay forma de crear un formato binario o ejecutable para un programa en particular, es aceptable obtenerlo porque algunos idiomas no tienen esto. característica, pero si encuentra o escribe métodos para redistribuir dichos formatos para hacerlo.
Ciertas reglas que rigen la distribución de software libre son aceptables, siempre que no entren en conflicto con algunas libertades fundamentales. Por ejemplo, el copyleft se define de manera muy sucinta cuando distribuye un programa, no puede agregar restricciones que resten valor a las libertades fundamentales de los demás. Este principio no es contradictorio, sino que protege las libertades fundamentales.
En el Proyecto GNU, usamos copyleft para proteger legalmente las cuatro libertades de todos. Creemos que hay algunas buenas razones para usar copyleft. Sin embargo, el software libre de copyleft también es ético. Para obtener una descripción de la relación entre “software libre”, “copyleft” y otros tipos de software, consulte la categoría de software libre.
Reglas de embalaje y envío
Cualquier regla para empaquetar versiones modificadas es aceptable siempre que no limite severamente su libertad para redistribuir versiones modificadas o su libertad para crear y usar versiones modificadas. En consecuencia, se permite que la licencia solicite el cambio de nombre de una versión modificada, la eliminación de un logotipo o una modificación identificada como propia. Estos compromisos se aceptan siempre que no impidan la publicación de cambios.
Dado que ya ha realizado otras modificaciones al programa, algunas más no deberían ser un problema para usted.
Reglas como “si proporcionas tu versión de esta manera, también debes proporcionarla de esa manera” se aceptan en las mismas condiciones. Un ejemplo de una regla permisiva es si distribuye una versión modificada y uno de los desarrolladores anteriores solicita una copia, debe enviársela (tenga en cuenta que dicha regla aún le permite enviársela).
Queríamos reunir un nuevo tipo de software: SaaS, o software como servicio, de una manera completamente única. Este es un modelo de licencia y distribución de software que debería haber sido parte de la clasificación anterior, pero es importante en sí mismo cuando se trata de computación en la nube.
Este modelo incluye software basado en suscripción, pero de una manera muy específica: cuando un usuario recibe una suscripción, no se le proporciona un software para instalar en su computadora, sino que obtiene acceso a través de la nube como siempre será el servidor. de la empresa promotora. disponibles, incluidos los datos utilizados por los clientes.
Como resultado, se obtienen beneficios importantes, como no depender del hardware del usuario para ejecutarse, ya que solo requiere un navegador web, lo que reduce la inversión en la computadora de la empresa (lo mismo que sucede también con el almacenamiento en la nube).
Debido a sus desventajas, ciertamente hemos notado una dependencia en el acceso a Internet porque en caso de que falle no podremos acceder a la aplicación, ni en caso de problemas de red o cierto hardware por parte del desarrollador. No hay más remedio que confiar en tasas de alta disponibilidad con infraestructuras sólidas en ambos lados. También nos hace dependientes del desarrollador porque no somos dueños del software, tenemos derecho a usarlo, y si la empresa cierra repentinamente o es pirateada, es posible que no tengamos nada.
En cualquier caso, hoy en día todos usamos SaaS porque también puede ser gratuito, al igual que Google Drive y su suite ofimática. En el caso de los equipos de negocios, SaaS está en todas partes, solo mire (ejemplos) en el directorio de Atlasian.
El funcionamiento del software se explica a través de la programación. Intentaremos darte una explicación sencilla y comprensible.
Básicamente le dice a la computadora qué hacer en base a instrucciones, algoritmos y programas. Para ello se utiliza un lenguaje de programación, que básicamente nos permite dar estos comandos en palabras y símbolos basados en una sintaxis particular, sin definir estos comandos directamente en código binario comprensible por máquina.
Veamos un ejemplo de un programa escrito en el lenguaje C con apenas unas pocas líneas de código:
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 “num”, se referirá a esa variable.
La función printf forma parte de la biblioteca que hemos incluido, y muestra un mensaje por pantalla. Por otro lado, scanf (también parte de stdio) recoge lo que el usuario escriba en la consola. Hacemos que lo que este escriba se guarde en la variable numero, cuyo valor recogido imprimiremos en ese último printf. Finalmente, “retornamos”, saliendo de la función principal (y por tanto del programa) con un código 0, que significa “con éxito”.
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.
Hay una infinidad de lenguajes de programación y de maneras de clasificarlos. Por ejemplo, por su paradigma, algo que tiene que ver con su filosofía y fundamento de funcionamiento, como es la programación orientada a objetos. También por su nivel de abstracción, donde distinguimos:
Lenguajes de bajo nivel: más cercanos al rendimiento de la máquina y, por lo tanto, menos amigables para los humanos.
Lenguajes de alto nivel: Su sintaxis dista mucho de cómo funcionan internamente las máquinas, pero facilita su comprensión por parte de las personas, haciéndolos más prácticos y fáciles de usar.
En el nivel más bajo está el lenguaje ensamblador, que depende de la arquitectura de la computadora, y en el nivel más alto debes haber escuchado mucho sobre ellos, como Java, Python, PHP, JavaScript, C #, etc. Aparte de eso, C es el más básico y C++, algunos de los cuales se consideran “promedio”.
Cómo pasar de lo que ha escrito un programador a una acción realizada por el hardware depende de muchos factores. Entre ellos, por supuesto, el lenguaje de programación original. Pero queremos dar un caso general que corresponde a un programa normalmente compilado, es decir, traducido a código ejecutable.
Para poder pasar “acciones” desde una línea de código al procesador, es necesario traducirlas a lenguaje ensamblador, que se acerca más al entendimiento de máquina, ya que cada una de sus líneas es una instrucción a la lógica del procesador que luego puede descomponerse separando las diferentes partes del código binario. Determina el tipo de instrucción y sus operandos y los convierte en código binario que el procesador puede procesar y ejecutar actualmente.
Además, hay otras interacciones con el hardware que deben tenerse en cuenta porque los procesos ejecutados por el propio sistema operativo pueden solicitarse desde un programa a través de llamadas al sistema.
Por supuesto, el software no se crea solo mediante la programación, ¿verdad? La idea no surge por sí sola, pero primero hay que pensarla, y no podemos empezar a codificar sin un plan claro. Además, debemos ser capaces de solucionar todos los problemas y errores que, casi con seguridad, se descubrirán cuando el programa se lance al público. No olvide la mejora continua para mantener a los usuarios en contacto con nosotros.
Hay muchos conceptos, procesos y formas de trabajar con él. Pero le daremos una clasificación muy fácil de entender, la clasificación del proceso de desarrollo de software se detalla en ingeniería de software. Un enfoque práctico por Roger S. Pressman.
En la primera etapa necesitamos definir lo que vamos a hacer, es decir, el problema que vamos a tratar de resolver y resolver y una vez hecho esto, comenzaremos a pensar en términos de funcionalidad y rendimiento esperado, así como el sistema operativo y el hardware. estar usando Esta fase incluye el análisis del sistema, los requisitos del software y la planificación de las tareas a realizar en el proyecto.
Si trabajamos para un cliente en particular y nos pide que le hagamos un software, tendremos que pasar por esta fase 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:
Esta es la fase final que abarca el resto del ciclo de vida del software, centrándose esencialmente en hacer lo necesario para que funcione y proporcionar todas las mejoras posibles, distinguiendo 4 actividades:
adaptar. El entorno en el que opera el software puede variar considerablemente. Considere un sitio web con una base de usuarios creciente y un acceso a la base de datos que debe optimizarse para no saturar el servidor. O, en un escenario más realista, de todos los desarrolladores que han adaptado su programa macOS para soportar los chips de Apple.
por lo general, común, normal. Cuando se descubre o informa un error o “error”, se debe lanzar una nueva versión para corregir el error.
Sin nuevas funciones, los usuarios se cansarán de este software. Tienes que seguir mejorándolo para que sea más útil e interesante.
Evitar. No tiene sentido esperar a que aparezca el error. Debemos ser ambiciosos para evitar que esto suceda e identificar dónde existe una posibilidad significativa de fracaso.
La optimización general de todos los programas también se colocará entre las secciones “Personalizado” y “Avanzado”. Los dos ejes principales de la optimización son el acceso a los datos, que puede resultar muy costoso si se realiza fuera de la memoria caché de la CPU, y la paralelización. Todos los procesadores de hoy en día tienen múltiples núcleos, pero no todo el software puede aprovechar esto.
Por supuesto, no todos los programas necesitan optimización. Si un reproductor de música simplemente no optimiza la forma en que almacena sus listas de reproducción, no pasará nada. Por otro lado, si el juego no está bien optimizado, será un dolor de cabeza para aquellos con listas modestas.
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.
¿Necesitas impulsar tu negocio? Contáctanos