342 votes

OK, donc je ne suis plus un débutant. Que ce passe t-il après?

Dans un certain sens, je suis encore très débutant, mais je n'ai pas besoin de lire C++ Primer ou Apprendre le C++ en 21 Jours, ou au moins, je n'ai jeter un coup d'oeil chaque maintenant et puis pour mémoire. Alors, quel est mon problème?

En gros, j'ai commencé à écrire un petit jeu pour aider mon processus d'apprentissage. Le long du chemin, j'ai appris la plupart de tout ce que vous devez savoir pour être appelé "fluent" en C++. Je sais tout à propos de la surcharge, des modèles, des exceptions, RTTI, polymorphisme, etc. J'ai aussi pris un autre petit pas en avant et a commencé à utiliser la STL et de ses conteneurs et des algorithmes. Récemment, j'ai commencé à lire sur la bibliothèque Boost. J'ai aussi lu quelques bons matériaux à propos des modèles de conception et appliqué une ou deux idées pour ce jeu de toutes sortes.

Mais maintenant, la chose a lieu à un arrêt après environ 3k de lignes de code. Pourquoi? Ce n'est pas que je ne connais pas la langue ou qui n'ont pas les idées. Mais connaissant le vocabulaire et avoir les idées ne rend pas un romancier. Même de savoir comment écrire des phrases n'est pas assez. Vous avez à comprendre le flux de, de la structure, et tout le reste pour écrire un roman à succès.

Dans mon cas pratique, je suis tendance à perdre beaucoup de temps à structurer le code afin de fonctionner correctement, par exemple, je suis de perdre la trace de la décision d'envoyer un certain type d'activité avant l'autre. Le programme est évidemment compile bien, mais le moteur d'exécution de comportement peut ne pas être exactement comme prévu. Je suis aussi de perdre la trace de qui possède quoi, qui doit prendre soin d'elle, et ainsi de suite. Peut-être que je ne suis pas assez forte quand il s'agit d'algorithmes, ou peut-être que le coupable est la conception orientée objet - je ne suis pas sûr.

La vérité est que le code est de commencer à regarder un peu comme un désordre chaotique, non pas tant en ce qui concerne les aspect du code qu'en termes d' idées eux-mêmes et de leurs interrelations. Le temps de maintenance est devenue trop déjà.

De toute façon, désolé pour les longs post, mais je me demandais ce que pour apprendre par la suite. J'ai eu un coup d'oeil au fil des livres, ce qui est merveilleux, mais je m'attendais à un peu plus spécifique de la direction. J'ai besoin de passer moins de temps sur la réécriture et de plus en plus sur le travail d'écriture proprement dit.

159voto

Kylotan Points 14114

Ok, j'ai 2 réponses pour vous de choisir celle qui est la plus pertinente.

Tout d'abord, pour réussir à terminer votre application, vous avez besoin d'un domaine spécifique de l'information. Ce n'est pas le C++. Si vous êtes à la programmation de jeux, vous avez besoin pour en savoir plus sur la façon dont les jeux effectivement le faire. Sinon, c'est comme essayer d'écrire un roman policier d'avoir mémorisé un dictionnaire et une grammaire guide, pour poursuivre l'analogie. Ce n'est pas seulement sur les flux et la structure de ceux qui sont encore assez faible au niveau des concepts. Vous avez besoin d'examiner la façon dont les gens abordent le genre, et puis à partir de là, vous pouvez choisir les types de flux et les structures dont vous aurez besoin avec plus de confiance. Le code désordre est souvent tout autant de ne pas comprendre pleinement le cahier des charges que c'est à propos de ne pas savoir comment le programme de manière efficace. Sachant que le domaine vous aide à cerner claires et bien comprises des solutions.

Je recommande le Jeu de Codage Complète (3e édition) livre de Mike McShaffrey pour un bon aperçu de l'approche globale pour faire un jeu. J'ai aussi entendu de bonnes choses sur le Moteur de Jeu de l'Architecture par Jason Grégoire, mais je n'ai pas lu moi-même. Notez que ces deux livres sont assez complexes et axé sur la puissance industrielle de solutions. Si vous n'avez pas besoin d'une force industrielle de la solution, vous pourriez vous demander pourquoi vous êtes à l'aide de C++ pour écrire un jeu où d'autres langues sont plus adaptés pour un développement rapide. Flash est un bon choix, par exemple.

