Estarei orientando uma equipe de estudantes do ensino médio para a PRIMEIRA Competição de Robótica, a maioria das equipes aqui desenvolve [seu software de robô usando C ++. Para muitos dos alunos da equipe, esta será sua primeira introdução à programação. Eu não teria escolhido C ++ para ensinar programação para estudantes do ensino médio (por exemplo, Python ou Javascript seria mais fácil, eu acho), mas a escolha está definida.
Quero ensiná-los C ++ adequado (ou seja, evitar um dialeto C / C ++ misto, ou seja, C +), mas também não quero assustá-los com complexidade desnecessária. Para esse assunto:
- Devo começar a usar o STL desde o primeiro dia, esp.
vector
ou apenas ficar com matrizes padrão? As matrizes são mais fáceis de introduzir, mas os erros do ponteiro podem ser mais difíceis de detectar. - Para E / S, devo seguir
cout
etc., ou você achaprintf
que seria mais fácil aprender? - Existem recursos on-line para C ++ adequados para esses jovens alunos?
Obrigado!
EDIT : Obrigado por tantas excelentes respostas. Além do C ++ acelerado , sugerido por muitas pessoas, descobri que o C ++ para todos é um excelente texto.
Respostas:
Eu acho que você deve começar com os tipos de dados que a linguagem incorporou, como matrizes e ponteiros, e quando seus alunos os compreenderem, passe para as aulas e o OO, depois o STL.
O motivo é que você pode ensinar as pessoas a entender matrizes sem entender muito mais além das variáveis e da arquitetura subjacente do computador, mas não pode ensiná-las a entender
vector
sem antes ensinar as aulas. Se você usar o STL desde o início, seus alunos terão que apenas viver sem ter uma idéia de comovector
funciona exatamente. E então, quando você chegar nesse ponto, eles não terão uma compreensão suficiente de ponteiros, matrizes e coisas que você obtém ao fazer coisas como escrever sua própria classe de vetores, escrever sua própria classe de lista vinculada, etc., que serão necessários apreciar e explorar seus recursos. Me incomoda quando os alunos dizem "o que é isso?" e os professores dizem "apenas ignore, você aprenderá mais tarde".E como Demian apontou nos comentários, decifrar as mensagens relativamente enigmáticas que você recebe dos erros de modelo é significativamente mais difícil do que entender os erros que você pode obter de estruturas de matrizes / não de modelos.
Eu não sinto o mesmo sobre
cout
eprintf
. Nenhum dos níveis é inferior ao outro, exceto quecout
utiliza sobrecarga do operador.Isso pode parecer estúpido, mas sou absolutamente fanático por fazer as pessoas entenderem os blocos de construção básicos de tudo antes de passar para as abstrações. Você não deve usar ponteiros inteligentes até ter conhecimento de ponteiros brutos, sem vetores antes de matrizes, esse tipo de coisa.
Costumo dizer isso, mas vou repetir: é melhor ensinar aos alunos a divisão longa primeiro e depois deixá-los usar uma calculadora do que deixá-los usar uma calculadora e depois ensinar a divisão longa depois.
Quanto aos livros para ensinar iniciantes, consulte a lista principal de bons livros em C ++ .
fonte
vector
mais de matrizes. Estou dividido.std::string
estd::vector
?! Aqueles programadores de 32 C estão votando? Eu ensino C ++ há uma década, para iniciantes em programação, para estudantes que tiveram um ano de Java e para profissionais de programação. Eu usostd::string
estd::vector
desde o primeiro dia. Eles são fáceis de usar, independentemente de suas entranhas. (Você não seria tímido volta de ensinar corda do VB, porque é muito complexo no interior?)std::vector
para poder usá-lo. E as classes são uma parte extremamente básica do C ++. O que não é básico é depurar todos os erros que eles receberão usando matrizes e ponteiros nativos.new
palavra - chave, você volta ao território de gerenciamento de memória. E, muitas vezes, as bibliotecas pedem dicas e você precisa se perguntar: "isso vai se apropriar? Ou ainda preciso limpá-lo?". Fundação meu pé. Mais como uma unha ou calafetar ou algo assim.Esta é a minha própria experiência. Leve-o para o que vale a pena.
Olhando para trás, quando comecei a programar, realmente gostaria de ter aprendido sobre a memória primeiro . Não, não é emocionante. Isso fará você olhar por cima. Mas é um conceito ridiculamente fácil de ensinar. Apenas mostre uma tabela 1-D e faça-a passar por alguns exercícios mentais:
etcetera. Depois de baixar a memória básica, tudo o resto é bolo. Os alunos pobres que presumem que o compilador está fazendo algo mágico (ou que nunca precisam pensar em gerenciamento de memória) são os que mais sofrem. E o C ++ atrapalha as águas porque algumas coisas são limpas automaticamente (ou seja, um vetor normal) enquanto outras não (ou seja, um vetor alocado usando "novo"). E nem me inicie em strings (char * vs. std :: string - tente explicar isso sem o conhecimento do ponteiro).
Não sei em qual plataforma sua concorrência de robôs será direcionada, mas se for um ambiente de memória limitada, as habilidades de gerenciamento de memória serão cruciais.
EDITAR
Depois de ensinar os fundamentos, sim, eu digo: vá em C ++ todo o caminho. Tecnicamente, são apenas bibliotecas diferentes, mas sim, não faz sentido confundi-las com mais de um paradigma. Dê a eles ferramentas C ++ (que incluem ponteiros e matrizes).
fonte
definitivamente vá direto ao uso de tipos de biblioteca padrão. um
std::string
oustd::vector
é o que eles costumam usar e (a grande maioria das implementações de) esses tipos oferecem alguma forma de detecção e tratamento de erros, enquanto abstraem muitas das complexidades dos alunos.você pode gastar uma boa parte do tempo ensinando aos alunos como a memória é estruturada e como gerenciar a memória (estilo C), ou pode trabalhar diretamente usando os tipos idiomáticos do idioma e, em seguida, explicar os detalhes da implementação, se necessário (e quando melhor entendimento do que é uma matriz e de onde é usada).
a sintaxe de
std::vector
(criar / ler / escrever) não é muito mais complicada que a de uma matriz C. Em comparação, o gerenciamento manual de memória e todos os erros comuns que os novos alunos cometem com as matrizes C são muito mais difíceis de aprender, ensinar e usar.cout
. pessoalmente, acho quecout
é mais fácil aprender. talvez mais importante, você deve escolhercout
porque é mais seguro, versátil e permite definir como um objeto é impresso, o que significa que você já possui funcionalidades e segurança de tipo incorporadas usando alguns tipos de biblioteca padrão. finalmente, você acabará com programas mistos quando perceber que eles também precisam aprendercout
alémprintf
.de fato, acho que você deve ler Accelerated C ++, de Koenig e Moo, e possivelmente usá-lo para obter instruções (respondendo à pergunta 3 indiretamente). no livro, eles são apresentados um
std::cout
pouco antesreturn
(página 3) e salvam ponteiros e matrizes até o capítulo 10. Se eu pudesse copiar e colar o prefácio desse livro como resposta à sua pergunta, eu o faria. (nota: eu recomendo que você o leia para a perspectiva de ensinar c ++).Editar Aqui está o Prefácio
se você não quiser usar o Ac ++ Accelerated (que assume alguma experiência com a programação em geral), talvez você queira o Eckel's Thinking in C ++ . Eu não li, mas é um texto de introdução C ++ distribuído gratuitamente.
fonte
std::cout
da introdução, chaves são introduzidas =) (é uma simples dissecação do onipresente "Olá, Mundo")Uma coisa a considerar é que, na estrutura típica de dados do PRIMEIRO código, de qualquer forma (estruturas, classes, matrizes, vetores, listas) desempenham um papel muito pequeno. Você normalmente lida com uma quantidade muito pequena de dados do sensor e os utiliza para decidir uma quantidade muito pequena de movimentos do atuador.
Mas o que desempenha um papel enorme e pode ser muito difícil de entender são todas as diferentes formas de controle que ocorrem .
Então, eu enfatizava bastante o controle. Comece com o básico:
if
,for
,while
. Faça com que eles pratiquem muito isso. Faça-os conhecer bem aqueles ....... mas depois fica mais difícil. Qualquer código de robô de tamanho moderado acaba atingindo alguns padrões de controle mais complicados:
Grande laço "principal", que chama tudo
Máquinas de estado (elas aparecem muito)
Salvando valores anteriores / contador de execução (como no PID)
Estes são difíceis de entender para iniciantes. Pensar em como um programa se move através de código como esse é confuso, talvez você não perceba agora, mas é. Isso dará a seus alunos muito mais problemas do que o próprio idioma.
Além disso, boa sorte! Espero que a temporada corra bem.
fonte
O problema com matrizes é que qualquer coisa, exceto exemplos simples de livros didáticos, exige matrizes de tamanho dinâmico, e o momento em que você precisa de matrizes de tamanho dinâmico
std::vector
é muito mais fácil. Além disso, a única maneira de lidar com segurança com matrizes de tamanho dinâmico é agrupá-las em sua própria classe, o que seria um problemastd::vector
.Ao contrário da crença inexplicavelmente popular, os alunos podem usar recursos que exigem que mecânicas complexas sejam implementadas sem saber como implementar essas bestas. Como eu disse em um comentário: você nem pensaria em não ensinar strings em outros idiomas, apenas porque a implementação deles é complexa, certo?
Por que um conjunto de convenções de cadeias de formato arcaico que fazem seu programa explodir no teto no momento em que algo está errado (o que acontece no momento em que você muda um
typedef
cabeçalho aparentemente não relacionado) é preferível à segurança de tipostd::cout
?A maioria dos recursos de C ++, online ou não, é ruim. E não estou falando sobre o uso de fontes ou linguagem difíceis de ler. Estou falando de erros factuais flagrantemente óbvios. Existem muito poucos recursos C ++, principalmente uma ou duas dúzias de livros . O único que eu sei que está online é o Pensamento de Bruce Eckel em C ++ .
Por uma década, ensinei C ++ a estudantes com formação muito diferente usando o C ++ acelerado da Koenig / Moo como base. Meu curso mudou muito nessa década, está longe de ser o livro, exceto pelo princípio subjacente: use os idiomas modernos, corretos e seguros desde o início. Não ensine seus alunos a manipular manualmente a memória, apenas para depois desaprenderem isso em favor de idiomas mais seguros. Como você pode ver em algumas das respostas fornecidas aqui, isso não funciona: quem ensinou as maneiras manuais primeiro raramente entenderá a vantagem de usar expressões modernas e seguras.
fonte
Se você deseja ensinar C ++, eu começaria diretamente com construções C ++ como vetor e cout, em vez do subconjunto C como printf.
fonte
Sim. O uso de matrizes nativas em C ++ é propenso a erros e simplesmente pratica mal em 99% do tempo.
Sim.
Eles não são tão jovens. Aprender a programar não requer sabedoria, apenas motivação e mente aberta. Não consigo pensar em nada ensinado nos últimos dois anos do ensino médio que melhor preparasse um aluno para aprender a programar. Você já viu o Pensamento de Bruce Eckel em C ++ ? Está disponível para download gratuito e muito bem revisado. Evite o popular, mas horrível C ++: Como programar e todos os livros de Sam, Teach Yourself C ++ ...
fonte
Eu aprendi C ++ no ensino médio como a primeira linguagem de programação, embora fosse mais parecida com "C +", agora que você mencionou; usamos
cout
para escrever texto no console e nos arquivos, mas também algumas funções C (getch()
era a minha favorita).Eu acho que a maneira mais eficaz (e possivelmente divertida) de ensinar o básico é usar um currículo orientado a objetivos: comece mostrando como produzir coisas, depois insira o teclado, depois E / S simples de arquivos, etc. Progresso para um texto simples jogo baseado (ou o equivalente em robótica). Então, quando perguntarem: "Como faço para X?", Você pode dividir X em termos de exemplos que eles já viram, por exemplo: "Primeiro, você precisará obter a entrada do usuário, como fizemos em Z, depois ..."(obviamente, não é tão fácil na prática, desde X provavelmente será algo que eles precisam conhecimento adicional, a fim de fazer, por exemplo, 'gráficos 3D', mas você ainda poderia explicar como ele iria trabalhar em um alto nível maneira).
Os exemplos que você mostra a eles começam como magia colada em caixa-preta, cujos mistérios são desvendados à medida que as peças do quebra-cabeça de programação são lentamente descobertas. Por exemplo, seus alunos aprenderão o básico de
if
s rapidamente, mas provavelmente não perceberão que uma expressão booleana não se limita exclusivamente ao uso dentroif
da condição de uma (levando aoif (blah) return true; else return false;
código clássico ).As sutilezas de escolher uma matriz ou vetor como contêiner parecerão irrelevantes para os alunos a princípio. Um vetor / array será simplesmente uma maneira de ter muitas variáveis como uma variável, acessíveis através de um índice. Atenha-se a um onde você puder. Ponteiros não serão compreendidos até mais tarde também. Isso não quer dizer que você não deva explicar as coisas; apenas que você não pode explicar tudo de uma vez, e as coisas que você explica não serão completamente absorvidas. Os seres humanos aprendem organicamente, não linearmente. Eu estava usando
cout
há alguns anos antes de entender corretamente o que era sobrecarga de operador!Ah, e não tenha medo de repetição. "É como o programa Hello World que fizemos - lembra como escrevemos texto para o console?" (não ...) "Vamos passar por isso novamente apenas para ter certeza." ... E faça perguntas! Mantenha os alunos envolvidos com exemplos divertidos e muita interação.
C ++ é uma linguagem complexa e, não importa o que você faça, uma quantidade significativa dessa complexidade (e da arte da programação em geral) será perdida para seus alunos. Tudo o que você mostrar a eles será novo para eles; a maior parte não vai afundar em um nível profundo de entendimento (pelo menos, não imediatamente). Como a memória funciona, como os componentes de um PC interagem, o que são a pilha e o heap, ponteiros, classes e até loops e cadeias if-else não serão entendidos adequadamente pela maioria. Tudo bem! Eles não precisam ser entendidos para serem usados - uma quantidade incrível de programas legais pode ser escrita com funções super feias de 1000 linhas, com redundantes aninhados em quintuplo
if
e 43 variáveis denominadas coisas comox_2r
. O importante é que os alunos estejam constantemente aprendendo e melhorando. As caixas pretas ficam bem desde que se tornem transparentes (ou pelo menos cinza translúcido) a longo prazo. No final do curso, eles podem não saber o que são os padrões de design, mas devem poder olhar para os programas que escreveram nas primeiras semanas e se estremecer com o código. Eles devem entender com um nível significativo de detalhes como o primeiro programa que eles escreveram realmente funciona (enquanto que quando o escreviam, eles não tinham idéia). Mas eles não sabem tudo - ainda .fonte
Tive várias aulas de programação em minha vida, do ensino médio à faculdade. Posso dizer que realmente não aprendi muito com minha primeira aula de c ++, além de como imprimir coisas em um fluxo.
Meu conselho, como um jovem estudante, que apenas nos últimos anos teve algum trabalho real como desenvolvedor, é não emburrecer as coisas. Diga a eles o que estão fazendo e como ele funciona no nível do sistema operacional (não é necessário entrar no IMO da empresa).
Eu acho que ensiná-los C é a melhor maneira de fazer isso (ele quase sempre será compilado como C ++, como você sabe). Ensinando a eles o que realmente é o terminal, como o programa interage com ele, que uma string é uma matriz de caracteres terminados com \ 0 na memória, o que é malloc e como o C ++ o abstrai, como um char e um int são armazenados na memória , ect ... Essas coisas são o que faz alguém realmente saber como resolver um problema quando o encontra no desenvolvimento.
Não posso enfatizar a importância de deixar as crianças programarem e estarem lá principalmente para responder perguntas. Na minha experiência, você aprende um idioma usando-o. Livros e lições podem ser úteis e necessários para começar, mas, no final, digo que forneça um arquivo C / C ++ e diga: Este é um exemplo de X, gostaria que você fizesse Y (o que pode ser feito cortando X). Mostre a eles como usar as páginas de manual (se estiverem usando o * NIX) ou mostre a cplusplus.com e deixe-os explorar as bibliotecas std para descobrir as coisas por conta própria.
TL; DR Deixe as crianças ensinarem a si mesmas. Esteja lá para fornecer estrutura e responder a perguntas.
Além disso: listas vinculadas são a verdade!
fonte
Você não está ensinando a eles programação de uma maneira geral, está ensinando a eles um tipo de programação incorporada usando robôs e coisas do tipo. Se eu entendi corretamente.
Primeiro, acho que você deve verificar quais bibliotecas você vai usar e o que precisa.
Se tiver uma biblioteca C para usar ou semelhante a C com muitos ponteiros e matrizes C, acho que você precisaria de uma maneira de ensiná-los a usá-la ou por que usá-la.
Porém, você pode mostrar a eles alguns códigos simples para começar com strings e vetores, é assim que o C ++ funciona. Isso não significa que você não possa ensinar a eles dicas.
Talvez você deva deixar claro as diferenças entre C ++ de baixo nível (que se assemelha a C) e C ++ de alto nível com o STL. Uma das coisas mais difíceis em C ++ para iniciantes é ver o que é C, o que é C ++ e quais são as diferentes APIs do sistema.
Como o objetivo aqui não é aprender programação geral, mas participar de uma competição de robôs, eu havia orientado o ensino dessa maneira.
fonte
Comecei a ensinar aos alunos C ++ no final do ano passado e neste verão também para nossa PRIMEIRA Equipe de Robótica.
Estamos usando a programação da Stroustrup - princípios e práticas usando C ++ . Eu achei o livro acessível, legível e bem organizado. Tivemos cerca de 6 alunos lendo os capítulos por conta própria. Estou lá para ajudá-los com terminologia e perguntas. Eles fazem todos os exercícios do livro.
Eu pedi aos alunos que trabalhassem no capítulo 14. Ignorando os capítulos nos fluxos (não é útil para a programação FRC). Através do capítulo 14 é útil porque eles obtêm uma introdução às subclasses. No entanto, eles provavelmente precisam ir mais longe no livro para entender melhor os construtores e destruidores relacionados às subclasses.
Não subestime seus alunos. Os alunos ficam felizes em ter o livro, ler, aprender e fazer os exercícios; e isso foi durante o verão em seu próprio tempo! Existem muitos estudantes que não vão entender. Eles devem passar para outra coisa; nem todo mundo entende de programação.
A maior barreira não é a linguagem ou o livro; é o ambiente de desenvolvimento. O Visual Studio Express pode ser assustador para os usuários iniciantes. Você pode ser valioso ao ajudar os alunos a se concentrarem na programação e não no ambiente. No entanto, aprender o ambiente é valioso, pois os programadores passam bastante tempo se adaptando aos novos sistemas de desenvolvimento.
Boa sorte.
fonte
Você diz que deseja ensiná-los C ++, mas não ensinar nenhuma construção C, mas a maioria das construções de programação que eles precisam saber primeiro são comuns a todas as linguagens e as versões C ++ estão enraizadas em C:
É assim que você cria um programa [int main (..) {return 0; }] Dê uma visão geral básica do ambiente de programação que você deseja que eles testem também. Eles precisam saber como criar um projeto e realmente compilar / executá-lo.
Esta é uma variável. Variáveis podem armazenar dados (int, char, float, etc).
Strings (C ++ são mais fáceis de usar com cin).
É assim que você lê e grava dados (cin, cout). "Olá,% s!"
Condicionais (os computadores precisam tomar decisões).
Loops (os computadores são bons em fazer a mesma coisa repetidamente). Mostrar enquanto e para loops.
Isso deve levar cerca de duas lições de uma hora cada. Certifique-se de preparar um conjunto conciso de notas que possam ser consultadas no componente prático. Você não está tentando torná-los programadores brilhantes; portanto, dê exemplos de como ler no console, criar estruturas e tudo o mais que eles precisariam fazer. Use apenas recursos compatíveis com o idioma, não bibliotecas de utilitários personalizados. Você só os confundirá mais.
Desde o início, lidere pelo exemplo e mostre a eles exemplos de código bem definido. Os recuos devem estar corretos, entre parênteses e parênteses consistentes no estilo com o qual você se sente mais confortável. Nomes de variáveis devem ser significativos. Se você mostrar slop como exemplo, eles aprenderão que slop é aceitável. É um mau ponto de partida. Saliente a importância de obter o recuo correto - descobri que, quando as coisas que eu ensinei recuavam seu código de forma consistente, eram mais capazes de ver onde estavam errando. Isso ocorreu porque a maioria de seus erros tinha escopo incorreto para operações (colocando operações em loops / condicionais que não deveriam ser, ou o inverso).
Em seguida, passe para o trabalho prático. A melhor maneira de aprender algo é quebrá-lo e descobrir o porquê. Você deseja garantir que eles tenham um ambiente fácil de usar para compilar seu código. Documente com capturas de tela em suas mãos.
Um bom exemplo que me ajudou a entender alguns dos conceitos foi construir uma máquina de Coca-Cola:
Depois disso, você pode passar para construções em C ++; você não quer se aprofundar muito antes que eles possam pelo menos criar um programa básico.
E, acima de tudo, tenha muito tempo livre e paciência para se dedicar a perguntas. Haverá muitos, e a maioria deles fará você se encolher porque são tão triviais que a resposta é óbvia para você.
fonte
Eu acho que você não deve ensinar coisas do ponto de vista do C ++ ("C ++ hello world"), mas do domínio do problema - neste caso, robótica - do ponto de vista. Então, seu olá mundo estaria piscando um led ou dirigindo um motor.
É claro que você pode / deve decompor cada pequena tarefa de robótica em um subconjunto de ações C ++ conceitualmente crescentes, envolvendo tipos, funções e operações de E / S.
Quanto a mim, não sou um programador profissional e tentei aprender Java, C ++ e Python. Eu realmente comecei a conseguir algo (Python) quando tinha problemas reais (simples) para resolver. Isso me levou direto ao ponto, evitando atenção excessiva aos detalhes incidentais da implementação da própria linguagem.
Por isso, aconselho: não leia o manual de um idioma, mas aprenda a fazer as coisas com o idioma de sua escolha. É isso que mantém as pessoas motivadas, eu acho.
fonte
Eu ensinaria C ++ estrito. Você sabe como quando você escreve printf e o entrega a pequenos parâmetros ou o tipo errado acontece algo estranho? e se você usar ponteiros inválidos coisas ruins podem ocorrer? NÃO ENSINAR QUE
Desde o primeiro dia, eu ensinaria como usar referências, STL e diria que você perde marcas por usar ponteiros. Também não ensine indicadores inteligentes. A única vez em que percebo que uso ponteiros é quando faço GUI e objetos (como uma caixa de imagem) devem existir e ser uma imagem válida ou nula. Para programação de console, não uso ponteiros (inteligentes ou não processados) há muito tempo.
Portanto, em resumo, não ensine nada a eles que possa causar problemas. Ensine iostreams, structs, diga a eles que eles também perdem as notas no typecast e não tentam ensinar design. Você não quer que ninguém se torne um profissional experiente
fonte
Não é uma série de palestras em C ++, mas o COMP1917 de Richard Buckland é uma série de palestras excelente sobre programação em C (seguida pelo COMP1927 , estruturas de dados).
Na minha opinião, C ++ é muita complexidade para novos alunos, mas C é um mundo mais simples e fornece uma boa base na programação de sistemas que os novos programadores de C ++ frequentemente não têm.
fonte
Eu começaria com pedaços significativos de código padrão, os ajudaria a "fazer algo legal" com a programação imediatamente e refinaria sua compreensão de como as coisas funcionam com o tempo. Eles não precisam apreciar ou entender todos os meandros do C ++ para fazer um LED piscar. Eles só precisam saber "se você colocar esse código lá, o LED piscará". E então "ei, vamos falar sobre o que é um loop agora, se você escrever um loop, poderá fazer o LED piscar 50 vezes sem precisar escrever 50 linhas de código, não é legal?" Agora vamos falar sobre condicionais, quando o usuário pressiona o botão A na caixa de controle, queremos ativar a pneumática para levantar uma bandeira, eis como adicionamos código para fazer isso. Ou, se o interruptor 2 da nossa caixa de controle estiver ativado, acionamos o motor de perfuração em sentido inverso, em vez de para frente.
Se você mantiver as coisas focadas em ensiná-las "apenas o suficiente" para resolver os problemas nos quais elas estão interessadas, as coisas ficarão muito menos impressionantes e mais acessíveis. Se eles estiverem realmente interessados e quiserem entender os meandros, provavelmente voltarão e lerão um livro abrangente sobre programação ou cursarão a escola de verão no JC local.
Faça uma lista das "coisas que eles querem poder controlar" no robô e transforme cada uma delas em uma lição ... o que é o mínimo que elas precisam saber ...?
Eu continuaria ensinando os métodos que são mais infalíveis, como ensinaria cout over printf, porque os especificadores de formato são muito fáceis de misturar e um especificador incorreto geralmente é uma receita automática para travar seu programa. Da mesma forma, o vetor ofusca algumas das complexidades de gerenciamento de memória. Não se preocupe com todos os detalhes sobre como as coisas funcionam ou o que é a biblioteca STL, apenas o mínimo que eles precisam saber para realizar o X (o que pode exigir o uso de uma estrutura de dados da biblioteca STL, por exemplo)
fonte
Use Como programar C ++ por Deitel e Deitel. Excelente livro na minha opinião.
Parece que você está tentando ensinar aos novatos como programar e depois programá-los em algum nível avançado ao mesmo tempo. Se você espera dar a eles algum macaco, veja trechos de codificação de macaco sem entender que você está fadado ao fracasso.
Fique longe da STL para uma aula para iniciantes.
Se você já possui uma solução de codificação para o seu robô - ou uma IDEIA MUITO BOA com a aparência, talvez seja possível "mapear" as lições do livro para as tarefas de codificação do robô. Mas deixe o livro guiar o aprendizado.
Se você forçar a codificação, dando aos alunos lições e exposição muito estreitas ao idioma, acho que à medida que o oceano de código que você escreve se torna cada vez maior, será como ter aprendido a remar e você se afogará porque a natação REAL É necessário.
Não se trata de "eles deveriam aprender cout ou printf?" É uma questão de aprender o suficiente para ter uma ideia de como escrever código para resolver determinadas tarefas de programação de robôs.
Se fosse uma tarefa de leitura, quais seriam os resultados se todos eles soubessem que eram simples frases sujeito-verbo e apenas metade do vocabulário que VOCÊ SABE é necessário.
fonte