2009-05-14 59 views
34

? Todos me han estado diciendo que aprenda C++. Sin atacar los idiomas a la derecha y a la izquierda, ¿alguien puede indicar algunas razones relevantes sobre por qué debería aprender C++ hoy?¿Por qué debería aprender C++

Tenga en cuenta que de ninguna manera estoy diciendo nada duro sobre C++. Solo quiero saber por qué debería dominarlo como programador en lugar de los otros lenguajes poderosos que existen.

+45

Me parece que estás atascado con un verdadero dilema aquí. Por un lado, puedes aprender C++. Por otro lado, podrías aprender todos los otros lenguajes poderosos que existen. Si hubiera alguna forma de que pudieras hacer ambas cosas. –

+20

Hazlo! ¡Aprende C++! ¡Todos los chicos geniales lo están haciendo! –

+3

La presión de los compañeros lingüísticos es quizás la presión de grupo menos interesante de todos ellos ... :-) –

Respuesta

64

¿Debo aprender a bucear o chino?

Depende. ¿Que necesitas? ¿Trabajas en una empresa que usa C++? ¿Trabajas en una industria donde prevalece C++? ¿Piensas trabajar en ese lugar? ¿Eres un programador? ¿Quieres hacer programación?

La gran mayoría de las personas en este planeta no aprenden C++, y logran vivir bastante bien a pesar de ello. La mayoría de las personas no aprenden ningún lenguaje de programación. Ellos no lo necesitan.

¿Lo necesita? Si es así, apréndalo. ¿Quieres aprenderlo? Si es así, apréndalo.

Si va a hacer alguna programación en C++, aprender C++ será una muy buena idea. Si no, otros idiomas pueden ser más relevantes.

Pero no es una cosa o la otra. Aprender nuevos idiomas es siempre algo bueno y siempre lo convierten en un mejor programador. Si tiene la opción, siempre debe aprender nuevos idiomas. Entonces, idealmente, sí, debes aprender C++, y Ruby, C, D, F #, Haskell, Io, Lisp y cualquier otro idioma que hayas escuchado.

En la práctica, es probable que no tenga tiempo para todas ellas. Así que elige los que te parezcan útiles e interesantes primero.

+17

@jalf: Tenga en cuenta que realmente no preguntó * si * él debería aprender el idioma o no, sino más bien por razones * por qué * uno quizás debería aprenderlo. Aunque estoy totalmente de acuerdo con lo que escribe, no creo que realmente responda la pregunta. – Reunanen

+3

Bueno, en ese caso la respuesta es "porque entonces podrás codificar en C++". ;) – jalf

+1

¡Bastante justo! :) – Reunanen

2

Muchos de los lenguajes más nuevos como Java y C# tienen raíces en C++. Al aprender C++ obtendrá experiencia práctica con muchos conceptos que se abstraen en los idiomas más nuevos. Le hará apreciar los idiomas más nuevos mucho más. Las cosas como la gestión de la memoria son muy triviales en Java/C#, pero se requiere mucha reflexión y paciencia para implementarlas correctamente en C++.

+1

Discutiría respetuosamente si aprender C++ lo ayudará de alguna manera a ser un mejor desarrollador de C#. Vengo de un fondo de C++/VB antes del lanzamiento de .Net y encuentro que C# es lo suficientemente diferente en su filosofía como para hacer innecesario el conocimiento previo de C++. Eso no quiere decir que no ayude, lo hace. Pero entrar directamente en C# sin experiencia previa en C++ no lo impedirá en absoluto. – Eric

+0

No dije que te haría un mejor desarrollador de C#. Todo lo que estaba diciendo es que después de trabajar duro en C++ y tener que hacer cosas como la gestión de la memoria, verá cuánto han llegado los idiomas. Acepto que tener experiencia en C++ no lo hará un mejor desarrollador de C#. De hecho, creo que es mejor aprender los fundamentos de la programación, ya que puedes aplicarlos a cualquier idioma. –

