Show logo
Explora todos los episodios

La revolución de C

  |  Command Line Heroes Team  
Desarrollo y distribución de aplicaciones.
Historia de la tecnología

Command Line Heroes • • Command Line Heroes: tercera temporada: La revolución de C

Command Line Heroes: tercera temporada: La revolución de C

About the episode

C y UNIX son la base de la informática moderna. Muchos de los lenguajes de los que hemos hablado esta temporada están relacionados o al menos tuvieron alguna influencia de C. Lo increíble es que C y UNIX surgieron gracias a cuatro desarrolladores de Bell Labs que se aferraron a sus sueños y los crearon como un proyecto propio. Bell Labs fue un centro de innovación de mediados del siglo XX. Jon Gertner lo describe como una "fábrica de ideas". Uno de sus proyectos más importantes en la década de 1960 fue ayudar a desarrollar un sistema operativo de tiempo compartido llamado Multics. La Dra. Joy Lisi Rankin explica que en ese momento hubo una exageración importante en torno al tiempo compartido: se le describió como algo que lograría que se accediera a la computación como si fuera un servicio público. Hubo equipos grandes que dedicaron muchos años a desarrollar Multics, pero el resultado no fue el esperado. Bell Labs se alejó oficialmente del tiempo compartido en 1969. Pero, como cuenta Andrew Tanenbaum, un pequeño equipo de héroes siguió adelante, y C y UNIX fueron el fruto de sus esfuerzos. En ese momento ni siquiera se imaginaban que su trabajo daría forma al curso de la tecnología.

Command Line Heroes Team Red Hat original show

Suscribir

Subscribe here:

Listen on Apple Podcasts Listen on Spotify Subscribe via RSS Feed

Transcripción

