Profesor Bjarne Stroustrup
- Inicio
- Conócenos
- Honoris Causa
- Profesor Bjarne Stroustrup
Discurso Bjarne Stroustrup
Muchas gracias por invitarme a hablar en este prestigioso evento. Me gustaría describir brevemente algunos aspectos relacionados con el lenguaje de programación.
Un lenguaje es algo vivo. Esto se cumple tanto para los lenguajes de programación como para los lenguajes naturales. A medida que pasa el tiempo, aparecen nuevas expresiones y formas gramaticales, nuevos vocablos enriquecen el lenguaje y viejas palabras y usos pasan de moda. Un lenguaje artificial no surge del pensamiento de un diseñador totalmente formado y permanece sin cambios. En cualquier caso, los lenguajes de programación evolucionan más rápido que los naturales porque los desafíos que provocan los ordenadores crecen a un ritmo vertiginoso.
Cuando comencé a diseñar C++, hace casi cuarenta años, los ordenadores tendían a “vivir” en salas con aire acondicinado y a ser atendidos por un grupo de operadores dedicado a ellos. Hoy día, sus teléfonos móviles tiene mil veces más memoria y mil veces más poder de computación que el más potente de los ordenadores de entonces. Incluso su cafetera puede contener más poder de computación que los ordenadores que inicialmente utilicé para desarrollar C++. Para ser práctico a largo plazo, un lenguaje debe poder afrontar cambios drásticos. La mayoría de los nuevos lenguajes de programación mueren a los pocos años de su diseño.
Dennis Ritchie, mi colega en Bell Labs, que diseño el lenguaje de programación C, señaló de forma excelente que “algunos lenguajes están diseñados para resolver problemas; otros para demostrar un solo punto”. Como C, C++ fue diseñado para resolver un problema específico. Yo quise construir un sistema operativo repartido -un sistema que utilizase varios ordenadores para alcanzar objetivos comunes. Enfrentarse a este exigente problema fue esencial porque un lenguaje es algo más que una gramática y un diccionario antes de que se desarrollen las expresiones. Aplicar un lenguaje a un conjunto de problemas proporciona el feedback necesario para permitir al bloque principal ser capaz de aportar ideas sofisticadas a un dominio dado. En el ámbito de los autores motivados, los lenguajes se desarrollan de la misma manera. C++ puede que no contemple desde Homero hasta Shakespeare pero debe mucho a los talentosos programadores que inventaron sus eficaces expresiones. Un ejemplo es el desarrollo de la programación genérica de Alex Stepanov. También esto es buena ingeniería básica: mejoramos las cosas mediante repeticiones más afinadas y la incorporación de nuevas ideas tomadas de situaciones reales. Nos dirige el feedback.
Una idea inicial básica en C++ fue la de no ofrecer herramientas para resolver directamente problemas específicos, sino ofrecer herramientas para que los programadores constuyan las soluciones por sí mismos. Tomé prestada esa idea -con reconocimiento, por supuesto-, del lenguaje Simula. Estas herramientas mantienen la idea de la abstracción, la idea de que los programadores inventen nuevas formas de expresion, a fin de que eleven su uso del lenguaje de la simple manipulación de las prestaciones de un ordenador a algo más próximo a nuestra forma de pensar: hacer un lenguaje que se adapte a los humanos. Por ejemplo, en tanto los primeros programadores se enfrentaban dirctamente a bits, bytes y palabras, los programadores en C++ pueden ahora expresar sus ideas de una forma adecuada a los dominios de su aplicación. Cada dominio de una aplicación tiene su propio vocabulario y expresiones; para ser útil un lenguaje debe adecuarse a facilitar sus propias expresiones.
El software escrito no es un ejercicio de pura lógica. Nuestros diseños deben funcionar en el hardware y resolver las necesidades de los usuarios finales. Nuestro software debe aprovechar las fortalezas de nuestro hardware y compensar sus debilidades. Las expectativas humanas siempre han sobrepasado incluso los increíbles avances de nuestros ordenadores y recursos de comunicación. El factor clave límite es la velocidad de la luz. Alcanzamos ese límite cuando intentamos de acelerar un proceso y especialmente cuando tratamos de comunicarnos con usuarios remotos. Para algunos programadores, un nanosegundo -la milmillonésima parte de un segundo- es demasiado tiempo. En un nanosegundo una señal solo puede cruzar de lado a lado el chip de un ordenador unas pocas veces. Esto limita mucho la computación que podemos realizar, en tanto la gente – o las maquinas- esperan resultados. En una escala de tiempo humana, retrasos de solo una fracción de segundo pueden ser perceptibles y molestos, cuando en nuestra vida cotidiana contamos con sonidos, imágenes y mensajes transmitidos desde el otro lado del Atlántico; una vez más, la velocidad de la luz se convierte en un elemento de nuestros diseños. C++ fue diseñado para permitir a los programadores explotar óptimamente su hardware y a lo largo de los años estas capacidades han mejorado constantemente. Pero esto no es frecuente; la mayoría de los lenguajes están diseñados para proteger a los programadores de las singularidades y cambios en el hardware, en lugar de permitirles manejar las fuentes del hardware directamente. Esto le proporciona a C++ una significativa ventaja comparado con otros lenguajes en áreas como el control de los dispositivos de hardware, finanzas, videojuegos, y sobre todo aquello que implique el uso de las matemáticas y la competitividad.
Se puede expresar la esencia de C++ en dos líneas:
-Apoyo directo al hardware
-Zero-overheard abstraction
La educación, junto a la investigación y la ingeniería, es necesaria para el progreso. Su union es esencial. No puedes dar a nadie una nueva y potente herramienta sin instrucciones para su uso. He comparado C++ con una poderosa herramienta. Arno Penzias, el presidente de Bell Labsy ganador de un Premio Nobel, creo esta metáfora para ayudar a los directivos de Bell Labs a entender C++. ¿Cómo usaría una motosierra eléctrica alguien acostumbrado a serrar con una sierra manual? Moviéndola hacia delante y hacia atrás del mismo modo que solía realizarlo. Hacer eso provocaría una sacudida de la motosierra con posibilidad de causar serias heridas. Debemos considerar cuidadosamente la utilización de nuestra nueva herramienta, C++, como parte de diseño y guía del usuario dirigida a su uso. Desgraciadamente, muchos prefieren no aprender, pero otros siguen. Nosotros enseñamos, diseñamos planes de estudio, escribimos artículos, libros y blogs, damos conferencias y grabamos vídeos. Enseñar a un muy diverso conjunto de estudiantes profesionales es un reto continuo. Cada vez que transmitimos una idea, se une a nosotros un nuevo conjunto de estudiantes y surgen nuevas ideas.
En estos días, el mayor desarrollo de C++ y la enseñanza de C++ están interrelacionados. Representa un reto enorme. Hay aproximadamente cuatro millones y medio de programadores de C++ en todo el mundo y muchos, muchos profesores. Incluso no podemos enseñar a los profesores lo suficientemente rápido. El futuro desarrollo de C++ está en manos de un comité oficial internacional. Tanto la Universidad Carlos III como Morgan Stanley toman parte de él, como la mayoría de las grandes compañías tecnológicas, tales como Google, Facebook, Microsoft, Intel e IBM. Se trata de un esfuerzo internacional que implica a gente de muchas industrias, organizaciones de investigación y grupos de usuarios. Dado el número de participantes en los procesos y la variedad de los importantes intereses comprometidos, es diabólicamente difícil mantener el curso de la evolución del lenguaje, a fin de mantener su coherencia. Por consiguiente, el esfuerzo en el diseño se hace mayor y este queda condicionado por los esfuerzos para comunicar ideas, analizar alternativas, y negociar dentro de los intereses de las partes. Esto ha de ser hecho responsablemente, porque los errores causarían perjuicios a millones de usuarios. Asimismo, la estabilidad de la definición del lenguaje durante décadas se vuelve esencial. Todos los programadores desean un lenguaje mejor y más sencillo, pero sobre todo, la mayoría dice “No rompas mi Código”.
He empleado cuatro décadas trabajando en lenguajes de programación. Afortunadamente, los resultados son importantes y sobre todo positivos. Esencialmente, cada uno de ustedes ha utilizado C++ hoy. Indirectamente, a través de los servicios computarizados han utilizado: su ordenador, su teléfono, su coche y más cosas.
Muchas gracias por escucharme y muchas gracias a la Universidad Carlos III por distinguir mi trabajo en el diseño, la programación, y en C++. Valoro el destacado título de Doctor Honoris Causa y siento que no solo privilegia mi trabajo, sino también las significativas contribuciones al mundo de la gran comunidad C++