La programación informática o codificación consiste en la composición de secuencias de instrucciones, denominadas 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 máquina , que es ejecutado directamente por la unidad central de procesamiento . La programación competente generalmente requiere experiencia en varias materias diferentes, incluyendo el conocimiento del dominio de la aplicación , detalles de los lenguajes de programación y bibliotecas de código genéricas , algoritmos especializados y lógica formal .
Las tareas auxiliares que acompañan y se relacionan con la programación incluyen el análisis de requisitos , las pruebas , la depuración (investigación y corrección de problemas), la implementación de sistemas de compilación y la gestión de artefactos derivados , como el código 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 referirse a este proceso general más amplio, reservándose los términos programación , implementación y codificación para la escritura y edición del código propiamente dicho. 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

Los dispositivos programables existen desde hace siglos. Ya en el siglo IX, los hermanos persas Banu Musa inventaron un secuenciador musical programable y 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 un autómata mecánico musical podía reproducir 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.
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 su obra «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 suele fechar en 1843, cuando la matemática Ada Lovelace publicó un algoritmo para calcular una secuencia de números de Bernoulli , destinado a ser ejecutado por la Máquina Analítica de Charles Babbage . [ 8 ] El algoritmo, que se transmitió a través de notas en una traducción del artículo de Luigi Federico Menabrea sobre la máquina analítica, fue concebido principalmente por Lovelace, como se puede apreciar en su correspondencia con Babbage. Sin embargo, el propio Charles Babbage había escrito un programa para la AE en 1837. [ 9 ] [ 10 ] Lovelace también fue la primera en vislumbrar una aplicación más amplia para la máquina analítica, más allá de los cálculos matemáticos.

En la década de 1880, Herman Hollerith inventó el concepto de almacenar datos en formato legible por máquina. [ 11 ] Posteriormente, un panel de control (tablero de conexiones) añadido a su Tabulador Tipo I de 1906 permitió programarlo para diferentes tareas, y a finales de la década de 1940, los equipos de registro de unidades, como el IBM 602 y el IBM 604 , se programaban mediante paneles de control de forma similar, al igual que las primeras computadoras electrónicas . Sin embargo, con la introducción del concepto de computadora de programa almacenado en 1949, tanto los programas como los datos se almacenaban y manipulaban de la misma manera en la memoria de la computadora . [ 12 ] Se ha demostrado que los cursos prácticos de programación que integran hardware y software mejoran la retención y la participación entre los estudiantes de ingeniería de primer año. [ 13 ]
Lenguaje máquina
El código máquina era el lenguaje de los primeros programas, escrito en el conjunto de instrucciones de la máquina específica, a menudo en notación binaria . Pronto se desarrollaron los lenguajes ensamblador , que permitieron a los programadores escribir instrucciones en formato textual (por ejemplo, ADD X, TOTAL), utilizando abreviaturas para los códigos de operación y nombres descriptivos para las direcciones de memoria. Sin embargo, dado que un lenguaje ensamblador no es más que una notación diferente para un lenguaje máquina, dos máquinas con conjuntos de instrucciones distintos también tendrán lenguajes ensamblador distintos.

