Le C ++ convient-il comme première langue? [fermé]

26

Un collège local enseigne le C ++ à des étudiants de première année (16 ans) sans expérience préalable en programmation.

En tant que premier langage de programmation, le C ++ convient-il?

Ed James
la source
56
Toute langue peut être une première langue. Ça n'a pas vraiment d'importance.
Adam Lear
8
Cela pourrait vous intéresser - joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Craige
19
@Anna Lear: Bien sûr, n'importe quelle langue peut être une première langue, mais cela ne qualifie pas le C ++ comme une bonne première langue. Si votre réponse était une réponse réelle, je voterais contre elle comme inutile.
Ed James
6
@Doug: Je programme du C ++ pour gagner ma vie ... quel est votre point?
Matthieu M.
9
@Dough - 70% des projets informatiques impliquent aujourd'hui l'écriture de logiciels pour les systèmes embarqués et les micro-appareils. Devinez quelles langues sont utilisées pour ces projets? Devinez qui est le mieux équipé pour les postes de niveau d'entrée? Certainement pas des poneys à un tour Java ou .NET. Cela semble dur, mais les écoles ont rendu un mauvais service à toute une génération de diplômés CS en les formant uniquement pour 30% du marché du travail de programmation. Nous avons une surabondance de programmeurs pour le secteur des applications (30%) et nous avons une pénurie dans le secteur des systèmes (70%). Ces chiffres ne vont nulle part. De futures opportunités de carrière? Oui en effet.
luis.espinal

Réponses:

61

Surtout non .

Pour tout objectif que vous avez en tête pour les étudiants, une autre langue ou séquence de langues serait plus rapide et meilleure. Exemples.

"Les étudiants doivent comprendre les concepts de bas niveau."

Le codage "de bas niveau" ne consiste pas à récupérer des objets new, à les réinjecter deleteet à avoir occasionnellement un pointeur pointant quelque part où il ne devrait pas. Les fonctions, classes et modèles ne sont pas de bas niveau. RAII, 12 façons d'utiliser const, std::ostream::operator<<, protectedet newne sont pas des concepts de bas niveau. Ces choses ont des implications de bas niveau et vous les ignorez pendant des mois ou jusqu'à une future classe et enseignez des montagnes de sémantique C ++ à la place.

Je suggère un assembleur avec un bon environnement et du matériel pédagogique comme MIPS ou MMIX. Si vous êtes pressé, apprenez à C avec des détours à regarder au moins la sortie de l'assembleur. Cela vous donnera toutes les connaissances de bas niveau que C ++ fait, puis certaines plus rapidement.

"Les élèves doivent comprendre l'orientation des objets."

L'orientation objet intégrée au C ++ est bien trop compliquée pour enseigner les concepts OO, ou presque tout autre concept de haut niveau. Voir la FAQ C ++ pour une longue liste de raisons potentielles. Vous devez soit frapper tous ces trucs, ce qui prendra très, très longtemps avec de nouveaux programmeurs; ou bien vous devez en sauter beaucoup, laissant les nouveaux programmeurs dans le noir - en fait, ne connaissant pas vraiment le C ++!

Je suggère d'abord d'apprendre un langage simple et de haut niveau avec des objets (Python, Ruby, Squeak, Common Lisp, Racket), si vous devez enseigner le C ++. Au-delà de cela, apprenez le polymorphisme en tant que concept distinct de OO en visitant un langage fonctionnel.

"Les étudiants doivent comprendre les modèles et la métaprogrammation des modèles."

Personne ne le demande vraiment, mais j'aimerais bien. C ++ a de beaux modèles et STL est cool, mais ils ne devraient tout simplement pas être une priorité suffisamment élevée pour enseigner le C ++ en premier. L'enseignement du système de type OCaml ou Haskell, puis la mise à niveau de ces concepts pourraient de toute façon être plus rapides.

"Les élèves doivent apprendre à résoudre des problèmes."

Oui, vous obtenez cela dans n'importe quel langage, et vous obtenez plus si c'est dans presque n'importe quel langage autre que C ++ parce qu'il y a beaucoup moins de bagages. Encore une fois, consultez la FAQ C ++ pour une liste de toutes les choses que les élèves apprendront au lieu des compétences en résolution de problèmes.

"Tous ces éléments et nous devons utiliser une seule langue." ou "Les employeurs le veulent." ou "Nous avons besoin d'un langage de style C." ou...

Enseigner plus d'une langue.

L'idée que vous économisez du temps ou de l'énergie en enseignant ou en apprenant une seule langue est tout simplement ridicule. Il est basé sur l'idée que l'apprentissage d'une langue donnée prend exactement X mois-homme ( HINT! HINT! ) Où X est un seul numéro ou un numéro par langue. Ceci est presque identique à l'idée que vous pouvez économiser du temps et de l'argent en évitant toutes ces ordures et les tests.

