La POO en C++ n’est pas sa caractéristique principale non. C’est le RAII qui différencie ce langage de son ancêtre le C.
Je n’ai pas dit que c’était sa caractéristique principale, j’ai dit que c’était une différence majeure. Certes la POO est possible en C, mais elle est extrêmement peu utilisée. Quand tu prends un programme en C et un programme en C++, tu as 99% de chances que le premier ne soit pas objet et le deuxième oui. C’est probablement la différence qui saute le plus aux yeux. L’op ne connaît aucun des deux langages, je ne pense pas que parler de RAII soit pertinent pour lui.
(Ce que je dis là a pour but de clarifier mon propos, pas de dénigrer le tien, toute connaissance est bonne à prendre pour ma part ).
Quand à savoir si le C permet vraiment de connaître ce qui se passe sous le capot, je suis dubitatif. Quand je fais un
malloc
sur mon PC, en vrai je ne sais pas vraiment ce qui se passe en-dessous. J’en ai une vague idée certes, mais pas beaucoup plus précise qu’unnew
en Java. Suffit de regarder la page sur le noyau Linux, avec le superbe schéma qui est dedans, pour voir toutes les couches traversées.
C’est vrai. Mais c’est une première étape pour avoir une idée minimale de ce qui se passe sous le capot, avant d’éventuellement descendre plus bas. Déjà ça permet d’avoir des notions d’allocation mémoire, de heap et de pile, de table de symboles, de librairies statiques/dynamiques, etc. C’est déjà un kit de survie assez essentiel je pense de connaître ces notions, même si on ne sait pas forcément grand chose du fonctionnement exact derrière (mais c’est mieux d’en avoir une idée aussi).
EDIT : je n’ai pas relevé sur le passage d’être un noob bon à n’utiliser que des frameworks si on n’a pas fait de C. Déjà, en dehors du mépris évident, en quoi framework est-il synonyme de facilité ? En quoi avoir fait du C m’aidera à faire un site web scalable, déployé dans le cloud avec un système de traitement de messages en temps réel entre différents composants ? Exemple au hasard hein. Et pourtant j’ai commencé la programmation par le C, je devrais pas être un noob bon à utiliser des frameworks.
Ouais désolé c’était un peu trollesque cette phrase dite comme ça. C’était surtout pour contrebalancer le propos qui consiste à dire qu’apprendre le C ça ne sert à rien. Ca ne sert pas à rien. Ca apporte des connaissances qui peuvent s’avérer utiles pour comprendre des bugs, orienter la réflexion par rapport aux performances et à l’optimisation, avoir parfois plus de compréhension sur des problématiques de déploiement, ou savoir se démerder quand on n’a pas de binding pour une lib ou qu’il est mal documenté. Ca m’est arrivé récemment par ex en codant en Python de devoir redescendre dans le code C du module socket pour vérifier ce qui se passe exactement (et ainsi vérifier une hypothèse par rapport à un bug), et ça m’a bien aidé de connaître le C. Sans ça, j’aurais débogué à l’aveuglette, sans vraiment comprendre d’où vient l’erreur, dans quels cas elle se reproduit et comment boucher le trou avec une certitude de 100%.
Mais j’ai bien précisé qu’avoir ces notions ça reste une compétence secondaire par rapport à celles qui sont directement liées au domaine dans lequel on travaille.
Je ne pense pas qu’il soit possible de faire un kernel en JS… Pourquoi ? C’est une vraie question.
C’est moins une limite du langage que de ses implémentations. A priori, aucune d’entre elles n’est conçue pour fonctionner sans lib standard, pour fonctionner en mode réel (https://fr.wikipedia.org/wiki/Mode_r%C3%A9el), etc. Mais dans l’absolu on peut très bien imaginer créer une telle implémentation, et faire un kernel avec.
En effet, à la place il t’aidera à te faire virer par ton client parce qu’au lieu de répondre à sa demande, tu lui auras fait un site qui segfaulte.
Ne pas confondre "connaître le C peut s’avérer utile, même dans un projet de site web" et "faire un site web en C".
Alors choisis n’importe quel langage et pars avec. Tu es en train d’atermoyer au lieu de juste apprendre à coder, ce qui retarde d’autant plus le moment où tu commenceras à te poser des questions vraiment utiles.
+1
Mais je rejoins @nohar sur un avis : « il ne me viendrait absolument pas à l’esprit de réaliser un projet en C en 2018 »
+1
Sauf peuuuuut-être pour une lib destinée à être portable dans un maximum de langages. Et encore.
Mais honnétement, si une personne te dit qu’il veut apprendre "Du traitement réseau, algorithmie, apprendre la gestion de la mémoire, accès directe au composant, bref..", tu vas lui dire de lire un cours de C, ou des cours de programmation réseau, d’algorithmie, d’archiecture des systèmes, et d’architecture des ordinateurs ?
C’est l’op qui a posé la question "C ou C++", avec les notions suscitées uniquement en contexte.
Les langages de programmation mainstream sont tellement proche que tu peux apprendre n’importe quel langage et réussir à lire (dans les grandes lignes, ce qui est suffisant pour comprendre les tutos) les autres langages. Les concepts de variables, de fonctions, de tests et boucles, de classes, etc. sont tellement proches, que osef un peu beaucoup du choix du premier langage.
Osef du premier langage oui. Mais ce que tu dis est un peu exagéré. Si tu ne connais que Python, comprendre un code C plein de mallocs, de casts et de pointeurs n’est pas trivial et tu peux faire des contre-sens, ou simplement être effrayé et ne pas fouiner là où tu pourrais.
Sauf Perl.