Estamos al comienzo de una nueva ola de investigación. Nuestra capacidad creativa está aumentando. Ruido. Ruido. Esos hombres son ingenieros de diseño en Bell Telephone Laboratories. En la década de los 60, Bell Labs era el epicentro de la innovación, y fue ahí, en Nueva Jersey, Estados Unidos, donde nuestro futuro tecnológico dio sus primeros pasos. Ahí desarrollaron el láser. Desarrollaron el transistor. Fue la cuna de la teoría de la información y, en 1968, toda esa innovación alcanzó un nuevo apogeo cuando un grupo de cuatro programadores produjo algo tan revolucionario que cambió de manera radical la forma en que funciona el mundo. Esto es Command Line Heroes en español, un podcast original de Red Hat. Durante toda la temporada hemos visto algunas de las historias más importantes de los lenguajes de programación, y finalmente hemos llegado al último episodio de la temporada. Y para el final dejamos la cereza del pastel: la historia del lenguaje que hizo posibles todos los demás lenguajes. Hace 50 años, en Bell Labs, diseñaron C, un lenguaje de uso general tan importante que a veces se nos olvida que fue un logro verdaderamente extraordinario. Para ver el panorama completo, tenemos que regresar a la década de 1960, justo antes de su surgimiento. Era un momento en que todo parecía posible. En la década de 1960, Bell Labs era casi casi la tierra prometida. Era un laboratorio de investigación y desarrollo que no se compara con nada de la actualidad. Escuchamos a Jon Gertner, autor de The Idea Factory: Bell Labs and the Great Age of American Innovation. Le pedimos que nos explicara lo que sucedía en ese entonces. En tu opinión, ¿qué fue lo que hizo que Bell Labs fuera una fábrica de ideas? Mh, yo creo que actualmente pensamos que la competencia genera innovaciones maravillosas, pero yo no estoy seguro; de hecho, los logros de Bell Labs de una u otra manera refutan esa idea. Eran investigadores e ingenieros que no vivían mucha presión, y al mismo tiempo, como Bell Labs tenía un lugar jerárquico entre los laboratorios de investigación, podía contratar a los mejores, a los más inteligentes, y darles el tiempo suficiente y los fondos necesarios para trabajar en los problemas que les parecían interesantes. Si podías dar buenos motivos para realizar un proyecto de investigación que era pertinente para el ideal y el objetivo de la empresa telefónica, por ejemplo, pues obtenías el financiamiento para tu investigación. Jon recalca que aunque Bell Labs era producto de una empresa con fines de lucro, tenía un espíritu más bien académico. Al permitir que los empleados utilizaran sus propias ideas, Bell practicó los principios de liderazgo abierto similares a los que podrías encontrar en las comunidades de código abierto. Era una época antes de Apple, antes de Google, antes de Microsoft, por ejemplo. La historia de la informática muchas veces se concentra en los orígenes del Homebrew Computer Club y de lo que se generó a partir de ahí. Y yo creo que esto fue igual de importante. Y sucedió en lo que ahora nos parecería un lugar algo insólito para eso, la zona suburbana de Nueva Jersey. Pero eran científicos, investigadores e ingenieros informáticos que estaban haciendo grandes avances que luego tendrían repercusiones muy significativas y trascendentales para todo el mundo. Uno de los proyectos trascendentales, que era un gran desafío, fue el concepto del tiempo compartido. ¿Podrían crear un sistema operativo que pudieran usar cientos e incluso miles de usuarios al mismo tiempo? Eso cambiaría todo el panorama. A partir de 1964, los cerebritos de Bell Labs se unieron a General Electric y al MIT para ver si podían avanzar hacia ese santo grial. En realidad el MIT había empezado un año antes, con una cosa que se llamaba Project MAC, pero pronto, varios de los mejores equipos empezaron a trabajar juntos para desarrollar un sistema operativo de mainframe con tiempo compartido. De hecho, John McCarthy introdujo el concepto en 1959. Si quieres conocer la historia completa, escucha el episodio siete de esta temporada, que se trata de la inteligencia artificial. McCarthy se imaginó una gran máquina que pudiera repartir su atención entre varios usuarios. Pensó que una máquina de esas características podría expandir exponencialmente toda la cultura informática. O sea, imagínate eso. Si mil usuarios pueden trabajar en una computadora al mismo tiempo, sería como democratizar la informática. Cualquier persona podría tener acceso a un poder de cómputo increíble. En esa época, una computadora podía costar millones de dólares, así que no todos podían tener una. Pero con el tiempo compartido, los costos se repartirían entre muchos usuarios. La idea era extraordinaria. El tiempo compartido se describía como algo que convertiría la computación en un servicio público, como la electricidad o el agua. Esa es la Dr. Joy Lisi Rankin, autora de A People's History of Computing in the United States. Nos explica el entusiasmo que había alrededor del tiempo compartido. Se imaginaban centros de computación regional donde las personas podrían acceder a poder computacional desde sus casas u oficinas, conectándose por teléfono. Era una visión muy avanzada para su época, considerando que esto era en los años 60. Pero desarrollar un sistema de tiempo compartido resultó ser mucho más difícil de lo que esperaban. El proyecto se llamaba Multics, que significa Multiplexed Information and Computing Service. Era ambicioso: querían crear un sistema operativo que fuera seguro, confiable y que pudiera manejar cientos de usuarios simultáneamente. Multics era increíblemente complejo. Tenían características de seguridad avanzadas, un sistema de archivos sofisticado, y capacidades de programación muy potentes. Pero esa complejidad también fue su perdición. Después de años de trabajo y millones de dólares gastados, Multics seguía siendo lento, complicado y costoso. En 1969, Bell Labs tomó la decisión de retirarse del proyecto. Pero aquí es donde nuestra historia se pone interesante, porque algunos de los programadores de Bell Labs no estaban listos para rendirse. Ken Thompson era uno de los principales desarrolladores de Multics en Bell Labs. Cuando la compañía se retiró del proyecto, él quedó muy desilusionado. Ese es Andrew Tanenbaum, profesor de ciencias informáticas en la Universidad Libre de Ámsterdam y autor de varios libros influyentes sobre sistemas operativos. Thompson tenía una computadora PDP-7 que no se usaba mucho, y decidió crear su propio sistema operativo, uno que fuera simple y elegante, lo opuesto a Multics. Al principio era solo un proyecto personal para divertirse. Ken Thompson no trabajaba solo. Pronto se le unieron Dennis Ritchie, Doug McIlroy y J.F. Ossanna. Estos cuatro programadores trabajaron en su tiempo libre, creando lo que eventualmente se convertiría en UNIX. UNIX era todo lo que Multics no era. Era simple, elegante y eficiente. En lugar de tratar de hacer todo, UNIX se enfocaba en hacer unas pocas cosas muy bien. El nombre UNIX era un juego de palabras con Multics. Mientras que Multics trataba de ser "multi" - múltiple todo, UNIX era "uni" - una cosa a la vez, pero bien hecha. Esta filosofía de simplicidad se convertiría en uno de los principios fundamentales del desarrollo de software. Una de las cosas más importantes que hicieron fue crear un conjunto de herramientas pequeñas que podían combinarse para hacer tareas complejas. Era como tener una caja de herramientas donde cada herramienta tenía un propósito específico, pero podías combinarlas de formas creativas. Pero UNIX por sí solo no era suficiente. Necesitaban un lenguaje de programación que fuera tan elegante y eficiente como el sistema operativo mismo. Los lenguajes existentes, como FORTRAN y COBOL, eran demasiado especializados. Assembler era muy complicado. Necesitaban algo nuevo. Dennis Ritchie empezó a trabajar en un nuevo lenguaje de programación. Al principio se llamaba B, basado en un lenguaje anterior llamado BCPL. Pero B tenía limitaciones, especialmente para trabajar con diferentes tipos de datos. Así que Ritchie siguió trabajando y evolucionó B hacia algo mejor. Y así nació C, el lenguaje que cambiaría el mundo de la programación para siempre. C era perfecto para escribir sistemas operativos. Era lo suficientemente poderoso para controlar el hardware directamente, pero también lo suficientemente abstracto para que los programadores pudieran escribir código complejo sin volverse locos. Una de las decisiones más importantes que tomó el equipo fue reescribir UNIX completamente en C. Esto era revolucionario. Antes de esto, los sistemas operativos se escribían en assembler, que era específico para cada tipo de computadora. Al escribir UNIX en C, de repente se volvió portable. Podías tomar el código fuente de UNIX, compilarlo en diferentes computadoras, y funcionaría. Esto cambió completamente la manera en que pensábamos sobre los sistemas operativos. Esta portabilidad fue clave para el éxito de ambos, UNIX y C. Las universidades empezaron a adoptar UNIX porque era barato y venía con el código fuente. Los estudiantes podían estudiar cómo funcionaba un sistema operativo real. Bell Labs tenía una política muy generosa con las universidades. Esencialmente regalaban UNIX a las instituciones académicas. Esto significó que toda una generación de científicos de la computación aprendió UNIX y C. ¿Pero qué hizo que C fuera tan especial? ¿Por qué se volvió tan influyente cuando había otros lenguajes disponibles? C encontró el equilibrio perfecto. Era lo suficientemente de bajo nivel para ser eficiente, pero lo suficientemente de alto nivel para ser productivo. Podías escribir código que funcionara casi tan rápido como assembler, pero era mucho más fácil de leer y mantener. C también introdujo muchos conceptos que ahora damos por sentado. La idea de tener bibliotecas de funciones estándar, la separación entre archivos de cabecera y archivos de implementación, el concepto de punteros para manipular memoria directamente. Y la sintaxis de C era muy clara y consistente. Una vez que aprendías las reglas básicas, podías leer prácticamente cualquier programa en C. Esto era muy diferente de lenguajes como FORTRAN, donde cada programa parecía tener su propio estilo. En 1978, Ritchie y Brian Kernighan publicaron "The C Programming Language", un libro que se convertiría en la biblia de los programadores. Era claro, conciso y lleno de ejemplos prácticos. Ese libro fue increíblemente influyente. No solo enseñaba C, sino que también enseñaba buenos hábitos de programación. La manera en que estaba escrito - clara, sin palabrería innecesaria - reflejaba la filosofía de C mismo. A medida que UNIX se extendía, C se extendía con él. Pero pronto, las personas empezaron a usar C para cosas que no tenían nada que ver con UNIX. Era simplemente un lenguaje muy bueno para todo tipo de programación. En los años 80, cuando llegaron las computadoras personales, C ya tenía una gran base de programadores que lo conocían. Y como era portable, podías escribir software en C para diferentes sistemas operativos sin empezar desde cero. C también influyó en el diseño de muchos otros lenguajes. Si miras la sintaxis de Java, JavaScript, C#, Go, e incluso PHP, puedes ver la influencia de C en todas partes. Los corchetes para bloques de código, los puntos y comas al final de las declaraciones, la manera de declarar variables - todo esto viene de C. Se convirtió en el molde para cómo deberían verse los lenguajes de programación. Pero C no se quedó estático. A lo largo de los años ha evolucionado. En 1989 se publicó el estándar ANSI C, que codificó oficialmente las características del lenguaje. Esa estandarización fue muy importante. Significaba que un programa en C escrito para un compilador funcionaría en otros compiladores también. Esto aumentó aún más la portabilidad del lenguaje. Y C siguió evolucionando. C99 agregó muchas características nuevas. C11 añadió soporte para programación concurrente. C18 fue principalmente una revisión técnica. Lo impresionante es que después de más de 40 años, C sigue siendo relevante. Todavía se usa para programar sistemas operativos, controladores de dispositivos, sistemas embebidos, y aplicaciones donde el rendimiento es crítico. ¿Pero dónde vemos C en nuestras vidas diarias? Resulta que está en todas partes, aunque no lo notemos. Tu teléfono probablemente tiene software escrito en C. Tu automóvil definitivamente tiene software en C. Los servidores que hacen funcionar internet están llenos de código en C. Es el lenguaje invisible que mantiene nuestro mundo digital funcionando. Linux, el sistema operativo que alimenta la mayoría de los servidores del mundo, está escrito principalmente en C. Android, que es la base de la mayoría de los teléfonos inteligentes, se ejecuta sobre Linux. Y no es solo Linux. macOS está basado en BSD UNIX, que también está escrito en C. iOS es lo mismo. Windows tiene muchos componentes escritos en C. Básicamente, todos los sistemas operativos principales tienen C en su núcleo. Los navegadores web, las bases de datos, los compiladores para otros lenguajes - una cantidad sorprendente de software fundamental está escrito en C. Python, que hemos mencionado en episodios anteriores, está implementado en C. Perl también. Ruby también. Muchos de los lenguajes "modernos" están construidos sobre C. Es fascinante pensar que cuatro programadores en Bell Labs, trabajando en su tiempo libre en un proyecto que no tenía apoyo oficial, crearon algo que se convertiría en la base de la computación moderna. Es un ejemplo perfecto de cómo las mejores innovaciones a menudo vienen de personas que simplemente quieren resolver un problema interesante, no necesariamente de grandes proyectos corporativos con presupuestos enormes. ¿Y qué podemos aprender de la historia de C? Una lección es la importancia de la simplicidad. C triunfó porque era simple y elegante, no porque tratara de hacer todo. Otra lección es el valor de la colaboración abierta. El hecho de que Bell Labs compartiera UNIX con las universidades creó una comunidad de usuarios y desarrolladores que ayudó a mejorar tanto UNIX como C. Y está la importancia de la portabilidad. Al hacer que UNIX funcionara en diferentes computadoras, el equipo de Bell Labs aseguró que su trabajo tendría un impacto mucho mayor. También es importante notar que C y UNIX se desarrollaron juntos, cada uno influyendo en el diseño del otro. Esta co-evolución creó un sistema muy coherente y eficiente. ¿Pero qué desafíos enfrentó C a lo largo de los años? Uno de los principales críticas a C es que es fácil cometer errores que pueden llevar a vulnerabilidades de seguridad. Los desbordamientos de buffer, por ejemplo, han sido la fuente de muchos problemas de seguridad. Esto llevó al desarrollo de lenguajes como C++, que añadió características de programación orientada a objetos, y más tarde a lenguajes como Java y C#, que tienen características de seguridad más robustas. Pero incluso con estos nuevos lenguajes, C sigue siendo importante. Para programación de sistemas de bajo nivel, donde necesitas control directo sobre el hardware, C sigue siendo la mejor opción. Y la comunidad de C ha trabajado para abordar algunos de estos problemas. Herramientas como Valgrind ayudan a detectar errores de memoria. Los compiladores modernos tienen mejores verificaciones de seguridad. También están surgiendo nuevos lenguajes como Rust, que tratan de combinar la eficiencia de C con garantías de seguridad más fuertes. Pero C ha demostrado una capacidad increíble para adaptarse y seguir siendo relevante. ¿Qué piensas del futuro de C? ¿Seguirá siendo relevante en las próximas décadas? Creo que sí. Mientras necesitemos software que interactúe directamente con el hardware - sistemas operativos, controladores de dispositivos, sistemas embebidos - C seguirá siendo importante. Y hay una enorme base de código existente en C que no va a desaparecer pronto. Es increíble pensar en la influencia duradera de esos cuatro desarrolladores de Bell Labs. Ken Thompson, Dennis Ritchie, Doug McIlroy y J.F. Ossanna no solo crearon herramientas técnicas; crearon una filosofía de desarrollo de software que sigue influyendo en cómo trabajamos hoy. Al principio, C y UNIX dependían el uno del otro porque UNIX estaba escrito en C y tenía un compilador de C, así que, de algún modo, crecieron juntos. Llegó un momento en que C era muy popular en los sistemas UNIX, así que Steve Johnson, por ejemplo, escribió el compilador portátil de C, que podía producir códigos para otras máquinas. Y luego se escribió un compilador de C para otros sistemas operativos además de UNIX, y la gente comenzó a usarlo para escribir todo tipo de software, desde sistemas de bases de datos hasta quién sabe qué, porque estaba disponible, funcionaba y era eficiente. Así que pronto llegaron cosas que no tenían nada que ver con UNIX y que se escribían en C, porque los beneficios del lenguaje eran obvios. Andy nos explica qué tan definitivo era el dominio de C. Es decir, C estuvo en el lugar correcto en el momento adecuado. En la década de 1970, la informática era mucho más pequeña de lo que es ahora. La persona promedio no tenía computadora ni sabía nada de computadoras, pero las universidades y las grandes empresas sí tenían, y muchas de ellas tenían UNIX y venían con C, así que usaban C. Entonces simplemente creó una base muy grande de software, y una gran base de programadores. Si una empresa quería contratar a un programador C, publicaba un anuncio y encontraba a varios interesados. Pero si buscaba un programador para B, nadie solicitaba el puesto. En el mundo del lenguaje C, había infraestructura: había software, bibliotecas, archivos de cabecera y muchas herramientas, y eso creó un círculo virtuoso. Así que simplemente se volvió cada vez más popular. Ahora, el surgimiento de Internet planteó inquietudes de seguridad sobre C, que se abordan parcialmente en variantes como C Sharp. A veces parece que ponemos todo nuestro entusiasmo en lenguajes nuevos como Python o Go. Pero una de las cosas que tratamos de hacer en este podcast es recordar que estamos muy ligados a nuestra historia, y la influencia de C sigue siendo increíble. C dejó su marca en muchas cosas, pero una de las más obvias y actuales es Linux®, el ahijado de UNIX, que, sí, está escrito en C. Incluso la GCC (GNU Compiler Collection), que es el compilador estándar para proyectos Linux, está escrito en C. Puede que no sea obvio, pero todos los programadores de código abierto de la actualidad, que se la pasan en Linux, están vinculados a un lenguaje que se desarrolló para ellos hace casi medio siglo, y cuyo reinado crece cada año. Resulta que actualmente los dos sistemas operativos dominantes en el mundo son Android, que se ejecuta en Linux, que es una reescritura de UNIX y iOS, que es un Berkeley UNIX 4.4. Entonces, tanto Android como iOS son UNIX, de hecho. Yo sospecho que casi todos los servidores del mundo se ejecutan en alguna versión de UNIX o Linux. Tiene una enorme influencia detrás de las cámaras: cualquier sistema que ejecute UNIX va a estar orientado a C, y todo lo que se escriba para ese sistema estará en C. Realmente está en todas partes. Andy Tanenbaum es profesor de ciencias informáticas y autor de Computer Networks. Y un dato divertido: también es el creador de MINIX, una versión gratuita de UNIX de código abierto, que luego inspiró a Linus Torvalds a crear Linux, de hecho. Y sí, Andy escribió MINIX en C. Hoy en día, C está en cada rincón de nuestras vidas, desde los róvers de Marte hasta los navegadores de nuestras computadoras de escritorio. Ha influido en muchos de los lenguajes que vimos esta temporada, como Go, JavaScript y Perl. Y gracias a su estrecho vínculo con UNIX, C muy probablemente sea el lenguaje más presente en todo el mundo. Los ganadores de la Medalla Nacional de las Ciencias de 1998: el equipo de Kenneth L. Thompson y Dennis M. Ritchie, de Bell Laboratories, Lucent Technology. Allá por la década de 1960, los cuatro empleados de Bell Labs —Ken Thompson, Dennis Ritchie, Doug McIlroy y J.F. Ossanna— tuvieron que suplicar que les dieran un poquito de reconocimiento y financiamiento. Pero en 1998, Thompson y Ritchie recibieron la Medalla Nacional de Ciencias de los Estados Unidos por su trabajo en C y UNIX. También compartieron el premio Turing de un millón de dólares. Nada mal. Durante toda la temporada, hemos seguido los movimientos y la magia de algunos de nuestros lenguajes de programación favoritos. Ya sea que comenzaran ligados a un sistema operativo, como C, o que aprovecharan una nueva infraestructura, como Go, hay una constante: los lenguajes tienen vida. Nacen. Crecen, maduran. A veces, envejecen y mueren. Cuanto más aprendemos sobre ellos, más claro nos queda que son fuerzas vitales que están en constante cambio para adaptarse a los tiempos. Nuestro trabajo es percibir ese cambio y responder del mismo modo. Nuestros lenguajes a menudo son las mejores herramientas que tenemos para construir el mundo que queremos. Así termina la tercera temporada de Command Line Heroes en español, un podcast original de Red Hat. Espero que hayas disfrutado esta temporada tanto como nosotros disfrutamos prepararla. La cuarta temporada ya está en proceso, y pronto tendrás noticias. Hasta la próxima, sigan programando.

Sobre el podcast

Command Line Heroes

During its run from 2018 to 2022, Command Line Heroes shared the epic true stories of developers, programmers, hackers, geeks, and open source rebels, and how they revolutionized the technology landscape. Relive our journey through tech history, and use #CommandLinePod to share your favorite episodes.