Absolutamente. En estos días, tres cosas que generalmente se encuentran en la lección 2 deberían avanzar mucho, mucho más tarde:
- cadenas como matrices de char *, los métodos strlen, strxxx, etc.
- matrices en general y aritmética de puntero
- borra lo nuevo, borra [] lo nuevo [] e incluso destructores
Estas cosas que usualmente están en la lección 99 deberían moverse mucho, mucho antes
- plantillas como cosas para usar (escribir, no tanto)
- std :: string
- std :: shared_ptr <>
- std :: vector <>, iteradores, otras colecciones
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:
- Los punteros verdaderamente inteligentes, que son fáciles de recopilar, eliminan la necesidad de cosas como "una serie de punteros de empleados" que nos hacían recurrir siempre a nuevos / eliminar, aritmética de punteros, etc.
- auto elimina el dolor de las declaraciones de iterador
- Las lambdas hacen que la predicación sea algo que una persona común haría
- incluso algo tan trivial como analizar
>>
correctamente elimina el problema que estaría allí al declarar algunas plantillas de plantillas
- y así
Desde 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.