De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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 [ editar ]

Ada Lovelace , cuyas notas añadidas al final del artículo de Luigi Menabrea incluían el primer algoritmo diseñado para ser procesado por un motor analítico . A menudo se la reconoce como la primera programadora informática de la 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 Jacquardpodrí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]

Los datos y las instrucciones alguna vez se almacenaron en tarjetas perforadas externas , que se mantuvieron en orden y se organizaron en cubiertas de programas.

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 (plugboard) agregado a su tabulador Tipo I de 1906 permitió que se programara para diferentes trabajos, y para fines de la década de 1940, los equipos de grabación de unidades , como el IBM 602 e IBM 604 , fueron programados por paneles de control en 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 . [cita requerida ]

Lenguaje de máquina [ editar ]

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.

Panel de control cableado para una máquina de contabilidad IBM 402 .

Idiomas del compilador [ editar ]

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 [11] 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, haciéndolo orientable a diferentes conjuntos de instrucciones de máquina a través de declaraciones de compilación y heurísticas. Grace Hopper desarrolló el primer compilador de un lenguaje de programación . [12] Cuando Hopper se puso a trabajar en UNIVAC en 1949, trajo consigo la idea de utilizar compiladores. [13] [14] Los compiladores aprovechan el poder de las computadoras para facilitar la programación [11] al permitir que los programadores especifiquen 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 [11] 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 . [15] Otra mujer que trabaja en UNIVAC, Adele Mildred Koss , desarrolló un programa que fue un precursor para informar generadores . [15]La idea de 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. [16] Invitó a seis personas, incluida Grace Hopper. [16] Hopper participó en el desarrollo de COBOL como lenguaje comercial y en la creación de programación "autodocumentada". [17] [18] La contribución de Hopper a COBOL se basó en su lenguaje de programación, llamado FLOW-MATIC . [14] 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 en lenguajes de programación. [16] [19]

Entrada de código fuente [ editar ]

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

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

Programación moderna [ editar ]

Requisitos de calidad [ editar ]

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: [23] [24]

  • 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 con el fin de realizar mejoras o personalizaciones, corregir errores y agujeros de seguridad , o adaptarlo a nuevos entornos. Las buenas prácticas [25] 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, puede 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 [ editar ]

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 que es 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 [26] encontró que unas pocas transformaciones simples de legibilidad acortaron el código y redujeron drásticamente el tiempo para comprenderlo.

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. [27] 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 [ editar ]

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 [ editar ]

"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 . [28]

Metodologías [ editar ]

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 idioma [ editar ]

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, [29] 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 [30], 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, yJava agrega administración de memoria y código de bytes a C ++, pero como resultado, pierde eficiencia y la capacidad de manipulación de bajo nivel).

Depurando [ editar ]

El primer error real conocido que causó un problema en una computadora fue una polilla, atrapada dentro de una computadora central de Harvard, registrada en una entrada del libro de registro con fecha del 9 de septiembre de 1947. [31] "Error" ya era un término común para un defecto de software cuando esto Se encontró un error.

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 como Eclipse , Visual Studio , Xcode , Kdevelop , NetBeans y Code :: Blocks . 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 [ editar ]

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. Por lo general, es más fácil codificar en lenguajes de "alto nivel" que en "los 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 [ editar ]

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 [ editar ]

  • ACCU
  • Association for Computing Machinery
  • Computer networking
  • Hello world program
  • Institution of Analysts and Programmers
  • National Coding Week
  • System programming
  • Computer programming in the punched card era
  • The Art of Computer Programming
  • Women in computing
  • Timeline of women in computing

