Software

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Un software es una colección de instrucciones que le dicen a una computadora cómo trabajar. Esto contrasta con el hardware, a partir del cual se construye el sistema y que realmente realiza el trabajo.

En el nivel de programación más bajo, el código ejecutable consta de instrucciones en lenguaje de máquina respaldadas por un procesador individual, generalmente una unidad de procesamiento central (CPU) o una unidad de procesamiento de gráficos (GPU). El lenguaje de máquina consta de grupos de valores binarios que significan instrucciones del procesador que cambian el estado de la computadora de su estado anterior. Por ejemplo, una instrucción puede cambiar el valor almacenado en una ubicación de almacenamiento particular en la computadora, un efecto que el usuario no puede observar directamente. Una instrucción también puede invocar una de muchas operaciones de entrada o salida, por ejemplo, mostrar algún texto en la pantalla de una computadora; provocando cambios de estado que deberían ser visibles para el usuario. El procesador ejecuta las instrucciones en el orden en que se proporcionan, a menos que se le indique "saltar" a una instrucción diferente, o es interrumpido por el sistema operativo. A partir de 2015, la mayoría de las computadoras personales, los dispositivos de teléfonos inteligentes y los servidores tienen procesadores con múltiples unidades de ejecución o múltiples procesadores que realizan cálculos juntos, y la informática se ha convertido en una actividad mucho más concurrente que en el pasado.

La mayoría del software está escrito en lenguajes de programación de alto nivel. Son más fáciles y eficientes para los programadores porque están más cerca de los lenguajes naturales que de los lenguajes de máquina. Los lenguajes de alto nivel se traducen a lenguaje de máquina usando un compilador o un intérprete o una combinación de ambos. El software también se puede escribir en un lenguaje ensamblador de bajo nivel, que tiene una fuerte correspondencia con las instrucciones en lenguaje de máquina de la computadora y se traduce a lenguaje de máquina usando un ensamblador.

Historia

Ada Lovelace escribió un algoritmo para lo que habría sido la primera pieza de software en el siglo XIX, para el motor analítico planificado. Creó pruebas para mostrar cómo el motor calcularía los números de Bernoulli. Por las demostraciones y el algoritmo, se la considera la primera programadora informática.

La primera teoría sobre el software, anterior a la creación de las computadoras tal como las conocemos hoy, fue propuesta por Alan Turing en su ensayo de 1935, Sobre números computables, con una aplicación al Entscheidungsproblem (problema de decisión). Esto finalmente condujo a la creación de los campos académicos de informática e ingeniería de software; ambos campos estudian el software y su creación. La informática es el estudio teórico de la computadora y el software (el ensayo de Turing es un ejemplo de la informática), mientras que la ingeniería del software es la aplicación de los principios de la ingeniería al desarrollo del software.Antes de 1946, el software aún no eran los programas almacenados en la memoria de las computadoras digitales de programas almacenados, tal como lo entendemos ahora; en cambio, los primeros dispositivos informáticos electrónicos se recablearon para "reprogramarlos".

En 2000, Fred Shapiro, bibliotecario de la Facultad de Derecho de Yale, publicó una carta en la que revelaba que el artículo de John Wilder Tukey de 1958 "The Teaching of Concrete Mathematics" contenía el primer uso conocido del término "software" encontrado en una búsqueda en los archivos electrónicos de JSTOR., anterior a la cita del OED por dos años. Esto llevó a muchos a darle crédito a Tukey por haber acuñado el término, particularmente en los obituarios publicados ese mismo año, aunque Tukey nunca se atribuyó el mérito de tal acuñación. En 1995, Paul Niquette afirmó que originalmente había acuñado el término en octubre de 1953, aunque no pudo encontrar ningún documento que respaldara su afirmación. La primera publicación conocida del término "software" en un contexto de ingeniería fue en agosto de 1953 por Richard R. Carhart,

Tipos

En prácticamente todas las plataformas informáticas, el software se puede agrupar en unas pocas categorías amplias.

Propósito o dominio de uso

