Soy un principiante. ¿Puedo comenzar directamente a aprender C ++ 11? o tengo que aprender viejo C ++? [cerrado]

36

Soy un principiante y tengo poco conocimiento en programación.

¿Sería bueno si aprendo directamente C ++ de libros que cubren nuevos C ++ 11 o debería estudiar a través de los mejores libros antiguos de C ++?

¿Debo tener poco conocimiento sobre C ++ antes de aprender C ++ 11? o puedo comenzar directamente desde allí?

¿Causaría problemas si empiezo directamente desde C ++ 11? Si no, entonces sugiera algunos libros sobre C ++ 11.

Dhananjay
fuente
18
¿Por qué esos puntos negativos? ¿Ya se han respondido estas preguntas? ¿No se les permite a los novatos hacer preguntas? Azadas ¿alguien investiga en este asunto? Creo que una de las mejores formas es preguntar a los que tienen más experiencia. +1, ya que los novatos también merecen ser guiados
adosaiguas
12
@ Simon esto me parece una pregunta conceptual sobre el desarrollo de software: ¿por dónde empiezo? ¿Y cómo sabes que no es un programador profesional? ;)
adosaiguas
44
@MSalters Hablando de libros; C ++ acelerado es un libro increíble, aunque un poco simplificado. Barbara E. Moo es una escritora increíble y su influencia en el libro se nota fácilmente. Pero el libro en cuestión es "viejo". Sin embargo, no se pierde toda esperanza: hay un libro altamente calificado llamado C ++ Primer por Lippman , Lajoie y Barbara E. Moo , la quinta edición se publicó este mes (agosto de 2012) y desde los primeros capítulos que he estado leyendo de mi copia, este es un excelente libro que cubre C ++ 11. La influencia de Moo está presente, nuevamente. Ella es una diosa cuando se trata de escritura técnica.
zxcdw
2
@Simon Programmers — Stack Exchange is a site for professional programmers...En ese caso, ¿te importaría guiarme al sitio para los programadores principiantes? También soy un novato de codificación y voy a tener algunas preguntas básicas ...
Jeyekomon
2
Creo que esta pregunta está claramente fuera de tema debido a las preguntas frecuentes (tal vez no fue en el momento en que se hizo primero). Pregunta "qué idioma (versión) debería elegir a continuación", se trata de consejos educativos y pide recursos fuera de tamaño, tres de los motivos de cierre estándar.
Doc Brown

Respuestas:

38

Hay muchas mejoras de usabilidad que hacen que C ++ 11 sea más comprensible para un principiante, especialmente uno que tiene experiencia en otros lenguajes con esas características. Otros cambios en C ++ 11 solo son de interés para usuarios avanzados, por lo que es probable que se sienta abrumado si elige un libro diseñado principalmente para enseñar las diferencias. Asegúrese de que cualquier libro que obtenga esté diseñado para principiantes completos en C ++.

Dicho esto, es probable que eventualmente tenga que aprender la vieja forma, ya que hay un montón de código existente, e incluso el nuevo código C ++ 11 contendrá la vieja forma de hacer las cosas si el programador así lo elige. Escribo C ++ para ganarme la vida, y mi empresa aún no ha llegado a evaluar compiladores compatibles con C ++ 11, y mucho menos usando uno en producción.

Karl Bielefeldt
fuente
Estoy aprendiendo de c ++ primer 4ta edición. buen libro para empezar?
Dhananjay
1
Obtiene buenas críticas y parece estar en el nivel correcto, pero no he visto libros de C ++ para principiantes en mucho tiempo, por lo que no soy la mejor persona para preguntar. Sin embargo, creo que necesitarás la quinta edición si quieres que C ++ 11 esté cubierto.
Karl Bielefeldt
está bien y ya sé que la 5ta edición cubre c ++ 11.
Dhananjay
10

No necesita usar C ++ anterior para comenzar a usar C ++ 11, hay nuevas características en C ++ 11 pero su uso es opcional. Saber cómo usar las características de C ++ 11 podría ser una ventaja, ciertamente no sería una desventaja cuando se trabaja con bases de código heredadas (anteriores a 11) una vez que se conocen las idiosincrasias de las versiones anteriores.

Aprender C ++ sería un buen lugar para comenzar a aprender y el Apéndice B le enseñará las características de C ++ 11 después de que haya aprendido los conceptos básicos.

