stringtranslate.com

Programación de computadoras

La programación o codificación informática es la composición de secuencias de instrucciones, llamadas programas , que las computadoras pueden seguir para realizar tareas. [1] [2] Implica el diseño e implementación de algoritmos , especificaciones paso a paso de procedimientos, mediante la escritura de código en uno o más lenguajes de programación . Los programadores suelen utilizar lenguajes de programación de alto nivel que son más fácilmente inteligibles para los humanos que el código de máquina , que es ejecutado directamente por la unidad central de procesamiento . La programación competente generalmente requiere experiencia en varias materias diferentes, incluido el conocimiento del dominio de la aplicación , detalles de los lenguajes de programación y bibliotecas de códigos genéricos , algoritmos especializados y lógica formal .

Las tareas auxiliares que acompañan y están relacionadas con la programación incluyen el análisis de requisitos , las pruebas , la depuración (investigar y solucionar problemas), la implementación de sistemas de compilación y la gestión de artefactos derivados , como el código de máquina de los programas . Si bien a veces se las considera programación, a menudo se utiliza el término desarrollo de software para este proceso general más amplio, y los términos programación , implementación y codificación se reservan para la escritura y edición del código en sí. A veces, el desarrollo de software se conoce como ingeniería de software , especialmente cuando emplea métodos formales o sigue un proceso de diseño de ingeniería .

Historia

Ada Lovelace , cuyas notas se añadieron al final del artículo de Luigi Menabrea , incluyó el primer algoritmo diseñado para el procesamiento de la máquina analítica de Charles Babbage . 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 musical programable , que describió un flautista mecánico automatizado en el Libro de los ingeniosos dispositivos . [3] [4] En 1206, el ingeniero árabe Al-Jazari inventó una caja de ritmos programable en la que se podía hacer que un autómata mecánico musical tocara diferentes ritmos y patrones de batería, mediante clavijas y levas . [5] [6] En 1801, el telar Jacquard podía producir tejidos completamente diferentes cambiando el "programa" (una serie de tarjetas de cartón con agujeros perforados en ellas).

Los algoritmos de descifrado de códigos también existen desde hace siglos. En el siglo IX, el matemático árabe Al-Kindi describió un algoritmo criptográfico para descifrar códigos cifrados en Un manuscrito sobre el descifrado de mensajes criptográficos . Dio la primera descripción del criptoanálisis por análisis de frecuencia , el algoritmo de descifrado de códigos más antiguo. [7]

El primer programa de ordenador se remonta generalmente a 1843, cuando la matemática Ada Lovelace publicó un algoritmo para calcular una secuencia de números de Bernoulli , que debía ser ejecutado por la máquina analítica de Charles Babbage . [8] Sin embargo, el propio Charles Babbage había escrito un programa para la máquina analítica en 1837. [9] [10]

Los datos y las instrucciones antes se almacenaban en tarjetas perforadas externas , que se mantenían ordenadas y organizadas en mazos de programas.

En la década de 1880, Herman Hollerith inventó el concepto de almacenar datos en forma legible por máquina. [11] Más tarde, un panel de control (placa de conexión) añadido a su Tabulador Tipo I de 1906 permitió programarlo para diferentes trabajos y, a fines de la década de 1940, los equipos de registro unitario como el IBM 602 y el IBM 604 , se programaban mediante paneles de control de manera similar, al igual que las primeras computadoras electrónicas . Sin embargo, con el concepto de computadora de programa almacenado introducido en 1949, tanto los programas como los datos se almacenaban y manipulaban de la misma manera en la memoria de la computadora . [12]

Lenguaje 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 cuestión, a menudo en notación binaria . Pronto se desarrollaron lenguajes ensambladores que permitían al programador especificar instrucciones en 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 con conjuntos de instrucciones diferentes también tienen lenguajes ensambladores diferentes.

Panel de control cableado para una máquina de contabilidad IBM 402. Los cables conectan los flujos de pulsos desde el lector de tarjetas a los contadores y otros elementos lógicos internos y, en última instancia, a la impresora.

Lenguajes compiladores

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 . La primera herramienta relacionada con el compilador, el Sistema A-0 , fue desarrollada en 1952 [13] por Grace Hopper , quien también acuñó el término "compilador". [14] [15] FORTRAN , el primer lenguaje de alto nivel ampliamente utilizado en tener una implementación funcional, salió en 1957, [16] 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 con mayor capacidad de abstraer el código, lo que facilita la selección de conjuntos de instrucciones de máquina variables mediante declaraciones de compilación y heurísticas . Los compiladores aprovecharon el poder de las computadoras para facilitar la programación [16] al permitir a los programadores especificar cálculos ingresando una fórmula utilizando notación infija .