+1

Quizás malentendí tu declaración. ¡Mi error! ;) – Eric

6

Por una razón, tiene un uso extremadamente amplio en el mundo de la programación. Por otro lado, es el antecesor intelectual de otros dos idiomas principales, Java y C#. Como tal, C++ y las técnicas derivadas directamente de C++ están en uso en una gran proporción de proyectos profesionales en el mundo de la Ingeniería de Software (no tengo nubmers exactos, pero diría que más del 50%).

+0

Muy poco en Java y C# se deriva de C++, aparte de un poco de sintaxis. En su mayoría, esos idiomas están inspirados por lo que con mayor precisión se llama C con clases. Ambos lenguajes se basan en lo que C++ tenía a mediados de los 90. El C++ de hoy no tiene casi nada en común con eso. – jalf

+0

@jalf: ¿estás seguro de que no estás combinando "sintaxis de lenguaje" con "uso típico"? –

+0

Bastante seguro, sí. C# y Java han heredado un poco de sintaxis de C++, y nada más. Ciertamente no han heredado el "uso típico". – jalf

16

Esto tiene que ser un duplicado de algo ...

Usted debe aprender C++ porque se usa muy comúnmente, es eficiente, que es la base de muchos otros idiomas de uso común, y porque la mitad lo sabe C++ es peligroso.

+3

Creo que incluso más de medio conocimiento puede ser peligroso como el infierno, ya que me parece que hay un montón de códigos terribles escritos por personas que se consideran "expertos" o "casi expertos" en C++ ... –

+2

No es "muy comúnmente utilizado". Se usa comúnmente en algunos campos, y apenas en otros. Muchos programadores nunca necesitan siquiera mirar el código C++. – jalf

+6

@jalf: hablando en términos de popularidad relativa de uso, C++ es un lenguaje "muy utilizado", junto con C, Java y C#. # 3 en TIOBE este mes. –

2

Depende de lo que estás por planeando hacer con él.

Los idiomas son herramientas en una caja de herramientas. Elija el correcto para el trabajo.

  • de desarrollo de Windows: C#
  • UNIX desarrollo: C++ o Java
  • desarrollo OS X: Objective C o REAL básico

Al final es una cuestión de criterio. Estoy seguro de que alguien disputará la lista anterior. Es una opinión, no un evangelio.

:)

+0

C++ sigue siendo válida para el desarrollo de Windows dependiendo de lo que esté haciendo. –

+0

Si bien eso es cierto, creo que la mayor parte del desarrollo de Windows no necesitaría usar C++. C# tiene un ciclo de desarrollo mucho más corto y es mucho más fácil de mantener, por lo que el desarrollo corporativo (la comunidad más grande de desarrolladores de Windows) usa C# como la principal herramienta de elección. – Eric

+0

@Eric No creo que haya muchos programas/juegos de Windows "en caja" (comprados en una tienda grande) que estén escritos en C#. Aparte de partes de Visual Studio, ¿qué ejemplos puedes dar? – xanatos

12

Learn C first. Luego aprende C++ para apreciar el poder. Luego aprende un lenguaje de nivel superior. Puede que quiera aprender una cantidad muy pequeña de ensamblador antes de comenzar con C. Sí, esto parece mucho trabajo, pero ... bueno, es mucho trabajo. Afortunadamente, es un trabajo agradable. :) El punto es no convertirse en un experto en ensamblaje, C y C++. El punto es entender cómo los lindos y brillantes lenguajes hacen las cosas internamente, lo que definitivamente te hará un mejor desarrollador.

Véase también https://stackoverflow.com/questions/296/should-i-learn-c

+13

No hay ninguna ventaja para aprender C primero. C++ hecho correctamente es un lenguaje tan diferente que la mayoría de C es irrelevante. Aunque muchas personas todavía escriben C con clases (esto es distinto de C++) –

+2

