stringtranslate.com

Software

Un diagrama que muestra cómo el usuario interactúa con el software de aplicación en una computadora de escritorio típica . La capa de software de aplicación interactúa con el sistema operativo , que a su vez se comunica con el hardware . Las flechas indican el flujo de información.

El software es una colección de programas y datos que le indican a una computadora cómo realizar tareas específicas. El software suele incluir documentación de software asociada . [1] 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 , normalmente una unidad central de procesamiento (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 con respecto a 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 que el sistema operativo lo interrumpa . A partir de 2024 , la mayoría de las computadoras personales , dispositivos de teléfonos inteligentes y servidores tienen procesadores con múltiples unidades de ejecución , o múltiples procesadores que realizan cálculos juntos, por lo que 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. [2] Los lenguajes de alto nivel se traducen al lenguaje de máquina mediante un compilador , un intérprete o una combinación de ambos. El software también puede escribirse en un lenguaje ensamblador de bajo nivel que tenga una fuerte correspondencia con las instrucciones del lenguaje de máquina de la computadora y se traduzca al lenguaje de máquina mediante un ensamblador.

Historia

Ada Lovelace escribió un algoritmo para lo que habría sido el primer software en el siglo XIX, para el planeado Analytical Engine . [3] Creó pruebas para mostrar cómo el motor calcularía los números de Bernoulli . [3] Debido a las pruebas y al algoritmo, se la considera la primera programadora informática. [4] [5]

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 1936, Sobre números computables, con una aplicación al Entscheidungsproblem (problema de decisión). [6] Esto finalmente condujo a la creación de los campos académicos de ciencias de la computación e ingeniería de software; Ambos campos estudian el software y su creación. [7] La ​​informática es el estudio teórico de la informática y el software (el ensayo de Turing es un ejemplo de informática), mientras que la ingeniería de software es la aplicación de principios de ingeniería al desarrollo de software. [8]

En 2000, Fred Shapiro, bibliotecario de la Facultad de Derecho de Yale, publicó una carta que revelaba que el artículo de John Wilder Tukey de 1958 "La enseñanza de las matemáticas concretas" [9] [10] contenía el uso más antiguo conocido del término "software". encontrado en una búsqueda en los archivos electrónicos de JSTOR , dos años antes de la cita del Oxford English Dictionary . [11] 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, [12] aunque Tukey nunca reclamó crédito por dicha acuñación. En 1995, Paul Niquette afirmó que había acuñado originalmente el término en octubre de 1953, aunque no pudo encontrar ningún documento que respaldara su afirmación. [13] La primera publicación conocida del término "software" en un contexto de ingeniería fue en agosto de 1953 por Richard R. Carhart, en un Memorando de investigación de Rand Corporation . [14]

Tipos

Blender , un programa de software gratuito

Prácticamente en todas las plataformas informáticas, el software se puede agrupar en algunas categorías amplias.

Propósito o dominio de uso

Según el objetivo, el software informático se puede dividir en:

Naturaleza o ámbito de ejecución

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 respaldar de otro modo el software. [18] [ se necesita una mejor fuente ]

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 pueden combinarse para realizar una tarea; o pueden formar un entorno de desarrollo integrado (IDE), que combina gran parte o toda la funcionalidad de dichas herramientas autónomas. [ cita necesaria ] Los IDE pueden hacer esto invocando las herramientas individuales relevantes o volviendo a implementar su funcionalidad de una manera nueva. [ cita necesaria ] Un IDE puede facilitar la realización de tareas específicas, como buscar archivos en un proyecto en particular. [ cita necesaria ] Muchas implementaciones de lenguajes de programación ofrecen la opción de utilizar herramientas individuales o un IDE. [ cita necesaria ]

Temas

Arquitectura

Las personas que utilizan computadoras modernas de uso general (a diferencia de los sistemas integrados , computadoras analógicas y supercomputadoras ) generalmente ven tres capas de software que realizan una variedad de tareas: plataforma, aplicación y software de usuario. [ cita necesaria ]

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 ejecutarlo . Esto implica pasar instrucciones desde el software de la aplicación, a través del software del sistema, al hardware que finalmente recibe las instrucciones como código de máquina. Cada instrucción hace que la computadora realice una operación: mover datos, realizar un cálculo o alterar el flujo de control de instrucciones. [ cita necesaria ]

El movimiento de datos suele realizarse de un lugar de la memoria a otro. A veces implica mover datos entre la memoria y los registros, lo que permite el acceso a datos de alta velocidad en la CPU. Mover datos, especialmente grandes cantidades, puede resultar costoso; A veces, esto se evita utilizando "punteros" a los datos. [ cita necesaria ] Los cálculos incluyen operaciones simples, como incrementar el valor de un elemento de datos variable. Los cálculos más complejos pueden implicar muchas operaciones y elementos de datos juntos. [ cita necesaria ]

Calidad y fiabilidad

La calidad del software es muy importante, especialmente para el software comercial y de sistemas. Si el software falla, puede borrar el trabajo de una persona, bloquear la computadora y hacer otras cosas inesperadas. Las fallas y errores se denominan " errores " y a menudo se descubren durante las pruebas alfa y beta. [ cita necesaria ] El software a menudo también es víctima de lo que se conoce como envejecimiento del software , la degradación progresiva del rendimiento resultante de una combinación de errores invisibles. [ cita necesaria ]

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 "cada programa tiene al menos un error más" (Ley de Lubarsky). [19] En el método en cascada de desarrollo de software, normalmente se emplean equipos de prueba separados, pero en enfoques más nuevos, denominados colectivamente desarrollo de software ágil , los desarrolladores a menudo hacen todas sus propias pruebas y demuestran el software a los usuarios/clientes regularmente para obtener comentarios. [ cita necesaria ] El software se puede probar mediante 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 a probar puede ser grande. [ cita necesaria ] 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. [20]

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. [21]

El software propietario se puede dividir en dos tipos:

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

Patentes

En teoría, se supone que las patentes de software, al igual que otros tipos de patentes , otorgan al inventor una licencia exclusiva y por tiempo limitado para una idea detallada (por ejemplo, un algoritmo) sobre cómo implementar un software o un componente de un software. Se supone que las ideas de cosas útiles que el software podría hacer , y los requisitos del usuario , no son 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 cubiertas por derechos de autor, generalmente. automáticamente. Por lo tanto, se supone que las patentes de software cubren la zona 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 se considere válida, aunque dado que todo software útil tiene efectos en el mundo físico, este requisito puede ser necesario. abierto al debate. Mientras tanto, la ley de derechos de autor estadounidense se aplicó a varios aspectos de la escritura del código del software. [25]

Las patentes de software son controvertidas en la industria del software y muchas personas tienen puntos de vista diferentes sobre ellas. Una de las fuentes de controversia es que la división antes mencionada entre ideas iniciales y patentes no parece ser respetada en la práctica por los abogados de patentes; por ejemplo, la patente para la programación orientada a aspectos (AOP), que pretendía reclamar derechos sobre cualquier herramienta de programación. implementar la idea de AOP, independientemente de cómo se implemente. [ cita necesaria ] Otra fuente de controversia es el efecto sobre la innovación, con muchos expertos y empresas distinguidos argumentando que el software es un campo que evoluciona tan rápidamente que las patentes de software simplemente crean enormes costos y riesgos de litigio adicionales y, de hecho, retrasan la innovación. [ cita necesaria ] En el caso de los debates sobre patentes de software fuera de los Estados Unidos, se ha argumentado que es probable que las grandes corporaciones y abogados de patentes estadounidenses sean los principales beneficiarios de permitir o continuar permitiendo las patentes de software. [ cita necesaria ]

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 del Bloc de notas de Microsoft porque el primero tiene una funcionalidad mucho más básica. [ cita necesaria ]

El software generalmente se desarrolla en entornos de desarrollo integrados (IDE) como Eclipse , IntelliJ y Microsoft Visual Studio que pueden simplificar el proceso y compilar el software. [ cita necesaria ] Como se indica en una sección diferente, 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 . [ cita necesaria ] Las bibliotecas (API) se pueden clasificar según su propósito. Por ejemplo, Spring Framework se utiliza para implementar aplicaciones empresariales , la biblioteca Windows Forms se utiliza para diseñar aplicaciones de interfaz gráfica de usuario (GUI) como Microsoft Word y Windows Communication Foundation se utiliza para diseñar servicios web . [ cita necesaria ] Cuando se diseña un programa, se basa en la API. Por ejemplo, una aplicación de escritorio de Microsoft Windows podría llamar a funciones API en la biblioteca .NET Windows Forms como Form1.Close() y Form1.Show() [26] para cerrar o abrir la aplicación. Sin estas API, el programador necesita escribir estas funcionalidades 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 generalmente contienen numerosas API. [ cita necesaria ]

Las estructuras de datos como tablas hash , matrices y árboles binarios , y algoritmos como la clasificación rápida , pueden resultar útiles para crear software.

Los programas informáticos tienen 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. [ especificar ] [27] [28]

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

Ver también

Referencias

  1. ^ "ISO/IEC 2382:2015". YO ASI . 3 de septiembre de 2020. Archivado desde el original el 16 de marzo de 2023 . Consultado el 26 de mayo de 2022 . [El software incluye] todo o parte de los programas, procedimientos, reglas y documentación asociada de un sistema de procesamiento de información.
  2. ^ "Construcción del compilador". cs.uu.nl. _ Archivado desde el original el 2 de noviembre de 2013.
  3. ^ ab Evans 2018, pag. 21.
  4. ^ Fuegi, J.; Francisco, J. (2003). "Lovelace & Babbage y la creación de las 'notas' de 1843" (PDF) . Anales de la Historia de la Computación . 25 (4): 16–26. doi :10.1109/MAHC.2003.1253887. S2CID  40077111. Archivado desde el original (PDF) el 15 de febrero de 2020.
  5. ^ "Ada Lovelace honrada con un doodle de Google". El guardián . 10 de diciembre de 2012. Archivado desde el original el 25 de diciembre de 2018 . Consultado el 25 de noviembre de 2018 .
  6. ^ Turing, Alan Mathison (1936). "Sobre números computables, con una aplicación al Entscheidungsproblem" (PDF) . Revista de Matemáticas . 58 : 230–265. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 28 de agosto de 2022 .
  7. ^ "¿Cuál es la diferencia entre informática e ingeniería de software?". eVidyalam . Consultado el 24 de octubre de 2023 .
  8. ^ Lorge Parnas, David (1 de noviembre de 1984). "Principios de ingeniería de software". INFOR: Sistemas de Información e Investigación Operativa . 22 (4): 303–316. doi :10.1080/03155986.1984.11731932. ISSN  0315-5986.
  9. ^ Tukey, John Wilder (enero de 1958). "La Enseñanza de la Matemática Concreta". Mensual Matemático Estadounidense . Taylor & Francis, Ltd. / Asociación Matemática de América . 65 (1): 1–9, 2. doi :10.2307/2310294. ISSN  0002-9890. JSTOR  2310294. CODEN  AMMYAE. […] Hoy en día, el "software" que comprende las rutinas interpretativas cuidadosamente planificadas, los compiladores y otros aspectos de la programación automática son al menos tan importantes para la calculadora electrónica moderna como su "hardware" de tubos, transistores, cables, cintas y similares. . […]
  10. ^ Beebe, Nelson HF (22 de agosto de 2017). "Capítulo I - Aritmética de números enteros". Manual de computación de funciones matemáticas: programación utilizando la biblioteca de software portátil MathCW (1 ed.). Salt Lake City, UT, EE. UU.: Springer International Publishing AG . págs.969, 1035. doi :10.1007/978-3-319-64110-2. ISBN 978-3-319-64109-6. LCCN  2017947446. S2CID  30244721.
  11. ^ Shapiro, Fred (2000). "Origen del término software: evidencia del archivo de revistas electrónicas JSTOR" (PDF) . Anales IEEE de la historia de la informática . 22 (2): 69–71. doi :10.1109/mahc.2000.887997. Archivado desde el original (PDF) el 5 de junio de 2003 . Consultado el 25 de junio de 2013 .
  12. ^ Leonhardt, David (28 de julio de 2000). "John Tukey, 85 años, estadístico; acuñó la palabra 'software'". Los New York Times . Archivado desde el original el 16 de junio de 2021 . Consultado el 24 de septiembre de 2012 .
  13. ^ Niquette, R. Paul (2006), Softword: procedencia de la palabra 'software', ISBN 1-58922-233-4, archivado desde el original el 8 de agosto de 2019 , recuperado 18 de agosto 2019
  14. ^ Carhart, Richard (1953). Un estudio del estado actual del problema de la confiabilidad electrónica (PDF) . Santa Mónica, CA: Rand Corporation . pag. 69. Archivado (PDF) del original el 9 de octubre de 2022. […] Se recordará de la Sec. 1.6 que el término personal se definió para incluir a las personas que entran en contacto directo con el hardware, desde la producción hasta el uso en el campo, es decir, personas que ensamblan, inspeccionan, empaquetan, envían, manipulan, instalan, operan y mantienen equipos electrónicos. En cualquiera de estas fases, las fallas del personal pueden resultar en que el equipo no funcione. Al igual que con los factores de hardware, casi no hay datos cuantitativos sobre estos software o factores humanos en la confiabilidad: cuántos fallos son causados ​​por el personal, por qué ocurren y qué se puede hacer para eliminar los errores. […]
  15. ^ "Software del sistema". La Universidad de Misisipi. Archivado desde el original el 30 de mayo de 2001.
  16. ^ "¿Qué es un complemento?". Esperanza informática . 6 de junio de 2021. Archivado desde el original el 26 de enero de 2022 . Consultado el 26 de enero de 2022 .
  17. ^ "Software integrado: tecnologías y tendencias". Sociedad de Computación IEEE. Mayo-junio de 2009. Archivado desde el original el 28 de octubre de 2013 . Consultado el 6 de noviembre de 2013 .
  18. ^ "¿Qué es una herramienta de programación? - Definición de Techopedia". Techinfo.com . 2 de julio de 2020. Archivado desde el original el 26 de enero de 2022 . Consultado el 26 de enero de 2022 .
  19. ^ "ejemplos de libros de inteligencia de secuencias de comandos". GitHub . 9 de mayo de 2018. Archivado desde el original el 6 de noviembre de 2015 . Consultado el 6 de noviembre de 2015 .
  20. ^ "¿Qué es el software del sistema? - Definición de WhatIs.Com". WhatIs.com . Archivado desde el original el 27 de febrero de 2023 . Consultado el 27 de febrero de 2023 .
  21. ^ "¿Qué es una licencia de software? Todo lo que necesita saber". CIO . Archivado desde el original el 27 de febrero de 2023 . Consultado el 27 de febrero de 2023 .
  22. ^ "Freeware vs Shareware: diferencia y comparación | Diffen". www.diffen.com . Archivado desde el original el 26 de enero de 2022 . Consultado el 26 de enero de 2022 .
  23. ^ Morin, Andrés; Urbano, Jennifer; Sliz, Piotr (26 de julio de 2012). "Una guía rápida sobre licencias de software para científicos-programadores". PLOS Biología Computacional . 8 (7): e1002598. Código Bib : 2012PLSCB...8E2598M. doi : 10.1371/journal.pcbi.1002598 . ISSN  1553-7358. PMC 3406002 . PMID  22844236. 
  24. ^ "Explicación del software de código abierto". Guía digital de IONOS . Archivado desde el original el 26 de enero de 2022 . Consultado el 26 de enero de 2022 .
  25. ^ Gerardo Con Díaz, "El texto en la máquina: la ley estadounidense de derechos de autor y las muchas naturalezas del software, 1974-1978", Tecnología y Cultura 57 (octubre de 2016), 753–79.
  26. ^ "Biblioteca MSDN". Microsoft . Archivado desde el original el 11 de junio de 2010 . Consultado el 14 de junio de 2010 .
  27. ^ contra Engelhardt, Sebastián (2008). "Las propiedades económicas del software". Documentos de investigación económica de Jena . 2 (2008–045). Archivado desde el original el 5 de enero de 2016.
  28. ^ Kaminsky, Dan (2 de marzo de 1999). "Por qué el código abierto es el paradigma económico óptimo para el software". dankaminsky.com . Archivado desde el original el 22 de mayo de 2012 . Consultado el 19 de noviembre de 2021 .

Fuentes

enlaces externos