Lenguajes de compilación
Los lenguajes de alto nivel hicieron que el proceso de desarrollo de un programa fuera más simple y comprensible, y menos dependiente del hardware subyacente . La primera herramienta relacionada con el compilador, el Sistema A-0 , fue desarrollada en 1952 [ 14 ] por Grace Hopper , quien también acuñó el término "compilador". [ 15 ] [ 16 ] FORTRAN , el primer lenguaje de alto nivel ampliamente utilizado con una implementación funcional, apareció en 1957, [ 17 ] y pronto se desarrollaron muchos otros lenguajes, en particular, COBOL orientado al procesamiento comercial de datos 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 para abstraer el código, lo que facilita la adaptación a diferentes conjuntos de instrucciones de máquina mediante declaraciones de compilación y heurísticas . Los compiladores aprovecharon el poder de las computadoras para simplificar la programación [ 17 ] al permitir a los programadores especificar cálculos mediante la introducción de 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 la década de 1960, los dispositivos de almacenamiento de datos y las terminales informáticas se volvieron lo suficientemente económicos como para que los programas pudieran crearse escribiendo directamente en las computadoras. También se desarrollaron editores de texto que permitían realizar cambios y correcciones con mucha más facilidad que con las tarjetas perforadas .
Programación moderna
Requisitos de calidad
Cualquiera que sea el enfoque de desarrollo, el programa final debe satisfacer algunas propiedades fundamentales. Las siguientes propiedades se encuentran entre las más importantes: [ 18 ] [ 19 ]
- Fiabilidad : con qué frecuencia los resultados de un programa son correctos. Esto depende de la corrección conceptual de los algoritmos y de la minimización de errores de programación, como errores en la gestión de recursos (por ejemplo, desbordamientos de búfer y condiciones de carrera ) y errores lógicos (como la división por cero o errores de uno ).
- Robustez : capacidad de un programa para anticipar problemas derivados de errores (no fallos). Esto incluye situaciones como datos incorrectos, inapropiados o corruptos, falta de disponibilidad de 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 usarlo para su propósito previsto o, en algunos casos, incluso para propósitos imprevistos. Estos aspectos pueden determinar su éxito o fracaso, independientemente de otros factores. Esto implica una amplia gama de elementos textuales, gráficos y, a veces, de hardware que mejoran la claridad, la intuición, la coherencia y la exhaustividad de la interfaz de usuario de un programa.
- Portabilidad : la gama de plataformas de hardware y sistemas operativos en las que se puede compilar , interpretar y ejecutar el código fuente de un programa . Esto depende de las diferencias en las herramientas de programación que ofrecen las distintas plataformas, incluidos los recursos de hardware y del sistema operativo, el comportamiento esperado del hardware y del sistema operativo, y la disponibilidad de compiladores (y a veces bibliotecas) específicos para cada plataforma, en 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, personalizarlo, corregir errores y vulnerabilidades de seguridad , o adaptarlo a nuevos entornos. Las buenas prácticas [ 20 ] 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 futuro 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 e incluso, en cierta medida, 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 fugas de memoria . Este tema suele tratarse en relación con el lenguaje de programación elegido. Si bien el lenguaje influye en el rendimiento, incluso 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 limitan el rendimiento del sistema, pero el uso eficiente del tiempo del programador también es importante y está relacionado con el coste: más hardware puede resultar más económico.
El uso de pruebas automatizadas y funciones de aptitud puede ayudar a mantener algunos de los atributos mencionados anteriormente. [ 21 ]
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 . Influye en los aspectos de calidad mencionados anteriormente, incluyendo la portabilidad, la usabilidad y, sobre todo, la mantenibilidad.

