websaber.es
El software se refiere a partes de la computadora que no tienen una forma material, como programas, datos, protocolos, etc. Es la parte de un sistema de computadora que consiste en información codificada o instrucciones de la computadora, en contraste con el hardware físico del cual el sistema está construido. El software de una computadora son los programas informáticos, bibliotecas y datos no ejecutables relacionados, como documentación en línea o medios digitales. El hardware y el software informático se necesitan entre sí y ninguno puede ser utilizado por sí mismo. Cuando el software se almacena en hardware que no se puede modificar fácilmente, como con la ROM del BIOS en una computadora IBM PC compatible, a veces se denomina "firmware".
SISTEMAS OPERATIVOS
• Unix and BSD
UNIX System V, IBM AIX, HP-UX, Solaris (SunOS), IRIX, lista de sistemas operativos de BSD.
• GNU/Linux
Lista de distribuciones de Linux, variaciones técnicas de las distribuciones de Linux.
• Microsoft Windows
Windows 95, Windows 98, Windows NT, Windows 2000, Windows ME, Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10.
• Dos
86-DOS (QDOS), IBM PC DOS, MS-DOS, DR-DOS, FreeDOS.
• Sistemas operativos de Macintosh
El clásico Mac OS, macOS (previamente OS X y Mac OS X).
• Embebido y en tiempo real
Lista de sistemas operativos embebidos (como los sistemas operativos de los móviles y smartphones: iOs, Android y Windows Phone).
• Experimentales
Amoeba, Oberon/Bluebottle, Plan 9 de laboratorios Bell.
LIBRERÍAS
• Multimedia
DirectX, OpenGL, OpenAL, Vulkan (API).
• De programación
Librerías de C standard, Standard Template Library.
DATOS
• Protocolo
TCP/IP, Kermit, FTP, HTTP, SMTP.
• Formato de archivo
HTML, XML, JPEG, MPEG, PNG.
INTERFAZ DE USUARIO
• Interfaz gráfica de usuario (WIMP)
Microsoft Windows, GNOME, KDE, QNX Photon, CDE, GEM, Aqua.
• Interfaz de usuario basada en texto
Interfaz de línea de comandos, interfaz de usuario de texto.
SOFTWARE DE APLICACIÓN
• Suite de oficina
Procesamiento de textos, autoedición, programa de presentaciones, sistema de gestión de base de datos, programación y gestión del tiempo, hoja de cálculo, software de contabilidad.
• Acceso a internet
Navegador, cliente de correo electrónico, servidor web, agente de transferencia de correo, mensajería instantánea.
• Diseño y fabricación
Diseño asistido por computadora, fabricación asistida por computadora, gestión de plantas, fabricación robótica, gestión de la cadena de suministros.
• Gráficos
Editor gráfico de trama, editor de gráficos vectoriales, modelador 3D, editor de animación, gráficos por computadora 3D, edición de video, procesamiento de imágenes
• Sonido
Editor de audio digital, reproducción de audio, mezcla, síntesis de audio, música de computadora.
• Ingeniería de software
Compilador, Ensamblador, Intérprete, Depurador, Editor de texto, Entorno de desarrollo integrado, Análisis de rendimiento de software, Control de revisión, Gestión de configuración de software.
• Educativo
Entretenimiento educativo, juego educativo, juego aplicado, simulador de vuelo.
• Juegos
Estrategia, Arcade, Puzzle, Simulación, Disparos en primera persona, Plataforma, Multijugador, Ficción interactiva.
• Otros
Inteligencia artificial, software antivirus, analizador de malware, instalador de sistemas de gestión / paquete, administrador de archivos.
Hay miles de lenguajes de programación diferentes, algunos destinados a ser de propósito general, otros útiles solo para aplicaciones altamente especializadas.
LENGUAJES DE PROGRAMACIÓN
• Lenguajes de ensamblador utilizados habitualmente
ARM, MIPS, x86.
• Lenguajes de programación de alto nivel utilizados habitualmente
Ada, BASIC, C, C++, C#, COBOL, Fortran, PL/1, REXX, Java, Lisp, Pascal, Object Pascal.
• Lenguajes de script Utilizados habitualmente
Bourne script, JavaScript, Python, Ruby, PHP, Perl.
PROGRAMAS
La característica definitoria de las computadoras modernas que las distingue de otras máquinas es que pueden programarse. Es decir que se pueden enviar algún tipo de instrucciones (el programa) a la computadora, y ésta las procesará. Las computadoras modernas basadas en la arquitectura de von Neumann a menudo tienen códigos de máquina en la forma de un lenguaje de programación imperativo. En términos prácticos, un programa de computadora puede tener solo unas pocas instrucciones o extenderse a muchos millones de instrucciones, como lo hacen los programas para procesadores de texto y navegadores web, por ejemplo. Una computadora moderna típica puede ejecutar miles de millones de instrucciones por segundo (gigaflops) y rara vez comete un error durante muchos años de funcionamiento. Los grandes programas de computadora que constan de varios millones de instrucciones pueden llevar años de trabajo a los equipos de programadores para escribir, y debido a la complejidad de la tarea, casi con certeza contienen errores.
-ARQUITECTURA DE PROGRAMA ALMACENADO
Esta sección se aplica a las computadoras más comunes basadas en máquinas RAM.
En la mayoría de los casos, las instrucciones de la computadora son simples: agregue un número a otro, mueva algunos datos de una ubicación a otra, envíe un mensaje a algún dispositivo externo, etc. Estas instrucciones se leen desde la memoria de la computadora y generalmente se ejecutan en el orden en que fueron dadas. Sin embargo, generalmente hay instrucciones especializadas para indicarle a la computadora que salte o retroceda a algún otro lugar en el programa y continúe ejecutando desde allí. Estas se llaman instrucciones de "salto" (o ramas). Además, `se puede hacer que las instrucciones de salto sucedan condicionalmente para que se puedan usar diferentes secuencias de instrucciones dependiendo del resultado de algún cálculo previo o algún evento externo. Muchas computadoras admiten directamente las subrutinas al proporcionar un tipo de salto que "recuerda" la ubicación desde la que saltó y otra instrucción para volver a las instrucciones que siguen a la instrucción de salto.
La ejecución del programa se puede comparar a la lectura de un libro. Mientras que una persona normalmente leerá cada palabra y línea en secuencia, a veces puede saltar a un lugar anterior en el texto o saltear secciones que no son de su interés. De manera similar, una computadora a veces puede retroceder y repetir las instrucciones en alguna sección del programa una y otra vez hasta que se cumpla alguna condición interna. Esto se conoce como el flujo de control dentro del programa y es lo que le permite a la computadora realizar tareas repetidamente sin intervención humana.
Comparativamente, una persona que usa una calculadora de bolsillo puede realizar una operación aritmética básica como agregar dos números con solo presionar algunos botones. Pero para sumar todos los números del 1 al 1.000 se necesitarían miles de pulsaciones de botones y mucho tiempo, con la casi certeza de cometer un error. Por otro lado, una computadora puede programarse para hacer esto con solo unas simples instrucciones.
-CÓDIGO MÁQUINA
En la mayoría de las computadoras, las instrucciones individuales se almacenan como códigos de máquina y cada instrucción recibe un número único (su código de operación o código de operación para abreviar). El comando para agregar dos números juntos tendría un código de operación; el comando para multiplicarlos tendría un código de operación diferente, y así sucesivamente. Las computadoras más simples pueden realizar cualquiera con un puñado de instrucciones diferentes; las computadoras más complejas tienen varios cientos para elegir, cada uno con un código numérico único. Como la memoria de la computadora puede almacenar números, también puede almacenar los códigos de instrucción. Esto lleva al hecho importante de que los programas completos (que son solo listas de estas instrucciones) pueden representarse como listas de números y pueden manipularse dentro de la computadora de la misma manera que los datos numéricos. El concepto fundamental de almacenar programas en la memoria de la computadora junto con los datos en los que operan es el quid de la arquitectura von Neumann, o programa almacenado. En algunos casos, una computadora puede almacenar parte o la totalidad de su programa en la memoria que se mantiene separada de los datos en los que opera. Esto se conoce como arquitectura de Harvard tras la creación de la computadora Harvard Mark I. Las computadoras modernas de von Neumann muestran algunos rasgos de la arquitectura de Harvard en sus diseños, como en los cachés de la CPU.
Si bien es posible escribir programas de computadora como largas listas de números (lenguaje de máquina) y aunque esta técnica se usó con muchas computadoras tempranas, es extremadamente tediosa y potencialmente propensa a errores en la práctica, especialmente para programas complicados. Sin embargo, a cada instrucción básica se le puede dar un nombre corto que es indicativo de su función y fácil de recordar: una mnemónica como ADD, SUB, MULT o JUMP. Estos mnemotécnicos se conocen colectivamente como el lenguaje ensamblador de una computadora. La conversión de programas escritos en lenguaje ensamblador en algo que la computadora realmente puede entender (lenguaje de máquina) generalmente se realiza mediante un programa de computadora llamado ensamblador.
-LENGUAJE DE PROGRAMACIÓN
Los lenguajes de programación proporcionan varias formas de especificar programas para que las computadoras se ejecuten. A diferencia de los lenguajes naturales, los lenguajes de programación están diseñados para no dejar ambigüedad y ser concisos. Son idiomas puramente escritos y a menudo son difíciles de leer en voz alta. En general, un compilador o un ensamblador los traduce en un código de máquina antes de ejecutarlos, o un intérprete los traduce directamente en tiempo de ejecución. A veces los programas se ejecutan mediante un método híbrido de las dos técnicas.
-LENGUAJES DE BAJO NIVEL
Los lenguajes de máquina y los lenguajes ensambladores que los representan (denominados colectivamente como lenguajes de programación de bajo nivel) tienden a ser exclusivos de un tipo particular de computadora. Por ejemplo, una computadora de arquitectura ARM (como la que se encuentra en un teléfono inteligente o un videojuego portátil) no puede entender el lenguaje de la máquina de una CPU x86 que podría estar en una PC.
-LENGUAJES DE ALTO NIVEL / LENGUAJES DE TERCERA GENERACIÓN
Aunque es considerablemente más fácil que en lenguaje de máquina, escribir programas extensos en lenguaje ensamblador a menudo es difícil y también es propenso a errores. Por lo tanto, la mayoría de los programas prácticos están escritos en lenguajes de programación de alto nivel más abstractos que pueden expresar las necesidades del programador de manera más conveniente (y de ese modo ayudan a reducir el error del programador). Los lenguajes de alto nivel usualmente se "compilan" en lenguaje de máquina (o a veces en lenguaje de ensamblador y luego en lenguaje de máquina) usando otro programa de computadora llamado compilador. Los lenguajes de alto nivel están menos relacionados con el funcionamiento de la computadora de destino que con el lenguaje ensamblador, y están más relacionados con el lenguaje y la estructura del problema a ser resuelto por el programa final. Por lo tanto, a menudo es posible usar diferentes compiladores para traducir el mismo programa de lenguaje de alto nivel en el lenguaje de máquina en muchos tipos diferentes de computadora. Esto es parte de los medios por los cuales el software como los videojuegos pueden estar disponibles para diferentes arquitecturas de computadora, como computadoras personales y varias consolas de videojuegos.
-LENGUAJES DE CUARTA GENERACIÓN
Los lenguajes de cuarta generación (4GL) son menos procesales que los lenguajes 3G. El beneficio de 4GL es que proporcionan formas de obtener información sin requerir la ayuda directa de un programador.
-DISEÑO DEL PROGRAMA
El diseño del programa con pequeños programas es relativamente simple e implica el análisis del problema, la recopilación de datos, el uso de las construcciones de programación dentro de los lenguajes, el diseño o uso de procedimientos y algoritmos establecidos, proporcionando datos para dispositivos de salida y soluciones al problema según corresponda. A medida que los problemas se vuelven más grandes y más complejos, se encuentran características tales como subprogramas, módulos, documentación formal y nuevos paradigmas, como la programación orientada a objetos. Los grandes programas que involucran miles de líneas de código y más requieren metodologías formales de software. La tarea de desarrollar grandes sistemas de software presenta un desafío intelectual significativo. Producir software con una confiabilidad aceptable alta dentro de un cronograma y un presupuesto predecible ha sido históricamente difícil; la disciplina académica y profesional de la ingeniería de software se concentra específicamente en este desafío.
-BUGS
Los errores en los programas de computadora se llaman "errores". Pueden ser benignos y no afectar la utilidad del programa, o tener solo efectos sutiles. Pero en algunos casos, pueden hacer que el programa o el sistema completo se "cuelgue", dejando de responder a las entradas, como los clics del mouse o las teclas, para fallar por completo o fallar. De lo contrario, los errores benignos a veces pueden ser aprovechados con fines malintencionados por un usuario sin escrúpulos que escribe un exploit, un código diseñado para aprovechar un error e interrumpir la ejecución correcta de una computadora. Los errores generalmente no son culpa de la computadora. Dado que las computadoras simplemente ejecutan las instrucciones que se les dan, los errores casi siempre son el resultado de un error del programador o un descuido en el diseño del programa. El Almirante Grace Hopper, un científico informático estadounidense y desarrollador del primer compilador, es acreditado por haber usado el término "bug" en la informática después de que se descubriera que una polilla se metió en el interior de la Harvard Mark II en septiembre de 1947, hasta que quedó atrapada en uno de los relés provocando un error en el funcionamiento de la máquina.