"C++ hecho correctamente es un lenguaje tan diferente" ¡ahí radica la ventaja! Son idiomas diferentes con diferentes niveles de abstracción. Ese es mi punto. No recomendé aprender C primero para darle una "ventaja" en el aprendizaje de C++. – dss539

+3

Creo que debes aprender lenguajes de programación de nivel superior antes de aprender más de nivel inferior, como C. Primero, deberías poder pensar de forma abstracta sobre tus programas, verlos como entidades matemáticas, luego puedes jugar con el puntero aritmética o registros. – Artefacto

2

Creo que debe definir "aprenderlo". ¿Eso significa un tutorial y listo? ¿Significa construir una aplicación (qué tipo?)? Esas mismas personas que le dicen que debe aprender C++ lo usan en diferentes aplicaciones. El siguiente paso es "Usted debe aprender a hacer este tipo de aplicación ..."

Creo que sólo puede sentir incompleta sin él y están dando en bombo sobre los programadores "reales".

7

Al aprender un lenguaje de bajo nivel como C++, aprenderá los conceptos básicos, tales como:

  • Gestión de memoria
  • Punteros
  • Experiencia codificación sin "rico" incorporado en las bibliotecas (en comparación con : Java API, .NET Framework)

Una vez que tenga una sólida experiencia con un lenguaje de nivel inferior, tendrá una mejor comprensión de cómo las plataformas de nivel superior funcionan "bajo el capó". A largo plazo, esto te ayudará a ser un mejor desarrollador en Ruby, Python, Java, etc.

+1

"C++ también está orientado a objetos" tenga cuidado al decirle eso a un programador neófito. Eso a menudo los lleva a pensar "hice una clase, ¡así que mi diseño es OO!" – dss539

+1

Lo cual también ocurre en Java, aunque piensan que "Este programa fue escrito en Java, ¡entonces es OO!". Sin embargo, C++ es particularmente peligroso para un neófito sabelotodo con exceso de confianza. –

+7

C++ es OO en el sentido de "OO, se estrelló de nuevo!" –

25

Creo que hay varias razones para familiarizarte con C++, aunque tengas planeado usar lenguajes de nivel superior como su herramienta de elección. Éstos son algunos:

  • Es como aprender latín para entender mejor el inglés. Se modelaron muchos lenguajes sobre la sintaxis y los constructos, por ejemplo C#, Java, JavaScript, etc. Elegir C++ o al menos C le dará una ventaja al enseñarle el común denominador entre todos esos idiomas.

  • Entender las cosas que se abstraen de usted en otros idiomas (punteros, estructuras de datos básicos, recolección de basura) teóricamente lo convierte en un mejor programador, incluso si no se juega directamente en los detalles.

  • No sucede todos los días, pero un día tendrá que conectarse directamente a una API de programa C++ desde su lenguaje de alto nivel. Te ayudará si tienes al menos un conocimiento aceptable de C++ cuando esto sucede.

  • C++ en su hoja de vida a menudo puede llevar a Salario ++. Simplemente se respeta como un lenguaje más hardcore.

  • A menudo veo C++ usado como un lenguaje común entre los programadores que trabajan en diferentes idiomas, y en la programación de libros que intentan ser independientes del idioma (Código Completo). Conocer C++ abre el acceso a mucho más material de aprendizaje.

cierto: me escribió una rápida blog article en respuesta a esta pregunta que entra en un poco más de detalle.

+3

+1 para "Es como aprender latín para entender mejor el inglés", aunque el estado de C++ hoy en día es bastante diferente al del latín :) –

+0

Concedido. Estaba un poco preocupado de que alguien llevara esa analagy demasiado lejos y supusiera que estaba llamando a C++ un idioma muerto, que no lo es. Es un lenguaje que MURO. J/K !! – JohnFx

+0

Estoy de acuerdo contigo. Hay momentos, por ejemplo, que quiero ver cómo funcionan las cosas detrás de escena. Por ejemplo, estaba comprobando cómo funciona Node.js y hay miles de explicaciones abstractas que no muestran ningún código en absoluto y si usted es como quién necesita ver algún código para satisfacerse por completo, debe ver las profundidades. Y aquí es donde necesitas saber C++. – Tarik