Entrada de código fuente

Los programas se introducían principalmente mediante tarjetas perforadas o cintas de papel . A finales de los años 60, los dispositivos de almacenamiento de datos y las terminales de ordenador se volvieron lo suficientemente económicos como para que los programas se pudieran crear escribiendo directamente en los ordenadores. También se desarrollaron editores de texto que permitían realizar cambios y correcciones con mucha más facilidad que con tarjetas perforadas .

Programación moderna

Requisitos de calidad

Cualquiera que sea el enfoque de desarrollo, el programa final debe satisfacer algunas propiedades fundamentales. Entre las más importantes se encuentran las siguientes: [17] [18]

El uso de pruebas automatizadas y funciones de aptitud puede ayudar a mantener algunos de los atributos mencionados anteriormente. [20]

Legibilidad del código fuente

En programación informática, 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 antes mencionados, incluida la portabilidad, la facilidad de uso y, lo más importante, la facilidad de mantenimiento.

La legibilidad es importante porque los programadores pasan la mayor parte de su tiempo leyendo, intentando comprender, reutilizando y modificando el código fuente existente, en lugar de escribir código fuente nuevo. El código ilegible suele dar lugar a errores, ineficiencias y código duplicado . Un estudio descubrió que unas pocas transformaciones sencillas de legibilidad acortaban el código y reducían drásticamente el tiempo necesario para comprenderlo. [21]

Seguir un estilo de programación coherente suele mejorar la legibilidad. Sin embargo, la legibilidad es más que un simple estilo de programación. Muchos factores, que tienen poco o nada que ver con la capacidad del ordenador para compilar y ejecutar el código de forma eficiente, contribuyen a la legibilidad. [22] Algunos de estos factores son:

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 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 ingeniería de la programación informática se ocupan de descubrir e implementar los algoritmos más eficientes para una clase determinada de problemas. Para ello, los algoritmos se clasifican en órdenes utilizando la 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 adaptan a las circunstancias.

Metodologías

El primer paso en la mayoría de los procesos de desarrollo de software formales es el análisis de requisitos , seguido de las pruebas para determinar el valor, el modelado, 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 donde 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. Existen 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 basada en 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 entidad-relación ( modelado ER ).

Las técnicas de implementación incluyen lenguajes imperativos ( orientados a objetos o procedimentales ), lenguajes funcionales y lenguajes de programación lógica .

Medición del 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 de un lenguaje de programación incluyen: contar la cantidad de anuncios de trabajo que mencionan el lenguaje, [23] la cantidad de libros vendidos y cursos que enseñan el lenguaje (esto sobreestima la importancia de los lenguajes más nuevos) y estimaciones de la cantidad de líneas de código existentes escritas en el lenguaje (esto subestima la cantidad de usuarios de lenguajes comerciales como COBOL).

Algunos lenguajes son muy populares para determinados tipos de aplicaciones, mientras que otros se utilizan habitualmente para escribir muchos tipos diferentes de aplicaciones. Por ejemplo, COBOL sigue siendo fuerte en los centros de datos corporativos [24] , a menudo en grandes ordenadores mainframe , Fortran en aplicaciones de ingeniería, lenguajes de programación en el desarrollo web y C en software integrado . Muchas aplicaciones utilizan una mezcla de varios lenguajes en su construcción y uso. Los nuevos lenguajes suelen diseñarse en torno a la sintaxis de un lenguaje anterior al que se le añade nueva funcionalidad (por ejemplo, C++ añade orientación a objetos a C, y Java añade gestión de memoria y bytecode a C++, pero como resultado, pierde eficiencia y la capacidad de manipulación de bajo nivel).

Depuración

El primer error conocido que causó un problema en una computadora fue una polilla atrapada dentro de un mainframe de Harvard, registrado en una entrada de libro de registro con fecha del 9 de septiembre de 1947. [25] "Error" ya era un término común para un defecto de software cuando se encontró este insecto.

