stringtranslate.com

Programación de computadoras

La programación o codificación de computadoras es la composición de secuencias de instrucciones, llamadas programas , que las computadoras pueden seguir para realizar tareas. [1] [2] Implica diseñar e implementar algoritmos , especificaciones de procedimientos paso a paso, 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 varios temas 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 , pruebas , depuración (investigación y solución de problemas), implementación de sistemas de compilación y gestión de artefactos derivados , como el código de máquina de los programas . Si bien a veces se los considera programación, a menudo el término desarrollo de software se utiliza para este proceso general más amplio, con los términos programación , implementación y codificación reservados para la escritura y edición de código per se. En ocasiones, 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 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 automatizado en el Libro de los dispositivos ingeniosos . [3] [4] 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 . [5] [6] En 1801, el telar de 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 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 mediante análisis de frecuencia , el primer algoritmo de descifrado de códigos. [7]

El primer programa informático se fecha generalmente en 1843, cuando la matemática Ada Lovelace publicó un algoritmo para calcular una secuencia de números de Bernoulli , destinado a ser realizado por la máquina analítica de Charles Babbage . [8] Sin embargo, Charles Babbage ya había escrito su primer programa para la máquina analítica en 1837. [9]

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

En la década de 1880, Herman Hollerith inventó el concepto de almacenar datos en un formato legible por máquina. [10] Más tarde, un panel de control (tablero de enchufes) agregado 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 de unidades , como el IBM 602 y el IBM 604 , fueron programados mediante paneles de control. de manera similar, como lo fueron las primeras computadoras electrónicas . Sin embargo, con el concepto de computadora con programas almacenados introducido en 1949, tanto los programas como los datos se almacenaban y manipulaban 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 formato de texto (por ejemplo, SUMAR 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 diferentes conjuntos de instrucciones también tienen diferentes lenguajes ensambladores.

Panel de control cableado para una Máquina de Contabilidad IBM 402 . Los cables conectan flujos de pulsos desde el lector de tarjetas a los contadores y otra lógica interna y, en última instancia, a la impresora.

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

Entrada de código fuente

La mayoría de los programas se introducían mediante tarjetas perforadas o cinta de papel . A finales 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 que se pudieran crear programas tecleando directamente en las computadoras. También se desarrollaron editores de texto que permitían realizar cambios y correcciones mucho más fácilmente que con tarjetas perforadas .

programación moderna

Requerimientos de calidad

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

Legibilidad del código fuente

En 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 mencionados anteriormente, incluida la portabilidad, la usabilidad y, lo más importante, la mantenibilidad.

La legibilidad es importante porque los programadores pasan la mayor parte de su tiempo leyendo, tratando de comprender, reutilizando y modificando el código fuente existente, en lugar de escribir código fuente nuevo. El código ilegible a menudo genera errores, ineficiencias y código duplicado . Un estudio encontró que unas pocas transformaciones simples de legibilidad acortaron el código y redujeron drásticamente el tiempo para comprenderlo. [19]

Seguir un estilo de programación coherente a menudo ayuda a 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 de la computadora para compilar y ejecutar el código de manera eficiente, contribuyen a la legibilidad. [20] Algunos de estos factores incluyen:

Los aspectos de presentación de esto (como sangrías, saltos de línea, resaltado de color, etc.) a menudo los maneja 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 la ingeniería de la programación informática se ocupan en gran medida de descubrir e implementar los algoritmos más eficientes para una determinada clase de problemas. Para ello, los algoritmos se clasifican en órdenes utilizando la llamada 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.

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 distintas etapas del desarrollo de software formal están más integradas en ciclos cortos que duran unas pocas semanas en lugar de años. Existen muchos enfoques para el proceso de desarrollo de software.

Las técnicas de modelado populares incluyen análisis y diseño orientado a objetos ( OOAD ) y arquitectura basada en modelos ( MDA ). El Lenguaje Unificado de Modelado ( 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 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 la cantidad de anuncios de trabajo que mencionan el idioma, [21] la cantidad de libros vendidos y cursos que enseñan el idioma (esto sobreestima la importancia de los idiomas 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 otros se usan regularmente para escribir muchos tipos diferentes de aplicaciones. Por ejemplo, COBOL sigue siendo fuerte en los centros de datos corporativos [22] , a menudo en grandes computadoras centrales , Fortran en aplicaciones de ingeniería, lenguajes de secuencias de comandos en el 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 alrededor de 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 capacidad para lenguajes bajos). -manipulación de nivel).

Depuración

El primer error 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 fechada el 9 de septiembre de 1947. [23] "Error" ya era un término común para un defecto de software cuando este Se encontró un insecto.

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 ciertos 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 en la depuración es intentar reproducir el problema. Esta puede ser una tarea no trivial, como ocurre, 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 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 provocar que éste falle al analizar un archivo fuente de gran tamaño, una simplificación del caso de prueba que dé como resultado sólo unas pocas líneas del archivo fuente original puede ser suficiente para reproducir el mismo fallo. 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 verificar si las acciones restantes son suficientes para que aparezcan errores. La creación de secuencias de comandos y los puntos de interrupción también forman parte de este proceso.

La depuración a menudo se realiza con IDE . También se utilizan depuradores independientes como GDB , que a menudo proporcionan un entorno menos visual y generalmente utilizan una línea de comando . 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. Lo ideal es seleccionar el lenguaje de programación más adecuado para la tarea en cuestión. Las ventajas y desventajas 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 idiomas forman un espectro aproximado desde el "nivel bajo" hasta el "nivel alto"; 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. Generalmente es más fácil codificar en lenguajes de "alto nivel" que en lenguajes de "bajo nivel". Los lenguajes de programación son esenciales para el desarrollo de software. Son los componentes básicos de todo el software, desde las aplicaciones más simples hasta las más sofisticadas.

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

Los detalles se ven diferentes en distintos 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: realice 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: Realizar alguna acción repetidamente, normalmente 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 apropiadas (por ejemplo, método de paso de argumentos ), estas funciones pueden escribirse en cualquier otro lenguaje.

Programadores

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

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

Ver 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 las máquinas . Elsevier. 36 (5): 589–603. doi :10.1016/S0094-114X(01)00005-2.
  4. ^ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Largo, Jason (2017). "Altavoces opcionales: una historia de la música electroacústica sin altavoces". Sonido organizado . Prensa de la Universidad de Cambridge . 22 (2): 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". Revista de Educadores Musicales . 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). Una breve historia de la criptología y los algoritmos criptográficos . Medios de ciencia y negocios de Springer. págs. 12-3. ISBN 9783319016283.
  8. ^ Fuegi, J.; Francisco, 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.
  9. ^ Rojas, R. (2023). "El primer programa informático". arXiv : 2303.13740 [cs.GL].
  10. ^ da Cruz, Frank (10 de marzo de 2020). "Historia de la Computación de la Universidad de Columbia - Herman Hollerith". Universidad de Colombia . Columbia.edu. Archivado desde el original el 29 de abril de 2020 . Consultado el 25 de abril de 2010 .
  11. ^ "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 .
  12. ^ Ridgway, Richard (1952). "Compilación de rutinas". Actas de la reunión nacional de la ACM de 1952 (Toronto) sobre la ACM '52 . págs. 1 a 5. doi : 10.1145/800259.808980 . ISBN 9781450379250. S2CID  14878552.
  13. ^ Maurice V. Wilkes . 1968. Computadoras antes y ahora. Revista de la Asociación de Maquinaria de Computación, 15(1):1–7, enero. pag. 3 (un comentario entre corchetes agregado por el editor), "(No creo que el término compilador fuera de uso general entonces [1953], aunque de hecho había sido introducido por Grace Hopper.)"
  14. ^ [1] Los primeros compiladores COBOL del mundo Archivado el 13 de octubre de 2011 en Wayback Machine.
  15. ^ ab Bergstein, Brian (20 de marzo de 2007). "Muere el creador de Fortran, John Backus". Noticias NBC . Archivado desde el original el 29 de abril de 2020 . Consultado el 25 de abril de 2010 .
  16. ^ "NIST desarrollará una hoja de ruta para la nube". Semana de la Información . 5 de noviembre de 2010. Iniciativa informática busca eliminar barreras para la adopción de la nube en materia de seguridad, interoperabilidad, portabilidad y confiabilidad.
  17. ^ "¿En qué se basa?". Mundo de la informática . 9 de abril de 1984. pág. 13. ¿Se basa en... Fiabilidad Portabilidad? Compatibilidad
  18. ^ "Programación 101: consejos para convertirse en un buen programador - Wisdom Geek". Friki de la sabiduría . 19 de mayo de 2016. Archivado desde el original el 23 de mayo de 2016 . Consultado el 23 de mayo de 2016 .
  19. ^ Elshoff, James L.; Marcotti, Michael (1982). "Mejora de la legibilidad de los programas informáticos para facilitar la modificación". Comunicaciones de la ACM . 25 (8): 512–521. doi : 10.1145/358589.358596 . S2CID  30026641.
  20. ^ Múltiples (wiki). "Legibilidad". Docforge . Archivado desde el original el 29 de abril de 2020 . Consultado el 30 de enero de 2010 .
  21. ^ Enticknap, Nicholas (11 de septiembre de 2007). "Encuesta salarial de TI 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 .
  22. ^ Mitchell, Robert (21 de mayo de 2012). "La fuga de cerebros de Cobol". Mundo de la informática. Archivado desde el original el 12 de febrero de 2019 . Consultado el 9 de mayo de 2015 .
  23. ^ "Fotografía cortesía del Naval Surface Warfare Center, 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 .
  24. ^ Prat, Chantel S.; Madhyastha, Tara M.; Mottarella, Malayka J.; Kuo, Chu-Hsuan (2 de marzo de 2020). "Relacionar la aptitud del lenguaje natural con las diferencias individuales en el aprendizaje de lenguajes de programación". Informes científicos . 10 (1): 3817. Código bibliográfico : 2020NatSR..10.3817P. doi :10.1038/s41598-020-60661-8. ISSN  2045-2322. PMC 7051953 . PMID  32123206. 
  25. ^ "Para el cerebro, leer códigos de computadora no es lo mismo que leer lenguaje". Noticias del MIT | Instituto de Tecnología de Massachusetts . 15 de diciembre de 2020 . Consultado el 29 de julio de 2023 .

Fuentes

Otras lecturas

enlaces externos