Ce qui m'amène à ma deuxième réponse: code quelque chose que vous aimez. Si vous êtes seulement en utilisant le projet de jeu comme un véhicule pour l'apprentissage de la langue, les chances sont élevées que vous avez perdu de l'intérêt que vous avez atteint le point où vous avez arrêté d'apprendre de nouvelles choses sur la langue et a dû commencer à s'inquiéter des choses spécifiques à des jeux qui ne sont plus sur la réorganisation des concepts que vous connaissez déjà. C'est généralement le point où l'apprentissage est quelque chose que vous devez intégrer dans la pratique des solutions plutôt que quelque chose que vous devez vous forcer à faire purement pour des raisons pédagogiques. Que nous apprennent mieux lorsque la tâche est intéressant.

54voto

Crazy Eddie Points 23778

Après de nombreuses années dans le domaine, je dois dire que toutes ces choses continuent à être des problèmes pour moi. Il est tout simplement difficile de maintenir et de développer des projets d'envergure. Plus il vieillit, plus il semble que le nouvel aménagement est principalement composé de maintenir et de refactoring de l'ancien code. Vous pourriez aller à des séminaires et de la merde, comme je l'ai mais pour être honnête, je ne pense pas que ces gens savent comment résoudre le problème; j'ai toujours demandais si en fait j'ai appris quelque chose d'utile et quand je rentre du travail, je trouve que je suis encore là où j'étais avant.

Chaque projet est différent aussi. Ce n'est pas comme vous pouvez apprendre quelques secrets ensemble de compétences qui va rendre le tout facilement.

Une partie du problème est que le cerveau humain ne peut tout simplement pas tenir suffisamment d'informations à la fois pour être en mesure de suivre tout ce qui doit se produire dans un programme de considérables de la complexité. La seule chose que vous pouvez faire pour soulager cette situation est de composer le projet dans des zones plus petites qui SONT possibles à suivre. C'est une question d'habitude. J'ai lu des tonnes de livres, est allé à des tonnes de séminaires, collège, etc...rien de tout cela n'avait vraiment beaucoup, mais donnez-moi quelques idées ici et là.

Si vous assurez-vous d'adhérer à certains principes, il n'y arriver un peu plus facile. Des choses comme le RAII et les modèles sont un début, mais vous pouvez également regarder dans les "Principes de la Programmation Orientée Objet"; il y a, quelque part entre 4 à 10 en fonction de qui vous demandez. Des choses comme l'OCP, LSP, PRS, etc...ces de les aider à reconnaître quand vous êtes en rendant difficile à maintenir le code.

Bien sûr, rien de cela n'est une panacée. C'est juste quelque chose qui prend de la pratique, et si mon expérience est tout indicateur....il prend f n années. Bienvenue sur le champ.

Edit:

Et juste vous attendez jusqu'à ce que vous n'êtes pas seul à essayer de comprendre un grand projet mais également d'intégrer et de suivre les travaux de plusieurs développeurs de capacité variable et tous avec leurs propres idées de ce qui est bon, facile à travailler avec quelque chose qui est même à distance possible de comprendre par n'importe qui.

44voto

Dave O. Points 1389

C'est une réponse complémentaire. Il n'est pas destiné à remplacer tous les autres réponses, mais d'ajouter de l'information déjà fournie par eux. Il y a quelques très bonnes réponses, et j'ai upvoted en conséquence, mais je pense que chacun d'entre eux de manquer un point.

Ce que Votre question n'est PAS sur

  • Conception du jeu: Ce point concerne Kylotan de et Steve314 de réponses. (qui sont superbes). Oui, Vous êtes coincé dans le développement de Votre jeu. Plus Vous êtes coincé à un point, où les raisons du décrochage ne se trouvent pas dans Votre manque de connaissance du langage de programmation C++. Donc, la suggestion de recueillir domaine spécifique de la connaissance semble plausible. Cependant, je pense qu'il y a un point entre ces deux: la conception de l'Application / le programme de la structuration / génie logiciel / tout ce que vous voulez l'appeler. Vous devez vous adresser à ces points.
  • Les Modèles de conception: Ce point concerne les réponses suggérant des livres sur ce sujet. Les Design patterns sont un sous-ensemble de l'ensemble de la conception de logiciels et donc répondre à la question je l'ai mentionné dans le point ci-dessus. Toutefois, dans le seul étudiant ne va pas Vous apprendre quand, où et comment les appliquer. J'irais même jusqu'à dire, que l'un des modèles de conception de livre dans la main d'une jeune programmeur cause plus de tort que de bien, comme il/elle est fournie avec un vaste ensemble d'outils, mais aucune idée de la façon de l'appliquer et, par conséquent, choisir les mauvais outils dans de mauvaises situations sur la base de son expérience limitée.

