La plupart des opinions sur un Débordement de Pile semblent exprimer une opinion semblable: C++ est plus "dure" à utiliser et il est un "mauvais" choix pour un débutant. Parlant comme quelqu'un qui a été l'apprentissage de C++ comme première langue, sur mon propre temps comme un hobby, pour quelques mois, il ne semble pas du tout dur. Certes, la première fois que j'ai pris un coup d'oeil à pointeurs et leur relation à raw tableaux, le raisonnement derrière eux semblait fragile. C'était avant que j'ai créé ma première pile.
En fait, quand je regarde C# ou Java, le code, il semble restrictif - pourquoi devrais-je écrire une classe à imprimer "bonjour le monde?"
Je suppose que ma question est: qu'est-ce exactement (caractéristiques réelles; ne me donnez pas de telles généralisations, s'il vous plaît) fait C++ plus difficile/mauvais pour un débutant comme moi? Sinon, ce que fait Java/C#/Python etc. plus facile?
(Cette question peut sembler naïve, parce que je ne pourrais pas être familier avec le plus faible niveau des installations. Je n'ai pas foiré autour avec bits/décalage de bits ou quelque chose comme ça. J'ai aussi n'ont pas fait l'interface graphique/jeu de programmation.)
Ce sont quelques raisons accumulées par les postes suivants:
- Relation entre les tableaux et les pointeurs
- L'arithmétique des pointeurs
- par l'une des erreurs (pas C++ exclusive), et pas de vérification des limites
- Modèles
- Manuel de gestion de la mémoire
- les modules de code (pas C++ exclusive)
- Préprocesseur
- chaîne de soutien ne sont pas construits dans
Certaines des solutions à ces problèmes sont les suivants:
- Pointeurs intelligents pour la gestion de la mémoire
- RAII pour la gestion de la mémoire
- les itérateurs pour par l'une des erreurs
- std::string et std::vector pour atténuer les dmg que char* et arr[] cause
Une autre plainte fréquente semble être du peuple insistance sur le C++ étant "C with Classes". Je pense que la qualité de l'émission, en fait un point discutable, depuis un bon programme en C++ permettra d'éviter la programmation procédurale dans la mesure du possible. Un bon programmeur peut également éviter l'utilisation du préprocesseur lorsque cela est possible (à l'exception du module de prise en charge, où il est plus pratique).
Plusieurs réponses de dire que le C++ est "trop grand", en référence à soit intégré dans des installations ou de la STL. Je pense que c'est moins le mérite parce que les débutants puissent se concentrer sur une petite partie de la langue pour commencer.
Jalf.com soulève un point intéressant que le C++ n'est pas nécessairement difficile en raison de sa large gamme de fonctionnalités, mais parce qu'il vous oblige (il n'y a pas d'option pour ignorer) jongler avec qui, TOUT en apprenant à fait programme. Cette interprétation est l'un des plus plausible que j'ai vu pour le moment.
D'autres personnes à ce jour ont soulevé la question avec le supposé: C++ est plus difficile à apprendre pour les débutants. Je pense que ça a été assez dur à apprendre, mais évidemment je n'ai rien d'autre pour comparer. Vous ne savez pas si votre première voiture se comporte bien jusqu'à ce que vous avez été dans un autre. Je pense que c'est un a compris la vérité que l'apprentissage du C++, c'est comme l'apprentissage d'une transmission manuelle de votre première voiture. Vous comprendrez mieux plus tard, mais vous avez encore jusqu'à la fin de l'équitation que l'embrayage trop. (Il faut du courage pour monter une métaphore longtemps, mais je l'ai fait.)
Un consensus semble être que, une fois que vous maîtrisez le C++, la maîtrise de toute autre langue est extrêmement facile (à l'exception peut-être d'un langage fonctionnel comme F# ou Haskell). Cela semble être l'un des plus utiles raisons d'apprendre le C++ la première fois.
Jalf.com soulève quelques questions intéressantes au sujet de ma propre connaissance de la langue, avec cette question:
Juste pour le plaisir, regardons quelques exemples de code:
int arr[10] = {};
int* p0 = arr + 1; // 1
int* p1 = arr + 10; // 2
int* p2 = arr + 11; // 3
int v0 = arr[11]; // 4
int arr2[5];
int* p3 = arr2 + 2;
int diff = p0 - p3; // 5
float* fp = reinterpret_cast<float*>(p0); // 6
int i = 42;
int j = i++ + ++i; // 7
Lequel de ces lignes sont légales, et quel est le résultat? (Indice: trois Seulement sont valide en C++, et de ceux-ci, l'un d'entre eux renvoie une valeur indéterminée)
Mes suppositions étaient de 1, 5, et 7 étaient légales. Il s'avère que le 1 et 2 sont la morale et de la 6 est légal. C'est un peu d'un appel de réveil pour le degré de complexité ma connaissance de l'usage de pointeurs en C++.
Mise à jour:
Depuis que cette question a commencé à défendre mon choix du C++ comme première langue (et, de plein droit maintenant, ma seule langue), j'ai pensé que je devrais mettre à jour les personnes qui ont répondu à mes progrès.
Mon plus gros problème avec la programmation, de plein droit maintenant, c'est simple: je ne sais pas comment faire quelque chose. Bien sûr, je peux écrire une classe qui est utile à quelqu'un d'autre, mais je ne peux pas écrire tout ce qui serait utile pour moi en quelque sorte. Je ne suis pas sûr, toutefois, si cela n'a rien à voir avec le C++ comme première langue, je me demande si je ne suis pas construit pour être un programmeur. C'est agréable (et très frustrant à la fois), mais je ne suis pas sûr si je pouvais me voir faire cela à temps plein dans l'avenir.
Une chose que je n'aime pas c'est qu'il y a trop de solutions à un même problème. Ceci est favorable à plusieurs différents types de programmeurs, mais je ne me sens pas comme je entrer dans le moule de l'un d'eux. Je pense que c'EST en partie en C++de la faute, mais je ne pouvais pas vous dire comment je me sentirais à propos d'un autre langage comme Python jusqu'à ce que j'ai essayé.
Je vais jouer au tennis dans mon temps libre, puis de les résoudre sudoku si que ou de la socialisation ne sont pas des options. Deux d'entre eux ont de multiples façons de résoudre les problèmes - si mon adversaire se précipite sur le net, il faut que j'métier ou d'essayer et a frappé une croix-cour tir qu'il est impossible de volley? Les deux méthodes ont facilement visible avantages et des inconvénients (le premier étant, si l'on n'est pas assez élevé ou il va? Ce dernier étant, si il les balises pour un gagnant sur la croix-cour?)
Ce n'est pas vrai dans la programmation. Une méthode qui semble absolument parfait pour moi, peut-être hackish, lent, trop complexe, trop ou trop simpliste à un autre programmeur. Ceci, couplé avec mon manque de temps/motivation pour continuer la programmation, m'a empêché de faire plus que l'écriture d'une petite quantité de code à chaque semaine.
Quelqu'un peut penser à un moyen de me motiver cette étape passée, ou pensent-ils que je doit juste donner à ce hobby?