Quería aprender C ++ por un tiempo y tomé la programación de computadoras AP en la escuela secundaria (cuando era C ++ y no Java). Disfruto de C y simplemente no he encontrado el tiempo para aprender C ++ o simplemente recurriré a C # donde soy mucho más productivo.
Mi pregunta es la siguiente: dado que C ++ '11 ha sido aprobado (aunque sé que no está completamente implementado), ¿esto cambia la forma en que debo abordar el aprendizaje de C ++? Soy dueño de C ++: The Complete Reference By Herb Schildt, que es de 1998. ¿El estándar recientemente aprobado hace que aprender de tales libros sea menos importante que algunos de los tutoriales / libros más nuevos que incluyen cosas del estándar? ¿Hay algún beneficio en aprender de los libros más antiguos?
Respuestas:
Absolutamente. En estos días, tres cosas que generalmente se encuentran en la lección 2 deberían avanzar mucho, mucho más tarde:
Estas cosas que usualmente están en la lección 99 deberían moverse mucho, mucho antes
Cada puntero sin formato debe asignarse inmediatamente a un contenedor de puntero inteligente (comenzaría por compartido, y lo consideraría único más adelante, ya que requiere explicar las referencias std :: move y rvalue). Hacer esto hará que aprender C ++ se parezca mucho a aprender Java o C #, donde aprendes la biblioteca al mismo tiempo que el lenguaje. También eliminará gran parte del trabajo de memoria y dejará a las personas menos preocupadas por las trampas.
También trabajaría lambdas en la imagen la primera vez que quisiéramos recorrer una colección y hacer algo con cada elemento.
Descargo de responsabilidad: estoy escribiendo un curso de C ++ para Pluralsight en este momento y estoy utilizando este enfoque. El último módulo es "comprender el código de otras personas" y ahí es donde pondré las cosas confusas como las cadenas char *, la gestión manual de la memoria, la aritmética del puntero, etc.
Actualización: algunas personas han preguntado por qué la existencia de C ++ 0x inspira la enseñanza de cosas que podrían haberse enseñado con C ++ 03. Creo que es una serie de cosas:
>>
correctamente elimina el problema que estaría allí al declarar algunas plantillas de plantillasDesde mi punto de vista, hay cosas que podríamos haber cambiado sobre la forma en que enseñábamos C ++ hace algún tiempo, pero algunos de nosotros nos reprimimos porque todavía necesitábamos el estilo de la vieja escuela para un retroceso o porque enseñarlo implicaba mucho del conocimiento arcano.
fuente
std::for_each()
será mucho más popular de lo que solía ser,auto
será muy importante, y la nueva sintaxis de declaración de función (junto condecltype
) se utilizará bastante en el código de plantilla. Esas son cosas que ningún libro actual de C ++ enseña. Pero sí, en general estoy de acuerdo contigo (+1
). Cuando comencé a dar cursos de C ++, comencé con C ++ acelerado , y aunque mi curso comenzó a desviarse cada vez más de él, sigue siendo fiel al principio subyacente.Bastante sí. El hecho simple es que en C ++ 98 y 03, muchas buenas prácticas eran fundamentalmente inutilizables debido a la mala calidad del soporte del lenguaje, por ejemplo, para la programación funcional. Ahora que las lambdas existen y funcionan, las personas tienden a aceptar las interfaces funcionales mucho mejor de lo que solían hacerlo, y la programación genérica es aún más fuerte que antes.
En 1998, la gente recién comenzaba a descubrir cómo escribir código rápido, seguro y de alta calidad usando C ++, y gran parte del código era "C era Clases". En C ++ 11, es muy diferente: modismos como copiar e intercambiar y la Regla de tres (ahora Cinco) son bien conocidos y definidos, y muchos más tipos de gestión de recursos se han convertido en Estándar, como
shared_ptr
yunique_ptr
donde los Estándares anteriores simplemente los dejaron como agujeros enormes.Puede ver esta pregunta para obtener una excelente lista de material de referencia en C ++.
fuente
+1
de mi parte.No sé el libro específico que mencionas. Pero, en general, puede decir que todos los conceptos básicos sobre la sintaxis, los tipos de datos y la POO de C ++ siguen siendo ciertos. Lo mismo debería ocurrir con las bibliotecas STL que se mencionan en la mayoría de los libros para principiantes.
Aunque un libro tan antiguo como de 1998 puede haber perdido algunas actualizaciones y desarrollos en el estilo de programación C ++, que se acumuló en la comunidad a lo largo de los años. Buscaría recursos un poco más actualizados. Hay más que suficientes tutoriales y documentos en línea gratuitos que deberían proporcionarle un buen comienzo. Algunos de ellos incluso pueden mencionar C ++ 0x.
C ++ 0x seguramente cambiará mucho sobre cómo los programadores ven y usan el lenguaje en el futuro. Pero esto influiría en proyectos más complejos donde las nuevas características comienzan a tener sentido. Para un principiante, esto no debería importar y puede concentrarse en sentirse cómodo con los conceptos existentes, eso ya es suficiente para aprender. La mayoría de los libros para principiantes no profundizan en las plantillas, por ejemplo, por lo que las nuevas plantillas variadas no son lo que necesita saber ahora.
Quizás eche un vistazo a una lista de cambios . Al menos algunos conceptos como rango basado en bucles probablemente aparecerán en nuevos tutoriales incluso para principiantes. Entonces vale la pena echarle un vistazo.
fuente
cprogramming.com
.Por supuesto, con respecto a cualquier cosa relacionada con la tecnología, estar al día con el material más reciente siempre es un movimiento inteligente, sin embargo, los cambios introducidos en C ++ 11 están diseñados para no sacudir el barco. Si eres nuevo en C ++ (o programación en general), esto no es algo de lo que me preocupe.
Además, si eres un programador profesional, puedes apostar que estarás trabajando en el código de otra persona en el futuro, por lo que siempre es valioso entender cómo funcionan las cosas, incluso si es una técnica depreciada en la práctica.
fuente
auto
y la ejecución de funciones asíncronas hacer otra cosa que "sacudir el barco"?