La forma principal en que aprendes C ++ es escribiendo mucho código en C ++. Esto también es válido para cualquier otro lenguaje de programación.
Sin embargo, dicho esto, C ++ es probablemente el menos amigable para los principiantes de todos los lenguajes de programación convencionales. Debido a su complejidad, lleva mucho tiempo desarrollar un buen modelo mental de C ++. Aquí hay un ejemplo. En C, el siguiente programa imprime “¡Hola mundo!” seguido de una nueva línea:
#include
int main () {
printf (“¡Hola mundo! \ n”);
}
Estoy seguro de que alguien te explicó que “\ n” es una secuencia especial que significa “nueva línea”. Luego, cuando aprendas sobre las variables de cadena, puedes escribir esto …
#include
int main () {
const char message [] = “¡Hola, mundo! \ n”;
printf (“% s”, mensaje);
}
(Probablemente alguien también explicó que “% s” significa “imprimir el contenido de la variable de cadena.)
Ahora vamos a hacer C ++ …
#include
int main () {
std :: cout << "¡Hola mundo!" << std :: endl;
}
Alguien te explica que esto imprime “¡Hola mundo!” seguido de una nueva línea. Luego, más adelante, aprende sobre cadenas en C ++ e intenta hacer esto:
#include
#include
int main () {
std :: string s = “¡Hola mundo!” + std :: endl;
std :: cout << s;
}
¿Adivina qué? Esto no se compila . Y el mensaje de error dice:
error: invalid operands of types 'const char [14]' and '' to binary 'operator+'
… ¿eh?
Para comprender completamente cómo funciona el programa original, necesita saber que std :: endl no es un carácter de nueva línea. Entender realmente cómo funciona std :: endl está fuera del alcance de los principiantes. Un buen profesor no puede hacer mucho más que decirte que, en este punto, std :: endl es algo que solo tiene sentido cuando lo envías a un flujo. Un mal maestro será demasiado incompetente para saber que std :: endl no es un personaje de nueva línea, y te enseñarán que sí, y estarás totalmente confundido. Pero incluso en el primer caso, acaba de aprender una regla de apariencia arbitraria, sin un modelo mental de cómo funciona. Muchas cosas simplemente no tendrán sentido hasta que sepas muy bien el idioma.
Entonces, sí, C ++ no es apto para principiantes. Pero tienes una mejor oportunidad si lees un libro en C ++. Ahora otra vez hay un problema. C ++ es tan complicado que incluso la mayoría de los programadores de C ++ no entienden muy bien el lenguaje, por lo que la mayoría de los libros en C ++ apestan. Pero la gente que está en Stack Overflow mantiene una lista de libros de C ++ que no apestan: La Guía y la Lista Definitiva de Libros de C ++. Le recomiendo encarecidamente que elija uno de estos libros y lo lea, si no es de principio a fin, al menos a fondo.
¡Pero no crea que puede leer todo el libro y luego conocerá C ++! Olvidará la mayoría de las cosas que lea, a menos que esté leyendo mientras también codifica. Si eres un estudiante universitario, toma una clase que use C ++ si puedes. Si no puede, considere hacer algunos problemas en SPOJ. Varían en dificultad, por lo que hay muchos problemas que incluso los principiantes pueden resolver. Vas a escribir un montón de código malo. Esta bien; A medida que aprenda más sobre el idioma, puede regresar y volver a escribir sus programas, pero mejor. Mi maestro me hizo hacer esto, y me alegro de haberlo hecho.
En el camino, tendrás problemas. A veces simplemente no sabrás cómo hacer algo en C ++. Ahora, tú tienes dos opciones. Puede publicar una pregunta aquí, o tal vez en Stack Overflow, o simplemente puede buscar un fragmento de código que haga lo que quiere y pegarlo en su programa y ajustarlo hasta que funcione. O bien , puede averiguar qué concepto es el que no comprende y leer un artículo que realmente lo explica, de modo que entienda cómo escribir el código correctamente para usted. Si quieres conocer bien C ++, no hace falta decir que debes hacer lo último.
Después de meses, o quizás años, habrás escrito miles de líneas de código C ++, y generalmente tienes una buena idea de cómo funciona C ++ en la mayoría de las situaciones. Pero el lenguaje todavía puede tener un sentido frustrantemente escaso. Ocasionalmente puede recibir mensajes de error que son páginas enteras. En este punto, querrás entender realmente la esencia de C ++. Entonces, ¿Qué haces? ¡Lee más libros! Busque en las secciones “Intermedio” y “Avanzado” de la página de Desbordamiento de pila vinculada. También vale la pena leer “El diseño y la evolución de C ++”, del propio creador del lenguaje. Y aborde proyectos más grandes, obligándose a usar aún más partes del lenguaje. Escriba una lista vinculada o una clase de árbol de búsqueda binaria en C ++ usando plantillas, por ejemplo. Además, si alguna vez tiene curiosidad acerca de cosas aleatorias, como, “hmm, me pregunto, si tengo dos sobrecargas de esta función, a cuál se va a llamar”, no se contenta con no saber la respuesta. ¡Abre tu editor de texto y escribe un programa y prueba a cuál se llama! Y si no entiendes por qué, entonces pregunta. Y aprender .
He escrito más de 80,000 líneas de código C ++ en un lapso de siete años. He escrito más del doble de código en C ++ que en todos los demás idiomas juntos. Pero todavía quiero aprender más sobre C ++. Quiero saber todo lo que hay que saber sobre C ++. Así que respondo las preguntas de otras personas en Stack Overflow. A menudo, no sabré la respuesta a la pregunta, así que iré directamente al estándar de C ++ y lo leeré.
Después de pasar un año o dos familiarizándome con el estándar, y habiendo repasado la mayoría de los párrafos en algún punto, y familiarizado con el standardese y las reglas generales del idioma en un nivel fundamental, me suscribí a las propuestas std y std Discusión en las listas de correo. Así que ahora también me mantengo al día con el desarrollo del lenguaje.
Creo que sería genial si tuviera un trabajo donde mi empleador realmente pagaría para enviarme a asistir a las reuniones del comité de normas. No estoy seguro de si llegaré, pero ya veremos.