La depuración es una tarea muy importante en el proceso de desarrollo de software, ya que la presencia de defectos en un programa puede tener consecuencias significativas para sus usuarios. Algunos lenguajes son más propensos a ciertos tipos de fallos 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 en la depuración es intentar reproducir el problema. Esta puede ser una tarea no trivial, por ejemplo, con 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 que se reproduce el error, es posible que sea necesario simplificar la entrada del programa para facilitar su 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 error. Se necesita un método de prueba y error/divide y vencerás: el programador intentará eliminar algunas partes del caso de prueba original y verificará si el problema aún existe. Al depurar el problema en una GUI, el programador puede intentar omitir alguna interacción del usuario de la descripción del problema original y verificar si las acciones restantes son suficientes para que aparezcan los errores. La creación de scripts y 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 suelen proporcionar un entorno menos visual, normalmente utilizando 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 distintos lenguajes de programación admiten distintos estilos de programación (denominados paradigmas de programación ). La elección del lenguaje 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. Lo ideal es 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 formar un equipo, la disponibilidad de compiladores para ese lenguaje y la eficiencia con la que se ejecutan los programas escritos en un lenguaje determinado. Los lenguajes forman un espectro aproximado de "bajo nivel" a "alto nivel"; los lenguajes de "bajo nivel" suelen estar más orientados a la máquina y son más rápidos de ejecutar, mientras que los lenguajes de "alto nivel" son más abstractos y más fáciles de usar, pero se ejecutan con menor rapidez. Suele ser más fácil codificar en lenguajes de "alto nivel" que en los de "bajo nivel". Los lenguajes de programación son esenciales para el desarrollo de software. Son los componentes básicos de todo software, desde las aplicaciones más sencillas hasta las más sofisticadas.

Allen Downey , en su libro Cómo pensar como un científico informático , escribe:

Los detalles se ven diferentes en distintos idiomas, pero algunas instrucciones básicas aparecen en casi todos los idiomas:
  • Entrada: Recopilar datos desde el teclado, un archivo o algún otro dispositivo.
  • Salida: Mostrar datos en la pantalla o enviar datos a un archivo u otro dispositivo.
  • Aritmética: Realizar operaciones aritméticas básicas como suma y multiplicación.
  • Ejecución condicional: verifica ciertas condiciones y ejecuta la secuencia apropiada de declaraciones.
  • Repetición: Realizar 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 de una biblioteca sigan las convenciones de tiempo de ejecución adecuadas (por ejemplo, el método de paso de argumentos ), estas funciones pueden escribirse en cualquier otro lenguaje.

Programadores

Los programadores informáticos son aquellos que escriben software informático. Sus trabajos suelen implicar:

Aunque la programación se ha presentado en los medios como un tema más bien matemático, algunas investigaciones muestran que los buenos programadores tienen fuertes habilidades en lenguajes humanos naturales, y que aprender a codificar es similar a aprender un idioma extranjero . [26] [27]

Véase también

