Hay momentos que amplían lo que creemos que es posible en el desarrollo de software y, por lo tanto, cambian la estructura de todo lo que hacemos como desarrolladores. Ciertos documentos históricos capturan los cambios de paradigma más cruciales en la tecnología informática y no tienen precio. Este artículo analiza el último siglo (casi) de desarrollo de software, codificado en artículos que todo desarrollador debería leer.
9 artículos que definen la historia del desarrollo de software
- Sobre los números computables, con una aplicación al Entscheidungsproblem
- Primer borrador de un informe sobre el EDVAC
- Especificaciones para el sistema de traducción de fórmulas matemáticas de IBM, FORTRAN
- Ir a Declaración Considerada Nociva
- Nuevas direcciones en criptografía
- El Manifiesto Gnu
- Estilos arquitectónicos y diseño de arquitecturas de software basadas en red
- Bitcoin: un sistema de efectivo electrónico entre pares
- TensorFlow: un sistema para el aprendizaje automático a gran escala
1. Alan Turing: Sobre números computables, con una aplicación al Entscheidungsproblem (1936)
He aquí el arquetipo de un documento paradigmático. La escritura de Turing tiene el carácter de una mente que explora sobre el papel un terreno incierto y encuentra los puntos de referencia para desarrollar un mapa. Es más, este mapa en particular nos ha sido útil durante casi cien años.
El artículo de Turing es legible y tiene un estilo casi narrativo, al menos para un artículo técnico. Plantea preguntas difíciles sobre qué hace que un número sea computable y profundiza en algunas matemáticas complicadas. Pero el modelo general –de una serie ilimitada de cuadrados en una cinta (una cinta de Turing) que puede mover la “cabeza” (puntero)– es sorprendente, incluso hoy. Turing describe la esencia de todo el mundo de las máquinas de información que le siguieron.
La elegancia de la idea de la máquina de Turing reside en su capacidad de convertir las matemáticas en informática y la informática en matemáticas. Sigue siendo un modelo útil para describir la complejidad de los sistemas.
Sobre números computables es una lectura obligada en muchos niveles, incluso como continuación de El trabajo de Gödel sobre lo incompleto. Sólo el descubrimiento de la idea de la cinta y la máquina hace que valga la pena.
2. John von Neumann: primer borrador de un informe sobre el EDVAC (1945)
La propuesta de Von Neumann para la arquitectura EDVAC (Computadora automática variable discreta electrónica) es el tipo de avance que podría hacerte pensar, al principio, «¿eso no era ya obvio?».
Lo que no era obvio era que la memoria de una computadora pudiera almacenar datos e instrucciones juntos. En otras palabras, la memoria podría contener información que también fuera ejecutable. Sin embargo, más allá de la idea central está la sensación de que un escritor define lo que era posible para las máquinas en ese momento. Es un salto enorme desde la discusión principalmente filomatemática de Turing a la discusión práctica de von Neumann sobre la información «impresa magnéticamente en cinta o alambre de acero».
Este trabajo contiene todo tipo de ideas interesantes, incluidas ideas sobre el manejo de errores en la computación: «El dispositivo puede reconocer automáticamente las fallas de funcionamiento más frecuentes, indicar su presencia y ubicación mediante señales visibles externamente y luego detenerse». El artículo de Von Neumann se encuentra justo en la puerta de entrada de las computadoras modernas y describe de una manera mitad real y mitad especulativa la naturaleza de los dispositivos que utilizamos hoy. Por eso la arquitectura general de las computadoras todavía se conoce como arquitectura von Neumann.
El papel de von Neumann pregunta cuál sería el carácter de una computadora general, ya que «se aplica tanto al dispositivo físico como a las disposiciones aritméticas y lógicas que gobiernan su funcionamiento». La respuesta de Von Neumann fue un esbozo de la computadora digital moderna.
3. John Backuss et al.: Especificaciones para el sistema de traducción de fórmulas matemáticas de IBM, FORTRAN (1954)
Aunque la especificación FORTRAN no se publicó públicamente, ejerció una fuerte influencia sobre el diseño del lenguaje y el software en general.
FORTRAN, ahora un antiguo progenitor entre los lenguajes de programación, fue un gran avance en los lenguajes de nivel superior para su época. Fue el primer lenguaje verdaderamente de propósito general.
La importancia de FORTRAN queda clara cuando recordamos que habían pasado sólo 28 años desde que Turing imaginó una computadora en 1936.
El especificación FORTRAN Da una gran sensación del momento y ayudó a crear un modelo que los diseñadores de lenguajes han adoptado desde entonces. Capta la sensación floreciente de lo que entonces se estaba haciendo posible con el hardware y el software.
4. Edsger Dijkstra: Ir a Declaración considerada nociva (1968)
Además de darnos el meme «considerado dañino», el artículo de Edsger Dijkstra de 1968 no sólo identifica la superioridad de los bucles y los flujos de control condicional sobre la declaración de referencia difícil de seguir, sino que instiga una nueva forma de pensar y hablar sobre la calidad. de código.
El trabajo de Dijkstra nos ofrece todo un entorno, una actitud hacia la programación y una manera de mirar la disciplina en una página y media.
Considera esto:
Por esa razón deberíamos hacer (como programadores sabios y conscientes de nuestras limitaciones) todo lo posible para acortar la brecha conceptual entre el programa estático y el proceso dinámico, para hacer la correspondencia entre el programa (disperso en el espacio del texto) y el proceso (dispersado en el espacio del texto). a tiempo) lo más trivial posible.
Aquí, estamos pensando no sólo en la estructura del software en tiempos de escritura y ejecución, sino también en el carácter del trabajo y nuestro papel como seres humanos en él. Esto nos da una idea de la cultura de la ingeniería de software como un esfuerzo apasionante; una cultura que sustenta todo lo que hacemos en software hoy en día.
El breve tratado de Dijkstra También ayudó a marcar el comienzo de la generación de lenguajes de orden superior, acercándonos un paso más a los lenguajes de programación que utilizamos hoy.
5. Diffie-Hellman: Nuevas direcciones en criptografía (1976)
El artículo Diffie-Hellman, de Whitfield Diffie y Martin E. Hellman, se destaca de tres maneras notables:
- La propuesta parece imposible en un principio.
- La solución es elegante y fácil de entender.
- Cambió el curso de la historia.
si ya lo sabes cómo funciona el intercambio de claves Diffie-Hellman, entonces sabrá por qué este artículo está en nuestra lista. El descubrimiento y la invención del cifrado asimétrico/de clave pública sentó las bases para todas las comunicaciones seguras en Internet (como HTTPS) y fue la base del libro blanco de Bitcoin 32 años después.
Cuando aterrizó, Nuevas direcciones en criptografía Desencadenó una batalla épica entre la comunicación abierta y las agencias gubernamentales de espionaje como la NSA. Fue un momento extraordinario en el software y en la historia en general, y lo tenemos por escrito. Los autores también parecieron comprender la naturaleza radical de su propuesta; después de todo, las palabras iniciales del artículo fueron: «Hoy nos encontramos al borde de una revolución en criptografía».
6. Richard Stallman: El Manifiesto Gnu (1985)
El manifiesto GNU es, en cierto sentido, el manifiesto del software de código abierto. También es una afirmación audaz del espíritu de programación por amor a la programación que muchos desarrolladores adoptan hoy en día:
GNU, que significa Gnu’s Not Unix, es el nombre del sistema de software completo compatible con Unix que estoy escribiendo para poder regalarlo gratis a todos los que puedan usarlo. Varios otros voluntarios me están ayudando. Son muy necesarios aportes de tiempo, dinero, programas y equipos.
Aquí está la premisa básica del código abierto. (Nótese el nombre inteligente y autorreferencial, otro tropo de OSS.) El artículo continúa describiendo un proyecto audaz (un sistema operativo de calidad y disponible de forma generalizada para que cualquiera lo use) y lo respalda con una discusión filosófica.
Muy legible y divertido (incluso un poco sabelotodo), el manifiesto argumenta en contra del modelo de código cerrado y pago por licencia que dominaba la industria en ese momento. Como la historia ha demostrado, increíblemente, este fue un caso en el que ganaron los valientes rebeldes. El software de código abierto está en todas partes hoy en día, y programar por amor a él, al mismo tiempo que se gana la vida con ello, es toda una forma de vida.
El Manifiesto Gnu Todavía está lo suficientemente reciente como para que parezca que podría haber sido escrito para un proyecto de GitHub en 2023. Seguramente es el artículo más entretenido de esta lista.
7. Roy Fielding: estilos arquitectónicos y diseño de arquitecturas de software basadas en red (2000)
Notarás que estoy manipulando un poco las fechas. Aunque el artículo de Fielding que presenta el estilo arquitectónico REST llegó al año 2000, resumió las lecciones aprendidas en el entorno de programación distribuida de los años 90 y luego propuso un camino a seguir. En este sentido, creo que tiene el título de dos décadas de historia del desarrollo de software.
Este documento reúne todo lo que los desarrolladores aprendieron de los inicios de Internet y ofrece una solución a sus problemas más urgentes. REST es importante porque supone un intento bien dirigido al corazón de la complejidad del software moderno. Por eso ha quedado el piedra de toque para la toma de decisiones arquitectónicas durante dos décadas.
La discusión de Fielding sobre la complejidad y el diseño. como se aplica a la arquitectura web es una lectura adecuada para los desarrolladores de hoy.
8. Satoshi Nakamoto: Bitcoin: un sistema de efectivo electrónico entre pares (2008)
El ahora famoso artículo de Nakamoto fue escrito por una persona, grupo de personas o entidad desconocida. Reúne todo el estado de la técnica en monedas digitales y resume una solución a sus principales problemas. En particular, el artículo sobre Bitcoin aborda el problema del doble gasto.
Este es un documento breve y accesible. Hace un gran trabajo al describir la cuestión del doble gasto en un lenguaje sencillo, luego ofrece una respuesta conceptual y luego profundiza en algunos de los detalles de implementación de una solución.
No necesito hablarles del impacto del artículo ni del furor que ha desatado desde entonces.
Más allá de la simple noción de una moneda como Bitcoin, el documento sugirió un motor que podría aprovechar la criptografía para producir máquinas virtuales distribuidas como Ethereum.
El papel de Bitcoin es un maravilloso ejemplo de cómo presentar una solución simple y limpia a un lío de complejidad aparentemente desconcertante.
9. Martin Abadi et al.: TensorFlow: un sistema para el aprendizaje automático a gran escala (2015)
Si está buscando un hito importante en el camino hacia los sistemas modernos de IA con modelos de lenguaje grande (LLM), el documento técnico de TensorFlow lo es. Es relevante como discusión sobre un marco generalizado de aprendizaje automático y presenta TensorFlow, una plataforma insignia de IA.
Aunque este artículo se sumerge libremente en el extremo complejo del aprendizaje automático, también presenta destilaciones sucintas como: «Dada una secuencia de palabras, un modelo de lenguaje predice la siguiente palabra más probable». Este es un resumen conciso de lo que realmente está sucediendo en la IA del chat moderno.
Este artículo, de Martín Abadi y una serie de colaboradores demasiado extensos para enumerarlos, se centra en los detalles de TensorFlow, especialmente en la creación de una plataforma de IA más generalizada. En el proceso, proporciona un excelente recorrido de alto nivel por los últimos avances en aprendizaje automático. Excelente lectura para los curiosos del aprendizaje automático y aquellos que buscan una entrada en lenguaje sencillo a una comprensión más profunda del campo. Léelo aquí.
Conclusión
Quizás la conclusión más valiosa de esta gira de brillantez es que siempre hay espacio para nuevas ideas y enfoques. Ahora mismo, alguien, en algún lugar, está trabajando en una forma de hacer las cosas que revolucionará el mundo del desarrollo de software. Tal vez seas tú, con un artículo que podría terminar ocupando el puesto número 10 en esta lista. Simplemente no se apresure a descartar ideas descabelladas, incluida la suya propia.
Copyright © 2024 IDG Communications, Inc.