En ce qui concerne les syntaxes multiples, vous paralysez dangereusement les élèves si vous leur apprenez à attendre la syntaxe C dans chaque langue en les rendant très biaisés par rapport aux autres langues.

Presque n'importe quel chemin est plus rapide et meilleur que de commencer avec C ++. Apprendre un langage simple de haut niveau puis C ++ serait plus rapide. L'apprentissage de l'assembleur puis du C ++ serait plus rapide. Tout autre chose que C ++ amènera les étudiants plus rapidement et ils en sauront bien plus pour démarrer. N'enseignez tout d'abord pas le C ++.

Jesse Millikan
la source
4
Très bonne réponse! En effet, de nombreuses fonctionnalités C ++ ne sont pas du tout liées à la programmation de bas niveau.
Marco Mustapic
7
+1, excellente réponse. Il est vrai que parfois les caprices du C ++ sont assimilés à tort à du "bas niveau". Vous avez lié à la FAQ C ++, mais je recommanderais également aux gens de consulter le C ++ FQA (ou "Frequently Questioned Answers": P)
Andres F.
2
Sensationnel. Cela me rappelle la QAI Java ...
Jesse Millikan
Entièrement d'accord. Même Malbolge serait mieux que C ++ pour un débutant.
droite le
2
Ma seule réserve - vous pouvez enseigner beaucoup sans entrer dans les détails qui ne concernent généralement que les personnes qui développent des bibliothèques. Tant que vous précisez que vous ne faites que du C ++ de base ... mais encore une fois, qu'avez-vous appris à personne de toute façon?
Steve314
54

Non, C ++ est un langage difficile, même pour les développeurs C ++ expérimentés. Même pour les algorithmes les plus simples, vous devez expliquer la plupart des subtilités du langage. Prenons un exemple de Hello World:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

Quelle est cette #includecommande? Quoi std::cout. Pourquoi ::? Qu'est-ce que c'est <<? Ohhh, c'est un opérateur surchargé! Qu'est-ce qu'un opérateur surchargé? Sooo, car ints, il fait un peu de décalage, mais quoi qu'il en std::coutsoit, il envoie des trucs à la console. Ohhh, std::coutest un cours d' eau et cours d' eau ont leur <<et >>opérateur surchargé.

Voyons le même exemple en Python:

print("Hello World!")

Voilà, allons coder quelques algorithmes.

Marco Mustapic
la source
15
Le python conviendra à un élève de septième. Un étudiant peut en comprendre bien plus.
Gulshan
13
Bien sûr, mais nous parlons d'une première langue. C ++ est connu pour être difficile à apprendre et à maîtriser, par rapport à d'autres langages. Pourquoi l'utiliser pour enseigner la programmation? Un étudiant peut apprendre le C ++ plus tard, lorsqu'il connaît quelques notions de base en programmation.
Marco Mustapic
8
Vous n'avez même pas mentionné la recherche dépendante de l'argument de << :)
MetricSystem
6
Vous n'avez pas besoin de tout savoir pour commencer avec une langue. cout << peu importe; "ça marche", vous n'avez pas besoin d'entrer dans les moindres détails jusqu'à ce que vous couvriez la surcharge de l'opérateur, etc. plus tard.
Colen
6
Je prendrais Python sur C ++ n'importe quel jour de la semaine comme langage d'introduction.
jprete
21

Ce n'est probablement pas une bonne première langue: syntaxe complexe, beaucoup de règles, ancien langage, gestion de la mémoire sujette aux erreurs. Mieux vaut enseigner à vos élèves quelque chose de plus OO comme Smalltalk, ou quelque chose de plus agréable à programmer avec comme Python, ou quelque chose de fonctionnel comme Haskell.

Ils peuvent apprendre le C ++ plus tard dans la vie (s'ils ne peuvent pas s'en empêcher), après avoir appris de meilleurs langages.

Andres F.
la source
5
Haskell comme première langue serait une expérience intéressante.
Larry Coleman
@Larry, le cours CS de l'Université de Cambridge enseigne le SML comme première langue.
Peter Taylor
1
La programmation fonctionnelle vous tord le cerveau - je sais que le MIT commence avec Scheme assez tôt, mais je suis heureux de ne pas avoir commencé la programmation fonctionnelle avant deux ans de style hybride procédural / OO à l'école.
justkt
11
@justkt: Toutes les langues tordent votre cerveau. C'est juste une question de savoir comment vous voulez qu'il soit tordu.
David Thornley
+1, mais je ne qualifierais pas catégoriquement les langages autres que C ++ comme étant nécessairement "meilleurs".
greyfade
18

Réponse courte: oui!