Según el objetivo, el software de computadora se puede dividir en:

  • El software de aplicación utiliza el sistema informático para realizar funciones especiales más allá de la operación básica de la propia computadora. Hay muchos tipos diferentes de software de aplicación porque la variedad de tareas que se pueden realizar con una computadora moderna es muy amplia; consulte la lista de software.
  • El software del sistema gestiona el comportamiento del hardware, para proporcionar funcionalidades básicas que requieren los usuarios, o para que otro software funcione correctamente, si es que lo hace. El software del sistema también está diseñado para proporcionar una plataforma para ejecutar software de aplicación e incluye lo siguiente:
    • Los sistemas operativos son colecciones esenciales de software que administran recursos y brindan servicios comunes para otro software que se ejecuta "sobre" ellos. Los programas de supervisión, los cargadores de arranque, los shells y los sistemas de ventanas son partes fundamentales de los sistemas operativos. En la práctica, un sistema operativo viene incluido con software adicional (incluido el software de aplicación) para que un usuario pueda trabajar potencialmente con una computadora que solo tiene un sistema operativo.
    • Los controladores de dispositivos operan o controlan un tipo particular de dispositivo que está conectado a una computadora. Cada dispositivo necesita al menos un controlador de dispositivo correspondiente; Debido a que una computadora generalmente tiene al menos un dispositivo de entrada y al menos un dispositivo de salida, una computadora generalmente necesita más de un controlador de dispositivo.
    • Las utilidades son programas de computadora diseñados para asistir a los usuarios en el mantenimiento y cuidado de sus computadoras.
  • El software malicioso, o malware, es un software que se desarrolla para dañar o interrumpir las computadoras. El malware está estrechamente relacionado con los delitos informáticos, aunque algunos programas maliciosos pueden haber sido diseñados como bromas pesadas.

Naturaleza o dominio de ejecución

  • Aplicaciones de escritorio como navegadores web y Microsoft Office, así como aplicaciones para teléfonos inteligentes y tabletas (llamadas "aplicaciones").
  • Los scripts de JavaScript son piezas de software tradicionalmente incrustadas en páginas web que se ejecutan directamente dentro del navegador web cuando se carga una página web sin necesidad de un complemento de navegador web. El software escrito en otros lenguajes de programación también se puede ejecutar dentro del navegador web si el software está traducido a JavaScript o si está instalado un complemento de navegador web compatible con ese idioma; el ejemplo más común de esto último son los scripts de ActionScript, que son compatibles con el complemento Adobe Flash.
  • Software de servidor, que incluye:
    • Aplicaciones web, que generalmente se ejecutan en el servidor web y generan páginas web dinámicamente en los navegadores web, utilizando, por ejemplo, PHP, Java, ASP.NET o incluso JavaScript que se ejecuta en el servidor. En los tiempos modernos, estos comúnmente incluyen algo de JavaScript para ejecutarse también en el navegador web, en cuyo caso generalmente se ejecutan en parte en el servidor, en parte en el navegador web.
  • Los complementos y las extensiones son software que amplían o modifican la funcionalidad de otra pieza de software y requieren que se utilice dicho software para funcionar.
  • El software integrado reside como firmware dentro de los sistemas integrados, dispositivos dedicados a un solo uso o unos pocos usos, como automóviles y televisores (aunque algunos dispositivos integrados, como los conjuntos de chips inalámbricos, pueden formar parte de un sistema informático ordinario no integrado, como una PC o teléfono inteligente). En el contexto del sistema integrado, a veces no existe una distinción clara entre el software del sistema y el software de la aplicación. Sin embargo, algunos sistemas integrados ejecutan sistemas operativos integrados, y estos sistemas conservan la distinción entre el software del sistema y el software de la aplicación (aunque normalmente solo habrá una aplicación fija que siempre se ejecuta).
  • El microcódigo es un tipo de software integrado especial y relativamente oscuro que le dice al procesador cómo ejecutar el código de máquina, por lo que en realidad es un nivel más bajo que el código de máquina. Por lo general, es propiedad del fabricante del procesador, y ellos proporcionan a los usuarios cualquier actualización de software de microcódigo correccional necesaria (lo cual es mucho más económico que enviar el hardware del procesador de reemplazo). Por lo tanto, un programador ordinario no esperaría tener que lidiar con eso.

Herramientas de programación

Las herramientas de programación también son software en forma de programas o aplicaciones que los desarrolladores utilizan para crear, depurar, mantener o dar soporte al software.

El software está escrito en uno o más lenguajes de programación; existen muchos lenguajes de programación, y cada uno tiene al menos una implementación, cada uno de los cuales consta de su propio conjunto de herramientas de programación. Estas herramientas pueden ser programas relativamente autónomos, como compiladores, depuradores, intérpretes, enlazadores y editores de texto, que se pueden combinar para realizar una tarea; o pueden formar un entorno de desarrollo integrado (IDE), que combina gran parte o la totalidad de la funcionalidad de dichas herramientas independientes. Los IDE pueden hacer esto invocando las herramientas individuales relevantes o volviendo a implementar su funcionalidad de una manera nueva. Un IDE puede facilitar la realización de tareas específicas, como buscar archivos en un proyecto en particular.Muchas implementaciones de lenguajes de programación brindan la opción de usar herramientas individuales o un IDE.

Temas

Arquitectura