La legibilidad es importante porque los programadores dedican la mayor parte de su tiempo a leer, comprender, reutilizar y modificar el código fuente existente, en lugar de escribir código nuevo. El código ilegible suele generar errores, ineficiencias y código duplicado . Un estudio reveló que algunas transformaciones sencillas para mejorar la legibilidad redujeron la longitud del código y disminuyeron drásticamente el tiempo necesario para comprenderlo. [ 22 ]
Seguir un estilo de programación consistente suele mejorar la legibilidad. Sin embargo, la legibilidad va más allá del 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. [ 23 ] Algunos de estos factores incluyen:
- Diferentes estilos de sangría (espacio en blanco)
- Comentarios y documentación
- Descomposición
- Convenciones de nomenclatura para objetos (como variables, clases, funciones, procedimientos, etc.)
Los aspectos de presentación (como las sangrías, los saltos de línea, el resaltado de color, etc.) suelen ser gestionados 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 diversos lenguajes de programación visual con el objetivo de resolver los problemas de legibilidad mediante la adopción de enfoques no tradicionales para la estructura y la visualización del código. Los entornos de desarrollo integrados (IDE) buscan integrar todas estas herramientas. Técnicas como la refactorización de código pueden mejorar la legibilidad.
Complejidad algorítmica
El ámbito académico y la práctica de la ingeniería de programación informática se centran en descubrir e implementar los algoritmos más eficientes para una clase de problemas determinada. Para ello, los algoritmos se clasifican en órdenes mediante la notación Big O , que expresa el uso de recursos —como el tiempo de ejecución o el consumo de memoria— en función del tamaño de la entrada. Los programadores expertos conocen diversos algoritmos consolidados y sus respectivas complejidades, y utilizan este conocimiento para elegir los algoritmos más adecuados a cada situación.
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 valor, la implementación y la eliminación de fallos (depuración). Existen muchos enfoques diferentes para cada una de estas 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 formal de software se integran más en ciclos cortos que duran unas pocas semanas en lugar de años. Existen muchos enfoques para el proceso de desarrollo de software.
Entre las técnicas de modelado más populares se encuentran el Análisis y Diseño Orientado a Objetos ( OOAD ) y la Arquitectura Dirigida por Modelos ( MDA ). El Lenguaje Unificado de Modelado ( UML ) es una notación utilizada tanto en OOAD como en 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 el número de anuncios de trabajo que mencionan el lenguaje, [ 24 ] el número de libros vendidos y cursos que enseñan el lenguaje (esto sobreestima la importancia de los lenguajes más nuevos) y estimaciones del número de líneas de código existentes escritas en el lenguaje (esto subestima el número de usuarios de lenguajes comerciales como COBOL).
Algunos lenguajes son populares para escribir tipos específicos de aplicaciones, mientras que otros se utilizan para escribir muchos tipos diferentes. Por ejemplo, COBOL sigue siendo frecuente en centros de datos corporativos [ 25 ] , a menudo en grandes ordenadores centrales ; Fortran en aplicaciones de ingeniería; lenguajes de scripting en desarrollo web ; y C en software embebido . 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 nuevas funcionalidades añadidas (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

La depuración es una tarea fundamental en el desarrollo de software, ya que los defectos en un programa pueden tener consecuencias importantes para sus usuarios. Algunos lenguajes son más propensos a ciertos tipos de fallos porque su especificación no exige que los compiladores realicen tantas comprobaciones como otros. El uso de una herramienta de análisis de código estático puede ayudar a detectar posibles problemas. Normalmente, el primer paso para depurar es intentar reproducir el problema. Esto puede resultar complejo, por ejemplo, en el caso de procesos paralelos o errores de software poco comunes. 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, puede ser necesario simplificar la entrada del programa para facilitar la depuración. Por ejemplo, si un error en el compilador provoca un fallo al analizar un archivo fuente extenso, una simplificación del caso de prueba que reduzca el archivo original a solo unas pocas líneas puede ser suficiente para reproducir el mismo fallo. Se requiere un método de ensayo y error/divide y vencerás: el programador intentará eliminar partes del caso de prueba original y comprobará si el problema persiste. Al depurar el problema en una interfaz gráfica de usuario (GUI), el programador puede omitir algunas interacciones del usuario de la descripción original del problema y comprobar si las acciones restantes son suficientes para que aparezcan errores. El uso de scripts y puntos de interrupción también forma parte de este proceso.
La depuración se suele realizar con entornos de desarrollo integrados (IDE) . También se utilizan depuradores independientes como GDB , que suelen ofrecer un entorno menos visual, generalmente mediante la línea de comandos . Algunos editores de texto, como Emacs, permiten invocar GDB a través de ellos para proporcionar un entorno visual. Un estudio reveló que la enseñanza de lenguajes estructurados como Pascal mejoraba la precisión de la depuración y la comprensión general de los programadores principiantes. [ 27 ]
Lenguajes de programación
Los distintos lenguajes de programación admiten diferentes estilos de programación (denominados paradigmas de programación ). La elección del lenguaje depende de muchos factores, como la política de la empresa, su idoneidad para la tarea, la disponibilidad de paquetes de terceros o las preferencias personales. Idealmente, se seleccionará el lenguaje de programación más adecuado para la tarea en cuestión. Sin embargo, existen limitaciones con respecto a este ideal, como la disponibilidad de suficientes programadores que conozcan el lenguaje para formar un equipo, la disponibilidad de compiladores para dicho lenguaje y la eficiencia con la que se ejecutan los programas escritos en un lenguaje determinado. Los lenguajes forman un espectro aproximado que va desde el nivel bajo hasta el nivel alto; los lenguajes de nivel bajo suelen estar más orientados a la máquina y se ejecutan más rápido, mientras que los de nivel alto son más abstractos y fáciles de usar, pero se ejecutan más lentamente. Generalmente, es más fácil programar en lenguajes de nivel alto que en lenguajes de nivel bajo. 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 sencillas hasta las más sofisticadas.
Allen Downey , en su libro Cómo pensar como un científico informático , escribe:
- Los detalles varían según el idioma, pero algunas instrucciones básicas aparecen en casi todos:
- Entrada: Recopila datos del teclado, un archivo o algún otro dispositivo.
- Salida: Mostrar datos en la pantalla o enviarlos a un archivo u otro dispositivo.
- Aritmética: Realizar operaciones aritméticas básicas como la suma y la multiplicación.
- Ejecución condicional: Comprueba que se cumplan ciertas condiciones y ejecuta la secuencia de instrucciones adecuada.
- Repetición: Realizar una acción repetidamente, generalmente con alguna variación.
Muchos lenguajes de programación ofrecen 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. Las clasificaciones anuales de IEEE Spectrum analizan la popularidad de los lenguajes de programación utilizando métricas como ofertas de empleo, tendencias de búsqueda y actividad de los desarrolladores. [ 28 ]
Aprender a programar
Aprender a programar tiene una larga historia relacionada con estándares y prácticas profesionales, iniciativas y planes de estudio académicos, y libros y materiales comerciales para estudiantes, autodidactas, aficionados y otras personas que desean crear o personalizar software para uso personal. Desde la década de 1960, aprender a programar ha adquirido las características de un movimiento popular , con el surgimiento de disciplinas académicas, líderes inspiradores, identidades colectivas y estrategias para expandir el movimiento e institucionalizar el cambio. [ 29 ] A través de estos ideales sociales y agendas educativas, aprender a programar se ha vuelto importante no solo para científicos e ingenieros, sino para millones de ciudadanos que han llegado a creer que crear software es beneficioso para la sociedad y sus miembros. La participación en la educación en ciencias de la computación se ha expandido significativamente en los últimos años, con millones de estudiantes que adquieren experiencia introductoria en programación a través de escuelas y plataformas en línea. [ 30 ]
Contexto
En 1957, había aproximadamente 15 000 programadores informáticos empleados en EE. UU., cifra que representa el 80 % de los desarrolladores activos del mundo. En 2014, había aproximadamente 18,5 millones de programadores profesionales en el mundo, de los cuales 11 millones se consideraban profesionales y 7,5 millones estudiantes o aficionados. [ 31 ] Antes del auge de Internet comercial a mediados de la década de 1990, la mayoría de los programadores aprendían sobre la construcción de software a través de libros, revistas, grupos de usuarios y métodos de instrucción informales, mientras que los cursos académicos y la formación corporativa desempeñaban un papel importante para los trabajadores profesionales. [ 32 ]
El primer libro con instrucciones específicas sobre cómo programar una computadora pudo haber sido *Preparation of Programs for an Electronic Digital Computer * (1951), de Maurice Wilkes , David Wheeler y Stanley Gill . El libro ofrecía una selección de subrutinas comunes para realizar operaciones básicas en la EDSAC, una de las primeras computadoras con programa almacenado del mundo.
Cuando llegaron los lenguajes de alto nivel, se introdujeron mediante numerosos libros y materiales que explicaban las palabras clave del lenguaje, la gestión del flujo del programa, el trabajo con datos y otros conceptos. Estos lenguajes incluían FLOW-MATIC , COBOL, FORTRAN, ALGOL , Pascal , BASIC y C. Un ejemplo de un manual de programación temprano de esos años es A Primer of Programming for Digital Computers (1959) de Marshal H. Wrubel , que incluía instrucciones paso a paso para completar hojas de codificación, crear tarjetas perforadas y usar las palabras clave en el sistema FORTRAN inicial de IBM. [ 33 ] A Guide to FORTRAN Programming (1961) de Daniel McCracken presentó FORTRAN a un público más amplio, incluyendo estudiantes y trabajadores de oficina.
En 1961, Alan Perlis sugirió que todos los estudiantes de primer año de la Universidad Carnegie Technical Institute tomaran un curso de programación de computadoras. [ 34 ] Su consejo fue publicado en la popular revista técnica Computers and Automation , que se convirtió en una fuente habitual de información para programadores profesionales.
Pronto, los programadores tuvieron a su disposición una amplia gama de textos de aprendizaje. Los manuales de referencia para programadores incluían palabras clave y funciones relacionadas con un lenguaje, a menudo en orden alfabético, así como información técnica sobre compiladores y sistemas relacionados. Un ejemplo temprano fue el Manual de Referencia para Programadores de IBM: el Sistema de Codificación Automática FORTRAN para el IBM 704 EDPM (1956).
Con el tiempo, surgió el género de las guías para programadores , que presentaban las características de un lenguaje en formato de tutorial o paso a paso. Muchos de los primeros manuales introductorios comenzaban con un programa conocido como "Hola, mundo" , que mostraba el programa más corto que un desarrollador podía crear en un sistema determinado. Posteriormente, las guías para programadores abordaron temas fundamentales como la declaración de variables, los tipos de datos, las fórmulas, el control de flujo, las funciones definidas por el usuario, la manipulación de datos y otros temas.
Entre las primeras e influyentes guías para programadores se encuentran BASIC Programming (1967) de John G. Kemeny y Thomas E. Kurtz , The Pascal User Manual and Report (1971) de Kathleen Jensen y Niklaus Wirth , y The C Programming Language (1978) de Brian W. Kernighan y Dennis Ritchie . Libros similares para el público general (pero con un tono mucho más ligero) incluyen My Computer Loves Me When I Speak BASIC (1972) de Bob Albrecht , A Book on C (1984) de Al Kelley e Ira Pohl , y C for Dummies (1994) de Dan Gookin .
Más allá de los manuales específicos de cada lenguaje, existían numerosos libros y revistas académicas que introducían prácticas de programación profesional. Muchos estaban diseñados para cursos universitarios de informática, ingeniería de software o disciplinas afines. *The Art of Computer Programming * (1968 y posteriores), de Donald Knuth , presentaba cientos de algoritmos computacionales y su análisis. *The Elements of Programming Style * (1974), de Brian W. Kernighan y PJ Plauger , se centraba en el estilo de programación , la idea de que los programas debían escribirse no solo para satisfacer al compilador, sino también a los lectores humanos. *Programming Pearls* (1986) , de Jon Bentley, ofrecía consejos prácticos sobre el arte y la técnica de la programación en contextos profesionales y académicos. Entre los textos diseñados específicamente para estudiantes se encontraban * Oh Pascal!* (1982), de Doug Cooper y Michael Clancy; *Data Structures and Algorithms * (1983), de Alfred Aho ; y *Learning with Logo* (1983), de Daniel Watt .
Editores técnicos
A medida que las computadoras personales se convirtieron en productos de consumo masivo, miles de libros y revistas comerciales buscaron enseñar a usuarios profesionales, aficionados y ocasionales a escribir programas de computadora. Una muestra de estos recursos de aprendizaje incluye BASIC Computer Games, Microcomputer Edition (1978), de David Ahl ; Programming the Z80 (1979), de Rodnay Zaks ; Programmer's CP/M Handbook (1983), de Andy Johnson-Laird ; C Primer Plus (1984), de Mitchell Waite y The Waite Group; The Peter Norton Programmer's Guide to the IBM PC (1985), de Peter Norton ; Advanced MS-DOS (1986), de Ray Duncan; Learn BASIC Now (1989), de Michael Halvorson y David Rygymr; Programming Windows (1992 y posteriores), de Charles Petzold ; Code Complete: A Practical Handbook for Software Construction (1993), de Steve McConnell ; y Trucos de los gurús de la programación de juegos (1994), de André LaMothe .
La industria del software para PC impulsó la creación de numerosas editoriales que ofrecían manuales y tutoriales de programación, así como libros para desarrolladores de software avanzados. [ 35 ] Estas editoriales incluían Addison-Wesley , IDG , Macmillan Inc. , McGraw-Hill , Microsoft Press , O'Reilly Media , Prentice Hall , Sybex, Ventana Press, Waite Group Press, Wiley , Wrox Press y Ziff-Davis .
Las revistas y publicaciones especializadas en informática también proporcionaban contenido didáctico para programadores profesionales y aficionados. Una lista parcial de estos recursos incluye Amiga World , Byte (revista) , Communications of the ACM , Computer (revista) , Compute!, Computer Language (revista) , Computers and Electronics , Dr. Dobb's Journal , IEEE Software , Macworld , PC Magazine , PC/Computing y UnixWorld .
Aprendizaje digital / recursos en línea
Entre 2000 y 2010, las editoriales de libros y revistas de informática experimentaron un descenso significativo como proveedoras de instrucción en programación, ya que los programadores recurrieron a los recursos de Internet para ampliar su acceso a la información. Este cambio impulsó nuevos productos y mecanismos digitales para el aprendizaje de habilidades de programación. Durante esta transición, los libros digitales de las editoriales transfirieron información que tradicionalmente se había distribuido en formato impreso a un público nuevo y cada vez mayor. [ 36 ]
Los recursos importantes de Internet para aprender a programar incluían blogs, libros, [ 37 ] wikis, vídeos, bases de datos en línea, revistas, [ 38 ] [ 39 ] sitios de suscripción, artículos de conferencias. [ 40 ] y sitios web personalizados centrados en habilidades de programación. En los últimos años, plataformas como LeetCode , HackerRank y freeCodeCamp se han vuelto populares para aprender a programar, practicar desafíos de programación y prepararse para entrevistas técnicas. Los nuevos recursos comerciales incluían vídeos de YouTube , tutoriales de Lynda.com (más tarde LinkedIn Learning ), Khan Academy , Codecademy , GitHub , W3Schools , Codewars y numerosos bootcamps de programación .
La mayoría de los sistemas de desarrollo de software y motores de juegos incluían abundantes recursos de ayuda en línea, como entornos de desarrollo integrados (IDE), ayuda contextual , API y otros recursos digitales. Los kits de desarrollo de software (SDK) comerciales también ofrecían una colección de herramientas y documentación para el desarrollo de software en un único paquete instalable.
Organizaciones comerciales y sin fines de lucro publicaron sitios web de aprendizaje para desarrolladores, crearon blogs y establecieron canales de noticias y redes sociales sobre programación. Empresas como Apple , Microsoft , Oracle , Google y Amazon crearon sitios web corporativos que brindan soporte a programadores, incluyendo recursos como la Red de Desarrolladores de Microsoft (MSDN). Movimientos contemporáneos como la Hora del Código ( Code.org ) demuestran cómo el aprendizaje de la programación se ha vinculado con estrategias de aprendizaje digital, agendas educativas y filantropía corporativa.
Programadores
Los programadores informáticos son quienes escriben software para computadoras. Sus trabajos generalmente incluyen:
- Prototipado
- Codificación
- Depuración
- Documentación
- Integración
- Mantenimiento
- Análisis de requisitos
- Arquitectura de software
- Pruebas de software
- Especificación
Aunque la programación se ha presentado en los medios como una materia algo matemática, algunas investigaciones muestran que los buenos programadores tienen sólidas habilidades en lenguajes humanos naturales, y que aprender a programar es similar a aprender un idioma extranjero. [ 41 ] [ 42 ]
Véase también
- olor a código
- redes informáticas
- Programación competitiva
- Lista de programadores
- Lista de revistas de programación de software
- Lista de paquetes de software gratuitos y de código abierto para programación
- Listas de herramientas de desarrollo de software de programación
- Mejores prácticas de programación
- Programación de sistemas
- Recursos de programación informática de Wikibooks
Referencias
- ↑ Bebbington, Shaun (2014). "¿Qué es la codificación?" . Tumblr . Archivado del original el 29 de abril de 2020. Recuperado el 3 de marzo de 2014 .
- ↑ Bebbington, Shaun (2014). "¿Qué es la programación?" . Tumblr . Archivado del original el 29 de abril de 2020. Recuperado el 3 de marzo de 2014 .
- ↑ 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 .
- ↑ Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). "Altavoces opcionales: una historia de la música electroacústica sin altavoces" . Organised Sound . 22 (2). Cambridge University Press : 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". Music Educators Journal . 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). Breve historia de la criptología y los algoritmos criptográficos . Springer Science & Business Media. págs. 12–13 . ISBN 9783319016283.
- ↑ Fuegi, J.; Francis, J. (2003). "Lovelace y Babbage y la creación de las 'notas' de 1843"". IEEE Annals of the History of Computing . 25 (4): 16. Bibcode : 2003IAHC...25d..16F . doi : 10.1109/MAHC.2003.1253887 .
- ↑ Rojas, R. (2021). "Los programas informáticos de Charles Babbage". IEEE Annals of the History of Computing . 43 (1): 6– 18. Bibcode : 2021IAHC...43a...6R . doi : 10.1109/MAHC.2020.3045717 .
- ↑ Rojas, R. (2024). "El primer programa informático" (PDF) . Communications of the ACM . 67 (6): 78– 81. doi : 10.1145/3624731 .
- ↑ 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 del original el 29 de abril de 2020. Recuperado el 25 de abril de 2010 .
- ↑ "Memoria y almacenamiento | Cronología de la historia de la informática | Museo de la Historia de la Informática" . www.computerhistory.org . Archivado del original el 27 de mayo de 2021. Consultado el 3 de junio de 2021 .
- ↑ Lumpp, Janet K.; Lovely, Jennifer; Letellier, Laura MPE (2019). Uso didáctico de computadoras en un curso práctico de programación para estudiantes de primer año de ingeniería . Conferencia y Exposición Anual de la ASEE.
- ↑ Ridgway, Richard (1952). "Compilación de rutinas". Actas de la reunión nacional de la ACM de 1952 (Toronto) - ACM '52 . págs. 1–5 . doi : 10.1145/800259.808980 . ISBN 9781450379250. S2CID 14878552 .
{{cite book}}: Incompatibilidad de ISBN/Fecha ( ayuda ) - ↑ 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 estuviera entonces [1953] en uso general, aunque de hecho había sido introducido por Grace Hopper.)"
- ↑Los primeros compiladores COBOL del mundo. Archivado el 13 de octubre de 2011 en la Wayback Machine.
- 1 2 Bergstein, Brian (20 de marzo de 2007). "Muere John Backus, creador de Fortran" . NBC News . Archivado del original el 29 de abril de 2020. Recuperado el 25 de abril de 2010 .
- ↑ "NIST desarrollará una hoja de ruta para la nube" . InformationWeek . 5 de noviembre de 2010.
Esta iniciativa informática busca eliminar las barreras para la adopción de la nube en materia de seguridad, interoperabilidad, portabilidad y confiabilidad.
- ↑ "¿En qué se basa?". Computerworld . 9 de abril de 1984. pág. 13.
¿Se basa en... Fiabilidad? Portabilidad. Compatibilidad.
- ↑ "Programación 101: Consejos para convertirse en un buen programador - Wisdom Geek" . Wisdom Geek . 19 de mayo de 2016. Archivado del original el 23 de mayo de 2016. Consultado el 23 de mayo de 2016 .
- ↑ Fundamentos de la arquitectura de software: Un enfoque de ingeniería . O'Reilly Media. 2020. ISBN 978-1492043454.
- ↑ Elshoff, James L.; Marcotty, Michael (1982). "Mejora de la legibilidad de programas informáticos para facilitar su modificación" . Communications of the ACM . 25 (8): 512– 521. doi : 10.1145/358589.358596 . S2CID 30026641 .
- ↑ Múltiple (wiki). "Legibilidad" . Docforge . Archivado del original el 29 de abril de 2020. Recuperado el 30 de enero de 2010 .
- ↑ Enticknap, Nicholas (11 de septiembre de 2007). "Encuesta salarial de TI de SSL/Computer Weekly: el auge financiero impulsa el crecimiento del empleo en TI" . Archivado del original el 26 de octubre de 2011. Recuperado el 24 de junio de 2009 .
- ↑ Mitchell, Robert (21 de mayo de 2012). "La fuga de cerebros de Cobol" . Computer World. Archivado del original el 12 de febrero de 2019. Recuperado el 9 de mayo de 2015 .
- ↑ "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 del original el 13 de noviembre de 2020. Recuperado el 10 de noviembre de 2020 .
- ↑ Stone, Dan N.; Jordan, Eleanor W.; Wright, M. Keith (1990). "El impacto de la educación en Pascal en la habilidad de depuración" . International Journal of Man-Machine Studies . 33 (1): 81– 95. doi : 10.1016/S0020-7373(05)80116-6 .
- ↑ "Los mejores lenguajes de programación de 2024" . IEEE Spectrum . Consultado el 20 de enero de 2025 .
- ↑ Halvorson, Michael J. (2020). Code Nation: Personal Computing and the Learn to Program Movement in America . Nueva York, NY: ACM Books. pp. 3– 6.
- ↑ "Estado de la educación en ciencias de la computación en 2024" . Code.org . Consultado el 20 de enero de 2025 .
- ↑ Estimaciones mundiales de desarrolladores de software y trabajadores cualificados en TIC de 2014. Framingham, MA: International Data Corporation. 2014.
- ↑ Ensmenger, Nathan (2010). The Computer Boys Take Over: Computers, Programmers, and the Politics and Technical Expertise . Cambridge, MA: The MIT Press.
- ↑ Halvorson, Michael J. (2020). Code Nation: Personal Computing and the Learn to Program Movement in America . Nueva York, NY: ACM Books. pág. 80.
- ↑ Perlis, Alan (1961). "El papel de la computadora digital en la universidad". Computers and Automation 10, 4 y 4B . pp. 10–15 .
- ↑ Halvorson, Michael J. (2020). Code Nation: Personal Computing and the Learn to Program Movement in America . Nueva York, NY: ACM Books. pág. 352.
- ↑ Halvorson, Michael J. (2020). Code Nation: Personal Computing and the Learn to Program Movement in America . Nueva York, NY: ACM Books. pp. 365–368 .
- ↑ Stemkoski, L., & Pascale, M. (2021). Desarrollo de marcos de trabajo gráficos con Python y OpenGL. Taylor & Francis . Taylor & Francis. ISBN 978-0-367-72180-0.
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Berssanette, JH, & de Francisco, AC (agosto de 2022). "Teoría de la carga cognitiva en el contexto de la enseñanza y el aprendizaje de la programación informática: una revisión sistemática de la literatura". IEEE Transactions on Education . 65 (3): 440– 449. Bibcode : 2022ITEdu..65..440B . doi : 10.1109/TE.2021.3127215 .
{{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Kinnett, Seth J.; Shinedling, Tatum; Sunset, Ben (1 de julio de 2025). "Adventure RPG: Un juego de aventuras textuales para un curso introductorio de programación en Java" . Journal of Information Systems Education . 36 (3): 209– 223. doi : 10.62273/ASHE6341 .
- ↑ Zaffalon, F.; Prisco, A.; De Souza, R.; Teixeira, D.; Paes, W.; Evald, P.; Tonin, N.; Devincenzi, S.; Botelho, S. (2022). Un sistema de recomendación de ejercicios de programación informática basado en el modelo de habilidades y destrezas múltiples del estudiante . pp. 1–8 . doi : 10.1109/FIE56618.2022.9962646 . ISBN 978-1-6654-6244-0.
- ↑ Prat, Chantel S.; Madhyastha, Tara M.; Mottarella, Malayka J.; Kuo, Chu-Hsuan (2 de marzo de 2020). " Relacionando 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 .
- ↑ "Para el cerebro, leer código informático no es lo mismo que leer lenguaje" . Noticias del MIT | Instituto Tecnológico de Massachusetts . 15 de diciembre de 2020. Consultado el 29 de julio de 2023 .
Fuentes
- Ceruzzi, Paul E. (1998). Historia de la informática . Cambridge, Massachusetts: MIT Press. ISBN 9780262032551– vía EBSCOhost.
- Evans, Claire L. (2018). Broad Band: La historia jamás contada de las mujeres que hicieron posible Internet . Nueva York: Portfolio/Penguin. ISBN 9780735211759.
- Gürer, Denise (1995). « Mujeres pioneras en informática» (PDF) . Communications of the ACM . 38 (1): 45– 54. doi : 10.1145/204865.204875 . S2CID 6626310. Archivado (PDF) del original el 9 de octubre de 2022.
- Smith, Erika E. (2013). "Reconociendo una herencia colectiva a través de la historia de las mujeres en la informática" . CLCWeb: Literatura y cultura comparadas . 15 (1): 1– 9. doi : 10.7771/1481-4374.1972 .
- Essinger, J., y EBSCO Publishing (Empresa). (2014). El algoritmo de Ada: Cómo la hija de Lord Byron, Ada Lovelace, impulsó la era digital . Melville House.
Lecturas adicionales
- AK Hartmann, Guía práctica para simulaciones por ordenador , Singapur: World Scientific (2009)
- A. Hunt, D. Thomas y W. Cunningham, El programador pragmático. De aprendiz a maestro , Ámsterdam: 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, EW Dijkstra , CAR Hoare, Programación Estructurada , Academic Press (1972)
- David Gries , La ciencia de la programación , Springer-Verlag (1981)
Enlaces externos
Contenido multimedia relacionado con la programación informática en Wikimedia Commons.
Citas relacionadas con la programación en Wikiquote
- Programación informática
- Computadoras