Je dirais que n'importe quel langage est un bon début mais surtout C ++ (ou équivalent). Ces jours-ci, C # et Java sont des langages majeurs utilisés et programmés.Avec ceux-ci, vous apprenez rapidement à vous appuyer sur les API et les IDE, mais avec C ++, vous avez la possibilité d'apprendre la programmation à partir de zéro, y compris l'optimisation des performances, etc.

Ce n'est jamais une mauvaise idée d'apprendre les bases de la programmation, de la boucle et du tri avant de vous fier aveuglément à un langage intégré à .Sort ();

Mantisen
la source
11
Bouclage et tri, oui. Vous pouvez le faire avec n'importe quelle langue. Mais pourquoi commencer à travailler avec des pointeurs et une syntaxe bizarre quand vous pouvez l'éviter? Vous pouvez apprendre toutes ces choses plus tard, lorsque vous aurez plus d'expérience en programmation.
Marco Mustapic
4
@Marco: Le manuel d'introduction de Stroustrup "Programmation: principes et pratique en C ++" introduit des pointeurs vers le milieu du livre. Vous pouvez faire beaucoup de choses en C ++ sans introduire de pointeur.
David Thornley
4
"Ce n'est jamais une mauvaise idée d'apprendre les bases ... avant ..." Avez-vous des recherches pour étayer cette affirmation? Je sais que beaucoup de gens intelligents le vantent comme une connaissance commune que le «bas vers le haut» est la seule vraie façon d'enseigner, mais c'est un point très controversé et la seule recherche didactique (certes très limitée) que je connais indique la conclusion opposée.
Konrad Rudolph
1
@David: Le problème est que faire "beaucoup de choses en C ++" sans pointeurs est encore pire. Sans pointeurs, tous vos objets sont déclarés sur la pile, ce qui est l'une des pires idées de programmation JAMAIS. Les types de valeur et l'héritage / polymorphisme ne se mélangent tout simplement pas, et essayer de les mélanger conduit à des catégories entières d'erreurs qui n'existent pas dans des langages mieux conçus.
Mason Wheeler
9
Oh mon dieu, non! Pourquoi brûler une offre limitée de cycles cérébraux sur des idiosyncrasies inutiles de C ++? Pourquoi se concentrer sur des choses de bas niveau non pertinentes, comme la gestion de la mémoire, alors que l'objectif est d'apprendre des concepts de base en programmation? Pourquoi sauter dans le grand bain?!
Maglob
14

En fait, je pense que c'est probablement un bon choix comme première langue pour une raison très pratique: après avoir appris le C ++, tout autre langage que vous rencontrerez semblera un jeu d'enfant à apprendre.

ennuikiller
la source
10
Avec tout le crédit dû à Dijkstra, il est pratiquement impossible d'enseigner une bonne programmation aux étudiants qui ont déjà été exposés au C ++; en tant que programmeurs potentiels, ils sont mentalement mutilés au-delà de tout espoir de régénération. ;)
Mason Wheeler
3
Ils devraient désapprendre beaucoup de mauvaises habitudes de C ++. Pour utiliser un autre exemple, connaître l'assembleur fait-il de vous un meilleur programmeur Java? Je dirais que non.
Andres F.
16
@ Andrés F.: Je dois être en désaccord avec ça. Connaître l'assembleur fait de vous un meilleur programmeur, peu importe ce que vous écrivez, car vous pourrez alors comprendre ce qui se passe réellement.
Mason Wheeler
2
@Andres: J'ai vu trop de programmeurs Java / C # venir dans d'autres langages et tout entasser en objets ... ils manquent d'expérience.
Matthieu M.
3
@Andres F. - Au cours de mes 12 années passées à Java, j'ai rencontré ma part de programmeurs Java qui craignent vraiment de ne pas avoir été exposés à des questions telles que l'allocation des ressources, RAII, ne sachant pas comment programmer des applications compatibles avec le gc, etc. Connaître l'assemblage et connaître les langages compilés sans prise en charge automatique des ordures et avec le support de paradigmes autres que OO (C, C ++, Ada, ou à peu près n'importe quel langage compilé sur la famille Algol) vous apprend à écrire des systèmes efficaces et volumineux en Java, C #, Python, vous l'appelez. De plus, le modèle objet en C ++ n'est pas du tout similaire à Java, du tout.
luis.espinal
10

Je me suis enseigné le C ++ quand j'avais 15-16 ans.

Il vaut mieux laisser la magie aux autres et apprendre soi-même le fonctionnement intérieur des choses.


Autrement dit, si vous ne pouvez pas comprendre la syntaxe et la sémantique C ++ d'entrée de gamme, vous n'êtes pas si bon en informatique. Ce n'est pas si dur. Il n'y a aucune bonne raison d'éviter le "C avec les classes".

Si vous vous attendez à ce que les élèves commencent à travailler sur la métaprogrammation de modèles, à déduire les appels polymorphes et à démêler plusieurs hiérarchies d'héritage - c'est ridicule pour une classe d'entrée de gamme pour tout type de langue que vous utilisez.

