Apunte III Software El término software, en su origen (del inglés: producto etéreo, pensamiento), lo constituye un conjunto de ideas, producto de la inteligencia de las personas para solucionar problemas de muy diversos tipos. Hay un abismo entre el ser humano, que nos permite comunicar al computador los problemas y hace posible que éstos comuniquen las soluciones.
Pero el software moderno de los computadores no surgió de la nada. Así como el hardware ha evolucionado continuamente para lograr que los computadores sean más rápidos y potentes, el software también ha mejorado constantemente para que éstos sean útiles y fáciles de usar. En cierto sentido, Von Neumann, Eckert y Mauchly establecieron la industria del software, al liberar a los programas de la tiranía del hardware. En vez de mover conmutadores y conectar cables, los programadores de hoy escriben programas, conjuntos de instrucciones de computador diseñados para resolver problemas, y los almacenan en la memoria de la máquina a través de dispositivos de entrada como el teclado y el ratón. Estos programas son el software del computador. Como el software se almacena en la memoria, los computadores pueden pasar de una tarea a otra y luego regresar a la primera, sin que sea necesario modificar el hardware.
Procesamiento con Programas El software es invisible y complejo. Para clarificar los conceptos, comenzaremos a explorar el software haciendo una analogía con la vida cotidiana.
Recetas del pensamiento Supongamos que el hardware de un sistema de cómputo es como la cocina de un restaurante. Está equipada para producir cualquier cosa que desee el cliente (usuario), pero permanecerá inactiva hasta que reciba una orden. Robert, el chef computadorizado de nuestra cocina imaginaria, sirve como la UCP, a la espera de solicitudes de los usuarios / clientes. Cuando alguien suministra una orden de entrada, digamos el pedido de un plato de tortilla de papas, Robert responde siguiendo las instrucciones de la receta indicada. Quizá ya haya adivinado que la receta es el software. Proporciona las instrucciones que indican al hardware qué hay que hacer para producir la salida deseada por el usuario. Si la receta es correcta, clara y precisa, el chef
convierte los datos de entrada (huevos, papas, cebollas) en salida (tortilla). Si las instrucciones no son claras o si el software tiene errores, probablemente la salida no será lo que quería el usuario. Supongamos Robert dispone de la siguiente receta para realizar la tortilla: 1. Combine 2 huevos ligeramente batidos, con una cucharadita de leche. 2. Remoje en la mezcla las papas cortadas en cuadrados pequeños. 3. Fría en un poco de manteca hasta que quede dorado. La receta anterior tiene bastantes imprecisiones como por ejemplo qué significa en el paso 1, batir los huevos ligeramente, no queda claro hasta que punto batir. En el paso 2 se indica que las papas deben estar cortadas en cuadrados pequeños, ¿cómo determinar cuando un cuadrado es pequeño?. El paso 3 indica que hay que freír pero no indica que elementos, con lo cual el chef podría ocurrírsele freír cualquier otro ingrediente que tuviese en la cocina. Estas acciones podrían ocurrir ya que Robert como cualquier procesador sólo sigue las instrucciones.
Una máquina rápida y estúpida Nuestro imaginario chef automatizado quizás no parezca muy inteligente, pero en realidad es mucho más astuto que la UCP de un computador corriente. Muchos creen que los computadores son “máquinas inteligentes”, pero la realidad es distinta: un computador representativo es una máquina increíblemente limitada, sólo capaz de efectuar las operaciones aritméticas más básicas y algunas comparaciones lógicas muy sencillas. Los computadores parecen inteligentes porque pueden realizar estas operaciones y comparaciones con gran rapidez y precisión. Por ejemplo, un computador de escritorio puede realizar miles de cálculos en el tiempo en que usted tarda en sacar una lapicera del bolsillo. Un programa bien elaborado puede indicar al computador que haga una secuencia de operaciones sencillas que, en conjunto, produzcan una presentación animada, impriman un documento o simulen un juego de tenis. Lo más sorprendente es que todo lo que vea hacer a un computador es el resultado de una secuencia de operaciones aritméticas y lógicas muy simples, realizadas a gran velocidad. El reto para los creadores de software es crear instrucciones que combinen estas operaciones simples de manera que produzcan algo útil y apropiado. La receta de la tortilla no es programa del computador; no está escrita en un lenguaje de máquina. Pero podemos considerarlo como un algoritmo: un conjunto de procedimientos paso a paso para realizar una tarea. La tarea del programador es convertir el algoritmo en un programa, añadiendo detalles, superando los puntos difíciles, probando los procedimientos y corrigiendo los errores. De nuestra receta deberíamos eliminar gran parte de las ambigüedades que tenía, la cual es una de las principales fuentes de errores en los computadores.
El lenguaje de los computadores Todos los procesadores procesan instrucciones en un lenguaje de máquina nativo. El lenguaje de máquina emplea códigos numéricos para representar las operaciones básicas del computador: suma, resta, comparación y movimiento de números, repetición de instrucciones etc. Los primeros programadores estaban forzados a escribir los programas en lenguaje de máquina traduciendo tediosamente cada instrucción a código binario. Este proceso era el preludio de la locura: trate de imaginar la dificultad de encontrar un carácter mal escrito en una página llena de ceros y unos. Hoy en día, casi todos los programadores utilizan lenguajes como DELPHI, C, JAVA, VISUAL BASIC, PHP, que ocupan una posición intermedia entre los lenguajes naturales humanos y los lenguajes de máquina. Estos lenguajes permiten que ingenieros, científicos y hombres de negocios resuelvan problemas utilizando una terminología y una notación familiares, en lugar de instrucciones de máquina. Para que un computador pueda comprender un programa escrito en uno de estos lenguajes, tiene que usar un programa de traducción para convertir las instrucciones parecidas al inglés en ceros y unos del lenguaje de máquina. En las últimas décadas ha sido constante la evolución de los lenguajes de programación. La nueva generación de lenguajes facilita la tarea de programación, al asumir más del trabajo detallado, ocultándolo del programador.
Pero no han desaparecido las duras exigencias del computador en cuanto a detalles técnicos, simplemente son manejadas en forma automática por el software de traducción. Gracias a ello, la programación es más sencilla y menos propensa a errores. Al ir aumentando la complejidad de los traductores, los programadores pueden comunicarse en lenguajes de computación que se parecen cada vez más a los lenguajes naturales, los lenguajes con los cuales hablamos y escribimos en nuestras actividades cotidianas. Incluso en los lenguajes de computación de vanguardia, la programación exige una considerable inversión de esfuerzo y tiempo mental. Los lenguajes de programación aún se emplean para resolver problemas que no pueden manejarse con aplicaciones comerciales de software, pero la mayoría de los usuarios se las arreglan para hacer su trabajo sin tener que programar. En la actualidad, en su mayor parte, la programación es realizada por creadores profesionales de software, quienes usan los lenguajes de programación para crear y refinar las aplicaciones y otros programas empleados por los usuarios en sus actividades diarias.
Software de Sistemas y Software de Aplicación Todos los programas que conforman el software pueden ser divididos en dos grupos bien diferenciados según su función:
Software de sistema. Compuesto por el conjunto de programas imprescindibles para el funcionamiento del hardware, más un conjunto cuya misión es la de facilitar el uso del sistema y optimizar sus recursos.
Software de aplicación. Es el conjunto de programas que se desarrollan para que una computadora realice cualquier trabajo controlado por el usuario.
En la siguiente figura se representa gráficamente la relación entre los dos grupos anteriores y el hardware de un sistema.
Soft. de Sistema Hardware Sof. de Aplicación Usuario
El software de sistema es el conjunto de programas encargados de la gestión interna de la computadora, es decir, de la unidad central de proceso, la memoria central y los periféricos. El software de aplicación está constituido por los programas que dirigen el funcionamiento de la computadora para la realización de trabajos específicos, denominados aplicaciones. La siguiente tabla muestra la clasificación del software y los principales componentes de cada categoría. SOFTWARE Software de Sistema Sistemas operativos
Software de Aplicación Software estándar
Programas traductores
Software a medida
Programas de mantenimiento del sistema Software de Sistema Cuando el usuario teclea un documento o escribe un programa, no necesita preocuparse por las partes de la memoria del computador que contienen el documento, los segmentos del software de procesamiento de textos que se encuentran en la memoria de computador ni las instrucciones de salidas enviadas por el computador a la impresora. Estos detalles y cientos más son manejados por el software del sistema, una clase de software que incluye el sistema operativo y los programas de utilería. Un sistema operativo es, en principio, el soporte lógico que controla el funcionamiento del equipo físico o hardware haciendo que el trabajo con la computadora sea sencillo. Desde este punto de vista podemos definirlo de la siguiente manera: Un sistema operativo es un conjunto de programas y funciones que controlan el funcionamiento del hardware ocultando sus detalles, ofreciendo al usuario una vía sencilla y flexible de acceso a la computadora.
Por otra parte, una computadora es una máquina que posee un conjunto de elementos que denominaremos recursos, que deben ser racionalmente distribuidos y utilizados para obtener de ellos el mejor rendimiento. Estos recursos son los siguientes: 1. El procesador. Como sabemos, es el lugar donde se ejecutan las instrucciones y por ello deben controlarse los programas que se ejecuten y su secuenciamiento. Además los grandes computadores multiusuario suelen ejecutar varios trabajos al mismo tiempo (procesamiento concurrente). Las máquinas de procesamiento en paralelo con tecnología de vanguardia emplean varias UCP para procesar trabajos en forma simultánea. Sin embargo, un computador corriente tiene un solo procesador, por lo cual debe llevar a cabo varios proyectos alternando rápidamente entre ellos. Un computador de tiempo compartido efectúa el procesamiento concurrente cuando hay varios usuarios conectados al sistema. El computador pasa rápidamente de una terminal a otra, revisando si hay entradas y procesando los datos de cada usuario. El procesamiento concurrente es cada vez más común en los sistemas operativos de computadores personales que cuentan con la ejecución multitareas. 2. La memoria interna. Al procesar concurrentemente varios trabajos, el sistema operativo debe controlar la forma de usar la memoria del computador y asegurar que ningún trabajo invada el territorio de otro. La administración de memoria se lleva a cabo de varias maneras, desde esquemas sencillos que dividen la memoria disponible en partes iguales para cada trabajo, hasta complejos
procedimientos que temporalmente intercambian la información entre la memoria del computador y los dispositivos de almacenamiento interno. 3. La entrada / salida. Una de las tareas más complejas realizadas por un computador es la comunicación con pantallas, impresoras, unidades de disco y otros dispositivos periféricos. El sistema operativo siempre incluye programas que se encargan de manera transparente de los detalles de la comunicación con los periféricos. 4. La información. Además de servir como controlador de tráfico, guardia de seguridad y contador, el sistema operativo también actúa como bibliotecario, localizando y dando acceso a los programas solicitados por el usuario y otros programas. 5. Supervisión, contabilidad y seguridad de recursos. Muchos sistemas de cómputo multiusuario están diseñados para cobrar a los usuarios por los recursos empleados. Estos sistemas mantienen un registro de tiempo de uso, las necesidades de almacenamiento y las páginas impresas por cada usuario, para que los programas de contabilidad puedan calcular e imprimir las facturas precisas. Desde el punto de vista del control de los recursos de una computadora podemos establecer la siguiente definición: Un sistema operativo es el administrador de los recursos ofrecidos por el hardware para alcanzar un eficaz rendimiento de los mismos. Algunos computadores, en especial las máquinas de juegos y los de propósito especial, almacenan sus sistemas operativos de manera permanente en la ROM para que puedan comenzar a trabajar en cuanto se encienden. Pero la ROM no puede ser alterada, así que no es posible modificar o actualizar sus sistemas operativos sin efectuar transplantes de hardware. Casi todas las máquinas tienen una parte de su sistema operativo en ROM y lo demás se carga en memoria durante el proceso de arranque. Casi todo el tiempo el sistema operativo opera tras bambalinas, haciendo lo suyo sin conocimiento ni intervención del usuario. Sin embargo, en ocasiones un usuario debe comunicarse directamente con él. Por ejemplo, al arrancar un computador personal, el sistema operativo aparece en primer plano y espera instrucciones. Si se emite una orden para abrir una aplicación de gráficos, el sistema localiza el programa, copia del disco a la memoria, transfiere a la pantalla la aplicación y luego recibe órdenes de ésta mientras usted dibuja en la pantalla. La interacción con el sistema operativo, como la interacción con una aplicación, puede ser intuitiva o un reto. Depende de algo conocido como interfaz con el usuario. Este es un componente de importancia crítica en casi todo el software, por su profundo impacto en la experiencia de la computación. Software de Aplicación Este software constituye una herramienta para los usuarios. Casi todo individuo que trabaje con computadores personales usa software que se ajusta a alguna de las siguientes categorías: procesamiento de textos y publicación electrónica hojas de cálculo y otras aplicaciones para el procesamiento de números bases de datos para almacenar, consultar, modificar y recuperar información. Telecomunicaciones y redes. Aplicaciones gráficas Multimedia e hipermedia En general cuando se compra un software de usuario se tienen las siguientes características: 1. En general, los paquetes de software incluyen documentación impresa, manuales didácticos y referencias que explican cómo usar el software. Además la mayoría de los paquetes de software modernos cuentan con algún tipo de documentación en línea.
2. La mayoría de las compañías de software trabajan continuamente para mejorar sus productos, eliminando errores o agregando nuevas características. Como resultado, cada uno o dos años aparecen nuevas versiones de los programas más populares. Para distinguir los programas cada una de las versiones van siendo numeradas. 3. Cualquiera que compre software debe atender con cuidado a la compatibilidad. No hay normas de software universales en el mundo de la computación, de manera que un programa escrito para una máquina quizás no funcione en otra. Los paquetes de software tienen etiquetas como “Requiere computador Macintosh con 2MB de memoria y sistema operativo System 7.0”. 4. De acuerdo con las garantías impresas de muchos paquetes de software, las aplicaciones pueden perder todo su valor aunque tengan hardware y software compatibles. Esto ocurre ya que nadie ha encontrado una manera de escribir software sin errores. 5. Al comprar un paquete corriente de software, en realidad no está comprando el software, sino una licencia de software que le permite usar el programa en una máquina. Los acuerdos de licencia varían de una compañía a otra, pero la mayoría incluye limitaciones en cuanto al derecho del usuario de copiar discos, instalar software en discos duros y transferir información a otros usuarios. No todo el software tiene derechos de autor también existe un software de dominio público y el shareware los cuales pueden copiarse y compartirse legalmente. Puede parecer extraño que una persona pague cientos de dólares por un producto sin garantías y que le impone tantas restricciones legales sobre su uso. De hecho, la creciente industria de software ha generado docenas de programas cuyas ventas han alcanzado cifras de millones de copias. ¿Por qué tanta gente compra y usa estos programas de gran éxito? Por supuesto, esta respuesta varía según la persona y el producto. Empero, en general, los productos de software con mayor éxito tienen dos características importantes:
Las aplicaciones de software de mayor uso están construidas en torno a metáforas visuales del mundo real. Es decir, sus entornos visuales tratan de simular la vida real. Las aplicaciones de cómputo más populares tienen éxito porque extienden las capacidades humanas de alguna manera, ya que permiten que los usuarios hagan cosas que serán imposibles o muy difíciles con las herramientas tradicionales. Por ejemplo los editores de texto permiten darle formatos a los textos que no se podrían hacer (o serían muy difíciles) con una máquina de escribir o un lápiz.
En los inicios de la Informática, y durante bastante tiempo, se ha diseñado de forma específica y aislada todo el software que necesitaba cualquier entidad o empresa para cada actividad concreta que se debía realizar con una computadora. Solamente las grandes organizaciones tenían la capacidad, el personal y las grandes computadoras (mainframes) necesarios para poder diseñar y disponer de estas aplicaciones, entre las cuales, se encuentran aplicaciones contables, financieras, estadísticas, control de inventarios, nóminas y otras muy diversas. Con el avance y desarrollo de las tecnologías de la información se han identificado algunas de estas aplicaciones de uso común en la mayoría de las organizaciones, de manera tal que los fabricantes han diseñado y puesto en el mercado aplicaciones para ser utilizadas por un gran número de usuarios y en diferentes sistemas. A estas aplicaciones de uso general se denomina software estándar, es decir, a aquellos programas que se pueden adquirir normalmente en establecimientos del ramo, dispuestos para su uso inmediato en una gran variedad de sistemas, sin necesitar la intervención de personal informático. El software a medida queda constituido por las aplicaciones específicas que por corresponder a actividades más especializadas es necesario encargar a los profesionales del software, como puede ser un sistema de control de tráfico o un sistema de monitorización de pacientes en un hospital. Este tipo de software es más caro pues está dirigido a un solo cliente.