Aprimorando o nível do meu código C / C ++

16

Estou programando há 3-4 anos e sinto que não posso mais ser chamado de iniciante, mas li algumas perguntas neste site e acho que WTF elas estão falando? Sinto-me da mesma maneira quando pego livros de programação hoje em dia.

Eu li vários livros de programação para iniciantes, alguns sobre C / C ++ e outros sobre jogos. Eu escrevi algumas coisas mais complexas, como AI muito básica, serial e interface TCP / IP.

Pretendo me tornar um programador de jogos, mas recentemente me interessei um pouco por sistemas embarcados depois de ter a chance de trabalhar neles (a interface serial).

Achei muito difícil encontrar materiais para continuar meu aprendizado depois de concluir a introdução e os livros para iniciantes, pois não existem livros C ++ intermediários que eu possa encontrar.

Que conselho você daria para crescer e aprimorar meus conhecimentos e habilidades? Recursos específicos seriam muito apreciados.

Skeith
fonte
Para livros em C ++, consulte esta pergunta: stackoverflow.com/questions/388242/…
Naveen

Respostas:

10

Se você está falando sobre C / C ++, definitivamente pode usar alguma experiência extra. A primeira dica que darei é que C e C ++ são linguagens completamente diferentes . O melhor recurso para aprender C ++ é o StackOverflow - existem muitas pessoas que possuem grandes quantidades de experiência e conhecimento.

A próxima coisa a fazer é iniciar um projeto importante, como tentar escrever um mecanismo de gráficos 3D em uma API de baixo nível como o DirectX, e quando seu design falhar miseravelmente como todos os primeiros projetos, você aprenderá algo sobre como não programar.

Você pode verificar este link no StackOverflow para obter uma grande lista de bons livros para aprender C ++.

DeadMG
fonte
3
Não, o melhor recurso para aprender C ++ é um bom livro, ou preferencialmente livros.
Neil Butterworth
+1 Para iniciar um grande projeto. Eu aprendi mais através de um mecanismo de gráficos 3D do que qualquer coisa que li em um livro. Obriga você a entrar em situações desconhecidas que exigem pesquisa para serem resolvidas. Não é bonito, não é eficiente, mas você aprenderá alguma coisa.
SC Ghost
+1 em "Se você está falando sobre C / C ++, definitivamente pode usar uma experiência extra". -1 para "O melhor recurso para aprender C ++ é o StackOverflow", portanto não há voto.
Residuum
5

Antes de tudo, aumente sua base teórica básica naquilo que você ainda não conhece. Estude a teoria e escreva alguns exemplos curtos.

Exemplo de base teórica básica inclui:

  • Algoritmos e estruturas de dados
  • Design de software (UML, padrões de design, OOP)
  • Sistemas operacionais e programação paralela