Ce que Votre question EST en fait sur

Votre question est à propos d'un mentor. Oui, Vous avez appris à couramment programme en C++ (plus que je peux dire de moi-même^^) et Vous pourriez ne plus être un débutant. Mais Vous êtes une jeune programmeur! (tout bon programmeur est immature jusqu'à la fin de sa vie). Je pense que ce que Vous avez vraiment besoin est un mentor, une personne qui aura un coup d'oeil au-dessus de Votre code et de suggérer comment Vous pourriez améliorer sur la base de ses années d'expérience et peut-être partager une partie de ses passion avec Vous ~ le long des lignes de:

Mentor: "Wow, I really like Your game, nice job mate! Hm, that's the part that causes You trouble?, let's see. I think these two parts of Your programm know too much of each other and every change in one results in the need of the change of the other. But we can decouple them with an interface, it's easy, you'll see =D...".

Pour résumer: De mon point de vue, vous devriez Vous concentrer sur la conception de logiciels après que Vous avez appris la langue. Quelques réponses point par ce qui suggère des livres comme "The pragmatic programmer". Et jusqu'à ce que Vous ne trouvez pas un mentor, je pense que ce sont Votre meilleur pari, mais de mon point de vue, ils ne seront jamais aussi efficace qu'une équipe expérimentée, passionnée programmeur qui peut expliquer des concepts, des modèles, des décisions de conception (et les raisons), ... à Vous dans un format facile à comprendre.

Le Mastering de programmation prend du temps. N'abandonnez pas, le code quelque chose que Vous aimez afin de ne pas perdre d'intérêt trop tôt Kylotan suggéré. Je Vous souhaite à tous le meilleur!

25voto

Dean Putney Points 580

Ne vous découragez pas. Vous vous engagez dans une grande partie du développement de logiciel. L'organisation du code et la maintenance de votre état d'esprit pour la façon dont les différents éléments se rapportent à un autre est une partie importante de n'importe quelle projet de programmation.

Essayez de prendre une pause de ce projet pendant un certain temps, peut-être qu'un jour. Revenir et de faire une carte de tous les éléments clés de votre programme et comment ils se rapportent les uns aux autres. Le dessin de cette. Maintenir à jour que vous vous déplacez vers l'avant avec votre projet. Il semble que vous besoin d'une sorte de référence pour vous rappeler de la façon dont le projet est destiné à travailler.

Le développement est plus que juste de la programmation, c'est une combinaison de plusieurs disciplines. Vous pouvez également essayer de lire un livre sur les modèles de conception comme suggéré par d'autres personnes dans ce fil. J'ai utilisé l'Application UML et les Modèles à un certain succès, et je pense que vous devriez être en mesure de trouver une copie PDF assez facilement.

13voto

tjeezy Points 2873

Voici ce que je recommande:

  • Ramasser quelques livres sur des modèles de programmation (en savoir plus sur Singletons, Factories, Reflection, et la liste est longue)
  • La pratique! N'arrêtez pas de peaufiner votre code. Quand vous dites que vous obtenez à 3k de lignes de code, refactoriser jusqu'à ce que vous vous ennuyer et commencer quelque chose de nouveau (utiliser des références, essayez de faire de chacun de vos projets, le meilleur qu'ils peuvent être -- même, simplement, pour le développement du saké)
  • Suivre les projets open source en C/C++ (peut-être le noyau?) et essayer de ramasser et d'obtenir logés avec le code -- de comprendre pourquoi les gens pensent que c'est bon, ce qui le rend bon, et puis commencer à faire vos propres jugements (apprendre à l'appui de vos croyances quant à la façon dont les autres le programme). Découvrez les projets C++ sur Github.

Aussi, regardez à travers comme beaucoup d'autres réponses à vos question et d'autres similaires. C'est un très populaire question dans ce domaine, avec déjà beaucoup de réponses.

REMARQUE: Comme quelqu'un d'autre a mentionné, l'apprentissage d'autres langues (à mon avis) est extrêmement important. Les paradigmes sont appliqués de manière différente, il y a différentes spécifications différentes pour les langages de programmation (type de système, l'allocation de la mémoire, de la syntaxe, etc.). Le plus important, amusez-vous avec elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X