Renascendo - ou Os Desafios de aprender C e C++
Oi pessoal,
Tem um bom tempo que não escrevo nesse Blog. Muita coisa aconteceu desde que criei o primeiro post. Quando comecei, imaginei usar a biblioteca do Ogre e o SDL para criar um game simples, que pudesse ser usado como tutorial e alguém pudesse aprender alguma coisa com isso.
A idéia central era "ensinar enquanto aprendia", assim todos poderiam aprender juntos. Porém, por razões pessoais e profissionais, eu não conseguia ter mais tempo livre para estudar o Ogre e o SDL, então por consequência acabei parando de escrever aqui.
Embora eu tenha deixado essas duas bibliotecas um pouco de lado, meu interesse em C/C++ não diminuiu e eu continuei estudando sempre que podia. Peço desculpas por não compartilhar meu progresso por aqui, porque pensei que como o que eu estudava não estava diretamente relacionado à proposta de um game 3D, pensei que aqui não seria o lugar correto para escrever.
Aprendi nesse processo que o desafio de aprender C e C++ está muito além da linguem em si. As linguagens são fáceis. Não muda muita coisa em relação a todas as outras. O desafio, na verdade, é que para aproveitá-las ao máximo você precisa estudar os fundamentos do funcionamento de um computador. Precisa voltar um pouco na história, ver o contexto em que elas foram criadas, daí a coisa começa a fazer mais sentido.
Outra grande dificuldade é que não existe um repositório central de informações sobre C. Diferentemente do PHP, por exemplo, que possui o manual no php.net, com tudo explicadinho e cheio de exemplos, com o C a gente precisa fuçar muito mais. Em geral, os tutoriais na internet são básicos, explicam o uso das funções e tal, mas em lugar algum você vai achar exemplos avançados, a não ser que baixe o código de programas open-source pra estudar.
Não estou com os links de todas as referências que andei fuçando (fica para um próximo post), mas pra quem tem interesse nos fundamentos, passo o link do livro do Dennis Ritchie, criador da linguagem C. Passo também o link do Gwan, hoje o servidor web mais rápido do mundo, que permite que você escreva em C direto, sem compilar (você salva o arquivo, o servidor compila em real-time e voilà, seu programa tá funcionando). Finalmente, pra quem quiser fuçar o código-fonte de alguma coisa, é interessante olhar a evolução da linguagem de programação Lua, que foi feita em C. O código fonte está aqui, recomendo baixar o lua-all.tar.gz e ler o documento em que os criadores descrevem sua evolução.
Vou tentar pegar um tempo livre nesse final de semana pra migrar esse blog para Wordpress e dividí-lo em duas partes: uma para os fundamentos da linguagem e outra para o tal do game 3D que todos estão esperando. Espero poder cumprir minha missão dessa vez, sem interrupções.
Abraço a todos,
Rafael
Tem um bom tempo que não escrevo nesse Blog. Muita coisa aconteceu desde que criei o primeiro post. Quando comecei, imaginei usar a biblioteca do Ogre e o SDL para criar um game simples, que pudesse ser usado como tutorial e alguém pudesse aprender alguma coisa com isso.
A idéia central era "ensinar enquanto aprendia", assim todos poderiam aprender juntos. Porém, por razões pessoais e profissionais, eu não conseguia ter mais tempo livre para estudar o Ogre e o SDL, então por consequência acabei parando de escrever aqui.
Embora eu tenha deixado essas duas bibliotecas um pouco de lado, meu interesse em C/C++ não diminuiu e eu continuei estudando sempre que podia. Peço desculpas por não compartilhar meu progresso por aqui, porque pensei que como o que eu estudava não estava diretamente relacionado à proposta de um game 3D, pensei que aqui não seria o lugar correto para escrever.
Aprendi nesse processo que o desafio de aprender C e C++ está muito além da linguem em si. As linguagens são fáceis. Não muda muita coisa em relação a todas as outras. O desafio, na verdade, é que para aproveitá-las ao máximo você precisa estudar os fundamentos do funcionamento de um computador. Precisa voltar um pouco na história, ver o contexto em que elas foram criadas, daí a coisa começa a fazer mais sentido.
Outra grande dificuldade é que não existe um repositório central de informações sobre C. Diferentemente do PHP, por exemplo, que possui o manual no php.net, com tudo explicadinho e cheio de exemplos, com o C a gente precisa fuçar muito mais. Em geral, os tutoriais na internet são básicos, explicam o uso das funções e tal, mas em lugar algum você vai achar exemplos avançados, a não ser que baixe o código de programas open-source pra estudar.
Não estou com os links de todas as referências que andei fuçando (fica para um próximo post), mas pra quem tem interesse nos fundamentos, passo o link do livro do Dennis Ritchie, criador da linguagem C. Passo também o link do Gwan, hoje o servidor web mais rápido do mundo, que permite que você escreva em C direto, sem compilar (você salva o arquivo, o servidor compila em real-time e voilà, seu programa tá funcionando). Finalmente, pra quem quiser fuçar o código-fonte de alguma coisa, é interessante olhar a evolução da linguagem de programação Lua, que foi feita em C. O código fonte está aqui, recomendo baixar o lua-all.tar.gz e ler o documento em que os criadores descrevem sua evolução.
Vou tentar pegar um tempo livre nesse final de semana pra migrar esse blog para Wordpress e dividí-lo em duas partes: uma para os fundamentos da linguagem e outra para o tal do game 3D que todos estão esperando. Espero poder cumprir minha missão dessa vez, sem interrupções.
Abraço a todos,
Rafael
Comentários
Você que trabalha nesse badalado mundo de programação, o que tem visto no mercado no que se diz respeito a essas duas linguagens, principalmente C? Não sou fanboy nem atendente de suporte técnico... mas absolutamente não tenho visto empregos que peçam C ou C++. Ao contrário, dá impressão que estamos regredindo aprendendo estas línguas, pois precisa-se de Java aqui, php ali, .Net, .Ado, ASP. etc etc etc. Sente-se ainda firme nesta empreitada desafiadora em um mundo cada vez mais das linguagens gerenciadas? Um abraço.
Bom, acho que a grande motivação pra se aprender C/C++ (ou qualquer outra linguagem) definitivamente não deve ser apenas mercado de trabalho.
A popularidade do C para softwares corporativos pode até cair, porque em outras linguagens você desenvolve mais rápido e a velocidade de execução não é um fator crítico. Porém, o C não deixará de ser usado para aplicações de missão crítica, como transações na Bolsa de Valores, por exemplo.
Entenda que numa aplicação que a cada segundo são negociados Milhões de R$, cada milissegundo de desempenho que seu código ganha faz muita diferença no bolso de muita gente. Essa diferença de milissegundos não consegue ser ganha em Java ou PHP, por exemplo.
Outro caso em que o C/C++ é muito popular é no mercado de games. As melhores engines são feitas em C, e não vão deixar de ser, porque você precisa calcular iluminação, partículas, câmera, textura, coordenadas, som, física, input do jogador, inteligência artificial e mais algumas outras coisas para centenas de milhares de polígonos no mínimo 30 vezes por segundo. Esse desempenho para gráficos mais realistas só se consegue em C/C++.
Outros exemplos são Sistemas Operacionais (não só Linux, Windows e Mac OS; pense também no SO do robozinho que foi pra Marte, da sua televisão, do elevador do seu prédio e até das maquininhas de café).
Navegadores de Internet, Processadores de Texto e mais uma infinidade de aplicativos que usamos diariamente tem o C/C++ nas suas entranhas.
Quanto ao emprego, sempre vão existir programas feitos em C que precisam de manutenção e upgrade. E se a quantidade de pessoas interessadas em C diminui, o valor (e o salário) das que se interessam aumenta bastante.
Pra concluir, independentemente do mercado de trabalho ou do que se possa fazer com a linguagem, no final das contas não é a linguagem que importa; e sim o que você quer fazer com ela. A linguagem é só uma ferramenta. Nenhuma ferramenta no mundo é a melhor para TODOS os casos. Portanto, procure aprender por curiosidade, por prazer, por satisfação pessoal e se divirta ao longo do caminho. Se não há o desejo de aprender dessa forma, mesmo que vc arrume um emprego na área vc não vai ser feliz nessa profissão.
Abração, boa sorte aí no aprendizado e na procura do trampo. ;)
Não entendi direito a pergunta, mas para publicar um game, você vai precisar de muito mais do que só a programação. Precisa de uma equipe de programadores e artistas, dinheiro e um publisher. Se quiser fazer um game sozinho, a ferramenta correta não é o C/C++; vc deve usar Unity (http://unity3d.com) ou Flash.
Espero ter ajudado.
Abraço
crossfire on-line,sabe level up e
3d suponho q o flash nao daria pra fazer um jogo iper ne intao q q eu posso fazer?mestre.
precisaria de um progama iper bom nao e?
pra quelas pessoas com o raciosinio fraco como eu pq eu nao entendi ja li tudo tipo, todos os cliks todos os links vi todos os dowloads mas nao consigo entender por causa q eu sou mais ou menos iniciante e nao entendo nada sobre o caso do c/c++ entao se vc puder postar um video de como vc fez para postar,os movimentos,os artistas por causa q eu nao sei como fazer isso entendi.
li tudo q vc colocou as escritas os cliks e os em destak eu queria pedir um favor,eu so das pessoas que tem um raciosinio fraco e muito lento como uma tartaruga eu tenho vontade e prazer e mais do q satisfasao mas fiko triste por saber q nao consigo colocar o q aprendi em jogo entao se vc puder mostar os dowloads as manutenções e poder me mostrar como por tudo em jogo e postar o jogo por favor rafael(mestre), pesso q vc poste videos com cada detalhe agradesso mestre obrigado icaro
estou começando a entender o C/C++,
e o vosso comentario ao anonimo me
ajudou muito.
abraço.
Recomendo você baixar o Unity em http://unity3D.com, tem vários vídeos tutoriais ensinando como faz. Dá pra fazer jogos muito bons, com a qualidade dos que vc quer fazer.
Tem vários vídeos tutoriais em português para Unity, dá uma procurada no Youtube que vc encontra. Segue o link de um deles: http://www.youtube.com/watch?v=KN2dynRPi8c
Abraço
Vida profissional, filho que vem em janeiro, lar e estudos não me ajudam com esse blog; mas espero transformar ele em algo mais útil para as pessoas. Pode demorar, mas um dia sai, com certeza. =)
Tenho estudado por esse tutorial e acho que é atual, simples e completo. A única desvantagem é a língua - pra quem não manja de inglês.
Abraços.
Para converter os códigos em pixels para formar as janelas, o programa usa algumas facilidades das bibliotecas do próprio sistema operacional, que usa os drivers que são fornecidos pelo fabricante do hardware (placa de vídeo e monitor). O programador geralmente não se preocupa com isso, pois existem métodos prontos nessas bibliotecas que vocẽ chama no seu código e a janela aparece magicamente, do jeito que você definir (coordenadas, tamanho, aparência, etc.).
A baixo nível, o programa usa uma Array (coleção) de bytes, onde cada 4 bytes representa 1 pixel. Os valores desses bytes (0 a 255) representam os níveis de 1:Vermelho, 2:Verde, 3:Azul e 4:Alpha (transparência) de cada pixel da tela.
As coordenadas X e Y de um pixel são calculadas multiplicando o valor X que você quer por 4, daí você tem o primeiro byte vermelho do X. Depois multiplica-se esse valor pelo Y que você quer para achar o primeiro byte vermelho do Y.
Claro que não vamos fazer tudo isso na mão, do zero. Existem bibliotecas prontas (e muito boas) para desenhar janelas, como a WxWidgets, que desenha para TODOS os sistemas operacionais e é de graça. Também tem a QT, da Nokia e a GTK+. Existem programas para desenhar interfaces de uma forma mais visual, onde vocẽ "monta" suas janelas arrastando os componentes e ele gera o código para você.
Você também pode usar o que o seu sistema operacional te oferece, mas assim você limita seu programa a rodar apenas no sistema que você está usando. No Windows, tem a biblioteca Win32 e vários programinhas para montar interfaces. Para Mac, existe as bibliotecas Cocoa e Carbon, que vêm com o Xcode (ambiente de desenvolvimento para Apple). Com o Xcode você também desenvolve para iOS (iPhone e iPad). Para Linux existem várias, dependendo do sistema de interfaces que vc usa (como KDE e Gnome), mas geralmente o pessoal usa GTK+ mesmo (já citada acima) que abstrai isso.
Se vc deseja manipular os pixels mais diretamente, existem outras bibliotecas, como a SDL (que já foi abordada aqui nesse blog) e a SFML, mas isso é assunto para outra pergunta.
Você acaba de me dar a ideia de transformar esse blog numa espécie de "perguntas e respostas",onde para cada resposta eu escreveria um post novo. Assim acho que eu atualizaria ele mais. Já migrei ele pro Wordpress, mas não fiz a migração ainda. Com filho vindo aí, fica bem difícil, mas um dia vou arrumar tempo (sempre digo isso) se Deus quiser.
Abraço
sabe, andei compilando códigos de C#, um servidor ou emulador de um jogo para poder jogar em single player e vi que ele é meio parecido com java e c++ além de ter direcionado a objeto.
Queria muito aprender, mas esses tutorais que vejo pela net são complicado, complexo, não ensina nada para quem nunca mexeu com a linguagem propriamente dita (leigo dos leigos) vamos dizer assim.
sem contar os livros que são muito, mas muito caro.. um livro do visual C# por exemplo ta custando mais que 200 reais.
como eu posso usufruir desses tutorais e ter uma noção clara e tirar aproveito sem me esforçar, pq ta difícil de mais.. pra vc ter uma idéia.. em 2003 comecei mexer com debugger em assembly sem saber nada de nada e hoje tenho uma noção 70% e C/C++/C# ta difícil de mastigar e engolir, assim como object pascal, visual basic..
falta mesmo é um tutorial didático e claro para leigo
Abraços
De fato, a falta de materiais bons para leigos dificulta um pouco, mas não impossibilita. Com persistência, dá pra superar as principais dificuldades, daí depois parece que as coisas ficam mais fáceis depois que você tem um daqueles momentos "A-HA"!.
Eu vou tentar retomar esse blog com mais calma para escrever o que eu acho que falta enquanto estava aprendendo (e ainda estou, sempre). Hoje tenho mais experiência do que naquela época. O que dificultava escrever é que eu pesquisava para poder colocar aqui, hoje tem algumas coisas que já entendo e consigo compartilhar mais rápido.
O primeiro passo vai ser copiar algumas perguntas que me fizeram nesses comentários e transformar em postagens, daí acho que vamos ter um bom material para começar.
Abs