PDA

Ver la versión completa : La verdadera historia de C++



Nost
03-01-2008, 13:31
Todos conocemos o deberíamos conocer c++. Es una extensión del lenguaje c, hecha específicamente para manejar objetos. Según la wiki:

El C++ (pronunciado "ce más más" o "ce plus plus") es un lenguaje de programación, diseñado a mediados de los años 1980, por Bjarne Stroustrup, como extensión del lenguaje de programación C.

Se puede decir que C++ es un lenguaje que abarca tres paradigmas de la programación: la programación estructurada, la programación genérica y la programación orientada a objetos.
Pero, ¿fue creado c++ realmente para mejorar la vida de los programadores? ¿o es una estafa?

Esta es una entrevista que hizo Bjarne Stroustrup, a la revista de informática del IEEE. Os vais a reir un poco, y vais a llorar un poco también.

Por cierto, no es nada moderno. Este 1 de enero la entrevista cumplió 10 años.

Int: Bien, hace unos pocos años que cambio el mundo del diseño de
software, como se siente mirando atras?
BS: En este momento estaba pensando en aquellos dias, justo antes de que
llegases. Los recuerdas? Todo el mundo escribia en C y el problema
era que eran demasiado buenos... Las Universidades eran demasiado
buenas enseñandolo tambien. Se estaban graduando programadores
competentes a una velocidad de vertigo. Esa era la causa del problema.
Int: Problema?
BS: Si, problema. Recuerdas cuando todos programaban en Cobol?
Int: Desde luego. Yo tambien lo hice.
BS: Bien, al principio, esos tipos eran como semidioses. Sus salarios
eran altos, y eran tratados como la realeza...
Int: Aquellos fueron buenos tiempos, eh?
BS: Exacto. Pero, que paso? IBM se canso de ello, e invirtio millones en
entrenar a programadores, hasta el punto que podias comprar una docena
por medio dolar...
Int: Eso es por lo que me fui. Los salarios bajaron en un año hasta el
punto de que el trabajo de periodista esta mejor pagado.
BS: Exactamente. Bien, lo mismo paso con los programadores de C...
Int: Ya veo, pero adonde quiere llegar?
BS: Bien, un dia, mientras estaba sentado en la oficina, pensaba en este
pequeño esquema, que podria inclinar la balanza un poquito. Pense
'Que ocurriria si existiese un lenguaje tan complicado, tan dificil
de aprender, que nadie fuese capaz de inundar el mercado de
programadores?' Empece cogiendo varias ideas del X10, ya sabes,
X windows. Es una autentica pesadilla de sistemas graficos, que solo
se ejecutaba en aquellas cosas Sun 3/60... tenia todos los ingredientes
que yo buscaba. Una sintaxis ridiculamente compleja, funciones oscuras
y estructuras pseudo-OO. Incluso ahora nadie escribe en codigo nativo
para las X-Windows. Motif es el unico camino a seguir si quieres
mantener la cordura.
Int: Esta bromeando?
BS: Ni un pelo. De hecho, existe otro problema... Unix esta escrito en C,
Lo que significa que un programador en C puede convertirse facilmente
en un programador de sistemas. Recuerdas el dinero que un
programador de sistemas solia conseguir?
Int: Puede apostar por ello. Es lo que solia hacer yo...
BS: Ok, por lo tanto, este nuevo lenguaje tenia que divorciarse por si
mismo de Unix, ocultando las llamadas al sistema. Esto podria permitir
a tipos que solo conocian el DOS ganarse la vida decentemente...
Int: No me puedo creer que haya dicho eso...
BS: Bueno, ha llovido mucho desde entonces. Ahora creo que la mayoria de la
gente se habra figurado que C++ es una perdida de tiempo, pero
debo decir que han tardado mas en darse cuenta de lo que pensaba.
Int: Entonces, que hizo exactamente?
BS: Se suponia que tenia que ser una broma, nunca pense que la gente se
tomase el libro en serio. Cualquiera con dos dedos de frente puede
ver que la programacion orientada a objetos es anti intuitiva, ilogica
e ineficiente...
Int: Que?!?!
BS: Y como el codigo reutilizable... cuando has oido de una compañia que
reutilice su codigo?
Int: Bien, nunca, pero...
BS: Entonces estas de acuerdo. Recuerda, algunos lo intentaron al principio.
Habia esa compañia de Oregon, creo que se llamaba Mentor Graphics, que
revento intentando reescribir todo en C++ en el 90 o 91. Lo siento
realmente por ellos, pero pense que los demas aprenderian de sus errores.
Int: Obviamente no lo hicieron, verdad?
BS: Ni lo mas minimo. El problema es que la mayoria de las empresas se
callaron sus mayores disparates, y explicar 30 millones de dolares de
perdidas a los accionistas podria haber sido dificil... Demosles el
reconocimiento que merecen, finalmente consiguieron hacer que funcionase
Int: Lo hicieron? Bien eso demuestra que la OO funciona...
BS: Casi. El ejecutable era tan gigantesco que tardaba unos cinco
minutos en cargar en una estacion de trabajo de HP con 128 MB de
RAM. Iba tan rapido como un triciclo. Crei que seria un escollo
insalvable pero nadie se preocupo. SUN y HP estaban demasiado alegres de
vender enormes y poderosas maquinas con gigantescos recursos para
ejecutar programas triviales. Ya sabes, cuando hicimos nuestro primer
compilador de C++, en AT&T, compile el clasico 'Hello World', y no me
podia creer el tamaño del ejecutable. 2.1 MB.
Int: Que ?!?!. Bueno, los compiladores han mejorado mucho desde entonces...
BS: Lo han hecho? Intentalo en la ultima verision de g++, la diferencia
no sera mayor que medio mega. Ademas existen multitud de ejemplos
actuales en todo el mundo. British Telecom tuvo un desastre mayor en
sus manos, pero, afortunadamente, se deshicieron de ello y comenzaron
de nuevo. Tuvieron mas suerte que Australian Telecom. Ahora he oido
que Siemens esta construyendo un dinosaurio y se empiezan a preocupar
porque los recursos hardware no hacen mas que crecer para hacer
funcionar ejecutables tipicos. No es una delicia la herencia multiple?
Int: Bien, pero C++ es un lenguaje avanzado ...
BS: Realmente crees eso ?!?!?! Te has sentado alguna vez y te has puesto a
trabajar en un proyecto C++? Esto es lo que sucede: Primero he puesto
las suficientes trampas para asegurarme de que solo los proyectos mas
triviales funcionen a la primera. Coge la sobrecarga de operadores. Al
final del proyecto casi todos los modulos lo tienen, normalmente los
programadores sienten que deberian hacerlo asi porque es como les
enseñaron en sus cursos de aprendizaje. El mismo operador entoces
significa cosas diferentes en cada modulo. Intenta poner unos cuantos
juntos, cuando tengas unos cientos de modulos. Y para la ocultacion de
datos. Dios, a veces no puedo parar de reirme cuando oigo los problemas
que algunas empresas han tenido al hacer a sus modulos comunicarse entre
si. Creo que el termino 'sinergetico' fue especialmente creado para
retorcer un cuchillo en las costillas del director de proyecto...
Int: Tengo que decir que me siento bastante pasmado por todo esto. Dice
que consiguio subir el salario de los programadores? Eso es inmoral.
BS: No del todo. Cada uno tiene su opcion. Yo no esperaba que la cosa se
me fuese tanto de las manos. De cualquier forma acerte. C++ se esta
muriendo ahora, pero los programadores todavia conservan sus sueldos
altos. Especialmente esos pobres diablos que tienen que mantener toda
esta majaderia. Comprendes que es imposible mantener un gran modulo en
C++ si no lo has escrito tu mismo?
Int: Como?
BS: Estas fuera de juego, verdad? Recuerdas 'typedef'?
Int: Si, desde luego.
BS: Recuerdas cuanto tiempo se perdia buscando a tientas en las cabeceras
sola para darse cuenta de que 'RoofRaised' era un numero de doble
precision? Bien, imagina el tiempo que te puedes tirar para encontrar
todos los typedefs implicitos en todas las clases en un gran proyecto.
Int: En que se basa para creer que ha tenido exito?
BS: Te acuerdas de la duracion media de un proyecto en C?. Unos 6 meses.
No mucho para que un tipo con una mujer e hijos pueda conseguir un
nivel de vida decente. Coge el mismo proyecto, realizalo en
C++ y que obtienes? Te lo dire. Uno o dos años. No es grandioso?
Mucha mas seguridad laboral solo por un error de juicio. Y una
cosa mas. Las universidades no han estado enseñando C desde hace
mucho tiempo, lo que produce un descenso del numero de buenos
programadores en C. Especialmente de los que saben acerca de la
programacion en sistemas Unix. Cuantos tipos sabrian que hacer con
un 'malloc', cuando han estado usando 'new' durante estos años y
nunca se han preocupado de de chequear el codigo de retorno?. De hecho
la mayoria de los programadores en C++ pasan de los codigos que les
devuelven las funciones. Que paso con el '-1'? Al menos sabias
que tenias un error, sin enredarte con 'throw', 'catch', 'try'...
Int: Pero seguramente la herencia salve un monton de tiempo?
BS: Lo hace? Te has fijado en la diferencia entre un proyecto en C y el
mismo en C++? La etapa en la que se desarrolla un plan en un
proyecto en C++ es tres veces superior. Precisamente para asegurarse
de que todo lo que deba heredarse, lo hace, lo que no, no. Y aun asi
sigue dando fallos. Quien ha oido hablar de la perdida de memoria en un
programa en C? Ahora se ha creado una autentica industria especializada
en encontrarlas. Muchas empresas se rinden y sacan el producto,
sabiendo que pierde como un colador, simplemente para reducir el gasto
de buscar todas esas fugas de memoria.
Int: Hay herramientas...
BS: La mayoria escritas en C++.
Int: Si publicamos esto, probablemente le lincharan. Se da cuenta?
BS: Lo dudo. Como dije, C++ esta en su fase descendente ahora y ninguna
compañia en su sano juicio comenzaria un proyecto en C++ sin una prueba
piloto. Eso deberia convencerles de que es un camino al desastre.
Si no lo hace, entonces se merecen todo lo que les pase.
Ya sabes?, yo intente convencer a Dennis Ritchie a reescribir Unix en
C++...
Int: Oh Dios. Que dijo?
BS: Afortunadamente tiene un buen sentido del humor. Creo que tanto
el como Brian se figuraban lo que estaba haciendo en aquellos dias,
y nunca empezaron el proyecto. Me dijo que me ayudaria a escribir
una version en C++ de DOS, si estaba interesado...
Int: Lo estaba?
BS: De hecho ya he escrito DOS en C++, te pasare una demo cuando pueda.
Lo tengo ejecutandose en una Sparc 20 en la sala de ordenadores.
Va como un cohete en 4 CPUs, y solo ocupa 70 megas de disco...
Int: Como se comporta en un PC?
BS: Ahora estas bromeando. No has visto Windows '95? Creo que es mi
mayor exito. Casi acaba con la partida antes de que estuviese preparado
Int: Ya sabes, la idea de Unix++ me ha hecho pensar. Quizas haya
alguien ahi fuera intentandolo.
BS: No despues de leer esta entrevista.
Int: Lo siento, pero no nos veo capaces de publicar esto.
BS: Pero es la historia del siglo. Solo quiero ser recordado por mis
compañeros programadores, por lo que he hecho por ellos. Sabes
cuanto puede conseguir un programador de C++ hoy dia?
Int: Lo ultimo que oi fue algo como unos $70 - $80 la hora para uno
realmente bueno...
BS: Lo ves? Y se los gana a pulso. Seguir la pista de todo lo que he
puesto en C++ no es facil. Y como dije anteriormente, todo
programador en C++ se siente impulsado por alguna promesa mistica
a usar todos los elementos del lenguaje en cada proyecto. Eso
ciertamente me molesta a veces, aunque sirva a mi proposito
original. Casi me ha acabado gustando el lenguaje tras todo este tiempo.
Int: Quiere decir que no era asi antes?
BS: Lo odiaba. Parece extraño, no estas de acuerdo? Pero cuando los
beneficios del libro empezaron a llegar... bien, te haces una idea...
Int: Solo un minuto. Que hay de las referencias?. Debe admitir que
mejoro los punteros de C...
BS: Hmm. Siempre me he preguntado por eso. Originalmente crei que lo
habia hecho. Entonces, un dia estaba discutiendo esto con un tipo que
escibe en C++ desde el principio. Dijo que no podia recordar cuales
de sus variables estaban o no referenciadas, por lo que siempre
usaba punteros. Dijo que el pequeño asterisco se lo recordaba.
Int: Bien, llegados a este punto suelo decir 'muchas gracias' pero hoy
no parece muy adecuado.
BS: Prometeme que publicaras esto. Mi conciencia esta dando lo mejor
de mi mismo estos dias.
Int: Se lo hare saber, pero creo que se lo que dira mi editor...
BS: Quien se lo creeria de todas formas?... De todos modos, puedes
enviarme una copia de la cinta.?
Int: Descuide, lo hare.

