Software
Definición
El software Es el componente lógico de una computadora o modelo computacional1, compuesto por el conjunto de herramientas abstractas (programas) que hacen que el hardware realice tareas útiles.
El mundo del software (Ingeniería de Software y Ciencias Básicas de la Computación) es el mundo de las ideas, los modelos, el plano sin límites. De hecho, casi todas las ideas novedosas que se ven en programación ya fueron pensadas varias décadas atrás. Pero suele tomar muchos años que una idea ingeniosa llegue al piano real porque depende del grado de avance del hardware y la tecnología con que es construido.
Clasificación
-
Software de sistema: Son los programas que controlan o mantienen todas las operaciones de la computadora y sus dispositivos.
El software de sistema se puede clasificar en:
-
Sistemas operativos (SO u OS por sus siglas en inglés operating system): Es el conjunto de programas que:
-
permiten la ejecución de aplicaciones que realizan diferentes tareas con la computadora y sus dispositivos (periféricos);
- administran la computadora y sus recursos, que son constantemente disputados entre las solicitudes de todos los diferentes procesos o programas ejecutándose al mismo tiempo;
- y proporcionan una interfase para que el usuario interactúe con la computadora.
En la actualidad podemos mencionar Windows, macOS, Unix, Linux, IOS y Android como los sistemas operativos más populares.
-
Controladores de dispositivo y utilidades del sistema: Es el conjunto de programas que:
-
administran y coordinan todos los recursos de hardware;
- permiten al usuario realizar funciones como crear carpets y listar su contenido, organizar y copiar archivos, imprimir archivos, etc.
Algunos sistemas operativos populares hoy en día son: Windows, Linux, osx, ios y Android.
¿Sabías que...?
Una computadora puede funcionar sin el sistema operativo (SO)?
¡Claro!
Pero ninguna computadora moderna lo intenta, porque no da buen resultado. Por ello, aunque no hace a la esencia del concepto de computadora, muchas personas toman como indicador de que un dispositivo esta en esa categoría si trabaja con un SO.
- Lenguajes de programación: Es el conjunto de herramientas compuesto por programas y utilidades que, al proporcionar reglas y símbolos de un lenguaje formal o artificial que estructuran y hacen comprensibles las instrucciones para la computadora, permiten el desarrollo de más software. Es decir, son programas y utilidades que se emplean para desarrollar otros programas permitiendo traducir nuestras ideas en código ejecutable para que las computadoras realicen tareas específicas.
Estas herramientas suelen incluir procesadores de texto, depuradores, compiladores y otras utilidades necesarias para la programación.
Está dirigido a los programadores o desarrolladores de software, quienes utilizan estas herramientas para:
- crear, depurar y mantener sistemas operativos;
- crear, depurar y mantener lenguajes de programación; y
- en su mayoría crear, depurar y mantener otros programas y herramientas.
Cada lenguaje tiene un alcance y manera de comunicación distintos. Permiten desde construir un sitio web y hacerlo funcionar desde cero hasta desarrollar una aplicación para Android o iOS o todo un nuevo sistema operativo.
A través de instrucciones, permite a un programador dar órdenes o establecer acciones consecutivas y algoritmos. Estas acciones controlan el comportamiento físico y lógico de una máquina.
La comunicación entre la computadora y el programador se basa en significados concretos, sin espacio para ambigüedades o interpretaciones. Esto contrasta con el lenguaje natural, que es más flexible y subjetivo.
Los lenguajes de programación se clasifican en dos categorías principales según su proximidad al hardware y su nivel de abstracción:
-
Lenguajes de bajo nivel:
- Son más rápidos que los lenguajes de alto nivel
- Ofrecen una menor eficiencia
- Estos lenguajes están más cerca del lenguaje de máquina (íntimamente relacionado con las instrucciones del hardware)
- Están compuestos por ceros y unos
- Tienen un control directo sobre el hardware y no requieren compiladores
- Son más difíciles de aprender
Ejemplos de lenguajes de bajo nivel incluyen el código máquina y el lenguaje ensamblador. Son difíciles de entender y escribir, pero aprovechan mejor las características del hardware.
-
Lenguajes de alto nivel:
- Son más lentos que los lenguajes de bajo nivel
- Ofrecen una mayor eficiencia
- Están diseñados para ser más fáciles de leer y escribir para los humanos
- Están compuestos por funciones y palabras claves; y estructuras y patrones que facilitan la programación
- Son independientes del hardware y se utilizan como intermediarios entre los desarrolladores y la máquina
- Se utilizan ampliamente en desarrollo Web y en la creación de software en general
- Son más fáciles de aprender
Ejemplos de lenguajes de alto nivel incluyen Python, Java, C++, JavaScript y Ruby.
En cuanto a otros niveles, algunos mencionan los lenguajes de nivel medio, que se encuentran entre los de alto y bajo nivel. Sin embargo, esta clasificación no es universalmente aceptada y no hay una definición precisa para los lenguajes de nivel medio.
En resumen, los lenguajes de programación varían en su nivel de abstracción y su relación con el hardware, y cada uno tiene su propósito y ventajas específicas.
- Aplicaciones de software: Son los programas que realizan tareas específicas para el usuario, como procesamiento de textos, navegación web, edición de imágenes, etc.
El software de aplicación se puede clasificar en:
-
Productividad: procesador de textos, hojas de cálculo, bases de datos, planillas de presentaciones, administrador de información personal, administrador de finanzas, etc.
-
Media: editor de imágenes, editor de videos, editor de audios, administrador de archivos multimedia, etc.
-
Hogar y entretenimiento: juegos, aplicaciones educativas, aplicaciones de consulta, aplicaciones de navegación Web, et.
-
Negocios: administración de negocios, aplicaciones de contabilidad, aplicaciones especializadas, etc.
-
Paquetes de programas (software suite): Son aplicaciones populares de de software agrupadas en una sola unidad. Como por ejemplo:
- el paquete de ofimática puede contener el procesador de textos, las hojas de cálculo, el manejo de bases de datos y las planillas de presentaciones entre otras aplicaciones.
- el paquete de diseño gráfico audiovisual puede contener el editor de imágenes, el editor de videos y el editor de audios entre otras aplicaciones.
- el paquete de arquitectura puede contener el editor de planos y el editor de modelado 3D entre otras aplicaciones.
-
¿Qué es un programa?
A lo largo de esta bibliografía se ha hecho mención al término programa pero sin saber realmente su significado. Esa intriga ha llegado a su fin:
Definición
Un programa de computadora es un algoritmo escrito en un lenguaje de programación que se ejecuta en ella para resolver un problema.
Pero también podríamos decir que un programa es la suma de un algoritmo y los datos que ese algoritmo va a procesar para obtener información.
´´´ P = A + D ´´´
Para escribir un programa es necesario escribir un algoritmo y diseñar una correcta organización de sus datos.
Para mantener la misma calidad de P, si la calidad de D aumenta, A puede ser más simples
Si mejoro A y D, aumenta la calidad de P.
Estos conceptos reflejan mejor la idea de la programación moderna.
¡Para recordar!
Un buen programador no sólo mira el algoritmo, también debe ser muy inteligente en la selección del modelo y las herramientas para organizar los datos.
Para comprender bien la ecuación deberíamos repasar e incorporar correctamente el concepto de cada término: algoritmo y datos.
Referencias
-
Un modelo computacional es una representación abstracta de un sistema, proceso o fenómeno que se crea utilizando conceptos y estructuras de la ciencia computacional. Estos modelos se diseñan para simular, analizar o entender el comportamiento de sistemas reales o abstractos mediante el uso de técnicas computacionales.
En esencia, es una abstracción que permite representar y estudiar sistemas y fenómenos utilizando herramientas y técnicas de la ciencia computacional, lo que facilita la comprensión y análisis de problemas complejos. ↩