References[edit]

  1. ^ Bebbington, Shaun (2014). "What is coding". Tumblr. Archived from the original on April 29, 2020. Retrieved March 3, 2014.
  2. ^ Bebbington, Shaun (2014). "What is programming". Tumblr. Archived from the original on April 29, 2020. Retrieved March 3, 2014.
  3. ^ Eilam, Eldad (2005). Reversing: secrets of reverseengineering. John Wiley & Sons. ISBN 978-0-7645-7481-8.CS1 maint: uses authors parameter (link)
  4. ^ Koetsier, Teun (2001), "On the prehistory of programmable machines: musical automata, looms, calculators", Mechanism and Machine Theory, Elsevier, 36 (5): 589–603, doi:10.1016/S0094-114X(01)00005-2.
  5. ^ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). "Loudspeakers Optional: A history of non-loudspeaker-based electroacoustic music". Organised Sound. Cambridge University Press. 22 (2): 195–205. doi:10.1017/S1355771817000103. ISSN 1355-7718.
  6. ^ Fowler, Charles B. (October 1967). "The Museum of Music: A History of Mechanical Instruments". Music Educators Journal. 54 (2): 45–49. doi:10.2307/3391092. JSTOR 3391092. S2CID 190524140.
  7. ^ Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield
  8. ^ Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. pp. 12–3. ISBN 9783319016283.
  9. ^ Fuegi, J.; Francis, J. (2003). "Lovelace & Babbage and the Creation of the 1843 'notes'". IEEE Annals of the History of Computing. 25 (4): 16. doi:10.1109/MAHC.2003.1253887.
  10. ^ da Cruz, Frank (March 10, 2020). "Columbia University Computing History – Herman Hollerith". Columbia University. Columbia.edu. Archived from the original on April 29, 2020. Retrieved April 25, 2010.
  11. ^ a b c Bergstein, Brian (March 20, 2007). "Fortran creator John Backus dies". NBC News. Archived from the original on April 29, 2020. Retrieved April 25, 2010.
  12. ^ Smith 2013, p. 6.
  13. ^ Ceruzzi 1998, p. 84-85.
  14. ^ a b Gürer 1995, p. 176.
  15. ^ a b Gürer 1995, p. 177.
  16. ^ a b c Gürer 1995, p. 179.
  17. ^ Smith 2013, p. 7.
  18. ^ Ceruzzi 1998, p. 92.
  19. ^ "Computer Authority to Speak Here". The Times. April 9, 1972. Retrieved October 13, 2018 – via Newspapers.com.
  20. ^ "Frances Holberton, Pioneer in Computer Languages, Dies". The Courier-Journal. December 12, 2001. Retrieved October 13, 2018 – via Newspapers.com.
  21. ^ Gürer 1995, p. 180-181.
  22. ^ "Adele Goldberg". University of Maryland, College Park. Retrieved October 14, 2018.
  23. ^ "NIST To Develop Cloud Roadmap". InformationWeek. November 5, 2010. Computing initiative seeks to remove barriers to cloud adoption in security, interoperability, portability and reliability.
  24. ^ "What is it based on". ComputerWorld. April 9, 1984. p. 13. Is it based on ... Reliability Portability. Compatibility
  25. ^ "Programming 101: Tips to become a good programmer - Wisdom Geek". Wisdom Geek. May 19, 2016. Retrieved May 23, 2016.
  26. ^ Elshoff, James L.; Marcotty, Michael (1982). "Improving computer program readability to aid modification". Communications of the ACM. 25 (8): 512–521. doi:10.1145/358589.358596. S2CID 30026641.
  27. ^ Multiple (wiki). "Readability". Docforge. Archived from the original on April 29, 2020. Retrieved January 30, 2010.
  28. ^ Piech, Chris. "Deep Blue". In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm
  29. ^ Enticknap, Nicholas (September 11, 2007). "SSL/Computer Weekly IT salary survey: finance boom drives IT job growth".
  30. ^ Mitchell, Robert (May 21, 2012). "The Cobol Brain Drain". Computer World. Retrieved May 9, 2015.
  31. ^ Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947

Sources[edit]

  • Ceruzzi, Paul E. (1998). History of Computing. Cambridge, Massachusetts: MIT Press. ISBN 9780262032551 – via EBSCOhost.
  • Evans, Claire L. (2018). Broad Band: The Untold Story of the Women Who Made the Internet. New York: Portfolio/Penguin. ISBN 9780735211759.
  • Gürer, Denise (1995). "Pioneering Women in Computer Science" (PDF). Communications of the ACM. 38 (1): 45–54. doi:10.1145/204865.204875. S2CID 6626310.
  • Smith, Erika E. (2013). "Recognizing a Collective Inheritance through the History of Women in Computing". CLCWeb: Comparative Literature & Culture: A WWWeb Journal. 15 (1): 1–9 – via EBSCOhost.

Further reading[edit]

  • A.K. Hartmann, Practical Guide to Computer Simulations, Singapore: World Scientific (2009)
  • A. Hunt, D. Thomas, and W. Cunningham, The Pragmatic Programmer. From Journeyman to Master, Amsterdam: Addison-Wesley Longman (1999)
  • Brian W. Kernighan, The Practice of Programming, Pearson (1999)
  • Weinberg, Gerald M., The Psychology of Computer Programming, New York: Van Nostrand Reinhold (1971)
  • Edsger W. Dijkstra, A Discipline of Programming, Prentice-Hall (1976)
  • O.-J. Dahl, E.W.Dijkstra, C.A.R. Hoare, Structured Programming, Academic Press (1972)
  • David Gries, The Science of Programming, Springer-Verlag (1981)

External links[edit]

  • Media related to Computer programming at Wikimedia Commons
  • Quotations related to Programming at Wikiquote
  • Software engineering at Curlie