2009-04-19 12 views
17

He intentado mantenerme al día con C++ desde que introdujeron 1998 ANSI/ISO C++. Absorbí los nuevos conceptos e intenté entenderlos. Aprendí sobre manejo de excepciones, plantillas y espacios de nombres. He leído sobre los nuevos mecanismos de transmisión y trabajé con la biblioteca de STL.¿Debo rechazar C++ porque se está convirtiendo en un monstruo?

Todos estos conceptos requieren mucha energía. Pero ahora estoy algo preocupado por el futuro de C++ al echar un vistazo al nuevo estándar C++0x.

Las cosas se vuelven cada vez más complicadas. Este lenguaje se está convirtiendo en un monstruo.

No estoy seguro de querer continuar con el idioma, ya que de todos modos no hago mi hacking cotidiano en C++. Uso sobre todo idiomas interpretados o de código de bytes.

¿Por qué debería molestarme en aprender este lenguaje difícil pero excepcionalmente poderoso? Puedo hacer el 95% de mi negocio con Python et al. Con el 5% restante, puedo lidiar con C++ o C antiguos sin problemas.

¿Qué opinas?

+3

¿Por qué declinar? No es que no tenga amor con este idioma. No quiero ser grosero o descarado sobre C++. Creo que sobrevivirá a la mayoría de los otros idiomas. Estoy interesado en su posición con respecto a este tema. ¿No tienes ninguno? – prinzdezibel

+0

esto es subjetivo y argumentativo, yo diría. No creo que valga la pena votar, pero aun así el rango de respuestas podría ser "oh sí C++ - porquería" a "no, C++ está bien, estás lleno de mierda". –

+1

"Este lenguaje se está convirtiendo en un monstruo". No es ya? C++ siempre tendrá un lugar especial en mi corazón, pero no echo de menos trabajar con él un poco. Sin embargo, creo que será en el futuro previsible. –

Respuesta

20

oír lo que Bruce Eckel {autor de los dos de la llamada mejor C++ books} Hace unas semanas commented on C++:

Dicho esto, yo casi nunca utilizo C++ más. Cuando lo haga, o es examinar el código heredado, o para escribir secciones de rendimiento crítico, normalmente lo más pequeño posible para ser llamado desde otro código (mi enfoque preferido es escribir rápidamente una aplicación en Python, a continuación, el perfil y si es necesario mejorar el rendimiento por llamando a porciones pequeñas de C++ utilizando biblioteca de tipos de Python).

Como estaba en el Comité de Normas C++ , vi que estas decisiones eran hechas. Todos fueron extremadamente cuidadosamente considerados, mucho más que muchas de las decisiones tomadas en Java.

Sin embargo, como la gente ha señalado con razón , el lenguaje resultante era complicado y doloroso para su uso y llena de extrañas reglas que olvido tan pronto como estoy lejos de ella por un poco mientras - y calculé esas reglas desde los primeros principios mientras escribía libros, no solo memorizándolos.

Además, debe leer this thread y Danny Kalev's predictions on C++.

Sin embargo, la creciente complejidad de C++ creará presión para dividir el idioma en dialectos cuasi oficiales. Ya podemos ver esta tendencia hoy; probablemente se intensificará en el futuro.

EDITAR:

Usted debe echar un vistazo a esta discusión, también:

C++ - Anyone else feel like C++ is getting too complicated?

+0

Enlace de discusión agradable. Gracias. – prinzdezibel

+1

+1. "Reglas extrañas que olvidé en cuanto me alejé de él por un tiempo" lo resume todo para mí. :/ –

+5

No llamaría a Thinking in C++ uno de los mejores libros sobre C++. Además, sería una buena idea leer todo el artículo de Artima. Está condenando a Java y C++ por elogios tenues haciéndolos parecer que son lenguajes heredados; no es una gran sorpresa teniendo en cuenta lo entusiasta que Bruce Eckel habla de los lenguajes dinámicos como Python. – rpg

1

No es necesario que conozca todos los estándares que surgen de memoria. Sin embargo, ayuda conocer el panorama general. El 5% que usted codifica puede hacer que reinvente la rueda ocasional. Dependiendo de cuánto tiempo, importancia tiene el 5% (piense en Pareto), necesita tomar una llamada.

Además, ¿algún motivo en particular (como la dependencia del código heredado) por qué no puede mover ese 5% a python?

+1

Veces cuando no puedo usar Python: cuando trato con código heredado o cuando el rendimiento es muy importante. – prinzdezibel

8

No está obligado a utilizar cada característica que proporciona un idioma. No uso setjmp/longjmp en C a pesar de estar ahí. Tampoco uso todos los aspectos de las colecciones de Java.