Las personas que usan computadoras modernas de propósito general (a diferencia de los sistemas integrados, las computadoras analógicas y las supercomputadoras) generalmente ven tres capas de software que realizan una variedad de tareas: plataforma, aplicación y software de usuario.

  • Software deplataforma La plataforma incluye el firmware, los controladores de dispositivos, un sistema operativo y, por lo general, una interfaz gráfica de usuario que, en total, permite al usuario interactuar con la computadora y sus periféricos (equipo asociado). El software de plataforma a menudo viene incluido con la computadora. En una PC, normalmente tendrá la capacidad de cambiar el software de la plataforma.
  • Software de aplicación El software deaplicación es lo que la mayoría de la gente piensa cuando piensa en software. Los ejemplos típicos incluyen suites ofimáticas y videojuegos. El software de aplicación a menudo se compra por separado del hardware de la computadora. A veces, las aplicaciones se incluyen con la computadora, pero eso no cambia el hecho de que se ejecutan como aplicaciones independientes. Las aplicaciones suelen ser programas independientes del sistema operativo, aunque a menudo se adaptan a plataformas específicas. La mayoría de los usuarios piensan en los compiladores, las bases de datos y otro "software del sistema" como aplicaciones.
  • Software escritopor el usuario El desarrollo del usuario final adapta los sistemas para satisfacer las necesidades específicas de los usuarios. El software del usuario incluye plantillas de hojas de cálculo y plantillas de procesadores de texto. Incluso los filtros de correo electrónico son una especie de software de usuario. Los usuarios crean este software ellos mismos y, a menudo, pasan por alto lo importante que es. Dependiendo de cuán competentemente se haya integrado el software escrito por el usuario en los paquetes de aplicaciones predeterminados, es posible que muchos usuarios no sean conscientes de la distinción entre los paquetes originales y lo que han agregado los compañeros de trabajo.

Ejecución

El software de la computadora debe "cargarse" en el almacenamiento de la computadora (como el disco duro o la memoria). Una vez que el software se ha cargado, la computadora puede ejecutar el software. Esto implica pasar instrucciones desde el software de la aplicación, a través del software del sistema, al hardware que finalmente recibe la instrucción como código de máquina. Cada instrucción hace que la computadora lleve a cabo una operación: mover datos, realizar un cálculo o alterar el flujo de control de las instrucciones.

El movimiento de datos es típicamente de un lugar en la memoria a otro. A veces implica mover datos entre la memoria y los registros que permiten el acceso a datos de alta velocidad en la CPU. Mover datos, especialmente grandes cantidades, puede ser costoso; esto a veces se evita mediante el uso de "punteros" a los datos en su lugar. Los cálculos incluyen operaciones simples como incrementar el valor de un elemento de datos variable. Cálculos más complejos pueden involucrar muchas operaciones y elementos de datos juntos.

Calidad y fiabilidad

La calidad del software es muy importante, especialmente para el software comercial y de sistema. Si el software es defectuoso, puede eliminar el trabajo de una persona, bloquear la computadora y hacer otras cosas inesperadas. Las fallas y los errores se denominan "errores" que a menudo se descubren durante las pruebas alfa y beta. El software a menudo también es víctima de lo que se conoce como envejecimiento del software, la degradación progresiva del rendimiento que resulta de una combinación de errores ocultos.

Muchos errores se descubren y corrigen mediante pruebas de software. Sin embargo, las pruebas de software rara vez, o nunca, eliminan todos los errores; algunos programadores dicen que "todo programa tiene al menos un error más" (Ley de Lubarsky). En el método de cascada de desarrollo de software, normalmente se emplean equipos de prueba separados, pero en los enfoques más nuevos, denominados colectivamente desarrollo de software ágil, los desarrolladores a menudo hacen todas sus propias pruebas y muestran el software a los usuarios/clientes con regularidad para obtener comentarios. El software se puede probar a través de pruebas unitarias, pruebas de regresión y otros métodos, que se realizan manualmente o, más comúnmente, automáticamente, ya que la cantidad de código que se probará puede ser grande.Los programas que contienen software de comando permiten que la ingeniería de hardware y las operaciones del sistema funcionen juntas mucho más fácilmente.

Licencia

La licencia del software otorga al usuario el derecho a utilizar el software en el entorno licenciado y, en el caso de las licencias de software libre, también otorga otros derechos, como el derecho a realizar copias.

El software propietario se puede dividir en dos tipos:

  • software gratuito, que incluye la categoría de software de "prueba gratuita" o software "freemium" (en el pasado, el término shareware se usaba a menudo para software de prueba gratuita/freemium). Como sugiere el nombre, el software gratuito se puede usar de forma gratuita, aunque en el caso de las pruebas gratuitas o el software freemium, a veces esto solo es cierto durante un período de tiempo limitado o con una funcionalidad limitada.
  • software disponible por una tarifa, que solo se puede usar legalmente con la compra de una licencia.

