La programación de computadoras es el proceso de diseñar y construir un programa de computadora ejecutable para lograr un resultado informático específico o para realizar una tarea específica. Programación implica tareas tales como: el análisis, la generación de algoritmos , de perfiles de precisión algoritmos y el consumo de recursos y la implementación de algoritmos en un elegido lenguaje de programación (comúnmente conocida como codificación ). [1] [2] El código fuente de un programa está escrito en uno o más lenguajes que son inteligibles para los programadores , en lugar de código máquina., que es ejecutado directamente por la unidad central de procesamiento . El propósito de la programación es encontrar una secuencia de instrucciones que automatice el desempeño de una tarea (que puede ser tan compleja como un sistema operativo ) en una computadora , a menudo para resolver un problema dado. Por lo tanto, la programación competente a menudo requiere experiencia en varios temas diferentes, incluido el conocimiento del dominio de la aplicación , algoritmos especializados y lógica formal .
Las tareas que acompañan y están relacionadas con la programación incluyen: pruebas , depuración , mantenimiento del código fuente , implementación de sistemas de compilación y administración de artefactos derivados , como el código de máquina de programas de computadora. Estos pueden considerarse parte del proceso de programación, pero a menudo el término desarrollo de software se usa para este proceso más amplio con el término programación , implementación o codificación reservado para la escritura real de código. La ingeniería de software combina técnicas de ingeniería con prácticas de desarrollo de software. La ingeniería inversa es un proceso relacionado utilizado por diseñadores, analistas y programadores para comprender y recrear / volver a implementar. [3] : 3
Historia
Los dispositivos programables existen desde hace siglos. Ya en el siglo IX, los hermanos persas Banu Musa inventaron un secuenciador de música programable , quienes describieron un flautista mecánico automático en el Libro de los dispositivos ingeniosos . [4] [5] En 1206, el ingeniero árabe Al-Jazari inventó una caja de ritmos programable donde se podía hacer que un autómata mecánico musical tocara diferentes ritmos y patrones de batería, a través de clavijas y levas . [6] [7] En 1801, el telar Jacquard podía producir tejidos completamente diferentes cambiando el "programa": una serie de tarjetas de cartón con agujeros perforados.
Los algoritmos para descifrar códigos también han existido durante siglos. En el siglo IX, el matemático árabe Al-Kindi describió un algoritmo criptográfico para descifrar código cifrado, en A Manuscript on Deciphering Cryptographic Messages . Dio la primera descripción del criptoanálisis por análisis de frecuencia , el primer algoritmo de descifrado de códigos. [8]
El primer programa de computadora es generalmente fechado en 1843, cuando el matemático Ada Lovelace publicó un algoritmo para calcular una secuencia de números de Bernoulli , destinado a ser llevado a cabo por Charles Babbage 's máquina analítica . [9]
En la década de 1880, Herman Hollerith inventó el concepto de almacenar datos en forma legible por máquina. [10] Más tarde, un panel de control (placa de conexión) agregado a su tabulador Tipo I de 1906 permitió que se programara para diferentes trabajos y, a fines de la década de 1940, los equipos de grabación de unidades , como el IBM 602 y el IBM 604 , fueron programados por paneles de control. de manera similar, como lo fueron las primeras computadoras electrónicas . Sin embargo, con el concepto de computadora con programa almacenado introducido en 1949, tanto los programas como los datos se almacenaron y manipularon de la misma manera en la memoria de la computadora . [11]
Lenguaje de máquina
El código de máquina era el lenguaje de los primeros programas, escrito en el conjunto de instrucciones de la máquina en particular, a menudo en notación binaria . Pronto se desarrollaron lenguajes ensambladores que permitían al programador especificar instrucciones en un formato de texto (por ejemplo, ADD X, TOTAL), con abreviaturas para cada código de operación y nombres significativos para especificar direcciones. Sin embargo, debido a que un lenguaje ensamblador es poco más que una notación diferente para un lenguaje de máquina, dos máquinas cualesquiera con diferentes conjuntos de instrucciones también tienen diferentes lenguajes ensambladores.
Lenguajes del compilador
Los lenguajes de alto nivel hicieron que el proceso de desarrollo de un programa fuera más simple y comprensible, y menos ligado al hardware subyacente. FORTRAN , el primer lenguaje de alto nivel ampliamente utilizado que tiene una implementación funcional, salió a la luz en 1957 [12] y pronto se desarrollaron muchos otros lenguajes, en particular, COBOL destinado al procesamiento de datos comerciales y Lisp para la investigación informática.
Estos lenguajes compilados permiten al programador escribir programas en términos sintácticamente más ricos y más capaces de abstraer el código, lo que facilita la selección de conjuntos de instrucciones de máquina variables a través de declaraciones de compilación y heurísticas. Grace Hopper desarrolló el primer compilador de un lenguaje de programación . [13] Cuando Hopper se puso a trabajar en UNIVAC en 1949, trajo consigo la idea de utilizar compiladores. [14] [15] Los compiladores aprovechan el poder de las computadoras para facilitar la programación [12] permitiendo a los programadores especificar cálculos ingresando una fórmula usando notación infija (por ejemplo, Y = X * 2 + 5 * X + 9 ) por ejemplo. FORTRAN , el primer lenguaje de alto nivel ampliamente utilizado en tener una implementación funcional que permitía la abstracción de bloques de código reutilizables, salió a la luz en 1957 [12] y pronto se desarrollaron muchos otros lenguajes, en particular, COBOL destinado al procesamiento de datos comerciales, y Lisp para la investigación informática. En 1951 Frances E. Holberton desarrolló el primer generador de tipo de combinación , que se desarrolló en la UNIVAC . [16] Otra mujer que trabaja en UNIVAC, Adele Mildred Koss , desarrolló un programa que fue un precursor para reportar generadores . [16] La idea para la creación de COBOL comenzó en 1959 cuando Mary K. Hawes , quien trabajaba para Burroughs Corporation , organizó una reunión para discutir la creación de un lenguaje comercial común. [17] Invitó a seis personas, incluida Grace Hopper. [17] Hopper participó en el desarrollo de COBOL como lenguaje comercial y en la creación de programación "autodocumentada". [18] [19] La contribución de Hopper a COBOL se basó en su lenguaje de programación, llamado FLOW-MATIC . [15] En 1961, Jean E. Sammet desarrolló FORMAC y también publicó Lenguajes de programación: historia y fundamentos , que pasó a ser un trabajo estándar sobre lenguajes de programación. [17] [20]
Entrada de código fuente
La mayoría de los programas todavía se ingresaban utilizando tarjetas perforadas o cinta de papel . Consulte Programación de computadoras en la era de las tarjetas perforadas . A fines de la década de 1960, los dispositivos de almacenamiento de datos y las terminales de computadora se volvieron lo suficientemente económicos como para crear programas escribiendo directamente en las computadoras. Frances Holberton creó un código para permitir entradas de teclado mientras trabajaba en UNIVAC. [21]
Se desarrollaron editores de texto que permitían realizar cambios y correcciones mucho más fácilmente que con las tarjetas perforadas. La hermana Mary Kenneth Keller trabajó en el desarrollo del lenguaje de programación BASIC mientras estudiaba en Dartmouth en la década de 1960. [22] Uno de los primeros lenguajes de programación orientados a objetos, Smalltalk , fue desarrollado por siete programadores, incluida Adele Goldberg , en la década de 1970. [23]
Programación moderna
Requerimientos de calidad
Cualquiera que sea el enfoque del desarrollo, el programa final debe satisfacer algunas propiedades fundamentales. Las siguientes propiedades se encuentran entre las más importantes: [24] [25]
- Fiabilidad : la frecuencia con la que los resultados de un programa son correctos. Esto depende de la corrección conceptual de los algoritmos y la minimización de los errores de programación, como errores en la gestión de recursos (p. Ej., Desbordamientos de búfer y condiciones de carrera ) y errores lógicos (como errores de división por cero o de uno por uno ).
- Robustez : qué tan bien un programa anticipa problemas debido a errores (no errores). Esto incluye situaciones como datos incorrectos, inapropiados o corruptos, falta de disponibilidad de los recursos necesarios, como memoria, servicios del sistema operativo y conexiones de red, errores del usuario y cortes de energía inesperados.
- Usabilidad : la ergonomía de un programa: la facilidad con la que una persona puede utilizar el programa para su propósito previsto o, en algunos casos, incluso para fines inesperados. Estos problemas pueden hacer o deshacer su éxito incluso independientemente de otros problemas. Esto implica una amplia gama de elementos textuales, gráficos y, a veces, de hardware que mejoran la claridad, la intuición, la cohesión y la integridad de la interfaz de usuario de un programa.
- Portabilidad : la gama de plataformas de sistema operativo y hardware informático en las que se puede compilar / interpretar y ejecutar el código fuente de un programa . Esto depende de las diferencias en las facilidades de programación proporcionadas por las diferentes plataformas, incluidos los recursos de hardware y sistema operativo, el comportamiento esperado del hardware y el sistema operativo, y la disponibilidad de compiladores específicos de la plataforma (y a veces bibliotecas) para el lenguaje del código fuente.
- Mantenibilidad : la facilidad con la que un programa puede ser modificado por sus desarrolladores actuales o futuros para realizar mejoras o personalizarlo, corregir errores y agujeros de seguridad , o adaptarlo a nuevos entornos. Las buenas prácticas [26] durante el desarrollo inicial marcan la diferencia en este sentido. Esta cualidad puede no ser directamente evidente para el usuario final, pero puede afectar significativamente el destino de un programa a largo plazo.
- Eficiencia / rendimiento : medida de los recursos del sistema que consume un programa (tiempo de procesador, espacio de memoria, dispositivos lentos como discos, ancho de banda de red y, hasta cierto punto, incluso interacción del usuario): cuanto menos, mejor. Esto también incluye una gestión cuidadosa de los recursos, por ejemplo, la limpieza de archivos temporales y la eliminación de pérdidas de memoria . Esto a menudo se discute bajo la sombra de un lenguaje de programación elegido. Aunque el lenguaje ciertamente afecta el rendimiento, incluso los lenguajes más lentos, como Python , pueden ejecutar programas instantáneamente desde una perspectiva humana. La velocidad, el uso de recursos y el rendimiento son importantes para los programas que atascan el sistema, pero el uso eficiente del tiempo del programador también es importante y está relacionado con el costo: más hardware puede ser más barato.
Legibilidad del código fuente
En la programación de computadoras, la legibilidad se refiere a la facilidad con la que un lector humano puede comprender el propósito, el flujo de control y el funcionamiento del código fuente. Afecta los aspectos de calidad anteriores, incluida la portabilidad, la usabilidad y, lo más importante, la capacidad de mantenimiento.
La legibilidad es importante porque los programadores pasan la mayor parte de su tiempo leyendo, tratando de comprender y modificar el código fuente existente, en lugar de escribir código fuente nuevo. El código ilegible a menudo conduce a errores, ineficiencias y código duplicado . Un estudio [27] encontró que algunas transformaciones simples de legibilidad [ ¿cuál? ] hizo el código más corto y redujo drásticamente el tiempo para entenderlo.
Seguir un estilo de programación coherente a menudo ayuda a mejorar la legibilidad. Sin embargo, la legibilidad es más que solo estilo de programación. Muchos factores, que tienen poco o nada que ver con la capacidad de la computadora para compilar y ejecutar el código de manera eficiente, contribuyen a la legibilidad. [28] Algunos de estos factores incluyen:
- Diferentes estilos de sangría (espacios en blanco)
- Comentarios
- Descomposición
- Convenciones de nomenclatura para objetos (como variables, clases, procedimientos, etc.)
Los aspectos de presentación de esto (como sangrías, saltos de línea, resaltado de color, etc.) a menudo son manejados por el editor de código fuente , pero los aspectos de contenido reflejan el talento y las habilidades del programador.
También se han desarrollado varios lenguajes de programación visual con la intención de resolver los problemas de legibilidad mediante la adopción de enfoques no tradicionales para la estructura y visualización del código. Los entornos de desarrollo integrados (IDE) tienen como objetivo integrar toda esa ayuda. Técnicas como la refactorización de código pueden mejorar la legibilidad.
Complejidad algorítmica
El campo académico y la práctica de la ingeniería de la programación de computadoras se preocupan en gran medida por descubrir e implementar los algoritmos más eficientes para una clase determinada de problema. Para ello, los algoritmos se clasifican en órdenes utilizando la denominada notación Big O , que expresa el uso de recursos, como el tiempo de ejecución o el consumo de memoria, en términos del tamaño de una entrada. Los programadores expertos están familiarizados con una variedad de algoritmos bien establecidos y sus respectivas complejidades y utilizan este conocimiento para elegir los algoritmos que mejor se adapten a las circunstancias.
Algoritmos de ajedrez como ejemplo
"Programación de una computadora para jugar al ajedrez" fue un artículo de 1950 que evaluó un algoritmo "minimax" que es parte de la historia de la complejidad algorítmica; un curso sobre Deep Blue (computadora de ajedrez) de IBM es parte del plan de estudios de ciencias de la computación en la Universidad de Stanford . [29]
Metodologías
El primer paso en la mayoría de los procesos formales de desarrollo de software es el análisis de requisitos , seguido de pruebas para determinar el modelado de valor, la implementación y la eliminación de fallas (depuración). Existen muchos enfoques diferentes para cada una de esas tareas. Un enfoque popular para el análisis de requisitos es el análisis de casos de uso . Muchos programadores utilizan formas de desarrollo de software ágil en las que las diversas etapas del desarrollo de software formal están más integradas en ciclos cortos que toman unas pocas semanas en lugar de años. Hay muchos enfoques para el proceso de desarrollo de software.
Las técnicas de modelado más populares incluyen el análisis y diseño orientado a objetos ( OOAD ) y la arquitectura dirigida por modelos ( MDA ). El Lenguaje de modelado unificado ( UML ) es una notación utilizada tanto para OOAD como para MDA.
Una técnica similar utilizada para el diseño de bases de datos es el modelado de relaciones entre entidades ( modelado ER ).
Las técnicas de implementación incluyen lenguajes imperativos ( orientados a objetos o procedimentales ), lenguajes funcionales y lenguajes lógicos .
Medir el uso del lenguaje
Es muy difícil determinar cuáles son los lenguajes de programación modernos más populares. Los métodos para medir la popularidad del lenguaje de programación incluyen: contar el número de anuncios de trabajo que mencionan el idioma, [30] el número de libros vendidos y cursos que enseñan el idioma (esto sobreestima la importancia de los lenguajes más nuevos) y estimaciones del número de líneas existentes de código escrito en el lenguaje (esto subestima el número de usuarios de lenguajes comerciales como COBOL).
Algunos lenguajes son muy populares para tipos particulares de aplicaciones, mientras que algunos lenguajes se utilizan habitualmente para escribir muchos tipos diferentes de aplicaciones. Por ejemplo, COBOL sigue siendo fuerte en los centros de datos corporativos [31], a menudo en grandes computadoras mainframe , Fortran en aplicaciones de ingeniería, lenguajes de scripting en desarrollo web y C en software integrado . Muchas aplicaciones utilizan una combinación de varios lenguajes en su construcción y uso. Los nuevos lenguajes generalmente se diseñan en torno a la sintaxis de un lenguaje anterior con nueva funcionalidad agregada (por ejemplo, C ++ agrega orientación a objetos a C, y Java agrega administración de memoria y código de bytes a C ++, pero como resultado, pierde eficiencia y la capacidad de baja -manipulación de nivel).
Depuración
La depuración es una tarea muy importante en el proceso de desarrollo de software, ya que tener defectos en un programa puede tener consecuencias importantes para sus usuarios. Algunos lenguajes son más propensos a algunos tipos de fallas porque su especificación no requiere que los compiladores realicen tantas comprobaciones como otros lenguajes. El uso de una herramienta de análisis de código estático puede ayudar a detectar algunos posibles problemas. Normalmente, el primer paso de la depuración es intentar reproducir el problema. Esta puede ser una tarea no trivial, por ejemplo, como ocurre con los procesos paralelos o algunos errores de software inusuales. Además, el entorno de usuario específico y el historial de uso pueden dificultar la reproducción del problema.
Una vez reproducido el error, es posible que sea necesario simplificar la entrada del programa para facilitar la depuración. Por ejemplo, cuando un error en un compilador puede hacer que se bloquee al analizar un archivo fuente grande, una simplificación del caso de prueba que dé como resultado solo unas pocas líneas del archivo fuente original puede ser suficiente para reproducir el mismo bloqueo. Se necesita prueba y error / divide y vencerás: el programador intentará eliminar algunas partes del caso de prueba original y comprobará si el problema persiste. Al depurar el problema en una GUI, el programador puede intentar omitir alguna interacción del usuario de la descripción original del problema y comprobar si las acciones restantes son suficientes para que aparezcan errores. La creación de scripts y los puntos de interrupción también son parte de este proceso.
La depuración se realiza a menudo con IDE . También se utilizan depuradores independientes como GDB , que a menudo proporcionan un entorno menos visual, normalmente mediante una línea de comandos . Algunos editores de texto como Emacs permiten invocar GDB a través de ellos para proporcionar un entorno visual.
Lenguajes de programación
Los diferentes lenguajes de programación admiten diferentes estilos de programación (llamados paradigmas de programación ). La elección del idioma utilizado está sujeta a muchas consideraciones, como la política de la empresa, la idoneidad para la tarea, la disponibilidad de paquetes de terceros o las preferencias individuales. Idealmente, se seleccionará el lenguaje de programación más adecuado para la tarea en cuestión. Las compensaciones de este ideal implican encontrar suficientes programadores que conozcan el lenguaje para construir un equipo, la disponibilidad de compiladores para ese lenguaje y la eficiencia con la que se ejecutan los programas escritos en un lenguaje dado. Los idiomas forman un espectro aproximado de "bajo nivel" a "alto nivel"; Los lenguajes de "bajo nivel" suelen estar más orientados a las máquinas y son más rápidos de ejecutar, mientras que los lenguajes de "alto nivel" son más abstractos y fáciles de usar, pero se ejecutan con menor rapidez. Suele ser más fácil codificar en lenguajes de "alto nivel" que en lenguajes de "bajo nivel".
Allen Downey , en su libro How To Think Like A Computer Scientist , escribe:
- Los detalles se ven diferentes en diferentes idiomas, pero algunas instrucciones básicas aparecen en casi todos los idiomas:
- Entrada: recopile datos del teclado, un archivo o algún otro dispositivo.
- Salida: muestra datos en la pantalla o envía datos a un archivo u otro dispositivo.
- Aritmética: Realiza operaciones aritméticas básicas como suma y multiplicación.
- Ejecución condicional: verifique ciertas condiciones y ejecute la secuencia apropiada de declaraciones.
- Repetición: realice alguna acción repetidamente, generalmente con alguna variación.
Muchos lenguajes informáticos proporcionan un mecanismo para llamar a funciones proporcionadas por bibliotecas compartidas . Siempre que las funciones en una biblioteca sigan las convenciones de tiempo de ejecución apropiadas (por ejemplo, el método de pasar argumentos ), estas funciones pueden escribirse en cualquier otro lenguaje.
Programadores
Los programadores de computadoras son aquellos que escriben software de computadora. Sus trabajos suelen incluir:
- Creación de prototipos
- Codificación
- Depuración
- Documentación
- Integración
- Mantenimiento
- Análisis de requerimientos
- Arquitectura de software
- Pruebas de software
- Especificación
Ver también
- ACCU
- Asociación para Maquinaria de Computación
- Redes de computadoras
- Programa hola mundo
- Institución de analistas y programadores
- Semana Nacional de Codificación
- Programación del sistema
- Programación informática en la era de las tarjetas perforadas
- El arte de la programación informática
- Mujeres en informática
- Cronología de las mujeres en informática
Referencias
- ^ Bebbington, Shaun (2014). "Qué es la codificación" . Tumblr . Archivado desde el original el 29 de abril de 2020 . Consultado el 3 de marzo de 2014 .
- ^ Bebbington, Shaun (2014). "Qué es la programación" . Tumblr . Archivado desde el original el 29 de abril de 2020 . Consultado el 3 de marzo de 2014 .
- ^ Eilam, Eldad (2005). Inversión: secretos de la ingeniería inversa . John Wiley e hijos. ISBN 978-0-7645-7481-8.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Koetsier, Teun (2001), "Sobre la prehistoria de las máquinas programables: autómatas musicales, telares, calculadoras", Mecanismo y teoría de máquinas , Elsevier, 36 (5): 589–603, doi : 10.1016 / S0094-114X (01) 00005 -2 .
- ^ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). "Altavoces opcionales: una historia de la música electroacústica no basada en altavoces" . Sonido organizado . Prensa de la Universidad de Cambridge . 22 (2): 195-205. doi : 10.1017 / S1355771817000103 . ISSN 1355-7718 .
- ^ Fowler, Charles B. (octubre de 1967). "El Museo de la Música: una historia de los instrumentos mecánicos". Revista de educadores musicales . 54 (2): 45–49. doi : 10.2307 / 3391092 . JSTOR 3391092 . S2CID 190524140 .
- ^ Noel Sharkey (2007), Un robot programable del siglo XIII , Universidad de Sheffield
- ^ Dooley, John F. (2013). Una breve historia de la criptología y los algoritmos criptográficos . Springer Science & Business Media. págs. 12–3. ISBN 9783319016283.
- ^ Fuegi, J .; Francis, J. (2003). "Lovelace & Babbage y la creación de las 'notas ' de 1843 ". IEEE Annals of the History of Computing . 25 (4): 16. doi : 10.1109 / MAHC.2003.1253887 .
- ^ da Cruz, Frank (10 de marzo de 2020). "Historia de la informática de la Universidad de Columbia - Herman Hollerith" . Universidad de Columbia . Columbia.edu. Archivado desde el original el 29 de abril de 2020 . Consultado el 25 de abril de 2010 .
- ^ "Memoria y almacenamiento | Cronología de la historia de la computadora | Museo de la historia de la computadora" . www.computerhistory.org . Consultado el 3 de junio de 2021 .
- ^ a b c Bergstein, Brian (20 de marzo de 2007). "Muere el creador de Fortran, John Backus" . NBC News . Archivado desde el original el 29 de abril de 2020 . Consultado el 25 de abril de 2010 .
- ↑ Smith , 2013 , p. 6.
- ^ Ceruzzi 1998 , p. 84-85.
- ↑ a b Gürer , 1995 , p. 176.
- ↑ a b Gürer , 1995 , p. 177.
- ↑ a b c Gürer , 1995 , p. 179.
- ↑ Smith , 2013 , p. 7.
- ^ Ceruzzi 1998 , p. 92.
- ^ "Autoridad informática para hablar aquí" . The Times . 9 de abril de 1972 . Consultado el 13 de octubre de 2018 , a través de Newspapers.com.
- ^ "Frances Holberton, pionera en lenguajes informáticos, muere" . El Courier-Journal . 12 de diciembre de 2001 . Consultado el 13 de octubre de 2018 , a través de Newspapers.com.
- ^ Gurero 1995 , p. 180-181.
- ^ "Adele Goldberg" . Universidad de Maryland, College Park . Consultado el 14 de octubre de 2018 .
- ^ "NIST para desarrollar la hoja de ruta de la nube" . InformationWeek . 5 de noviembre de 2010. La
iniciativa informática busca eliminar las barreras a la adopción de la nube en cuanto a seguridad, interoperabilidad, portabilidad y confiabilidad.
- ^ "En qué se basa". ComputerWorld . 9 de abril de 1984. p. 13.
¿Se basa en ... Portabilidad de confiabilidad. Compatibilidad
- ^ "Programación 101: consejos para convertirse en un buen programador - Wisdom Geek" . Wisdom Geek . 19 de mayo de 2016 . Consultado el 23 de mayo de 2016 .
- ^ Elshoff, James L .; Marcotty, Michael (1982). "Mejora de la legibilidad del programa de computadora para ayudar a la modificación". Comunicaciones de la ACM . 25 (8): 512–521. doi : 10.1145 / 358589.358596 . S2CID 30026641 .
- ^ Múltiple (wiki). "Legibilidad" . Docforge . Archivado desde el original el 29 de abril de 2020 . Consultado el 30 de enero de 2010 .
- ^ Piech, Chris. "Azul profundo" .
En 1950, Claude Shannon publicó ... "Programación de una computadora para jugar al ajedrez", ... algoritmo "minimax"
- ^ Enticknap, Nicholas (11 de septiembre de 2007). "Encuesta de salario de TI de SSL / Computer Weekly: el auge de las finanzas impulsa el crecimiento del empleo de TI" .
- ^ Mitchell, Robert (21 de mayo de 2012). "La fuga de cerebros de Cobol" . Computer World . Consultado el 9 de mayo de 2015 .
- ^ Fotografía cortesía del Naval Surface Warfare Center, Dahlgren, Virginia, de National Geographic, septiembre de 1947
Fuentes
- Ceruzzi, Paul E. (1998). Historia de la Computación . Cambridge, Massachusetts: MIT Press. ISBN 9780262032551 - a través de EBSCOhost.
- Evans, Claire L. (2018). Broad Band: La historia no contada de las mujeres que hicieron Internet . Nueva York: Portfolio / Penguin. ISBN 9780735211759.
- Gurero, Denise (1995). "Mujeres pioneras en informática" (PDF) . Comunicaciones de la ACM . 38 (1): 45–54. doi : 10.1145 / 204865.204875 . S2CID 6626310 .
- Smith, Erika E. (2013). "Reconociendo una herencia colectiva a través de la historia de la mujer en la informática" . CLCWeb: Literatura y cultura comparadas: una revista de WWWeb . 15 (1): 1–9: a través de EBSCOhost.
Otras lecturas
- AK Hartmann, Guía práctica de simulaciones por computadora , Singapur: World Scientific (2009)
- A. Hunt, D. Thomas y W. Cunningham, el programador pragmático. De oficial a maestro , Amsterdam: Addison-Wesley Longman (1999)
- Brian W. Kernighan, La práctica de la programación , Pearson (1999)
- Weinberg, Gerald M. , La psicología de la programación informática , Nueva York: Van Nostrand Reinhold (1971)
- Edsger W. Dijkstra , Una disciplina de programación , Prentice-Hall (1976)
- O.-J. Dahl, EWDijkstra , CAR Hoare, Programación estructurada , Academic Press (1972)
- David Gries , La ciencia de la programación , Springer-Verlag (1981)
enlaces externos
- Medios relacionados con la programación informática en Wikimedia Commons
- Citas relacionadas con la programación en Wikiquote
- Ingeniería de software en Curlie