Artículo 2006.Björn Straustrup, inventor del lenguaje de programación C ++, protege su legado y le dice qué está mal con la mayoría del código del programa.
En las décadas de 1980 y 1990, Björn Straustrup desarrolló e implementó el lenguaje de programación C ++, que popularizó la programación orientada a objetos e influyó en muchos otros lenguajes de programación, incluido Java.
C ++ sigue siendo un lenguaje informático arquetípico de "alto nivel" (es decir, un lenguaje que conserva las características de un lenguaje humano natural), y millones de programadores lo siguen utilizando. Muchos de los sistemas y aplicaciones de la era de PC e Internet se han escrito en C ++. A pesar de esto, el lenguaje sigue siendo controvertido, en gran parte porque se sabe que es difícil de aprender y usar, y también porque el diseño de Straustrup permite a los desarrolladores cometer graves errores de programación en aras de preservar su libertad.
Straustrup, quien ha estado en AT&T Bell Labs durante muchos años, ahora es profesor de informática en el Departamento de Ingeniería de la Universidad Texas A&M, cerca de Houston.
Revisión tecnológica: ¿por qué es tan malo tanto software?Björn Straustrup: Algunos programas son bastante buenos para cualquier estándar. Piense en Mars Rovers, Google y el Proyecto Genoma Humano. Este es un software de calidad! Hace quince años, la mayoría de las personas, y en particular la mayoría de los expertos, dirían que cada uno de estos ejemplos es imposible. Nuestra civilización tecnológica depende del software, por lo que si el software fuera realmente tan malo como su peor reputación, la mayoría de nosotros ya estaríamos muertos.
Por otro lado, mirar fragmentos de código "típicos" puede hacerme llorar. La estructura es aterradora, y los programadores claramente no pensaron en la corrección, los algoritmos, las estructuras de datos o la capacidad de mantenimiento. La mayoría de la gente no lee el código; solo ven que Internet Explorer se ralentiza.
Creo que el verdadero problema es que "nosotros" (es decir, los desarrolladores de software) estamos en un estado constante de emergencia, agarrándonos de una pajita para hacer nuestro trabajo. Realizamos muchos pequeños milagros a través de prueba y error, uso excesivo de la fuerza bruta y muchas pruebas, pero a menudo esto no es suficiente.
Los desarrolladores de software se han convertido en maestros en el complejo arte de crear sistemas suficientemente confiables a partir de partes poco confiables. El problema es que a menudo no sabemos exactamente cómo lo hicimos: el sistema simplemente "se convirtió" en algo mínimamente aceptable. Personalmente, prefiero saber cuándo funcionará el sistema y por qué lo hará.
Revisión tecnológica: ¿Cómo podemos solucionar el desastre en el que estamos?Björn Straustrup: Teóricamente, la respuesta es simple: capacitar mejor a nuestros desarrolladores de software, usar métodos de diseño más adecuados y usar un diseño flexible, pensando a largo plazo. Recompense los sistemas correctos, confiables y seguros. Castigar por descuido.
Esto es realmente imposible. La gente recompensa a los desarrolladores cuyo software es barato, tiene errores y se lanzó por primera vez. Eso es porque la gente necesita nuevos gadgets. No necesitan inconvenientes, no quieren aprender nuevas formas de interactuar con sus computadoras, no quieren demoras en la entrega y no quieren pagar por la calidad (a menos que esto sea obvio, pero la mayoría de las veces incluso entonces). Y sin cambios reales en el comportamiento del usuario, es poco probable que los proveedores de software cambien.
No podemos detener el mundo durante una década mientras reprogramamos todo, desde nuestras cafeteras hasta nuestros sistemas financieros. Por otro lado, continuar operando al azar es costoso, peligroso y deprimente. Se necesitan mejoras significativas, y solo pueden aparecer gradualmente. Deben llegar a un frente amplio; Un solo cambio no es suficiente.
Uno de los problemas es que interfieren las "chimeneas académicas": demasiadas personas están promoviendo un área como una panacea. Métodos de diseño más eficientes pueden ayudar, mejores métodos de especificación pueden ayudar, mejores lenguajes de programación pueden ayudar, mejores tecnologías de prueba pueden ayudar, mejor infraestructura de nivel medio, mejor comprensión de áreas de aplicación pueden ayudar, mejor comprensión de estructuras de datos y algoritmos ayuda, y así sucesivamente. Por ejemplo, la teoría de tipos, el desarrollo de modelos y los métodos formales pueden proporcionar asistencia significativa en algunas áreas, pero solo se promueven como una solución para excluir otros enfoques, cada uno de los cuales garantiza el rechazo de proyectos a gran escala. Las personas promueven lo que saben y lo que vieron; como mas? Pero solo unas pocas personas tienen la madurez técnica para equilibrar los requisitos y los recursos.
Descripción general de la tecnología: La idea detrás de C ++ era que los programadores trabajarían más activamente a cambio de un código más eficiente. Bell Labs quería usar un lenguaje que algunas personas realmente inteligentes usarían para escribir código que funcionara en computadoras como Electronic Switching Systems (ESS) que no fuera muy rápido. Hoy en día hay muchas computadoras rápidas y muchos desarrolladores de software. ¿Esto significa que niega toda la esencia de C ++?Björn Straustrup: C ++ no fue diseñado específicamente para dispositivos de conmutación grandes, fue desarrollado para una amplia gama de aplicaciones. Bell Labs fue el hogar de una increíble variedad de proyectos interesantes que abarcan todas las escalas y utilizan casi todo tipo de computadoras y sistemas operativos. Pero sí, el programador promedio de Bell Labs era significativamente más capaz de lo que la mayoría de la gente piensa de un "programador promedio", y la confiabilidad y el rendimiento (en ese orden) se consideraron significativamente más importantes que en la mayoría de los otros lugares.
El rendimiento sigue siendo un problema en muchas aplicaciones que me interesan: la capacidad de respuesta de las interfaces, los tiempos de inicio y apagado de las aplicaciones. Los desarrolladores de software neutralizan el sorprendente rendimiento del hardware moderno de la computadora al agregar abstracciones redundantes (software) capa por capa. Parece que nos enfrentamos a las limitaciones de la aceleración lineal para el hardware, pero en muchos casos podríamos ganar un par de órdenes de magnitud en software.
Sin embargo, C ++ realmente se volvió demasiado "amigable con los expertos", mientras que el nivel de educación formal efectiva del desarrollador promedio de software disminuyó. Sin embargo, la solución no es simplificar los lenguajes de programación hasta el punto de lo absurdo, sino utilizar diferentes lenguajes de programación y capacitar a más expertos. Estos expertos necesitan usar algunos lenguajes, y C ++ es uno de estos lenguajes.
Revisión tecnológica: en retrospectiva, al diseñar C ++, ¿fue su decisión de intercambiar la eficiencia del software, su seguridad y confiabilidad para el rendimiento del código de tiempo de ejecución, un error fundamental?
Björn Straustrup: Bueno, no creo que haya hecho tal intercambio. Quiero un código elegante y eficiente. A veces lo entiendo. Estas dicotomías (entre eficiencia y corrección, eficiencia y tiempo de un programador, eficiencia en comparación con un alto nivel, etc.) son ficticias.
Lo que realmente hice fue desarrollar C ++, principalmente como un lenguaje de programación del sistema: quería poder escribir controladores de dispositivos, sistemas integrados y otro código que tenía que usar directamente. Entonces quería que C ++ fuera un buen lenguaje para desarrollar herramientas. Esto requería flexibilidad y rendimiento, así como la capacidad de expresar interfaces elegantes. Mi opinión era que para crear un nivel superior, para crear aplicaciones completas, primero tenía que comprar, construir o pedir prestadas bibliotecas que proporcionaran las abstracciones apropiadas. A menudo, cuando las personas tienen problemas con C ++, el verdadero problema es que no tienen las bibliotecas apropiadas o no pueden encontrar las bibliotecas disponibles.
Otros idiomas han intentado admitir más directamente aplicaciones de alto nivel.
Esto funciona, pero a menudo este soporte tiene el costo de la especialización. Personalmente, no desarrollaría una herramienta que solo pudiera hacer lo que quisiera: me esfuerzo por la comunidad.
Revisión de tecnología: ¿Cómo explica el hecho de que C ++ es ampliamente criticado por muchos programadores, pero al mismo tiempo muy utilizado? ¿Por qué es tan exitoso este lenguaje?Björn Straustrup: La respuesta es simple: solo hay dos tipos de idiomas: los que todos se quejan y los que nadie usa.
Hay sistemas más útiles diseñados en idiomas que se consideran terribles que los idiomas que se elogian por ser hermosos, y mucho más. El objetivo de un lenguaje de programación es ayudar a crear buenos sistemas donde "bueno" se pueda definir de muchas maneras. Mi breve definición es: algo es correcto, compatible y lo suficientemente rápido. La estética importa, pero antes que nada, el lenguaje debería ser útil; Debería permitir a los programadores de este mundo expresar ideas realistas de manera concisa y económica.
La razón principal del éxito de C ++ es que cumple con los objetivos de diseño limitados: puede expresar de manera eficiente una gran variedad de ideas directamente.
C ++ no estaba destinado a hacer una sola cosa realmente bien o evitar que las personas hagan cosas que se consideran "malas". En cambio, me concentré en la generalidad y el rendimiento.
Estoy seguro de que por cada programador que no le gusta C ++, hay alguien a quien le gusta este lenguaje. Sin embargo, mi amigo fue a la conferencia, donde el orador principal pidió a la audiencia que manifestara levantando la mano: la primera, a cuántas personas no les gustaba C ++, y la segunda, cuántas personas escribieron el programa en C ++. El primer grupo tenía el doble de personas que el segundo. Una expresión de hostilidad hacia algo que no sabes generalmente se llama prejuicio. Además, quienes se quejan son siempre más fuertes y más seguros que los partidarios: las personas razonables reconocen los defectos. Creo que sé más sobre los problemas con C ++ que sobre cualquier persona, pero también sé cómo evitarlos y cómo usar las fortalezas de este lenguaje.
Y, por supuesto, no espera que los defensores de los lenguajes que han perdido la competencia con C ++ sean amables con este hecho. El desarrollo de software no tiene tal grado de profesionalismo, aunque espero que esto eventualmente suceda. A este respecto, la ciencia es diferente: cuando una nueva herramienta, técnica o teoría gana, la gente la ve como un progreso. En software, las contribuciones de competidores y predecesores no han recibido un reconocimiento, apreciación o incluso comprensión generalizados.
Revisión de tecnología: en "Diseño y evolución de C ++", usted argumenta que Kierkegaard influyó en su concepto de lenguaje. ¿Es esto una broma?Björn Straustrup: Quizás una declaración un poco pretenciosa, pero no una broma. Muchos pensamientos sobre el desarrollo de software se centran en un grupo, equipo, empresa. Esto a menudo se hace de tal manera que una persona está completamente inmersa en la "cultura" corporativa sin tener que buscar talentos y habilidades únicas. La práctica empresarial puede ser hostil para las personas con habilidades excepcionales e iniciativa técnica. Encuentro esta gestión tecnológica cruel y derrochadora. Kierkegaard fue un firme defensor del individuo contra la "multitud" y planteó seriamente la cuestión de la importancia de la estética y el comportamiento ético. No pude señalar una característica específica del lenguaje y decir: "Verá, existe la influencia de un filósofo del siglo XIX", pero es una de las raíces de mi renuencia a eliminar el "nivel experto", abolir el "abuso" y limitar la capacidad de admitir solo aquellas aplicaciones que como sé, serán útiles. Sin embargo, no me gusta particularmente la filosofía religiosa de Kierkegaard.
Revisión tecnológica: ¿de qué te arrepientes más?Björn Straustrup: ¡ No me arrepiento! Bueno, por supuesto, sueño con algo que podría hacer de manera diferente y mejor, pero en serio, ¿quién soy yo para redescubrir, digamos, la cosecha de Björn de 1984? Puede que haya tenido menos experiencia que yo, pero no fue menos inteligente, probablemente más inteligente, y entendió las palabras de 1984 mejor que yo. C ++ se usa para crear muchos sistemas que mejoran nuestras vidas, y esto ha tenido un impacto positivo significativo en lenguajes y sistemas posteriores. Esto es algo de lo que estar orgulloso.