Améliorer le niveau de mon code C / C ++

16

Je programme depuis 3-4 ans maintenant et je sens que je ne peux plus être appelé un débutant, mais j'ai lu quelques questions sur ce site et je pense que WTF parle-t-il? Je ressens la même chose quand je prends des livres de programmation de nos jours.

J'ai lu plusieurs livres de programmation de début, certains sur C / C ++ et d'autres sur les jeux. J'ai écrit des choses plus complexes telles que l'IA très basique, l'interface série et TCP / IP.

Je prévois de devenir programmeur de jeux, mais je me suis récemment intéressé aux systèmes embarqués après avoir eu la chance de travailler dessus (l'interface série).

J'ai trouvé très difficile de trouver du matériel pour continuer mon apprentissage après avoir terminé l'introduction et les livres pour débutants car il n'y a pas de livres C ++ intermédiaires que je puisse trouver.

Quels conseils donneriez-vous pour développer et améliorer mes connaissances et mes compétences? Des ressources spécifiques seraient grandement appréciées.

Skeith
la source
Pour les livres C ++, voir cette question: stackoverflow.com/questions/388242/…
Naveen

Réponses:

10

Si vous parlez de C / C ++, vous pouvez certainement utiliser une expérience supplémentaire. Le premier indice que je vais vous donner est que C et C ++ sont des langages complètement différents . La meilleure ressource pour apprendre le C ++ est StackOverflow - il y a beaucoup de gens qui ont de grandes quantités d'expérience et de connaissances.

La prochaine chose à faire est de démarrer un projet majeur, comme essayer d'écrire un moteur graphique 3D dans une API de bas niveau comme DirectX, et lorsque votre conception échoue lamentablement comme tous les premiers projets, vous apprendrez comment pour programmer.

Vous pouvez vérifier ce lien sur StackOverflow pour une grande liste de bons livres pour apprendre le C ++.

DeadMG
la source
3
Non, la meilleure ressource pour apprendre le C ++ est un bon livre, ou de préférence des livres.
Neil Butterworth
+1 Pour démarrer un grand projet. J'ai appris plus de difficultés à travers un moteur graphique 3D que tout ce que j'ai lu dans un livre. Cela vous oblige à entrer dans des situations inconnues qui nécessitent des recherches pour être résolues. Ce n'est pas joli, ce n'est pas efficace, mais vous apprendrez quelque chose.
SC Ghost
+1 pour "Si vous parlez de C / C ++, vous pouvez certainement utiliser une expérience supplémentaire." -1 pour "La meilleure ressource pour apprendre le C ++ est StackOverflow", donc pas de vote.
Residuum
5

Tout d'abord, augmentez vos connaissances théoriques de base dans tout ce que vous ne savez pas encore. Étudiez la théorie et écrivez quelques courts exemples.

Un exemple de base théorique de base comprend:

  • Algorithmes et infrastructures de données
  • Conception de logiciels (UML, modèles de conception, POO)
  • Systèmes d'exploitation et programmation parallèle

Ensuite, envisagez d'apprendre un langage supplémentaire (par exemple Java ou C #). - L'étude de langues supplémentaires aide à mieux comprendre les avantages et les inconvénients de la langue que vous utilisez et vous aide à apprendre les meilleures pratiques que vous ne connaissez peut-être pas.

Choisissez ensuite un nouveau domaine (programmation web, infographie, traitement d'image, vision par ordinateur, accès aux données, ...). Étudiez la théorie et écrivez quelques courts exemples.

Créez ensuite un grand exemple, qui a encapsulé une application multicouche, gérant l'accès aux données, l'interface utilisateur et un domaine spécifique que vous avez choisi. Mettez l'accent sur l'architecture de l'application (assurez-vous que ses parties sont couplées de manière aussi lâche que possible).

J'espère que vous apprendrez à apprendre de nouvelles approches et technologies et à les intégrer à une bonne architecture.


Spécifiquement pour la programmation de jeux, je recommande de choisir les domaines / technologies suivants:

  • Principes de base du traitement d'image
  • Toute technologie d'interface utilisateur spécifique
  • Notions de base d'infographie
  • Tout moteur graphique spécifique (par exemple DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Bases de la physique mécanique
  • Tout moteur physique spécifique (par exemple PhysX, ...)
  • Tout moteur de jeu spécifique (par exemple XNA, ...)
  • Programmation multithread
  • Programmation distribuée


Éditer:

Comment apprendre:

  • Lisez et exécutez des exemples de CodeProject.
  • Parcourez quelques livres dans une bibliothèque ou un magasin de livres / livres électroniques jusqu'à ce que vous trouviez quelques livres qui vous plaisent (qui correspondent à votre style de lecture + couvrent les sujets que vous souhaitez lire).
  • Lisez les blogs.
  • Essayez des choses et demandez sur StackOverlow lorsque vous êtes coincé.
Danny Varod
la source
Je connais directement x. Deuxièmement, j'y ai pensé mais je ne trouve pas de ressources au-delà des bases, avez-vous des conseils sur la façon d'apprendre les choses?
Skeith
2
En écrivant des exemples, les essais et erreurs sont la meilleure façon. Voir aussi modifier.
Danny Varod
1

L'utilisation de C ++ (en combinaison avec C) suppose que vous aurez plus de choses à apprendre pour comprendre le WTF dont ils parlent. Le C ++ est plusieurs langages, plusieurs couches d'abstractions vivant au même endroit et cela prend beaucoup de temps pour tout explorer une fois, puis comprendre ce que vous venez de voir.

J'ai été dans votre cas et j'apprends toujours ces langues. J'apprends aussi beaucoup en travaillant sur les systèmes embarqués.

Voici mon conseil:

  • Lisez ces livres: /programming/388242/the-definitive-c-book-guide-and-list -> Commencez par les livres d'introduction, même si vous sentez que vous n'êtes pas débutant, car vous avez pour bien approfondir vos connaissances de base avant de continuer. Découvrez ensuite la métaprogrammation des modèles et les restrictions des systèmes embarqués.
  • Pratiquez beaucoup: plus vous appliquez ce que vous apprenez, plus vous le comprenez. Sur ce point, ma façon de faire est de tester n'importe quel coin des langues et du contexte dans de petits projets de test. J'ai aussi de "gros" projets à domicile où je contrôle tout et je pratique de nouvelles techniques et je les pousse jusqu'à ce qu'ils se cassent.

Ne supposez pas que vous en savez déjà beaucoup sur la programmation. La plupart des développeurs ne parviennent à maturité en programmation qu'après plus de 10 ans de pratique dans le monde réel, avec différents contextes et types de projets, de plates-formes, etc.

Vous commencez juste votre voyage.

Klaim
la source
3
Sans oublier que "mature", tel que vous l'utilisez, est loin d'être "rien à apprendre". Plus vous en apprenez, plus vous savez que vous ne savez pas.
David Thornley,
0

En fonction de vos intérêts dans la programmation et les jeux intégrés, je recommanderais également ce qui suit - vous pouvez parcourir les listes de livres des articles ci-dessus pour trouver de bonnes sources sur tous ces sujets. Un livre que j'ai trouvé essentiel était la bibliothèque standard C ++: un tutoriel et une référence

  • Si vous n'êtes pas à l'aise avec les bases de la POO - apprenez-les en premier. Comprendre les bases de l'héritage et de l'encapsulation. Connaître le comportement des mots clés virtuels, publics / protégés et privés et statiques.

  • Soyez à l'aise avec les pointeurs et les références (et préférez généralement les références). Apprenez et utilisez la construction smart_ptr <> pour obtenir une gestion de la mémoire "automagique".

  • Apprenez à utiliser des modèles C ++ - initialement comme des types de données de conteneur. Vous découvrirez continuellement de nouvelles techniques plus puissantes que les modèles C ++ peuvent exécuter via la méta-programmation.

  • Apprenez la STL: utilisez la chaîne, l'iostream, les exceptions et les classes de conteneur, et préférez-les aux types de données de niveau inférieur char *, FILE * et char [] lorsque cela est possible.

  • Commencez à utiliser des parties de la bibliothèque Boost - je vous recommande d'apprendre d'abord leur bibliothèque asio et thread, compte tenu de vos intérêts. Il s'agit d'une base de source C ++ multiplateforme open source très puissante qui vous permettra d'écrire du code de haute qualité qui est également portable. (De nombreux ajouts à la norme C ++ de base proviennent des contributions Boost)

  • S'amuser! Sérieusement - choisissez des projets pour animaux de compagnie à coder. Peut-être bricoler avec des cartes Arduino si vous aimez les projets de programmation intégrés.

  • Obtenez une large expérience - si vous n'avez utilisé que Windows / Visual Studio C ++, essayez d'écrire du code pour Linux / g ++ ou OS X / XCode (vous pouvez coder C ++ sur Mac ou vous pouvez vraiment élargir vos horizons et aller pour Objective-C, pour voir comment une autre branche des langages POO aborde les choses!)

holtavolt
la source