Em seguida, considere aprender uma linguagem adicional (por exemplo, Java ou C #). - Estudar idiomas adicionais ajuda a melhorar os prós e os contras de qualquer idioma que você esteja usando e a aprender as práticas recomendadas que você talvez não conheça.

Em seguida, escolha um novo domínio (programação na web, computação gráfica, processamento de imagem, visão computacional, acesso a dados, ...). Estude a teoria e escreva alguns exemplos curtos.

Em seguida, crie um grande exemplo, que encapsulou um aplicativo de várias camadas, manipulando o acesso a dados, a interface do usuário e um domínio específico que você escolheu. Coloque ênfase na arquitetura do aplicativo (verifique se as partes estão o mais frouxamente possível).

Felizmente, você aprenderá como aprender novas abordagens e tecnologias e integrá-las a uma boa arquitetura.


Especificamente para programação de jogos, recomendo escolher os seguintes domínios / tecnologias:

  • Noções básicas de processamento de imagem
  • Qualquer tecnologia de interface do usuário específica
  • Noções básicas de computação gráfica
  • Qualquer mecanismo gráfico específico (por exemplo, DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Noções básicas de Física Mecânica
  • Qualquer mecanismo de física específico (por exemplo, PhysX, ...)
  • Qualquer mecanismo de jogo específico (por exemplo, XNA, ...)
  • Programação multithread
  • Programação distribuída


Editar:

Como aprender:

  • Leia e execute exemplos do CodeProject.
  • Navegue por alguns livros de uma biblioteca de livros / e-books ou armazene até encontrar alguns livros que você goste (que correspondem ao seu estilo de leitura + cobrem os tópicos sobre os quais você deseja ler).
  • Leia blogs.
  • Experimente as coisas e pergunte no StackOverlow quando ficar preso.
Danny Varod
fonte
Eu sei x direto. segundo, pensei nisso, mas não consigo encontrar recursos além do básico, você tem algum conselho sobre COMO aprender as coisas?
Skeith
2
Escrevendo exemplos - tentativa e erro é o melhor caminho. Além disso, consulte editar.
Danny Varod
1

Usando C ++ (em combinação com C), suponha que você terá mais para aprender a entender o WTF sobre o qual eles estão falando. C ++ é várias linguagens, várias camadas de abstrações que vivem no mesmo local e leva muito tempo para explorar tudo uma vez e depois entender o que você acabou de ver.

Estive no seu caso e ainda estou aprendendo sobre esses idiomas. Também aprendo muito trabalhando em sistemas embarcados.

Aqui está o meu conselho:

  • Leia esses livros: /programming/388242/the-definitive-c-book-guide-and-list -> Comece com os livros introdutórios, mesmo que você sinta que não é iniciante, porque possui para resolver muito seu conhecimento básico antes de prosseguir. Em seguida, aprenda sobre a metaprogramação de modelos e restrições de sistemas incorporados.
  • Pratique muito: quanto mais você aplica o que aprende, mais entende. Nesse ponto, minha maneira de fazer é testar qualquer canto das linguagens e do contexto em pequenos projetos de teste. Eu também tenho "grandes" projetos residenciais nos quais estou no controle de tudo, pratico novas técnicas e as empurro até que elas se rompam.

Não assuma que você já sabe muito sobre programação. A maioria dos desenvolvedores amadurece em programação somente após mais de 10 anos de prática no mundo real, com diferentes contextos e tipos de projetos, plataformas etc.

Você está apenas começando sua jornada.

Klaim
fonte
3
Sem mencionar que "maduro", como você está usando, está longe de "nada mais a aprender". Quanto mais você aprende, mais coisas você sabe que não sabe.
David Thornley
0

Com base nos seus interesses em programação e jogos incorporados, eu também recomendaria o seguinte - você pode ler as listas de livros das postagens acima para encontrar um bom material sobre todos esses assuntos. Um livro que achei essencial foi The C ++ Standard Library: Um Tutorial e Referência

  • Se você não estiver familiarizado com o básico do OOP - aprenda-o primeiro. Entenda os conceitos básicos de herança e encapsulamento. Saiba como as palavras-chave virtual, pública / protegida, privada e estática se comportam.

  • Fique à vontade usando ponteiros e referências (e geralmente prefira referências). Aprenda e use a construção smart_ptr <> para obter o gerenciamento de memória "automagical".

  • Aprenda a usar modelos C ++ - inicialmente apenas como tipos de dados de contêiner. Você descobrirá continuamente novas e mais poderosas técnicas que os modelos C ++ podem executar via metaprogramação.

  • Aprenda o STL: use string, iostream, exceções e classes de contêiner, e prefira-os aos tipos de dados char *, FILE * e char [] de nível inferior sempre que possível.

  • Comece a usar partes da biblioteca Boost - eu recomendaria que você aprendesse primeiro a biblioteca ASIO e Thread, de acordo com seus interesses. Essa é uma base de código C ++ multiplataforma muito poderosa, de código aberto, que permite escrever códigos de alta qualidade que também sejam portáteis. (Muitas adições ao padrão principal do C ++ foram originadas nas contribuições do Boost)

  • Diverta-se! Sério - escolha alguns projetos para codificar. Talvez conserte as placas do Arduino, se você gosta de projetos de programação incorporados.

  • Obtenha um pouco de experiência - se você usou apenas o Windows / Visual Studio C ++, tente escrever um código para Linux / g ++ ou OS X / XCode (você pode codificar C ++ no Mac ou pode realmente expandir seus horizontes e continuar para o Objective-C, para ver como outro ramo das línguas OOP aborda as coisas!)

Holtavolt
fonte