Si cree que las nuevas funciones harán que su entrega de código sea mejor (más rápida o de mayor calidad o ambas cosas), utilícelas. De lo contrario, ignóralos.

Es útil saber en un nivel alto lo que son, aunque solo sea para obtener entrevistas de trabajo, pero la mitad de las cosas que agregan a los idiomas son innecesarias en mi opinión.

Nunca llegué a usar plantillas C++ antes de cambiar a Java, pero sabía para qué servían.

No siempre se trata de aprender lo último y lo mejor. El software (al menos en su trabajo) se trata de la entrega del producto. Eso se puede hacer en COBOL o FORTRAN si eres lo suficientemente competente en eso.

+2

@Pax, esta es solo una solución viable si programa en soledad. Una vez que tiene que heredar el código de los demás, de repente necesita saber las porciones de C++ ~ they ~ know. – mmcdole

+1

Eso es cierto para todo, Simucal: palabras clave, características del lenguaje, llamadas a bibliotecas, incluso algoritmos que no tienen nada que ver con el lenguaje en sí. Como el interlocutor afirmó que no usan mucho C++, el punto en el que sugeriría aprender esas características es cuando heredas el código. Entonces no hay posibilidad de un esfuerzo desperdiciado y la ligera posibilidad de un tiempo de aceleración a medida que aprendes. Pero aún así, aprenda el alto nivel, por ejemplo, conozca las plantillas, incluso si no conoce los detalles íntimos de ellas. – paxdiablo

21

Todos usa un subconjunto de C++. Para casi toda la programación de aplicaciones en C++, ya sea del lado del servidor o del cliente, ese subconjunto es manejable. En mi opinión, las únicas personas que necesitan estar al tanto de absolutamente cualquier matiz del idioma son los escritores de la biblioteca: personas que implementan Boost, STL, Loki, etc.

Pero yo usaría el lenguaje que se ajuste a la tarea. Si Python es más legible y más fácil de mantener que C++ para su trabajo, y usted no necesita lo que C++ ofrece, entonces ciertamente se quedará con Python.

0

Mi sugerencia sería aprender las nuevas palabras clave de C++ 0x (& & FTW) pero no se molestó en tratar de aprender toda la lib. Utilice python para w/e que desee, posiblemente C# para aplicaciones, luego use C++ (0x) cuando necesite hacer algo poderoso.y pregunte a stackoverflow & google sobre el nuevo contenedor al crear prototipos.

Usted no necesita utilizar algunos de selección de idioma,

2

buenas respuestas.

Los fabricantes de computadoras compiten por los compradores, el software compite por su espacio en disco y los idiomas compiten por los usuarios. Lo hacen al tratar de enganchar las características de los demás.

Me pregunto cuánto tiempo antes de que veamos Fortran salir con expresiones lambda :-)

10

Primeros muchas características de C++ 0x, son para hacer el lenguaje más fácil de usar. Errores de compilación de plantillas más legibles, sintaxis de inicialización más consistente, soporte para subprocesos, que de lo contrario tendrían que depender de bibliotecas específicas de la plataforma y demás.

Así que si usa C++, creo que aprender las partes importantes de C++ 0x debería ser una tarea manejable. Recuerde que no necesita aprender todas las funciones nuevas para usar el idioma. Algunas características se agregan principalmente como una ayuda para los implementadores de bibliotecas, por ejemplo, permitiendo que el STL se implemente de manera más eficiente, pero que no debería afectar realmente el uso del lenguaje por parte de los usuarios finales. Y algunos solo son realmente necesarios en casos muy raros. Ignora esas partes del lenguaje.

Uno de sus objetivos declarados con C++ 0x es evitar cada vez más difícil de usar.

Pero aparte de eso, do necesita C++? Si haces tu codificación en otros idiomas, ¿por qué molestarse en seguir con C++?

+0

Fue mi primer idioma, creo que es el más fundamental. No quiero perder mi experiencia en este campo, pero no puedo acuñar en estos días. – prinzdezibel

+1

El hecho de que fuera su primer idioma no significa que tenga que mantenerse al día con los cambios en él para siempre. Si desea mantenerse al tanto del idioma, por supuesto, también deberá aprender la mayoría de las nuevas características de C++ 0x. Pero si no es algo que utilizas a diario, entonces no tiene por qué tener la máxima prioridad. No habrá un compilador compatible con C++ 0x durante algunos años, así que tómalo con calma. – jalf

1

Primero intente asistir a un curso en C++ 0x y haga que su empresa pague por ello :) Nuestros cerebros pueden encajar en cantidades increíbles de conocimiento de basura. En lugar de maldecir y tener momentos de programador, primero debemos aprender de los usuarios del programa y escuchar las opiniones y conocimientos de otras personas. El conocimiento se transfiere mucho más rápido de esa manera.