19

Algunas otras razones aquí:

  • Casi todos los libros de la ciencia y la tecnología tienen sus muestras de código escrito en C/C++.
  • Los compiladores C/C++ son conocidos por producir códigos de máquina más eficientes que cualquier otro compilador (con fortran siendo quizás la excepción).
  • Hay miles de millones de líneas de código ya escritas en C++. ¡Sus posibilidades de reutilización de código son enormes!
  • Muchos libros, foros, contenido en línea sobre el idioma.
  • Estándar ISO bien definido que es actualizado por un grupo de expertos de vez en cuando. (No es un lenguaje "congelado").
  • Compatible con la mayoría de las plataformas, desde microcontroladores (en realidad, lenguaje C) hasta teléfonos celulares.
  • Prácticamente todos los sistemas operativos están codificados en
+4

"Casi todos los libros de ciencia y tecnología tienen sus muestras de código escritas en C/C++". - No es cierto en mi experiencia. Citaciones para eso, por favor. Los libros de ingeniería mecánica (ciertamente antiguos) que tengo usan Fortran. Yo diría que Python también sería un lenguaje informático científico de uso común. – duffymo

+4

Casi nunca he visto un libro de texto de ciencia-tecnología que muestre el código de Python (desafortunadamente). Sí, fortran fue muy popular en los años 70, pero ya no. Hay muchas áreas en las que reina C++ casi por completo (redes, telecomunicaciones, diseño de sistema operativo). – Sergio

+0

@duffymo, bueno, eso es correcto, pero solo para cosas "científicas";) –

22

Voy a tomar una posición contraria C s. No aprenda C++, es una pérdida de tiempo. A menos que tenga una necesidad inmediata y apremiante, su tiempo lo pasaría mejor en otro lugar. Mejores opciones de idioma para planes de carrera de largo alcance pueden incluir hindi, urdu, chino o ruso.

Lo triste es que hay más en el mundo para aprender de lo que puede aprender y, tarde o temprano, tendrá que elegir sus áreas de ignorancia. En este punto C++ se puede ignorar de manera segura (nuevamente, dependiendo de las necesidades inmediatas). En lugar de construir tu conjunto de herramientas, ¿por qué no construir algo con él? Esa es una educación en sí misma.

+3

+1, "No aprendes C++, es una pérdida de tiempo". + "Mejores opciones de idioma para planes de carrera de largo alcance pueden incluir hindi, urdu, chino o ruso". –

+2

1 ++ para comparar C++ e Hindi. ¡Hurra! –

+7

+1 por "En lugar de construir su conjunto de herramientas, ¿por qué no construir algo con él?" –

4

La razón por la que la mayoría de la gente dice C++ es porque eso es lo que generalmente ha sido el más común en las universidades. El mejor consejo que puedo dar es no aprender un idioma, sino aprender varios idiomas a la vez. Si estás haciendo cosas realmente para principiantes, C++ está bien, pero esencialmente no es muy diferente conceptualmente de otros idiomas que existen. De ninguna manera soy un "programador maestro", pero creo que un maestro no se encasillaría limitando su conocimiento a un idioma.

+0

palomas son para palomas – dss539

+2

Creo que C++ es muy diferente de la mayoría de los otros idiomas. STL es único. –

+0

Creo que Java es mucho más común en las universidades. Y sí, C++ difiere conceptualmente de la mayoría de los lenguajes. ¿Dónde está el paradigma de programación genérica en C, C# o Java? Dicho eso, estoy de acuerdo con tu punto. Si ya conoce uno de estos idiomas, ir a uno funcional a continuación probablemente sea más esclarecedor. – jalf

8