Jojojo, sorprendidos, ¿eh? Aunque claro, algunos de esos problemas todavía existen :D

Saludos.

[FUENTE: Set15, de www.set-ezine.org]

Cypress
03-01-2008, 17:50
joder, es verdad esto ?

Giskard
03-01-2008, 19:10
Sorprendente :eek:

De cualquier forma, es verdad que algunas cosas en java y c++ parecen un poco absurdas, a simple vista algunas parecen malas bromas. Y es curioso que los programas actuales de linux sigan escribiendose en C y no en c++.

Saludos

Cypress
03-01-2008, 20:28
El mismo Linux está escrito en C, y recuerdo un post que puse, sobre una mail list de desarrolladores de linux, en el cual Linus, decia que C++ es una mier** :p

Saludos

scanner
03-01-2008, 22:42
No entiendo nada de C++, pero si de C y de Java. De este úlitimo, lo que nunca he llegado a tragar es lo del polimorfismo. Encuentro absurdo que un mismo método se use de manera distinta según que datos de entrada se le envien, eso solo sirve para liar a la gente.

ragnarokx2
14-01-2008, 18:49
Realmente no creo que la entrevista sea real, pero tengo que admitir (con la poca experiencia que tengo) que C++ me resulto mas complicado que C. Y tampoco entiendo cual es la necesidad de la herencia y el polimorfismo, pero esas cosas son fáciles de corregir. No se usan y listo.