+0

Curso en C++ 0x? ¿Sabes de alguno? –

+1

Bueno, es de esperar que cuando C++ 10 se implemente por completo en los compiladores, habrá más cursos sobre ese tema. Aunque el público objetivo podría ser tan amplio como en esa primera imagen aquí: http: //importantshock.wordpress.com/2008/08/20/a-skeptics-look/ :) – AareP

5

Nadie, excepto tal vez Bjarne y Herb Sutter, sabe todo de C++. Como dijiste, es un lenguaje increíblemente grande. Esperar poder tomar todo el estándar + los detalles de implementación específicos de su compilador o compiladores específicos es verdaderamente irreal.

Pero usted no necesita saber todo con el fin de utilizar C++. En su lugar, solo aprenda el subconjunto de C++ que es valioso para usted y sus proyectos. No hace daño seguir expandiendo tus conocimientos, pero a menos que estés escribiendo un compilador de C++, no hay razón para saberlo todo. Incluso si lo logra, todas las personas con las que trabaja no lo harán.

+0

En realidad, no hay nadie que realmente conozca "C++". Hay expertos clave (por lo general, proveedores de compiladores: GCC, EDG, Microsoft) y hay expertos en bibliotecas (equipo GCC STL y Dinkumware). Incluso dentro de un equipo compilador, encontrará que el equipo está dividido en expertos en áreas específicas del idioma. –

5

Entonces, ¿por qué me molesto para aprender este difícil, sin embargo, excepcionalmente potente, idioma? Puedo hacer el 95% de mi negocio con python et al. Con el restante, 5%, puedo manejar sin problemas C++ o C sin problemas.

Bueno, la mayor parte de ustedes responden su propia pregunta. No es necesario que te mantengas al día con el límite de C++ en este momento.

Sin embargo, el lenguaje mantendrá marchando. En algunos años, algunos de los conceptos que usted considera una pérdida de tiempo de vanguardia serán de uso común. Algún día puede encontrar durante su 5% de uso de "C++ antiguo" que algún código de ejemplo o código en el que está colaborando usa una construcción con la que no está familiarizado. En ese punto, tendrá que golpear la red y repasar el nuevo C++ "actual".

es que va a ser un problema? Por supuesto no. Eres un programador. Se mantiene al tanto de los últimos conceptos de programación en el contexto de su 95% de lenguaje, que también cambia con el tiempo. Probablemente ya esté bastante familiarizado con los conceptos y solo necesite familiarizarse con su sintaxis C++ cuando llegue el momento en que debe usarlos.

Personalmente espero seguir manteniendo con C++, aunque mi carrera se mueve más hacia Java u otro lenguaje de nueva generación. ¿Por qué? Me gustaría decir porque me interesa más y porque amo la complejidad y la expresividad de todo.Sin embargo, lo más probable es que sea porque era mi primer idioma profesional; Lo considero mi "lengua materna".

Si no te interesa, y no se refiere a su trabajo o trabajo en el futuro, no se molestan. ¿Qué está mal con eso? Nada.

+0

Este es exactamente mi punto. También veo C++ como mi "lengua materna", porque al igual que contigo, es mi primer idioma. No quiero dejarlo, pero el precio también es alto. ¿Es demasiado alto? Todavía no lo he decidido ... – prinzdezibel

+0

Todavía leo, depuro y hackeo C++ a diario, por lo que mi perspectiva no es la mejor para ayudarlo a responder esa pregunta. – veefu

3

estoy en apuros para encontrar un solo caso en C++ 0x se ha hecho más compleja que la de C++ 98. Hay dos cosas que realmente son complejos:

  1. conceptos.
  2. el modelo de memoria

pero ha sido eliminado de nuevo el primero (por suerte, la estandarización de características no implementadas nunca ha trabajado en C++, especificaciones testigo de tiro, plantillas o externa, se auto_ptr, ...), y el segundo no es realmente algo de lo que pueda escapar un lenguaje de programación moderno. Ha sido inducido externamente por Intel & Co rompiendo útilmente sus programas para hacerlos correr más rápido.

el resto es sólo ajustar molestias que todos los programadores de C++ ha sido frecuentemente Golpear en las últimas décadas.

Como nota al margen: me parece ... divertido ... ver cómo los lenguajes como C# se llenan con un lenguaje de consulta de base de datos (LINQ) y C++ se objuró como inflado.

+0

+1 para la nota al margen ... :) –

+0

++ para "objurgated" –

Cuestiones relacionadas