Il y a une très mauvaise tendance à vouloir cacher les subtilités de la programmation pour les étudiants. Cela ne se termine pas bien (cf. l'essai des écoles Java de Spolsky). Ces personnes se retrouvent sur le DailyWTF si elles ne se redressent pas. Les abstractions fuient, et quand (pas si) l'abstraction fuit, c'est pire que d'avoir à y faire face. J'ai travaillé en tant qu'AT pour les étudiants C ++ d'entrée de gamme. Soit les choses doivent être cachées jusqu'au bout, soit elles doivent être mises en lumière pour être examinées. La magie est l'ennemi de l'apprenant.

Si je devais recommander un langage de départ compilé en code machine, une variante Pascal serait probablement la meilleure approche. Elle a une approche plus régulière et structurée que la famille C d'après ce que je me souviens.

Paul Nathan
la source
1
@Ed: Pas vraiment. J'avais maîtrisé If et Goto dans QBASIC, et c'était à peu près tout. Les pointeurs, tableaux, fonctions, classes, etc. étaient tous dans mon futur C ++. La récursivité était également incompréhensible.
Paul Nathan
5
Attendez, personne ne s'attend à ce que quelqu'un travaille sur un projet en utilisant C ++ sans d'abord comprendre C ++! Cela conduirait en effet à un code digne de TheDailyWTF. Mais contrairement à ce que vous prétendez, il n'est pas trivial d'apprendre le C ++ (et ce n'est pas non plus "C avec des classes"). Le C ++ a une syntaxe et une grammaire énormes, compliquées et parfois non sensées, et une infinité de mots-clés et de règles. C'est une langue horrible pour commencer. En tant que langage d'enseignement, il est affreux car il conditionne les étudiants à penser que les carences de C ++ sont naturelles et inévitables dans le monde de la programmation.
Andres F.
1
Andr: Vous insistez sur une fausse dichotomie: "~ C ++ ou All C ++". C'est fallacieux.
Paul Nathan
1
@Paul: assez juste. Mais considérez ceci: même la syntaxe et la grammaire d'un C ++ simplifié sont compliquées car elles doivent prendre en charge toutes les fonctionnalités du langage complet. Vous avez donc déjà compromis l'utilisation d'un langage laid, même si vous l'enseignez sous ses formes les plus simples. Je suppose que vous ne codez pas seulement en C avec du sucre syntaxique (alias "C avec des classes"), car dans ce cas, vous êtes mieux servi par du C ordinaire!
Andres F.
2
@Andr: Pas vraiment. C ++ offre une simplification syntaxique considérable par rapport à C89. De plus, pour les besoins du niveau d'entrée, les choses sont très simples pour tous les cas
Paul Nathan
8

Je dirais «non». J'avais un désir et un désir d'apprendre la programmation, et je suis allé tout de suite dans mon année d'introduction à l'université avec C ++ dès le départ. Couplé avec un professeur qui enseignait le C ++ comme s'il s'agissait d'un autre langage (concepts qui avaient du sens pour eux, pas nécessairement des concepts de langage ou d'application du monde réel), et des projets lancés tout de suite chaque semaine, je me suis écrasé et brûlé avec la moitié de la classe. Au moment où je pouvais même digérer, expérimenter et appliquer ce que l'on m'enseignait, j'ai eu du mal avec les devoirs du projet qui ont doublé en tests. Je dirais que c'était plus un cours de niveau 200 que 100.

J'ai vraiment fait de mon mieux. Je n'ai pas demandé de sympathie, je savais que ce serait un défi, mais le professeur ne m'aiderait même pas. Je viens de me dire d'aller lire le manuel, comme je l'avais fait.

