Absolutamente. Hoje em dia, três coisas que geralmente estão na lição 2 devem mudar muito, muito mais tarde:
- strings como matrizes de char *, os métodos strlen, strxxx e assim por diante
- matrizes em geral e aritmética de ponteiro
- exclua o que você novo, exclua [] o que você novo [] e até destruidores
Essas coisas que geralmente estão na lição 99 devem mudar muito, muito antes
- modelos como itens a serem usados (escrever, não muito)
- std :: string
- std :: shared_ptr <>
- std :: vector <>, iteradores, outras coleções
Cada ponteiro bruto deve ser imediatamente entregue a um invólucro de ponteiro inteligente (eu começaria com compartilhado e consideraria único mais tarde, pois requer explicação de referências std :: move e rvalue). Fazer isso fará com que o aprendizado de C ++ seja muito parecido com o aprendizado de Java ou C #, onde você aprende a biblioteca ao mesmo tempo que a linguagem. Isso também retira muito do trabalho da memória e deixa as pessoas menos preocupadas com truques.
Eu também trabalharia lambdas na imagem na primeira vez que quisemos iterar através de uma coleção e fazer algo para cada elemento.
Isenção de responsabilidade: Estou escrevendo um curso de C ++ para o Pluralsight agora e usando essa abordagem. O último módulo é "entender o código de outras pessoas" e é aí que colocarei coisas confusas, como char * strings, gerenciamento manual de memória, aritmética de ponteiros e assim por diante.
Atualização: algumas pessoas perguntaram por que a existência do C ++ 0x inspira o ensino de coisas que poderiam ter sido ensinadas com o C ++ 03. Eu acho que é uma série de coisas:
- ponteiros verdadeiramente inteligentes, que são amigáveis à coleção, eliminam a necessidade de coisas como "uma série de ponteiros para funcionários" que estavam nos fazendo voltar sempre a usar novos / excluir, aritmética de ponteiros etc.
- auto tira a dor das declarações do iterador
- lambdas fazem prever algo que uma pessoa comum faria
- até algo tão trivial quanto a análise
>>
elimina a pegadinha que estaria presente ao declarar alguns modelos de modelos
- e assim por diante
Na minha opinião, há coisas que poderíamos ter mudado sobre o modo como ensinávamos C ++ há algum tempo, mas alguns de nós nos contivemos porque ainda precisávamos da maneira da velha escola para fazer um fallback ou porque ensiná-la envolvia muito de conhecimento arcano.