Puedo ver por qué algunas personas han sugerido Java / CSharp, etc., como lenguajes alternativos más fáciles, pero aprendí un poco de C ++ antes de pasar a CSharp y no soy peor programador por eso, por el contrario, las habilidades de programación son mucho más profundas que el lenguaje sintaxis / funcionalidad y con una base sólida en C ++ puede aprender cualquier otro lenguaje imperativo de OOP fácilmente.

Joel
fuente
8

Es difícil de decir.

Old C ++ es más un campo minado, y es bueno aprender a navegar como una bestia. También le hará comprender por qué las cosas se hacen como están y cuáles son las implicaciones de las diferentes construcciones.

Por otra parte, el viejo C ++ no es lo que quieres cuando escribes código.

Pero, una vez más, el viejo C ++ es lo que mucha industria seguirá produciendo durante 20 años más.

Me encanta C ++ 11, pero por ahora solo se puede usar en startups. No en bases de código heredadas grandes. Y saltar directamente a C ++ 11 podría dejarlo con habilidades sin desarrollar en partes desagradables de C ++. Lo cual será contraproducente una vez que algunas construcciones avanzadas de C ++ 11 se filtren o se bloqueen porque se usa de una manera sintácticamente correcta, pero lógicamente incorrecta.

Descifrador
fuente
¿Por qué las principales partes de la industria no actualizarían sus compiladores, además del campo de los sistemas integrados de nicho? Riesgo (incluso con pruebas unitarias)? ¿Conservatismo?
TheLQ
1
@TheLQ: Supongo ... Pero cuando pienso en lo que haría si fuera un jefe, es muy probable que haga lo mismo. A menos que haya algunos ahorros de costos notables en comparación con los costos de migración.
Codificador
1
@TheLQ: Se necesitan años para que las bases de código pasen a una versión más nueva del compilador. Es raro que un proyecto adapte una nueva versión del compilador willy nilly. Es más probable que un nuevo proyecto use un nuevo compilador (siempre que no interactúe con el código anterior).
Martin York
1
@Coder: lo que hace que C ++ 11 sea tan diferente de C ++ 03 que aprenderlo no se traducirá directamente a C ++ 03. Hay un par de nuevas características que hacen que las cosas sean más fáciles de escribir, pero nada que te impida pisar esos campos minados.
Martin York
1
@TheLQ: sí, ese es básicamente el proceso, pero olvidó las pruebas de integración (la parte más compleja. No todas las aplicaciones son independientes (de hecho, diría que esta es la minoría)). Debe verificar que todo su código funcione e interactúe correctamente (no solo con su código sino también con el código del cliente). Este es un proceso de meses, si no años de pruebas y validación. Si algunos de sus clientes no se están mudando a C ++ 11, es posible que deba mantener ambas versiones en algunos sistemas (por suerte, gcc es muy bueno con compatibilidad con versiones anteriores, pero no todos los proveedores de compiladores de C ++ lo son).
Martin York
8

A pesar de muchas mejoras en C++11, C++todavía no es un lenguaje fácil. Java, aunque no es tan fácil como algunos piensan, sigue siendo un lenguaje más fácil con un rendimiento muy bueno (a menudo casi tan rápido como C++) y ofrece mejores IDE (tal vez Visual C++sea ​​tan bueno como los IDE de Java actuales pero no hay suerte aquí en Linux), mucho biblioteca estándar más completa (el JDK), más bibliotecas (por ejemplo , Hibernate , Spring , JEE , Lucene , etc.) y sin pérdidas de memoria (bueno, casi ninguna; aún puede construir una pérdida de memoria en Java, pero es más difícil hacerlo que en C++). Para ser justos, con los modernos C++11, es mucho más fácil evitar los puerros de memoria.

C ++ 11 tiene muchas características interesantes como lambdas, palabra clave automática, semántica de movimiento y mucho más. Definitivamente es un idioma mucho mejor de lo que C++98era. Vea este resumen de Herb Sutter sobre las nuevas características en C++11: Elementos de C++estilo moderno .

En resumen, creo que todos deberían aprender al menos algo C++. Si usted ha estado programando en Java, Scala, Rubyo Pythonen la última década y nunca tocado Co C++, ahora con C++11Creo que es hora de aprender C++11y mejorar sus habilidades de programación mientras lo hace.

Probablemente no usaré C++mucho en el trabajo en los próximos años y cuando necesite un lenguaje más potente que el Java, probablemente iré a Scala, pero examinaré más de cerca C++11y trataré de aprender y comprender las nuevas características, particularmente los de multiproceso y concurrencia.