Je dirais (et certains ne seraient pas d'accord) que Ruby ou Python est un bien meilleur langage pour introduire quelqu'un dans le monde de la programmation. Syntaxe propre, concise, lisible et plus claire.

Kevin
la source
8
Toute langue est une mauvaise première langue si elle est mal enseignée.
David Thornley
3
@David Thornley: cependant, même lorsqu'elles sont enseignées correctement, certaines langues sont un mauvais choix en tant que premières langues. Par exemple, Cobol.
Andres F.
Je suis d'accord, je pense qu'avec un meilleur enseignant, quelqu'un qui se soucie de faire participer les autres et non seulement de parcourir le matériel de cours à une vitesse fulgurante, le résultat peut avoir été différent. Ça a roulé trop vite pour moi.
Kevin
@ Andrés F.: Je ne suis pas en désaccord avec cela. Cependant, le récit de Kevin parlait d'un mauvais professeur, et un mauvais professeur peut foutre Python ou Scheme comme première langue (mes deux candidats pour une bonne première langue).
David Thornley
2
@Chris: J'ai programmé en Cobol et je vous plains :)
Andres F.
8

Non.

En tant que langage d'enseignement, le C ++ n'est que légèrement meilleur que le C, qui est l'un des pires langages d'enseignement du monde. Cela introduit beaucoup de complexité au départ, certaines parties du langage sont profondément non intuitives, et la plupart du temps vous en apprenez plus sur C ++ que sur la programmation en général.

Cela ne veut pas dire que C ++ (ou C) sont de mauvais langages ou ne valent pas la peine d'être appris; juste qu'il y a de meilleurs langages d'enseignement disponibles, tels que Python.

John Bode
la source
1
C est un langage difficile à enseigner, mais il est certainement parmi les pires. COBOL et Java prennent le gâteau comme étant parmi les pires, bien pires que C. La bonne chose à propos de C est que vous devez traiter le métal intérieur à l'avant (sans avoir à plonger dans l'assembleur). Les gens ont réussi à apprendre avec C comme langue principale. Il existe bien sûr d'autres options plus élégantes, comme Python ou Ruby (ou tout langage qui est multi-paradigme et qui ne pousse pas inutilement OO à l'avant même pour les tâches les plus simples.) C n'est pas l'un des pires enseignements choix, pas de loin.
luis.espinal
1
À peine meilleur? Comment figurez-vous? C ++ prend tout ce qui est mauvais à propos de C et s'appuie dessus !
Mason Wheeler
1
@MasonWheeler: Principalement parce que C ++ fournit un stringtype de données honnête à Dieu qui surcharge les opérateurs comme +, =et ==pour faire les choses que les étudiants attendent plus ou moins, par rapport à la façon dont le traitement des chaînes doit être fait en C. Par conséquent, "marginalement" . Je ne recommanderais pas non plus comme langue d'enseignement.
John Bode
7

Il existe deux types essentiels d'enseignement postsecondaire: l'université et l'école de métiers. La différence réside dans ce que vous voulez être prêt à faire après l'obtention du diplôme. Dans le domaine automobile, il s'agit de savoir si vous serez mécanicien ou ingénieur en mécanique.

Cela étant dit, C ++ est un excellent premier langage si vous voulez être ingénieur, et un moche si vous voulez être l'équivalent en programmation d'un mécanicien.

Une classe d'introduction sur C ++ va passer beaucoup de temps à parler des types de données, des définitions, des déclarations, des pointeurs, de l'allocation de mémoire, etc. Ce sont une excellente base si vous avez l'intention de passer plusieurs semestres à pouvoir faire quelque chose d'utile, mais que vous voulez savoir qu'une fois que vous y êtes, vous avez la base pour gérer n'importe quel degré de complexité.

D'un autre côté, si vous voulez pouvoir faire quelque chose d'utile plus rapidement, mais cela ne vous dérange pas si le domaine et la complexité sont limités, alors passer tout ce temps sur ces concepts de niveau inférieur sera un gaspillage. Il existe de nombreux programmeurs qui peuvent écrire un excellent validateur de formulaire html, mais ne savent pas comment concevoir un pilote de périphérique.

Karl Bielefeldt
la source
5

Sûr. Mon premier langage était le C, mais c'était vraiment juste pour faciliter notre classe en C ++. Cela a rendu Java beaucoup plus facile à gérer une fois à l'université. Le C ++ peut avoir une courbe d'apprentissage légèrement plus abrupte, mais s'il est correctement enseigné, ça devrait aller.

FrustratedWithFormsDesigner
la source
4

Non, C ++ ne convient pas comme première langue. Comme indiqué ici, de nombreux programmeurs professionnels partagent cette opinion, mais c'est aussi une opinion que les enseignants professionnels ont.

Voici ce qu'un rapport du doyen de l'Université Carnegie Mellon a à dire sur l'utilisation de C ++ pour un cours d'introduction à la programmation pour les étudiants de première année:

Les langages standard tels que le C ou le C ++ ne conviennent pas à ce cours car leur complexité et leurs lacunes entravent les techniques de raisonnement informelles et mécanisées.

La CMU propose deux cours d'introduction, un impératif et un fonctionnel. SML a été choisi pour la programmation fonctionnelle. Je ne sais pas ce qui a été choisi pour le cours impératif, mais le rapport mentionne l'utilisation d'un sous-ensemble de C.

Joh
la source
2

Sûr. Il existe d'autres langues qui pourraient être plus faciles à comprendre pour les étudiants de première année. Cependant, il existe des moyens pour un enseignant d'introduire lentement des concepts en C ++.

jzd
la source
2

Certainement C ++ peut être le tout premier langage. Mais c'est à quel point il est bien enseigné.

Tout le monde dit que la première langue devrait être très facile à comprendre. Mais mon point est que la plupart des gens commencent à programmer au niveau du premier cycle. Ainsi, vous pouvez enseigner quelque chose qu'ils sont capables de saisir. Et avec C ++, vous pouvez passer d'un niveau inférieur à un niveau supérieur de programmation.