Referencias

  1. ^ 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 .
  2. ^ 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 .
  3. ^ Koetsier, Teun (2001). "Sobre la prehistoria de las máquinas programables: autómatas musicales, telares, calculadoras". Mecanismo y teoría de máquinas . 36 (5). Elsevier: 589–603. doi :10.1016/S0094-114X(01)00005-2.
  4. ^ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). "Altavoces opcionales: una historia de la música electroacústica sin altavoces". Sonido organizado . 22 (2). Cambridge University Press : 195–205. doi : 10.1017/S1355771817000103 . ISSN  1355-7718.
  5. ^ Fowler, Charles B. (octubre de 1967). "El Museo de la Música: Una historia de los instrumentos mecánicos". Music Educators Journal . 54 (2): 45–49. doi :10.2307/3391092. JSTOR  3391092. S2CID  190524140.
  6. ^ Noel Sharkey (2007), Un robot programable del siglo XIII, Universidad de Sheffield
  7. ^ Dooley, John F. (2013). Breve historia de la criptología y los algoritmos criptográficos . Springer Science & Business Media. pp. 12–3. ISBN 9783319016283.
  8. ^ Fuegi, J.; Francis, J. (2003). "Lovelace y Babbage y la creación de las 'notas' de 1843"". IEEE Anales de la Historia de la Computación . 25 (4): 16. doi :10.1109/MAHC.2003.1253887.
  9. ^ Rojas, R. (2021). "Los programas informáticos de Charles Babbage". IEEE Annals of the History of Computing . 43 (1): 6–18. doi :10.1109/MAHC.2020.3045717.
  10. ^ Rojas, R. (2024). "El primer programa de ordenador" (PDF) . Comunicaciones de la ACM . 67 (6): 78–81. doi : 10.1145/3624731 .
  11. ^ da Cruz, Frank (10 de marzo de 2020). «Historia de la informática en 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 .
  12. ^ "Memoria y almacenamiento | Cronología de la historia de la informática | Museo de Historia de la Computación". www.computerhistory.org . Archivado desde el original el 27 de mayo de 2021 . Consultado el 3 de junio de 2021 .
  13. ^ Ridgway, Richard (1952). "Compiling routines". Actas de la reunión nacional de la ACM de 1952 (Toronto) en - ACM '52 . págs. 1–5. doi : 10.1145/800259.808980 . ISBN 9781450379250.S2CID14878552  .​
  14. ^ Maurice V. Wilkes . 1968. Computers Then and Now. Journal of the Association for Computing Machinery, 15(1):1–7, enero. p. 3 (un comentario entre corchetes añadido por el editor), "(No creo que el término compilador fuera de uso general en ese entonces [1953], aunque de hecho había sido introducido por Grace Hopper.)"
  15. ^ [1] Los primeros compiladores COBOL del mundo Archivado el 13 de octubre de 2011 en Wayback Machine.
  16. ^ ab Bergstein, Brian (20 de marzo de 2007). «Muere John Backus, creador de Fortran». NBC News . Archivado desde el original el 29 de abril de 2020. Consultado el 25 de abril de 2010 .
  17. ^ "NIST to Develop Cloud Roadmap". InformationWeek . 5 de noviembre de 2010. La iniciativa informática busca eliminar las barreras a la adopción de la nube en materia de seguridad, interoperabilidad, portabilidad y confiabilidad.
  18. ^ "¿En qué se basa?". Computerworld . 9 de abril de 1984. p. 13. ¿Se basa en...? Fiabilidad Portabilidad Compatibilidad
  19. ^ "Programación 101: Consejos para convertirse en un buen programador - Wisdom Geek". Wisdom Geek . 19 de mayo de 2016. Archivado desde el original el 23 de mayo de 2016 . Consultado el 23 de mayo de 2016 .
  20. ^ Fundamentos de la arquitectura de software: un enfoque de ingeniería . O'Reilly Media. 2020. ISBN 978-1492043454.
  21. ^ Elshoff, James L.; Marcotty, Michael (1982). "Mejora de la legibilidad de programas informáticos para facilitar su modificación". Comunicaciones de la ACM . 25 (8): 512–521. doi : 10.1145/358589.358596 . S2CID  30026641.
  22. ^ Múltiple (wiki). «Legibilidad». Docforge . Archivado desde el original el 29 de abril de 2020. Consultado el 30 de enero de 2010 .
  23. ^ Enticknap, Nicholas (11 de septiembre de 2007). «Encuesta sobre salarios de TI de SSL/Computer Weekly: el auge financiero impulsa el crecimiento del empleo en TI» . Archivado desde el original el 26 de octubre de 2011. Consultado el 24 de junio de 2009 .
  24. ^ Mitchell, Robert (21 de mayo de 2012). «La fuga de cerebros de Cobol». Computer World. Archivado desde el original el 12 de febrero de 2019. Consultado el 9 de mayo de 2015 .
  25. ^ "Fotografía cortesía del Centro de Guerra de Superficie Naval, Dahlgren, Virginia, de National Geographic, septiembre de 1947". 15 de julio de 2020. Archivado desde el original el 13 de noviembre de 2020. Consultado el 10 de noviembre de 2020 .
  26. ^ Prat, Chantel S.; Madhyastha, Tara M.; Mottarella, Malayka J.; Kuo, Chu-Hsuan (2 de marzo de 2020). "Relacionar la aptitud para el lenguaje natural con las diferencias individuales en el aprendizaje de lenguajes de programación". Scientific Reports . 10 (1): 3817. Bibcode :2020NatSR..10.3817P. doi :10.1038/s41598-020-60661-8. ISSN  2045-2322. PMC 7051953 . PMID  32123206. 
  27. ^ "Para el cerebro, leer código informático no es lo mismo que leer lenguaje". MIT News | Massachusetts Institute of Technology . 15 de diciembre de 2020 . Consultado el 29 de julio de 2023 .

Fuentes

Lectura adicional

Enlaces externos