¿Todavia esta disponible el post con la mail list de Linus diciendo que c++ es un desastre?

gondar_f
15-01-2008, 20:25
Yo tampoco se si el texto es real o no, pero lo que comenta es todo real, desde que los sueldos de los programadores cayeron en picado a finales de los 70 (lo que origino la mayor parte de las empresas de software y hardware actuales, includias muchas absorvidas por otras, entre ellas: MS, Apple, Lotus, Corel, Adobe, Borlad, Macromedia, Compac, Dell...), hasta lo problematica que resulta el desarrollo de aplicaciones llamando a las primitivas de XWindow (quien lo haya echo alguna vez me dara la razón), pasando por que jamás se reutiliza código, especialmente si está escrito en C++, siendo muy común ver que tal o cual software fue reescrito totalmente en tal versión (vas a ver el lenguaje y que casualidad que suele estar C++ por detras) aun esta semana se presento la versión final de KDE 4 (4 versiones y ya se reescribio KDE 2 veces)...

En cuanto a que el código C++ es muy dificil de leer, que solo el propio programador puede, pues no estaria yo tan seguro ni de que el propio programador puede si vuelve al código muchos meses después... El C ya era vastante ilegible, pero es que el C++ es imposible, especialmente cierto resulta lo anterior cuando te encuentras con un fichero de más de unos cuantos cientos de lineas (ya no digo miles)... Que diferencia con Modula 2, que tiene casi todo lo que tiene C++ (sus caracteristicas modulares permitir implementar una forma simple de herencia y por supuesto encapsulación) que tu puedes cogerte una aplicación de 20 mil lineas en 4 módulos y te encuentras que la única dificiltad para entender que es cada cosa y que hace es el tamaño del los ficheros, no el código... precisamente por ello Modula 2 es el mejor lenguaje para aprender a programar, junto con ADA, y en cambio C++ y Java se consideran (segun el IEEE) que son lenguajes desaconsejables para aprender a programar... el problema de C como primer lenguaje de aprendizaje de programación solo tiene 2 handicaps, que la mayor parte de los programadores no siguen las tecnicas de desarrollo estructuradas (que indican donde deven declararse las variables, como deben nombrarse...) y el problema de que está debilmente tipado (tu puedes pasar a int a un char y no generar ningún error, o peor un float a un int y tampoco te genera error, aunque una vez que ejecutas el programa puede hacer cosas "imprevistas"...

Y lo cierto es que los actuales compiladores son lo vastante inteligentes y buenos para que los ejecutables no pesen cientos de megas, pero lo que describe el texto (en menor medida eso si) es cierto, yo tengo provado compiladores de C++ para DOS de los primeros tiempos de C++ y era simpático, el compilador cabía en un disquete flexible (los grandes) que vendia Oregon de poco más de 500 KB y en cambio un ejecutable de mierda que lanzara un par de mensajes y hiciera un par de cálculos pues te ocupaba un mega, el mismo programa en C te ocupaa 50KB... era algo que yo no comprendi durante mucho tiempo, como el mismo código podía dar un ejecutable más de 20 veces más grande que otro ejecutable realizado en otro compilador, el motivo era simple, cuando compilabas el código como C++, aunque no utilizaran ninguna característica de este, pues como mínimo incluia una seríe de librerias, el código era tratado como si fuesen clases...

Pero hay algo muy simpático con C++, desde finales de los 80 (cuando empezo a popularizarse C++) se intento crear un estandar de C++, en cambio no pudo hasta agosto de 1998 (casi 10 años después) por un detalle muy simple, no había una forma de definir ciertas cosas, hasta que aparecio el estandar UML (noviembre de 1997) no hubo forma de especificar algunas características de C++, al final se pudieron especificar con UML (igual que Java, que no hay otra forma)...

Lo que es mentira es lo de Windows 95, lo cierto es que en Windows 95 no hay ni una sola linea en C++, buena parte aun esta en ensamblador y lo demás en C... y lo cierto es que los requisitos que pide el Windows 95 para funcionar son muy bajos, en la realidad con un 486 DX, 8MBs de RAM y 100MB de HD sobran para que tire bien, y con eses recursos era capaz de ejecutar aplicaciones como las de office97 de forma correcta... Realmente los requisitos mínimos para que funcione el Windows 95 son muy inferiores, pero con menos recursos va más lento y ejecutar cualquier aplicación un poco exigente puede llevar años por ello yo considero que los verdaderos mínimos son esos, os dejo el link de los requisitos mínimos del W95 según MS:
http://support.microsoft.com/default.aspx?kbid=138349 (por cierto, funciona con estos requisitos, en el instituto de la Xunqueira 2 tenian uno PC con los requisitos mínimos y W95 instaldo y funcionaba, aunque fuese de forma un poco lenta...
Si muchisimos menos que Linux con XWindow, incluidos primeras versiones, que para ejecutar Linux con XWindows como mínimo requerias 8MB de RAM... y para ejecutar solo Linux (el kernel con un shell) necesitas 4MB de RAM...
Hay mucha mentira interesada con respecto a Windows 95, pero lo cierto es que MS acabo con los competidores que le quedaban porque ninguno de ellos pudo presentar un producto superior (salvo Apple, pero incluso en esa época estaba en su peor momento de la hisotoria)...
Yo tuve Windows 95 en un 486 de los flojos, con 8 MB de RAM y un HD de 200MB y aquello iva muy bien, podía jugar (juegos como Duke Nukem 3D, Quake...), trabajar... Me quede muy desilusionado cuando intente instalar un Linux SlackWare del 96 que venia un libro de Linux de esa época... Y si bien pude instalarlo e iva bien en modo texto, cuando arrancaba XWindows aquello se ralentizaba tanto que era inutilizable, solo con el gestor twm iva relativamente aceptablemente...
Precisamente esto cuando en el texto se refieren a este tema es cuando creo que se paso y se descubre que es un texto falso...

En cuanto a un punto comentado por los compañeros, desde hace muchos años Linus Torvals viene atacando a C++, y es que es una persona que no se calla las cosas, por ejemplo algo menos comentado es que llego a decir (en una tradución por significado no literal) que Gnome le parecia la mayor mierda que había y que le daba asco que se ejecutase sobre Linux... que es simpático, porque siempre mostro sus preferencias hacía KDE y en cambio KDE esta desarrollada en C++ y Gnome en C, pero no es por eso por lo que critica a Gnome, sino porque según él, Gnome es muy rigido, poco personalizable, muy feo, muy lento para lo que hace...

Un Saludo