Gulshan
la source
Mais pourquoi ne pas commencer à un niveau de programmation plus élevé? C'est le niveau auquel nous résolvons la plupart des problèmes (à l'exception de certains problèmes spécifiques au domaine, bien sûr). Ensuite, s'ils ont besoin de se rapprocher du métal, ils peuvent apprendre le C ++, l'assembleur, etc.
Andres F.
Je suis d'accord, c'est à quel point il est bien enseigné!
Gary Willoughby
2

Non, absolument pas.

Si je le pouvais, je refuserais presque entièrement son utilisation en milieu universitaire. Pas pour des raisons contraires à celles déjà faites, mais parce que trop de gens pensent que le C ++ (ou ses variantes) est la réponse à presque tous les problèmes car vous pouvez l'utiliser dans presque toutes les situations. C'est le tournevis de la programmation.

Certaines personnes l'utilisent pour serrer les vis, un outil parfaitement raisonnable pour le travail. D'autres l'utilisent comme un prybar, bien que souvent efficace, pas vraiment idéal car un tournevis, peu importe ce que votre père pourrait vous dire, n'est pas un prybar et peut échouer de manière catastrophique en raison d'une mauvaise utilisation car la composition de la tige n'est pas intentionnellement construite pour le genre de forces qu'un prybar rencontrerait. D'autres encore pourraient essayer de l'utiliser comme un poinçon ou un burin, et ils rencontreront presque toujours des problèmes parce que la poignée du tournevis n'a pas été conçue pour le type d'abus frappant que le poinçon ou le burin est conçu pour résister.

À mon avis, le travail d'un programmeur consiste généralement à traduire les vrais problèmes en automatisation qui offre un certain degré d'amélioration de l'efficacité (diminution de l'engagement des ressources pour une tâche), de la vitesse (diminution du temps d'exécution d'une tâche), de la prévisibilité (augmentation de la répétabilité). d'une tâche), ou d'une organisation (accroître la prise de conscience de la relation entre les tâches).

Bien qu'il soit compréhensible que tous ceux qui programment aient des connaissances communes sur les opérations de bas niveau des ordinateurs, et en particulier sur les E / S des périphériques et l'allocation de mémoire, il est certainement rare d'avoir vraiment à utiliser ces connaissances à un degré significatif, sans parler de les exploiter pour le grande majorité des tâches. Tenter de le faire sans comprendre le contexte plus large du problème insère un risque inutile pour un effort.

Il est absurde qu'un premier langage de programmation soit C / C ++ ou des variantes proches, car la classe de problèmes que C et ses dérivés résolvent ne sont certainement pas appropriés pour un pourcentage arbitrairement élevé des problèmes actuels et futurs (sauf là où il faut sauver un programme précédemment tournevis), et est en fait plus d'un ensemble minuscule de problèmes à venir. La plupart des programmeurs ne parviendront jamais à développer des fonctionnalités de base du système d'exploitation ou des interfaces directes d'appareils, malgré la prévalence croissante de petits appareils mobiles interconnectés. La plupart travailleront et vivront comme nous l'avons fait. Correction et suppression progressive d'un code vieux de plus de deux générations, mise en œuvre sur une technologie qui montre déjà son âge ou travail en marge de la technologie sur l'application killer (x + 1).

Pour une première langue, je regarderais Lego NXT, une variante légère mais riche en fonctionnalités de LabView. Bien que Lego NXT ne soit pas largement utilisé dans les entreprises commerciales, il présentera la nature fondamentale de ce que c'est de programmer d'une manière «riche en capteurs». Je pourrais l'associer à un langage de script quelque peu neutre sur la plate-forme comme Javascript ou TCL / TK. Les deux auraient un impact relativement faible en termes de ce que vous devez découvrir pour effectuer des tâches très basiques mais efficaces, avec un rendement élevé en termes de boucle de rétroaction et de flexibilité pour introduire et résoudre divers degrés de complexité du problème. De plus, il offre une bonne opportunité aux étudiants à mesure qu'ils avancent pour explorer le potentiel de dépassement de ce qui est fourni dans l'environnement en conserve: une chance d'essayer de travailler dans l'obscurité, l'humidité,

Après avoir appris à conduire la boîte automatique à quatre cylindres, montez-les dans le grand hotrod manuel v8, s'ils sont vraiment intéressés et motivés. Si Joel ne peut pas trouver les programmeurs de rock-star sous une pierre sous ses pieds, il devra peut-être continuer à chercher ailleurs, ou repenser pourquoi il peut avoir besoin de plus d'un tas de tournevis dans sa boîte à outils.

JustinC
la source
1

Certains des points où les débutants font facilement des erreurs en C ++ sont:

faire des devoirs où vous vouliez tester = vs ==

Manquant ;

