inicio - curso de c++ completo
¿Cómo enseñar un curso acelerado en C++? (7)
Gestión de memoria (punteros, asignación, etc.), conceptos básicos de STL y plantillas (ya que STL usa plantillas). Creo que STL es importante, ya que a uno le falta la riqueza de la biblioteca de clases Java SE en C ++.
En unas semanas impartiremos un curso acelerado sobre C ++ para programadores de Java recién salidos de la universidad. Tienen poca o ninguna experiencia con C o C ++.
Las ediciones anteriores de este curso fueron solo 1 o 2 sesiones de medio día y temas cubiertos que incluyen:
- nuevas características del lenguaje, por ejemplo
- encabezado vs. implementación
- punteros y referencias
- gestión de la memoria
- sobrecarga del operador
- plantillas
- las bibliotecas estándar, por ejemplo
- los encabezados de la biblioteca C
- iostreams básicos
- STL básico
- utilizando bibliotecas (encabezados, enlaces)
- ellos usarán Linux, entonces
- comandos básicos de la consola de Linux
- gcc y cómo interpretar sus mensajes de error
- Makefiles y autotools
- comandos básicos del depurador
- cualquier tema sobre el que preguntan
Durante el curso, cada persona escribe, compila, ejecuta y depura de forma individual programas simples utilizando las funciones recientemente introducidas. ¿Es esta la mejor manera de aprender?
¿Qué temas considera más crucial?
¿Qué temas deberían agregarse o eliminarse?
¿Qué temas no se pueden cubrir adecuadamente en poco tiempo?
Me gustaría agregar que debe asegurarse de indicar dónde pueden encontrar el idioma y las referencias de API. En Java, la API y la especificación de idioma están a su alcance en línea en java.sun.com ... con C o C ++, no es tan simple y fácil encontrar documentación de referencia.
Cada vez que hago algo en C o C ++, ese es mi mayor problema ... tratar de encontrar lo que necesito. Normalmente me dirijo a cplusplus.com , que generalmente tiene lo que necesito, de lo contrario busco en Google. Si tiene un conjunto de referencias que usa (en línea o en forma de libros), enumérelas y dígales para qué utiliza cada referencia.
Si provienen de un mundo Java, están acostumbrados a la recolección de basura. Como tal, probablemente pasaré un poco de tiempo hablando de punteros inteligentes (de referencia contada) y de cómo se comparan con la recolección de basura.
Si vas a sacar a muchos programadores de Java de la universidad para escribir código de producción, diría que lo primero que debes preocuparte son los indicadores y la administración de la memoria.
Realmente, aquellos que vienen directamente del código administrado raramente tienen las habilidades para depurar la excepción relacionada con el puntero, y mucho menos usarlo correctamente, o incluso comprenden cómo lo utilizan su lenguaje / herramientas.
Punteros es cómo piensas no solo escribir código.
El marco y las prácticas de codificación se pueden enseñar como consejos y notas en el camino.
Pero no entender los indicadores al escribir el código C es solo esperar para dispararse en el pie, si no en la cabeza.
Solo puedo señalar una vez más a Stroustrup y predicar: ¡No enseñes el subconjunto C! ¡Es importante, pero no para principiantes! C ++ es lo suficientemente complejo como es y las clases de biblioteca estándar, especialmente el STL, es mucho más importante y (al menos superficialmente) más fácil de entender que el subconjunto C de C ++.
Lo mismo ocurre con los punteros y la asignación de la memoria del montón, por cierto. Por supuesto, son importantes, pero solo después de haber enseñado los contenedores STL.
Otro concepto importante que los nuevos estudiantes deben entender es el concepto de diferentes unidades de compilación, la regla de una definición (porque si no la conoce no podrá descifrar los mensajes de error) y los encabezados. En realidad, esta es una gran barrera y una que debe ser violada desde el principio.
Además de las características del lenguaje, lo más importante que se debe enseñar es cómo comprender el compilador de C ++ y cómo obtener ayuda. Obtener ayuda (es decir, saber cómo buscar la información correcta) en mi experiencia es lo más importante que se debe enseñar sobre C ++.
He tenido experiencias bastante buenas con esta orden de enseñanza en el pasado.
/ EDITAR: Si conoces algún alemán, echa un vistazo a http://madrat.net/coding/cpp/skript , parte de una breve introducción utilizada en uno de mis cursos.
Me gustaría pasar un día entero discutiendo cómo escribir una buena clase en C ++. Deitel & Deitel puede ayudar como referencia.
- ¿Cuándo se llaman constructores?
- ¿Cuándo se llaman los operadores de asignación?
- ¿Cuándo se llaman destructores?
- ¿Cuál es el punto para const Foo & a_foo?
Debe dedicar algo de tiempo a la gestión de memoria, y especialmente a RAII.