Recuerde: siempre ayuda aprender un nuevo lenguaje de programación, incluso cuando no planea usarlo en producción.

Jenny Casarino
fuente
1

Respira hondo y lee este artículo de Peter Norvig.

¿Has leído eso? Ok, si eres un principiante, debes comenzar en pequeños pasos. -inserción de idioma aquí- puede venir más tarde, echa un vistazo a Coursera o Udacity para algunos cursos de introducción a la informática para principiantes.

Una vez completado esto, te aconsejaría que trabajes lentamente a través del lenguaje de programación The C de K&R si estás configurado en un lenguaje 'C'.

Trabaja en lo básico, el resto llegará a tiempo.

lwm
fuente
10
No veo cómo esto es la respuesta a la pregunta formulada. C ni siquiera es el mismo lenguaje que C ++.
vartec
1
Pero C ++ se basa en C y es en gran medida compatible con versiones anteriores: la gran mayoría de la sintaxis moderna de C es directamente aplicable a C ++. Puesto que C es más simple que cualquier versión de C ++, C aprender primero le da una educación agradable coherente en la sintaxis básica de C ++ y la semántica - y ayuda a explicar algunas de las verrugas de otro modo incomprensibles sobre la lengua más grande ...
comingstorm
2
@comingstorm Lo primero que debe hacer un programador de C es desaprender casi todo lo que sabe sobre C y luego comenzar a aprender C ++. Hay diferencias sutiles que pueden morderte.
B 29овић
1
Además, el código idiomático moderno de C ++ no toma mucho de C aparte de la sintaxis. Ya no es que sigamos usando cadenas C y malloc / free. Como un principiante completo del lenguaje, es mejor que elija un libro como C ++ Primer 5th edition, C ++ acelerado, etc. en lugar de centrarse en C.
bstamour
1

Los libros introductorios recientes sobre C ++ también cubren cada vez más C ++ 11. Leí Sam's Teach Yourself C ++ después de trabajar con lenguajes de script pero no C / C ++ durante casi diez años y lo encontré realmente útil. Rápidamente me familiaricé con las ideas centrales de C ++ (incluida una gran cantidad de STL) y me di cuenta de una gran cantidad de detalles que son diferentes en C ++ 11.

Como algunos otros carteles han mencionado, C ++ 11 es en muchos sentidos más fácil que los estándares más antiguos con adiciones de estilo de scripting como auto, for(int &i : m_vector){}etc. Entonces, si su "poco conocimiento" proviene de lenguajes como Python o Matlab, encontrará C ++ 11 algo más "natural" que los estándares anteriores.

También quisiera señalar que, por ahora, la compatibilidad del compilador para C ++ 11 está ( casi ) completa, por lo que tener un código "demasiado actualizado para compilar" ya no es un problema.

En resumen, hazlo.

mmdanziger
fuente
-1

Cuando mi tiempo, C era considerado un requisito previo de C ++, especialmente para aquellos principiantes de programación. Porque tienes que descubrir qué hace un lenguaje y por qué se ha diseñado así. C tiene muchas ideas geniales y suficientes sobre lenguaje de programación, que nunca estarán desactualizadas. Por lo tanto, creo que este es el mejor comienzo.

Y después de tener un punto de vista básico con respecto a los temas de programación, es posible que deba elegir qué hacer como el próximo movimiento, lo que significa, elegir un idioma para aprender lo más profundamente que pueda. No importa qué tan profundo sea, generalmente puede decidir qué tan profundo puede ser para cualquier otro idioma, lo que significa que, sin importar cuántos idiomas haya aprendido, el más profundo siempre será el primero que haya desenterrado. Para mí, realicé una investigación sobre Java e hice algunos modelos de Java por mi cuenta para comprender mejor la funcionalidad de su núcleo.

Después de eso, es posible que pueda aprender lo que quiera, porque tiene una comprensión total de la tecnología del lenguaje de programación. He comenzado a aprender C #, Go, Python e incluso Scala y he realizado muchos proyectos por diversión / trabajo. El récord personal es de 3 meses desde que comenzó a aprender un idioma hasta convertirse en 1.0 jefe de un proyecto en desarrollo.

En mi caso, han pasado más de 15 años desde mi primer programa y ni siquiera puedo recordar de qué se trata. Creo que si trabajas lo suficiente, definitivamente mejorarás y serás más rápido que yo.