Lisibilité des accolades contre par exemple pascal début-fin

Et puis il y a tous les fichiers include, les macros, la gestion de la mémoire, etc. à confondre.

Je dirais donc que le C ++ n'est pas le meilleur langage pour commencer - mais il ne fait aucun doute qu'il peut être très utile lorsque vous l'avez appris.

Je voudrais - comme d'autres l'ont également suggéré - utiliser C #, Java ou peut-être même VB - et un bon IDE avec mise en évidence de la syntaxe, débogueur, etc. pour faciliter la récupération des erreurs.

Rune Andersen
la source
1

Quand j'étais au collège C ++ était la langue de base qui a été enseignée tout au long de la première année de collège. La théorie était qu'il contenait des concepts de programmation complexes, donc si vous pouviez le maîtriser, vous pouviez choisir d'autres langages. Cela m'a bien servi de bonne base.

Cela dit, au cours de ma dernière année, j'ai fait partie d'un comité pour déterminer s'il fallait ou non passer le langage de base à Java. Après avoir parlé à plusieurs employeurs éminents et à certains anciens du département, il a été déterminé qu'un passage à Java était dans l'intérêt des étudiants. Les employeurs à qui nous avons parlé voulaient que les gens aient de l'expérience dans une langue qu'ils utilisaient pour les embaucher. Je crois que maintenant, 10 ans plus tard, ils utilisent toujours Java comme langage principal.

Sur une note similaire, nous avons cherché à embaucher quelques diplômés récents avec de très bonnes compétences en C ++. Nous n'avons pas pu en trouver.

SchwartzE
la source
1

Je dirais oui. Mais n'importe quelle langue peut vraiment être une première langue. Je pense que le C ++ est bon car bien qu'il soit complexe et parfois difficile, il vous montre ce que vous pouvez vraiment faire (moins de limitations). En outre, il a une conception orientée objet qui peut vous aider à vous préparer à affronter d'autres langues.

C ++ était ma première langue et je suis content qu'elle l'était. Cela m'a fait réfléchir dans l'état d'esprit de la POO dès le début et j'en suis reconnaissant. Mais au final, cela se résume vraiment à ce que vous voulez faire. La langue n'a pas autant d'importance car si vous pouvez vous améliorer avec une langue, il est probable que vous n'aurez aucun problème à en choisir une autre. Qu'est-ce que tu veux faire? Faire des jeux? Programme pour téléphones portables? Chacun disposera d'outils et de langages mieux adaptés.

user16281
la source
1

C ++ est un langage expert, pas un langage débutant ... dirait C d'abord, pas Java ou C # ou Python ... pourquoi? parce que C vous apprend à prendre soin de votre mémoire et de certains concepts délicats tels que les pointeurs qui sont "cachés" par toutes les langues et qui sont cependant présents partout. J'ai vu tellement de jeunes développeurs qui ne comprennent même pas pourquoi la mémoire devrait être libérée parfois et croient que le garbage collector n'est pas un petit nain qui nettoie tous les craps de codage: ils instancient, ils instancient et explosent, il explose même s'ils ont XXXXGb RAM ... Mais ils ne comprennent pas pourquoi le ramasse-miettes ne nettoie pas tout simplement comme par magie! Et j'ai vu ce genre de développeurs coder en C ++ (et encore plus fou, en Corba) et ce fut un massacre !!!!!!!!!!! Je conseillerais donc d'apprendre le codage en C, puis d'aller en Python / Java / C # pour les concepts d'objet et tout le sucre autour. Ensuite, quand vous comprenez tout cela, vous allez en C ++ et vous ressentez la puissance du C ++ mais vous découvrez également tous ses dangers et pourquoi il ne devrait être utilisé par personne;)

mandubien
la source
1

NON. Il y a tellement de choses que C ++ a, ce qui rend difficile pour un débutant de comprendre. N'entrez pas dans le fallacie "tous les langages de programmation sont égaux".

Commencez avec Basic ou Pascal, (ignorez les trucs "ils sont obsolètes"), et plus tard, avec C / C ++ / Java / C # / Perl. Ou si vous en avez l'occasion, d'abord avec Logo & Karel, puis Basic ou Pascal.

PD Certaines universités et collègues ont une classe d'utilisation et de comparaison des langages de programmation, et il m'arrive d'avoir enseigné cette classe ;-)

umlcat
la source
0

Vous pouvez choisir n'importe quelle langue pour apprendre les fondements de la programmation. J'ai appris des trucs en C / C ++. mais 7 ans plus tard, les outils / langages sont changés dans mon école et ils préfèrent java / C #. les langues ne sont que de simples outils. Ce dont vous avez besoin pour vous améliorer, ce sont les fondamentaux. Par exemple, dans le MIT, les gens apprennent les principes fondamentaux de l'algorithme en utilisant python. par exemple, Java peut être bon pour la programmation Web. mais C / C ++ sont bons pour les services et les applications hautes performances. Cela dépend donc de vos situations.