Debe aprenderlo si le interesa la informática de alto rendimiento en tiempo real. C++ es mucho más expresivo que C, y aún más efectivo que todos los demás lenguajes. Es el lenguaje correcto si desea maximizar el uso de los recursos disponibles.

Dada la tarea, también creo que es mucho más divertido que, p. Ej. Java u Objective-C :) Se necesita mucho para ser bueno en eso, pero la recompensa es excelente. Es un lenguaje expresivo, y el programador tiene un gran control sobre lo que sucede.

ACTUALIZACIÓN: Otra razón por la cual C++ es excelente, es realmente multiplataforma. Se usa en casi todos lados: PC, Mac, Xbox 360, PS3, teléfonos celulares, integrados ... lo que sea.Entonces puede usar sus habilidades en casi cualquier plataforma que desee. A diferencia de muchos otros idiomas, que a menudo solo son útiles para una plataforma.

2

Otra razón para aprenderlo es entender por qué tanta gente lo ama o lo odia. En lugar de dar su palabra, apréndanlo ustedes mismos para comprender mejor los valores y problemas que tienen estas personas con el lenguaje. Ciertamente tiene sus admiradores y detractores.

Personalmente, habiéndolo usado, tiene algunos aspectos realmente agradables para el trabajo que hago, pero habiéndolo dejado atrás, no lo extraño.

2

Yo diría aprender C++ porque "es una C mejor". C es el lenguaje de programación de sistemas, por lo que si planea hacerlo, querrá saber C/C++.

El brillante "Teach Yourself Programming In Ten Years" de Peter Norvig es pertinente independientemente de la forma en que decida ir.

Pensándolo bien, tal vez la mejor razón para aprender es persuadir a esas personas para que dejen de decirte lo que tienes que hacer. 8)

3

Depende de cómo defina "aprender un idioma".

sintaxis de aprendizaje C++ es una cuestión básica de escribir un puñado de aplicaciones prácticas y la lectura de blogs y foros (y sin duda desbordamiento de pila (:.)

Luego se llega a aprender otras estructuras como punteros, clases ... escribirlas es un paso adelante desde la sintaxis básica.

Luego vienen las estructuras de datos y creo que es ahí donde entra el hardcore de C++: la implementación en código es generalmente similar a cómo se escribiría un algoritmo en pseudocódigo común Lo que ocurre es que USTED generalmente tendrá que implementarlos, por lo que es imprescindible que conozca casi todos los detalles de una estructura de datos abstracta, al contrario de cómo funcionan las cosas en langu edades con las estructuras como hashtables, listas de enlaces, etc. integradas.

Ser competente en un lenguaje de alto nivel puede convertirte en un programador, pero "conocer" C++ en ese aspecto te hará consciente de lo que has estado haciendo en todos los programas que has estado codificando Puede haber personas que expongan el argumento "si quieres saber lo que estás haciendo, aprende ensamblar" - No sé ensamblar (aún), así que no podré responder, pero aún así decir que C++ es algo más "aprendible".

y luego hay diferentes bibliotecas, cada uno con sus ventajas y desventajas, todos los que se desarrollan constantemente más ... por lo que "el aprendizaje de C++" no es realmente un proceso que puede llegar nunca al final de :)

+1

+1 Haces algunos puntos excelentes. – dss539

1

Debido eso aumentaría tu calidad como programador (en caso de que eso te moleste).

Otra cosa para mencionar: los idiomas más recientes son más abstractos. Los idiomas antiguos se acercan más a los usos de CPU de lenguaje (para mí, C++ parece una historia (sin ofender a nadie)).

Por ejemplo, comencé a codificar en ASP.NET. Aprender sobre HTTP y HTML me dio una idea de lo que ASP.NET hace detrás de escena, por lo tanto, puedo controlarlo mejor.

Conclusión: debe comprender la abstracción de todo lo que está hecho.
Y no te olvides que C++ es abstracción, construida a partir de algo más también.

5