El software de código abierto viene con una licencia de software libre, que otorga al destinatario los derechos para modificar y redistribuir el software.

Patentes

Las patentes de software, al igual que otros tipos de patentes, se supone teóricamente que otorgan al inventor una licencia exclusiva y por tiempo limitado para una idea detallada (por ejemplo, un algoritmo) sobre cómo implementar una pieza de software o un componente de una pieza de software. Ideas de cosas útiles que el software podría hacer y requisitos del usuario, no se supone que sean patentables, y tampoco se supone que las implementaciones concretas (es decir, los paquetes de software reales que implementan la patente) sean patentables; estas últimas ya están protegidas por derechos de autor, generalmente de forma automática. Por lo tanto, se supone que las patentes de software cubren el área intermedia, entre los requisitos y la implementación concreta. En algunos países, el requisito de que la invención reivindicada tenga un efecto en el mundo físico también puede ser parte de los requisitos para que una patente de software sea válida, aunque dado que todo el software útil tiene efectos en el mundo físico, este requisito puede ser abierto a debate. Mientras tanto, la ley estadounidense de derechos de autor se aplicó a varios aspectos de la escritura del código de software.

Las patentes de software son controvertidas en la industria del software y muchas personas tienen opiniones diferentes sobre ellas. Una de las fuentes de controversia es que la división mencionada anteriormente entre las ideas iniciales y la patente no parece ser respetada en la práctica por los abogados de patentes; por ejemplo, la patente de programación orientada a aspectos (AOP), que pretendía reclamar derechos sobre cualquier herramienta de programación. implementar la idea de AOP, cualquiera que sea su implementación. Otra fuente de controversia es el efecto sobre la innovación, con muchos expertos y compañías distinguidos que argumentan que el software es un campo que se mueve tan rápido que las patentes de software simplemente crean grandes costos y riesgos de litigio adicionales y, de hecho, retrasan la innovación.En el caso de los debates sobre patentes de software fuera de los Estados Unidos, se ha argumentado que las grandes corporaciones estadounidenses y los abogados de patentes probablemente sean los principales beneficiarios de permitir o seguir permitiendo patentes de software.

Diseño e implementación

El diseño y la implementación del software varían según la complejidad del software. Por ejemplo, el diseño y la creación de Microsoft Word tomó mucho más tiempo que el diseño y desarrollo de Microsoft Notepad porque este último tiene una funcionalidad mucho más básica.

El software generalmente se desarrolla en entornos de desarrollo integrado (IDE) como Eclipse, IntelliJ y Microsoft Visual Studio que pueden simplificar el proceso y compilar el software. Como se señaló en otra sección, el software generalmente se crea sobre el software existente y la interfaz de programación de aplicaciones (API) que proporciona el software subyacente, como GTK+, JavaBeans o Swing. Las bibliotecas (API) se pueden clasificar por su propósito. Por ejemplo, Spring Framework se usa para implementar aplicaciones empresariales, la biblioteca Windows Forms se usa para diseñar aplicaciones de interfaz gráfica de usuario (GUI) como Microsoft Word y Windows Communication Foundation se usa para diseñar servicios web.Cuando se diseña un programa, se basa en la API. Por ejemplo, una aplicación de escritorio de Microsoft Windows puede llamar a funciones API en la biblioteca de formularios de Windows.NET como Form1.Close() y Form1.Show() para cerrar o abrir la aplicación. Sin estas API, el programador necesita escribir estas funcionalidades completamente por sí mismo. Empresas como Oracle y Microsoft proporcionan sus propias API, por lo que muchas aplicaciones se escriben utilizando sus bibliotecas de software que, por lo general, contienen numerosas API.

Las estructuras de datos, como tablas hash, matrices y árboles binarios, y algoritmos como Quicksort, pueden ser útiles para crear software.

El software de computadora tiene características económicas especiales que hacen que su diseño, creación y distribución sean diferentes de la mayoría de los demás bienes económicos.

Una persona que crea software se llama programador, ingeniero de software o desarrollador de software, términos que tienen un significado similar. También existen términos más informales para programador, como "codificador" y "pirata informático", aunque el uso de la última palabra puede causar confusión, porque se usa más a menudo para referirse a alguien que irrumpe ilegalmente en los sistemas informáticos.

Contenido relacionado

Ward Cunningham

Kerberos (protocolo)

Almacenamiento conectado en red

Almacenamiento conectado en red es un servidor de almacenamiento de datos informáticos a nivel de archivo conectado a una red informática que proporciona...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save