Sarat
la source
0

Si "convenable" signifie "possible", oui. Si pour "bon", certainement non.

Il est possible d'aimer, même d'aimer le C ++, mais pour cela, vous feriez mieux d'apprendre plusieurs langages et de travailler une dizaine d'années avec des bases de code pourries de la vie sarcelle, d'acquérir de l'expérience sur "la création de logiciels non triviaux qui fonctionnent réellement" - alors le C ++ aura du charme.

Pas au début lorsque vous êtes vierge, jouez avec de petits problèmes simples (mais supposément intéressants et amusants).

Je commencerais par python, suivi de SICP (schéma), ou quelque chose de similaire. Peut-être inversé ou entrelacé. Avec ceux-là, vous pouvez simplement régler le problème. Au lieu de combattre le système, marcher dans la boue profonde et apprendre toutes sortes de bizarreries illogiques et leurs raisons historiques.

Plus tard, lorsque vous pourrez déjà programmer votre sortie d'un sac en papier, passez au métal nu: découvrez des méthodes d'assemblage et plusieurs architectures, plus peut-être le mélange de Knuth. Je ne parle pas de mémoriser des opcodes ou de faire beaucoup de choses réelles, juste pour comprendre la mémoire, les registres, l'ALU, les caches, les interruptions et obtenir le niveau de lecture.

Ensuite, avec cette fondation, vous pouvez être exposé à d'autres langages, y compris C ++. Peut-être une bonne idée d'ajouter un peu "d'histoire et d'évolution des langues" entre les deux.

Balog Pal
la source
0

J'ai commencé avec C ++ au collège. J'ai pris une copie de ce livre: C ++ How to Program par Deitel et Deitel . Ce livre est assez bon.

Franchement, il n'y a pas de bonne ou de mauvaise réponse ici, j'ai personnellement trouvé que C ++ était saisissable. Je l'ai appris jusqu'à la POO (j'ai trébuché sur "ce" que je ne comprends pas comment je n'ai pas pu l'obtenir mais peu importe). Essayez-le, ne vous découragez pas. Si vous êtes bloqué, découvrez d'autres langues et continuez à en apprendre de nouvelles. L'idée est que si vous voyez le même concept sous 2-3 formes différentes, vous les comprendrez mieux. Comme je l'ai dit, le concept du pointeur "this" m'a confondu mais quand j'ai vu la même chose en Python (nommé self à la place), cela m'a tout de suite semblé logique parce que je l'avais compris en C ++. Apprenez Java si vous le pouvez, autant de collèges l'enseignent. Apprenez le python ou le rubis car c'est la langue du jour et si vous pouvez explorer plus de créneaux / de nouvelles choses comme Clojure (et toutes les autres lisps), Haskell, Scala ...

nkassis
la source
-1

Non, je commencerais par Java ou C #. Si vous voulez apprendre le C ++, c'est probablement plus facile après avoir appris les bases, comme ce qu'est une classe, comment faire des boucles et des fourches (if, alors des instructions), etc. Il est beaucoup plus important d'apprendre à regarder un problème ou une équation mathématique et le programmer qu'il ne l'est pour déterminer si vous avez libéré toute votre mémoire ou quoi que ce soit.

user16286
la source
2
Pourquoi Java ou C # alors que Python est encore plus simple?
David Thornley
-3

Il semble que l'hypothèse derrière cette question soit "le C ++ semble si complexe, un adolescent de 16 ans pourra-t-il le prendre comme premier langage (de programmation informatique)?"

Au moment où nous avons 4 ou 5 ans, nous prenons la plupart des concepts dans la langue maternelle, juste avec autant d'exposition à cela en écoutant les autres le parler. Formuler de grandes phrases prend toute une vie, cela ne fait aucun doute.

Le C ++ est certainement beaucoup moins complexe / compliqué que, disons, la plupart des langages humains. Les jeunes de 16 ans devraient pouvoir le récupérer. Vont-ils écrire du bon code avec? Je dois attendre et regarder.

vpit3833
la source
4
Les langues humaines peuvent se permettre d'avoir une syntaxe compliquée parce que si vous obtenez la grammaire ou l'orthographe, les gens peuvent toujours vous comprendre. Ce n'est pas le cas avec les langages informatiques.
dan04
-3

Les débutants doivent d'abord apprécier la «programmation». D'après mon expérience dans la formation d'une classe de débutants, ils ont d'abord apprécié ce qu'ils comprennent le plus. Comme Python vs. C #, ils apprécient Python parce que son niveau très élevé et n'utilise pas de symboles comme C #, ce qui signifie très proche du langage humain, son très anglais. Je recommanderais donc d'apprendre la programmation de haut niveau à bas niveau.

Lemuel Adane
la source