Para cualquier desarrollador de software razonablemente experimentado, aprender un nuevo lenguaje orientado a objetos de tipo estáticamente estático debería ser pan comido.La principal dificultad para aprender un nuevo idioma es aprender la API principal del entorno de programación en el que se encuentra. Para C++ es realmente fácil, el STL es bastante pequeño, y hasta donde yo sé, C++ realmente no involucra a ningún otro bibliotecas estándar

Algunas de las razones más importantes para aprender C++ son:

  • Comprender el uso de la gestión de memoria y el puntero.
  • Inventando su propia jerarquía de clases en lugar de confiar en las bibliotecas preempaquetadas de su proveedor de idiomas.
  • Aprendiendo a usar plantillas y principios de programación genéricos.

Creo que el último es particularmente importante. Ningún otro lenguaje (al menos los idiomas que he usado) tiene una programación genérica bastante parecida a C++. Alexandrescu es definitivamente un libro que vale la pena recoger si realmente quiere entender el poder de C++.

0

No debería preocuparse por C++. Pruebe algo más nuevo como C#, ruby, python y lo mejor, cuidado con el patrón de diseño y la metodología de trabajo. ¡Eso te lleva al cielo!

+1

estoy de acuerdo con usted totalmente, después de todo escribir una parte similar del código en python puede ser más elegante que en C++ (imho). – ERJAN

3

Diría que el beneficio principal es aprender administración de memoria y punteros. Tenga en cuenta que hay muchas ventajas de saber cómo se maneja la memoria, sin importar el idioma (incluso los idiomas equipados con GC). Simplemente no obtienes esa experiencia con la mayoría de los otros idiomas principales.

2

Si tiene una intención seria de convertirse en un desarrollador profesional de alta calidad, en lugar de simplemente ser un aficionado, desarrollador web o junior, entonces le sugiero aprender C++.

Una analogía: si construyes una casa sin cimientos buenos y fuertes, puede durar un año, o dos años, pero en algún momento se caerá. Sin embargo, si construyes una casa con cimientos decentes, aunque nunca vuelvas a mirar esos cimientos en tu vida, puedes garantizar que tu casa sea estructuralmente sólida y puedas dedicarte a tu negocio sin preocuparte de que se derrumbe a tu alrededor. Los desarrolladores que comienzan con un lenguaje de alto nivel como C# o Java están construyendo su casa sin fundamentos.

+0

opinión totalmente subjetiva, un programador puede escribir/codificar tan bien en java/C# como en C++. tu publicación da una vaga impresión de que java o C# son idiomas débiles. – ERJAN

+0

Ser un desarrollador web no es equivalente a ser un desarrollador junior o aficionado. –

4

Opinión: No necesita saber C++ para ser un programador.

Sin embargo, si no comprende los conceptos básicos y las consideraciones de diseño de C++, no debería estar programando.

Ejemplos son punteros, cómo se vinculan las abstracciones de alto nivel y bajo nivel, gestión de memoria, pila, temporales, etc. Sin estos, no será capaz de entender lo que realmente sucede bajo el capó en un programa complejo, independientemente del idioma .

Del mismo modo, no es necesario que conozca la trigonometría para hacer el diseño de la base de datos. Pero nunca encontrarás un buen diseñador de bases de datos que no pueda probar cos(b-a)=cosb*cosa-sinb*sina en 10 minutos. Asegúrese de que Dennis Ritchie conocía el cálculo complejo cuando diseñó C, y cada buen optometrista sabe qué es la polarización de la luz, incluso si no la usa exactamente.

0

Una razón para aprender a programar en C++ puede ser evitar la proliferación de modificaciones, extensiones e introducción de nuevas ideas tecnológicas conectadas a otros lenguajes propietarios como C# y Java.

¿Cuántas tecnologías de GUI ha visto con java y C# en los últimos 12 años? Numeroso.

¿Cuántos conceptos nuevos ha visto con ellos en los últimos 12 años? Numeroso.

¿Nadie puede vivir su vida sin .NET o Java? Absolutamente.

Cuestiones relacionadas