WinstonWu
fuente
esto no responde a la pregunta formulada
mosquito
Totalmente, lo siento. Solo quiero decir que tampoco. Finalmente, no importa lo que quieras aprender, solo la base del lenguaje de programación puede decidir qué tan profundo puedes desenterrar en este campo. Al mismo tiempo, tienes que pasar más tiempo en él en lugar de un tiro rápido.
WinstonWu
-2

Como principiante, creo que primero debe pasar por los conceptos de C ++ porque C ++ 11 y todo es como una nueva versión, pero C y C ++ son los básicos para cualquier tipo de desarrollo. Una vez que haya aprendido C ++, la mayoría de los conceptos se borrarán automáticamente.

Pooja Runija
fuente
1
¡Bienvenido a los programadores! No estoy seguro de que su respuesta agregue mucho a esta pregunta; y gramaticalmente hablando un poco desordenado. Tengo problemas para seguir lo que intentas decir. ¿Podría ampliar su respuesta, quizás agregar ejemplos de por qué C ++ 11 difiere tanto que aprender C y versiones anteriores del estándar C ++ es mejor?
Martijn Pieters
-3

C ++ es un lenguaje realmente genial y poderoso. Sin embargo, también asigna mucha responsabilidad al programador.

Si eres completamente nuevo en programación, hazte la vida más fácil y comienza con C #. Su sintaxis se basa en C ++, pero el manejo de errores es mucho más fácil para los principiantes para ayudarlo cuando las cosas van mal.

Si se siente cómodo con los métodos, las clases, la herencia y desea desarrollarse en un entorno en el que administrar la memoria y los recursos del sistema es más importante que la productividad, entonces C ++ es una buena opción, y comenzaría aprendiendo el estándar actual. Tenga en cuenta que C ++ requiere que comprenda la memoria y la administre activamente. Comete errores aquí, y todo lo que obtienes es un núcleo volcado, o tus datos contienen bytes que no tienen sentido. Y, a menudo, el punto en el que encuentra el problema no está relacionado con la causa real.

Michael Shaw
fuente
1
Si uno comienza con C #, se acostumbrará a programar en un nivel alto (OOP, administración automática de memoria) sin saber realmente qué sucede "detrás de escena". Si esa persona luego se muda a C ++, le faltarán conocimientos importantes sobre C / C ++ (estoy pensando principalmente en el manejo de la memoria, pero hay más). Puede ser aún más engañoso debido al hecho de que C ++ y C # comparten una sintaxis muy similar, pero lo que el código realmente compila es totalmente diferente. Tenga en cuenta que el OP expresó claramente su interés en C ++.
Eti
El OP también declaró que tienen poco conocimiento de la programación. aprender su primer idioma como C ++ es un gran desafío. Mucho mejor elegir tus batallas y elegir una serie de otras más pequeñas, ya que es mucho más probable que tengas éxito.
Michael Shaw
-6

¿Por qué quieres comenzar con C ++?

Yo personalmente recomiendo contra C ++ como primer idioma. Es complicado, complejo, difícil ... simplemente un nivel mucho más bajo y más "inseguro" que la mayoría de los otros lenguajes de programación.

Aconsejo elegir c #, java, python o javascript ... y un buen libro en el camino. Tendrás un tiempo mucho más agradable con estos.

dagnelies
fuente
3
No estoy de acuerdo con eso como una generalización. Pasar de la vida fácil de java / C # / python, etc. a un mundo más complejo de C y C ++ no es tan fácil. Si realmente está decidido a aprender un lenguaje de programación, aprender C y C ++ es difícil, pero le devolverá mucho. Si luego desea programar en Java, C #, Python, etc., ese cambio es mucho más fácil que pasar de ellos a C o C ++. Resumen: C / C ++ será más difícil de comenzar, pero facilitará el cambio a cualquier otro lenguaje OO.
Martiert
2
C ++ es la mejor base para comenzar. La programación es compleja, y al final tienes que trabajar con un hardware. C ++ es una forma increíble de comenzar a aprender eso sin una falsa sensación de seguridad.
Codificador
La pregunta del operador depende completamente de su propósito con el desarrollo.
Independiente
1
No estoy de acuerdo con esto. Aprender C ++ tiene varias ventajas y facilita el aprendizaje de otros lenguajes como Java y C #, por nombrar algunos.
Anthony
2
@Dhananjay: C ++ es muchas veces más difícil que Java ... Java es como una bicicleta para bebés, una versión extremadamente simplificada de C ++. La última sería una bicicleta sin lujos y sin frenos. Si ya encuentra difícil Java, C ++ será un dolor. Mis 2 centavos
Dagnelies