segunda-feira, 21 de fevereiro de 2011

Curso de C++ - Feito por mim/Ricardo

Esse semestre estou lecionando a disciplina de Programação II na Facisa. Gostaria de mandar um abraço para Lula e Haddad por descriminalizar essa prática. Próximo passo são as drogas leves, hein meus governantes? o/

Enfim, a disciplina é basicamente uma revisão de Programação I + Estrutura de dados. O interessante, pelo menos para mim, é que ela é dada na linguagem C++, que eu dominava tanto quanto maria rita domina o samba - perto de zero.

Ocorre que decidi fazer um material decente sobre a linguagem. Uma apostila. Um guia. Chame como quiser. Estou, com ajuda do meu amigo Ricardo, construindo o material de forma iterativa e incremental.

O material é baseado em roteiros. Esse é o modelo Dalton de ensinar Programação I. Eu copiei na cara dura. Mantive inclusive o layout dos documentos.

Os motivos deste post são:

  • Apresentar o Roteiro 1 - Introdução à Linguagem C++.
  • Pedir que vocês me ajudem com identificação de erros, dicas e exemplos de exercício, principalmente.
  • Pedir que divulguem - twitter, JUG, Reader, Buzz etc
  • Pedir paciência com esse primeiro roteiro, que considero o pior até agora.
Obs1: Na disciplina, eu crio formulários do google para receber as respostas dos alunos. Por isso existe o link para os formulários no início de cada roteiro.
Obs2.: Eu pretendia ganhar dinheiro com isso. Alguém me ensina como?









9 comentários:

. disse...

Uma coisa particular no exemplo inicial de C++ é o 'operator overload'. Quando você faz cout << "algo". O "<<" não é operador de bits, mas foi sobrecarregado. Isso pode se conflitante com a afirmação feita posteriormente (<< como operador de bits).

Na discussão sobre divisão, vc pode falar que a divisão depende do tipo dos operadores, não se limitando apenas a discussão sobre dois inteiros.

Comentários de bloco em C++ são definidos por /* e */, e ñ chaves.

No geral, uma boa aula introdutória, considerando o background. Adicionaria um exemplo que utilizasse atribuição de variáveis. Isso facilita para o entendimento da questão 3.

Veja também se os alunos tem material para conseguir preparar o ambiente de trabalho. Isto é mais complicado especialmente para o Windows.

João Arthur disse...

Valeu, Matheus! A ideia é essa. Compor o material de forma iterativa, interativa e incremental!

Já está corrigido!

[]'s

Anderson Ledo disse...

Opa, João. Legal a empreitada.
Se você acha que a forma de mostrar o conteúdo é mais interessante do que o que já tem disponível por aí então usa esse modelo de blog mesmo e considere, lá pra o segundo ano, arrumar tudo em um livro.
Mesmo com demanda incerta, o livro serve como forma de compartilhar ou divulgar o trabalho como umma boa forma de ensinar programação, tenta depois transformar o conteúdo em livro com serviços de auto-publishing como o lulu.com
Há bons exemplos de livros que começaram como blog. Inclusive estou lendo um excelente agora: The Long Tail, do @TEDchris.
Também há a opção de contribuir pra um material já existente. Tem esse no wikibooks http://pt.wikibooks.org/wiki/C%2B%2B meio incipiente, mas com uma estrutura já criada...

Enfim, boa sorte!

Renato Miceli disse...
Este comentário foi removido pelo autor.
Renato Miceli disse...

Perdão por não ter lido o material como um todo, mas gostaria de fazer um comentário (sei que isso é contraditório, mas considere a intenção!). Vendo pela "cara" do roteiro, fiquei bastante triste por esse ser mais um material -- como muitos sobre Java, CXX e Pascal que já li -- que coloca o carro na frente dos bois. Já apresenta na introdução o processo de compilação e execução do código. Pra isso, claro, deixa um bocado de teorias e explicações para trás. O aluno pode até saber compilar e executar o código, mas com um bocado de lacunas e usos "inconscientes". Afinal, o que é um namespace? O que é um programa? Um algoritmo? Pra quê serve? O que é include? O que é main? Acho que mais importante que ensinar C++ é ensinar a programar, e a saber o que se está escrevendo. Afinal, tenho certeza que a sua professora de redação ensinou você as letras e as palavras, antes de ensinar como escrever um livro. =P

Bem, não sei se peguei um pouco pesado no comentário, mas, a título de curiosidade e como um documento complementar (?), este foi um pequeno guia do paradigma imperativo ilustrado com a linguagem C que preparei alguns anos atrás:
http://www.lsd.ufcg.edu.br/~renato/relatorioPLP.pdf

Quem sabe não podemos mesclar ambos os documentos no futuro...? =)

João Arthur disse...

Opa, Renato! Valeu pelos comentários. No entanto, quando você disse que não leu o documento como um todo, eu não esperava que não tivesse lido pelo menos o primeiro parágrafo: "Essa é a nossa primeira aula da disciplina de Programação II. Subtende-se que até aqui vocês dominem a construção de programas simples na linguagem Pascal."

Isso significa dizer que questões como: O que é um programa? Um algoritmo? Pra quê serve? Já foram respondidas anteriormente.


Quanto à namespece e include, de fato, faltou explicar. Coloquei um TODO!

Valeu mesmo pelos comentários. A ideia é essa mesmo, construir isso de forma interativa, iterativa e incremental.

João Arthur disse...

Um adendo. Esse material é sempre apresentado depois da aula teórica. Ou seja, por enquanto, ele não é auto-contido.

Renato Miceli disse...

É, como te falei, não li o documento; vi só a "cara" dele. Realmente cometi uma baita duma gafe então. =) Perdão por ter pego pesado hehe.

No mais, acho que vale a pena mencionar a referência a cout e cin por meio de std::cout e std:cin para explicar o que são namespaces. Talvez fique mais intuitivo assim.

E também vale a pena falar do endl como uma alternativa ao "\n" ao escrever na saída padrão. Dá uma boa deixa pra falar de flush de stream. =D

Qualquer coisa, tamo aí!

Anônimo disse...

Seria melhor vc usar apenas
std::cout ao invés de incluir todo o namespace std.