¿C++ y Java casi muertos?
- Detalles
- Publicado: Viernes, 08 Mayo 2009 03:00
Me gustaría hablar de los legados que nos han dejado C++ y Java. Se menciona muchas veces errores en el diseño de ambos, aunque si hacemos una retrospectiva en forma positiva podemos concluir que los dos lenguajes tuvieron un papel importante en la evolución de los lenguajes de programación y nos han dejado un legado importante y positivo.
Entonces, ¿no será muy temprano para hablar de sus legados? ¿O quizás pensamos que estos lenguajes están ya en su período de decadencia?
C++
Eckel, un miembro formado de C++ Standadrs Committee recordó la decisión tomada en relación a la compatibilidad con versiones anteriores del lenguaje con C desde el comienzo:
Para comprender porqué el lenguaje puede ser desagradable y complicado, y a la vez contar con un buen diseño, es necesario tener en cuenta la primer decisión de diseño que afecta a todo en C++: compatibilidad con C. Stroustrup deció -y al parecer de forma correcta- que la forma de hacer que la gran masa de programadores de C cambien a objetos era hacer que eso fuese transparente: permitir que ellos pudiesen compilar sus códigos en C sin tener que cambiarlos para C++.
Mientras que C++ ha tenido éxito en atraer a la mayoría de los desarrolladores de C a C++, la decisión sobre la compatibilidad tiene un severo impacto negativo en la evolución del lenguaje:
Lla compatibilidad con C fue una gran limitación, y siempre ha sido la mayor fuerza de C++ ... y su perdición. Eso es lo que ha hecho que C++ fuera un éxito y eso es lo que hizo que fuese complejo de la forma que lo es.
Por ejemplo, reconoce que el operador de sobrecarga es difícil de utilizar en C++:
Quienes no entienden C++ muy bien piensan que la sobrecarga de operadores es muy difícil para que los desarrolladores la usen de forma adecuada. Lo qué es básicamente cierto en C++, porque C++ tiene ambas: reserva de pila y reserva de heap, precisamos sobrecargar los operadores para poder manejar todas las situaciones y no causar pérdidas de memoria. De hecho, eso es difícil.
Por supuesto, estas declaraciones generan un debate. Archilleas Margaritis no cree que la compatibilidad con C sea un problema:
No creo que C++ no tenga un buen diseño debido a la compatibilidad con C. ADA es compatible con C, y es un lenguaje muy bueno, con un fuerte liderazgo de su concepción de ingeniería.
Lo que está mal en C++ es el nivel de compatibilidad de código fuente con C. Para que fuese posible incluir las cabeceras de C, C++ mantiene el sistema preprocesador de C. Esto llevó a una gramática extraña y sin contexto, lo que llevó a una sintaxis extraña que se tiene que mantener compatible con C.
Michele Costabirle considera que una de las fallas de C++ fue la falta de una librería normalizada desde el principio:
Creo que una pesada carga de C++ es la falta de una librería normalizada.
Si recuerdo bien, Stroustroup escribió en "El Diseño y la Evolución de C++", que dejó de lado una librería normalizada en favor de la herencia múltiple. Creo que hubiera sido más ventajoso de la otra manera.
Se pueden decir muchas cosas respecto a C++, pero una cosa es cierta: C++ llevó a los programadores a subir un más alto en la escalera de la programación.
Java
Hablando de un lenguaje diferente en el mismo tono, Eckel reitera algunos errores de diseño cometidos en Java:
Durante muchos años, la línea del equipo de Java fue "la sobrecarga de operadores es algo demasiado complicado". Esta y muchas otras decisiones muetran claramente que alguien no hizo la tarea en su casa, y es el motivo por el cual tengo la reputación de criticar muchas decisiones tomadas por Gosling y el equipo de Java. ...
Los tipos primitivos "tienen que ser incluidos por eficiencia." La respuesta correcta sería la de permanecer fiel a "Todo es un objeto" y proporcionar algún truco para realizar actividades de bajo nivel cuando hay una necesidad de eficiencia (lo que es cierto para tecnologías hotspot, que hacen las cosas más eficientes de una manera transparente, como evetuamente ocurriría) . Ah, y de paso no vayamos a utilizar el procesamiento de puntos flotantes directamente para calcular funciones transcedentales (en cambio, eso se hace en el software). ...
Cuando escribí acerca de qué tan malo se hizo el diseño de los generics, obtuve la misma respuesta, junto con "tenemos que tener compatibilidad con las (demás) decisiones tomadas en Java anteriormente." Últimamente cada vez más personas han adquirido experiencia con generics para ver cómo es realmente difícil de utilizar.
Bill Venners recuerda las cosas de manera diferente:
No estoy seguro de cuando me dio la impresión de que la elección de dejar la sobrecarga de operadores de lado fue hecha porque alguien no hizo la tarea en casa. Recuerdo preguntar a Gosling en una de mis entrevistas con él porque estaba dejando la sobrecarga de operadores de lado (no creo que esta pregunta y respuesta acabaran siendo publicada). Lo que él básicamente dijo fue lo mismo que le oí decir en otros contextos: Gosling consideró que el nivel de abuso de la sobrecarga de operadores que él vio en la práctica en otros lenguajes (no estoy seguro de si se estaba refiriendo sólo a C++ pero sin duda incluía a C++) había anulado los beneficios de la misma. Eso es todo. Fue una elección subjetiva de diseño.
James Watson favorece las limitaciones deliberadamente introducidas en Java:
Lo que hizo a Java un lenguaje de fácil adopción fue su simplicidad. Sí, en cualquier lenguaje podemos escribir código que es imposible de mantener, pero tendremos que trabajar duro para hacerlo en Java. Esto es porque no se ofrecen una serie de recursos fáciles de abusar, que otros lenguajes si ofrecen.
Desde una perspectiva individual, esto es terrible. Si no quiero utilizar una funcionalidad no la uso. ¿Quién es Sun para decirme lo que debo o no debo hacer? Pero cuando se considera a todo un grupo de desarrolladores que tienen ideas diferentes spbre lo que es un buen enfoque, el juego cambia. El tener un número limitado de formas de hacer las cosas comienza entonces a tener sentido.
Noel Grandin dijo lo suyo, ampliando aún más el debate incluyendo a nuevos lenguajes:
La mayoría de los otros lenguajes atrayentes como Ruby y Scala nunca serán los principales, y es proque están todos fuertemente sesgados en favor de escribir código, en lugar de leer código.
Java es correctamente equilibrado - Java puede ser expresivo y no tener una serie de funcionalidades legadas, y es muy fácil de averiguar lo que algún código aleatorio está haciendo.
Al final, Eckel habló sobre el legado de Java:
Java acercó el mundo del garbage collection a la mayoría de los desarrolladores, también a las máquinas virtuales y un modelo consistente de manipulación de errores (especialmente, si dejamos de lado las checked exceptions, que es una que puede ser utilizada como he mostrado en Pensando en Java, 4e) . Con todas sus fallas, Java nos elevó a un nivel superior, hasta al punto donde estamos ahora, y listos para lenguajes de niveles más altos.
El factor más positivo es preparar el camino para los lenguajes del futuro:
En cierto modo, C++ fue el lenguaje principal y las personas pensaron que siempre sería así. Muchos pensaron lo mismo respecto de Java, pero Java hizo tadavía más fácil sustituirse a sí mismo, a causa de la JVM. Ahora es posible que cualquiera cree nuevos lenguajes y los ejecute con tanta eficiencia como Java. ... ...
Y estamos viendo ocurrir esto - con lenguajes de alto nivel como Scala, y con lenguajes dinámicos como Groovy, JRuby y Jython. ... ...
El beneficio no es intencional, el verdadera brillo o genialidad accidental de Java es que fue creando un camino para su propia sustitución, aunque el propio Java haya alcanzado un punto donde ya no pueda evolucionar. Todos los lenguajes del futuro tienen que aprender de eso: crear una cultura en la que pueda haber refactorización (como Python y Ruby han hecho) o permitir el crecimiento de especies competitivas.
Conclusión
Java encendió muchas controversias cuando apareció, especialmente entre los desarrolladores de C++ y los nuevos desarrolladores de Java. Las voces se han calmado desde entonces, y ahora podemos ver claramente dónde estamos y cuál es el legado dejado por los dos lenguajes.
¿O quizás todavía es demasiado pronto para hablar de su legado? Hablar de "legado" suena como si fuesen lenguajes muertos o lenguajes que están muriendo. ¿Es así? ¿Qué lenguajes evolucionará para reemplazar a C++ y Java? (las opiniones son siempre bienvenidas).
Basado en Será que ainda está cedo para falar de legados C++ e Java.
-
Invitado
PermalinkEstoy en desacuerdo con este post. C++ y Java no están muertos.
C++ se sigue utilizando de forma muy extendida aunque muchos no lo sepan ¿Con qué lenguaje creen que se programa en Microsoft? ¿Con qué lenguaje se programan los sistemas operativos de PC? ¿Y los de telefonía celular? Si necesitas hacer programación de un driver o cualquier otra aplicación que casi casi trabaje sobre el hardware "directamente ¿Dime que lenguaje utilizarías?
Java tampoco está muerto ni se esta muriendo ¿Díganme que lenguaje de programación se usa principalmente en Oracle y en Google? ¿Díganme que lenguaje de programación tiene la bondad de poder ejecutar un programa de forma "transparante" en diversos sistemas? ¿Díganme cual es el lenguaje de programación más utilizado por las empresas de desarrollo de ERPs, CRMs y SCMs? -
Invitado
PermalinkHay programillas java corriendo en la mayoría de los millones de móviles que andan por el mundo...
Saludirijillos -
Invitado
PermalinkDificil respuesta. Pero supongo que será el que permita obtener resultados más rápidos y con mayor calidad. Al menos para el software de "gestion".
Para este que es en el que me muevo creo que será algo con la simplicidad y funcionalidad de python/Ruby pero con la "normalización" de librerías de Java. Peero, lo que más me gusta de esta profesión es que siempre te sorprenden.
-
Invitado
PermalinkCobolo se sigue usando, C se sigue usando yo pienso que se usa C mucho mas que C++. Java sigue teniendo un gigante mercado.
Por ejemplo toda la programacion de Linux/Unix es en C, Todo lo empotrado, robotica, Mainframes usan C bueno un sin fin, Y no se diga de Java o C++. Nos falta mucho para encontrar el siguiente lenguaje para que revolucione la industria pero nos vamos a tardar mucho yo lo veo asi con mi punto de vista, Entonces pues yo sigo utlizando C y Java y ya no me molesten con la siguienta gran cosa(The next big thing). :cheer: -
Invitado
PermalinkHola! :cheer:
El titulo tiene que ver con que en la naturaleza, nada se pierde, todo se transforma.
Al respecto del articulo, los lenguajes de programación se comportan de manera parecida. Como leí en otro comentario, aún se utiliza Cobol, RPG (Si aunque no lo crean, en ambientes bancarios y financieros cuya plataforma es AS400 de IBM por ejemplo...), Pascal, FOXPro y Clipper (algunos puristas dirán que estos no son lenguajes propiamente dichos... pero yo creos que si). Visual Basic 6 aún esta vivo y colenado a pesar del .NET etc. Existen múltiples versiones de Basic (KBasic :woohoo: ) y aun ....
EN otras palabras, tendremos por siempre la presencia de C++ y de Java, ya que son GRANDES lenguajes, aun con sus "fallas" o defectos de diseño.
¿Su legado? No sabría decirlo, pero su PRESENCIA es por cierto muy actual.
Lo más probable, es que crezca la programación / desarrollo declarativo con herramientas tipo Genexus pero detrás de su maquinaria lógica, seguirán muy campantes los LENGUAJES, y muy seguramente JAVA y C++ esten entre los más longevos.
Un cordial saludo desde el corazón de América Latina! [Paraguay] -
Invitado
PermalinkDe la misma manera que aún se mantienen aplicaciones en Cobol, la inmensa popularidad de C++ y Java nos indica que por simple uso de aplicaciones y dispositivos, estos lenguajes se seguirán usando durante bastante tiempo. Java lidera el desarrollo empresarial y se sostiene sobre herramientas libres, que han hecho que sean un lenguaje de rápida aceptación en el mercado. De modo que no solo influye el diseño en un lenguaje sino la politica de uso.
-
-
Invitado
PermalinkQuien diga que Java o C++ estan muertos es porque no se ha molestado tan siquiera un poco en preguntar que usan las empresas de tecnologia que dan servicios a cientos y miles de usuarios.
-
Invitado
PermalinkUna cosa es los lenguajes que van apareciendo nuevos y otra cosa es las aplicaciones que ya estan hechas en esos lenguajes, es importante hechar un ojo a eso.
Por lo que veo de todo esto daré mi opinion ya que soy programador desde 1980 aprox.
En ese tiempo El Assembler, ensamblador, codigo de maquina(en su forma hexadecimal o binaria),etc, que es lo mismo, era el lenguaje madre con el que se hacian todas las aplicaciones profesionales y comerciales, tambien los juegos que alcanzaban bastantes ventas en paises desarrollados.
Resulta que cuando comenzaron a desaparecer estas máquinas consolas del mercado como atari, sinclair, commodore, etc, y a ser reemplazadas por los PC y Macintosh,para los usuarios sin considerar lo que ocurría con los grandes compuatdores empresariales como, Main Frames y computadores que solo tenian acesso a ellos pocas personas del mundo informatico. Aparecieron nuevos lenguajes potentes y llamados de alto nivel como Fortran(padres de todos los que siguen)Pascal, C, C++,etc que eran lenguajes orientados a para crear todo tipo de aplicaciones y aparecieron otros como Clipper, Cobol etc orientados a aplicaciones enterprise (especiales para bases de datos), Java aparecio posterior a C++ y fue creado con una cierta finalidad y por carecer C++ de aptitudes para esa finalidad la cual era controlar dispositivos ( ver mas en http://www.cad.com.mx/historia_del_lenguaje_java.htm) y se podria decir que es una variacion de C++, full orientada a lo tan de moda POO, a ese mismo carro se sube Visual Basic y los actuales lenguajes que ha sacado la plataforma :NET de microsoft que compiten en esta actual programacion POO(orientada al objeto). Como POO es la nueva forma para programar a raiz de su velocidad de desarrollo y otras cualidades de la POO que tiene en el este tipo de programacion sobre la programcion estructurada en el mundo laboral del rubro. Se puede decir que lleva la delantera y vanguardia esta tecnología.
Mi conclusion para esto esque ese papel se lo debaten java y .NET Y seguiran compitiendo por muchos años mas desarrollando desenfrenadamente para uno lograr aniquilar al otro,como van las cosas no creo que la POO desasparezca en muchos años. El potencial de Microsoft es muy grande y hasta ahora se ve que no puede ser vencido.
EL C y su hijo C++ inclusive el pascal pueden perdurar en la eternidad como lenguajes para el desarrollo de software mas de tipo tecnológico, multiproposito , yo creo qu ese tipo de software la mayoria esta hecho en Pascal, C y C++, windows y linux por ejemplo estan hechos en C, c++ -
Invitado
PermalinkUna cosa son los lenguajes que van apareciendo nuevos y otra cosa es las aplicaciones que ya estan hechas en esos lenguajes, es importante hechar un ojo a eso.
Por lo que veo de todo esto daré mi opinion ya que soy programador desde 1980 aprox.
En ese tiempo El Assembler, ensamblador, codigo de maquina(en su forma hexadecimal o binaria),etc, que es lo mismo, era el lenguaje madre con el que se hacian todas las aplicaciones profesionales y comerciales, tambien los juegos que alcanzaban bastantes ventas en paises desarrollados.
Resulta que cuando comenzaron a desaparecer estas máquinas consolas del mercado como atari, sinclair, commodore, etc, y a ser reemplazadas por los PC y Macintosh,para los usuarios sin considerar lo que ocurría con los grandes computadores empresariales como Main Frames y otros por el estilo que solo tenian acesso a ellos pocas personas del mundo informatico, aparecieron en adaptados para los nuevos PC, nuevos lenguajes potentes y llamados de alto nivel como Fortran(padres de todos los que siguen)Pascal, C, C++,etc que eran lenguajes orientados para crear todo tipo de aplicaciones y aparecieron otros como Clipper, Cobol etc, orientados a aplicaciones enterprise (especiales para bases de datos), Java aparecio posterior a C++ y fue creado con una cierta finalidad y por carecer C++ de aptitudes para esa finalidad la cual era controlar dispositivos ( ver mas en http://www.cad.com.mx/historia_del_lenguaje_java.h tm) y se podria decir que es una variacion de C++, full orientada a lo tan de moda POO, a ese mismo carro se sube Visual Basic y los actuales lenguajes que ha sacado la plataforma .NET de microsoft que compiten en esta actual programacion POO(orientada al objeto). Como POO es la nueva forma para programar a raiz de su velocidad de desarrollo y otras cualidades que tiene. Es por eso qe se considera importante sobre la programcion estructurada en el mundo laboral del rubro. Se puede decir que lleva la delantera y vanguardia esta tecnología.
Mi conclusion para esto esque este papel de crear el lenguaje o plataforma avanzado para la POO se lo debaten java y .NET Y seguiran compitiendo por muchos años mas desarrollando desenfrenadamente para uno lograr aniquilar al otro,como van las cosas no creo que la POO desasparezca en muchos años. El potencial de Microsoft es muy grande y hasta ahora se ve que no puede ser vencido ante Java.
El C y su hijo C++ inclusive el pascal pueden perdurar por a traves del tiempo como lenguajes para el desarrollo de software de tipo tecnológico, multiproposito , yo creo qu ese tipo de software la mayoria esta hecho en Pascal, C y C++, windows y linux por ejemplo estan hechos en C y C++ inclusive con assembler entremedio. -
-
Invitado
PermalinkAnda que te has lucido.. Busca ofertas de trabajo de programación y mira cuál es el lenguaje más demandado. Vaya tela.. me parece increible que alguien diga insinue que Java y C++ están muertos.
-
Invitado
PermalinkHola atodos yo soy un programador de C/C++ y tambien programo en aplicaciones de red usando java, sepan que Nvidia esta desarrollando Cuda, una plataforma de programacion paralela y adivinen que lenguaje se usa para programar la GPU ?? pues C/C++, Ahora estoy hablando de lo ultimo en programacion que incluso esta recien evolucionado, ademas los proyectos en las universidades se programan en lenguaje C/C++ y les guste o no aquel que no sabe programas en C/C++ no deberia llamarse programador!!!
-
Invitado
PermalinkCreo que hablar de un legado; es decir que estos lenguajes ya van de salida o estan fuera de uso lo cual lo cual pues….creo que no. Comparar C++ y java con .net Java ha demostrado ser más eficaz y rapido en cuando a velocidad de procesamiento en aplicaciones de escritorio o WEB (aclarando .net tambien tiene sus cosas buenas como tiempo de desarrollo). En cuanto a C++ pues como ya lo han mencionado es más poderozo trabajando a más bajo nivel como en comunicación con puertos, programación de sistemas operativos, librerias entre otras bondades.
En cuanto a la oferta laboral seria bueno ver que en la actualidad tanto C++ o Java poseen una gran demanda C++ un poco menos (en lo que yo he visto)sin embargo mejor remunerado.
Actualmente existen varios lenguajes de programación y un abanico de entornos de desarrollo y según nuestro perfil o necesidades tomamos el que más nos convenga pero no por eso quiere decir que el resto lo debamos tomar como un obsoleto… Saludos
-
Invitado
PermalinkJava y C++ son dos lenguajes que pertenecen al paradigma de Orientacion a Objetos, mi punto de vista es que ambos lenguajes cubren a su manera el paradigma, yo he utilizado ambos y para su proposito son buenos, creo yo que todo tiende a evolucionar pero c++ y java ofrecen muchas posibilidades para los que los utilizamos, y para utilizar otros lenguajes como alternativa, estos deben no solo ser agiles, sensillos y poderosos, deben demostrar lo que hasta hoy han demostrado java y c++, por algo siguen siendo utilizados, mientras tanto para mi, los nuevos lenguajes son otra opcion que como muchas otras podemos utilizar y corren el riesgo de ser una moda o un lenguaje mas en la lista de los muchos que existen y nadie recuerda.
-
Acabo de encontrarme con esto 1 año despues, y veo que c++ sigue usando para juegos, sistemas operativos etc, soy programador y creo que este post no tiene pies ni cabeza, y menos todavia leyendo a un compañero por aqui arriba que dice que el php y algunos lenguajes de alto nivel ya estan superando las espectativas de java y c, decirle que php es un lenguaje sacado del c/c++ asi que por favor, si eres bloguer no te hagas llamar programador, que es lo mismo un guardia de segruridad llamarse militar o policia, estudia un poco y deja de decir tantas sandeces. Un saludo
-
aporellos
Permalinknada campeón, con todos mis respetos para los compañeros que curren con python, perl, php y otros lenguajes, pasamos de C/C++ y Java y nos curramos un kernel, por ejemplo en PHP, o un middleware. Cada lenguaje tiene su nicho donde debería ser utilizado preferentemente sobre otros. No se puede conseguir una aplicación Web de la calidad de PHP/LAMP con C/C++ (o sería un sufrimiento... y una eternidad), pero de ahí a que esten casi muertos C/C++ o Java... ¿Has oido hablar del real-Time, Videojuegos, comunicaciones, protocolos de red ... y cosillas similares? Pues nada, nos dejamos de tonterias, estudiamos un poco, yo el primero porque nunca se sabe de todo (en cantidad y calidad) y luego, escribimos comentarios...
-
aporellos
PermalinkOye, una preguntilla, los interpretes de perl, python y otros lenguajes y maquinas virtuales,¿En que lenguaje están programados?
Comentarios (31)