Partage
  • Partager sur Facebook
  • Partager sur Twitter

Par quel langage commencer?

Je souhaite apprendre un langage de programmation

Sujet résolu
    20 mars 2015 à 19:53:00

    Bonjour, j'ai 14 ans, et je souhaite apprendre un langage de programmation, mais je ne sais pas par lequel commencer, de plus, je ne sais pas pour quelle utilité (ce qui n'aide pas vraiment).

    Donc pourriez vous me conseiller un langage assez polyvalent, assez portable ; ainsi que des conseils d'utilisation (ex : pour aider au développement de petits projets de jeux vidéos débutants, ou créer des petits logiciels...)

    Merci de me répondre.

    Au revoir

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2015 à 20:05:46

      La bonne question n'est pas « quel langage de programmation dois-je apprendre pour commencer ? », mais « comment puis-je apprendre à programmer ? ». Le plus important est de choisir un bon cours, c'est-à-dire un cours qui cherche à t'apprendre à programmer plutôt qu'à t'apprendre un langage. Le langage ne sera qu'un support de ce cours, et une fois que tu sauras programmer, rien ne t'empêchera d'aller en découvrir d'autres. Ce sera même une bonne chose : en programmation, être curieux n'est jamais un défaut.

      Pour commencer, un bon choix est Apprendre à programmer avec Python 3, de Gérard Swinnen (librement téléchargeable à l'adresse http://inforef.be/swi/python.htm).

      -
      Edité par BananeFraise 20 mars 2015 à 20:11:31

      • Partager sur Facebook
      • Partager sur Twitter
      OCaml, un langage expressif et performant qui vous ferait du bien.
        20 mars 2015 à 20:33:46

        En gros ce qu'il faut c'est commencer par un bon cours, qui explique bien les bases de la programmation, même sur un langage peu polyvalent, afin d'en apprendre un meilleur plus tard une fois que l'on connais la façon de procéder?
        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2015 à 21:32:50

          Exactement ! 

          Une fois que tu acquiers les bases, ça roule tout seul (enfin passer de Python à C++ c'est un peu chaud, mais pour t'adapter à des langages simples ça va être facile)

          • Partager sur Facebook
          • Partager sur Twitter
            3 avril 2015 à 9:34:47

            je te conseille de commencer par le langage C pour la programmation procédurale ça t'apprendra la programmation "bas niveau" sans te soucier dans un premier temps de tout les aspects complexes de la POO, et de connaître les problèmes relatif à la gestion des types, de la mémoire...

            pour les langages orienté Objet il existe plusieurs "écoles"

            -Les langages dynamiquement typés le python en est un bon exemple, il semble être un bon langage pour apprendre à programmer mais c'est aussi un langage de très haut niveau d'abstraction, ce qui veut dire que tu n'a pas de gestion de mémoire, pas de typage explicite... ce qui à mon avis n'est pas très bon pour commencer. Le Ruby est un cousin du python.

            -Les langages statiquement typés, le C++, le JAVA, le C#... il sont souvent un peu plus verbeux et certains comme le C++ demande que le programmeur sache gérer les pointeurs, mais je ne conseillerai pas le C++ pour apprendre à programmer en POO.

            Le C# ou le JAVA (suivant les goûts) me semble être pas mal pour commencer la POO.

            Il existe d'autre paradigmes que la programmation orienté objet et le procédural, jette un coup deuil à la programmation fonctionnelle.

            -
            Edité par para_doxx 3 avril 2015 à 9:35:32

            • Partager sur Facebook
            • Partager sur Twitter
              3 avril 2015 à 9:45:17

              S'il veut apprendre à programmer, pourquoi devrait-il apprendre le bas-niveau, qui l'éloignerait de la chose ? Ensuite, la manipulation de pointeurs (nus) en C++ est une mauvaise pratique.

              • Partager sur Facebook
              • Partager sur Twitter
                3 avril 2015 à 9:56:40

                Car la programmation n'est pas que haut niveau -_-" les moteurs de BDD ne sont pas écrit en python...

                et les langages de programmation haut niveau ont tendance à automatiser des tâches (pour gagner du temps) qu'un programmeur doit savoir faire par lui même.

                Les garbage collectors c'est bien beau par exemple mais ils ne sont pas adaptés a toutes les utilisations, un programmeur doit pouvoir être capable de gérer lui même sa mémoire pour en optimiser sa gestion ... sa me paraît logique à moi ... :euh:

                Exemple : Il y peu de temps j'utilisais une librairie écrite en C de traitement d'image avec un Wrapper JAVA, la garbage collection de JAVA ne libérai pas l'espace mémoire utilisé par certaines variables de la librairie j'ai du le faire à la main...

                si il ne se familiarise pas à des problématique comme ça dès qu'il aura besoin de quitter le fabuleux univers des Frameworks ou des API de haut niveau il va se bouffer des fuites mémoires de partout...

                EDIT: quand je dit bas niveau entendons nous bien je n’exclue bien sur pas l'utilisation de librairies ^^'

                -
                Edité par para_doxx 3 avril 2015 à 10:01:55

                • Partager sur Facebook
                • Partager sur Twitter
                  3 avril 2015 à 10:04:03

                  Le problème de la programmation bas niveau c'est qu'elle demande un peu plus de connaissances (architecture de la machine etc...). Je pense que lorsqu'on débute la programmation, il faut commencer plutôt avec une mentalité haut niveau. Par mentalité j'entends le fait qu'on voit bien qu'en C, beaucoup se dirigent vers la SDL, les jeux etc... et non pas la prog de bibliothèque ou de modules Linux...

                  Le bas niveau viens après, une fois qu'on a une bonne notion de la programmation et qu'on veut apprendre à optimiser, autant qu'en mémoire qu'en instructions.

                  Parce que si je suis ta logique, pourquoi ne pas commencer par de l'assembleur puisqu'il faut comprendre comment un compilo nous facilite la tâche... :/

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 avril 2015 à 10:11:45

                    C'est en effet un point de vu qui se défend... j'ai appris à programmer comme ça personnellement et je m'en porte bien...

                    Je pense que c'est plus facile de passer du "rustique" à "l'assisté" que l'inverse quand on à gouté a l'abstraction c'est très dur de revenir en arrière d'autant plus que en commençant a programmer par du python, C# ou autre le débutant ne sais pas réellement ce qu'il se passe derrière , c'est une sorte de boîte noire magique.

                    J'ai commencé le C en 3éme et je ne savais pas spécialement sur le bout des doigts comment marchais la machine mais j'avais au moins conscience de ce qui arrivait si je ne faisait pas attention... et la connaissance des pointeurs est intéressante aussi pour apprendre comment le programme accède au éléments en mémoire...

                    comment savoir la différence entre une LinkedList et un ArrayList (en Java) sans connaître le principe des listes chaînées, et donc les pointeurs?

                    EDIT: Mais tu as raison je pense qu'un bon programmeur doit au moins avoir appréhendé  un langage assembleur, je pense d'ailleurs m'y mettre à l’occasion.

                    -
                    Edité par para_doxx 3 avril 2015 à 10:18:32

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 avril 2015 à 10:49:41

                      firefreezed89 a écrit:

                       ainsi que des conseils d'utilisation (ex : pour aider au développement de petits projets de jeux vidéos débutants, ou créer des petits logiciels...)


                      les katas sont des petits exercices souvent simple permettant d'apprendre à programmer ou de parfaire son apprentissage, voici un site qui propose des énoncés http://codekata.com/ , il y en a énormément trouvable sur la toile.

                      Quand tu seras un peu plus chaud tu peux faire un morpion par exemple ou un pong avec des librairies graphique (en fonction du langage choisi), un exercice marrant aussi , un Snake en console.

                      -
                      Edité par para_doxx 3 avril 2015 à 10:50:18

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 avril 2015 à 11:06:14

                        para_doxx a écrit:

                        J'ai commencé le C en 3éme et je ne savais pas spécialement sur le bout des doigts comment marchais la machine mais j'avais au moins conscience de ce qui arrivait si je ne faisait pas attention...

                        Tu veux dire quoi par «avoir conscience», savais-tu réellement ce qu'était un segmentation fault, comprenais-tu le terme ? Je trouve qu'un langage haut-niveau utilisant des exceptions bien plus adapté pour débuter: les différentes erreurs s'expriment différemment. Ensuite, ce n'est pas parce que tu as commencé avec et que tu t'en portes bien qu'il faut le recommander. j'ai personnellement commencé par le PHP et il ne me viendrait jamais à l'esprit de conseiller à quelqu'un de commencer par ça.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 avril 2015 à 11:19:10

                          Mais je le recommande car je pense réellement que c'est le mieux pour commencer pas parce que je veux flatter mon égaux. j'ai commencé la POO par du C++ et pourtant je le déconseille ;)

                          Et il est évident que au collège je ne maitrisais pas les arcanes du langage C mais là ou m'a appris a réellement programmer (pas en auto-didacte) on commence par le C comme dans pas mal d'autres écoles il me semble... Après conseille ce que tu veux et respecte mes choix  :-°

                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 avril 2015 à 11:36:27

                            Bonjour à tous,

                            Concernant ce débat entre Avicularia et para_doxx, je souhaite également apporter ma pierre à l'édifice.

                            Je suis d'accord avec BananeFraise: il faut d'avantage un cours qui apprenne comment programmer plutôt qu'un cours qui répertorie toutes les fonctions possibles et inimaginables d'un langage, cela a beaucoup plus d'intérêt.

                            Je pense donc qu'avant d'apprendre un langage quelconque, il faut déjà apprendre à construire l'algorithme de base (comment traduire ce que l'on veut que son fasse sous forme d'algorithme), que ce soit à l'aide de pseudo-code ou d'un schéma UML.

                            Une fois les bases acquises, on peut très bien à commencer à les mettre en pratique à l'aide du C en l'utilisant des fonctions et variables simples, tout en continuant à suivre un cours sur l'algorithmie (degré d'un complexité programme par exemple).

                            Enfin, en ce qui concerne les spécificités bas niveau du C (gestion mémoire par exemple), il faut effectivement apprendre auparavant la structure d'un ordinateur (transistors, processeur, pyramide de la mémoire et stockage). De plus, je pense que ce chapitre orienté "bas niveau" devrait arrivé en dernier dans l'apprentissage du C, après un chapitre montrant les limites du C et les raisons pour lesquelles on a créé des langages orienté objet.

                            Après ce cours combiné "apprendre à programmer et à utiliser le langage C", on pourrait ensuite facilement passer à des langages orienté objet comme le C++ ou l'Objective-C dans un premier temps (car ce sont des langages compilés proche du C dans leur syntaxe), puis d'autres langages de programmation impératifs ou orientés objet (compilé ou interprété), comme le Python, le Java, le PHP ou encore le Lua.

                            Bonne journée.

                            -
                            Edité par colorguest 3 avril 2015 à 11:36:59

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
                              3 avril 2015 à 12:04:25

                              colorguest a écrit:

                              Bonjour à tous,

                              Concernant ce débat entre Avicularia et para_doxx, je souhaite également apporter ma pierre à l'édifice.

                              Je suis d'accord avec BananeFraise: il faut d'avantage un cours qui apprenne comment programmer plutôt qu'un cours qui répertorie toutes les fonctions possibles et inimaginables d'un langage, cela a beaucoup plus d'intérêt.

                              Je pense donc qu'avant d'apprendre un langage quelconque, il faut déjà apprendre à construire l'algorithme de base (comment traduire ce que l'on veut que son fasse sous forme d'algorithme), que ce soit à l'aide de pseudo-code ou d'un schéma UML.

                              Une fois les bases acquises, on peut très bien à commencer à les mettre en pratique à l'aide du C en l'utilisant des fonctions et variables simples, tout en continuant à suivre un cours sur l'algorithmie (degré d'un complexité programme par exemple).

                              Enfin, en ce qui concerne les spécificités bas niveau du C (gestion mémoire par exemple), il faut effectivement apprendre auparavant la structure d'un ordinateur (transistors, processeur, pyramide de la mémoire et stockage). De plus, je pense que ce chapitre orienté "bas niveau" devrait arrivé en dernier dans l'apprentissage du C, après un chapitre montrant les limites du C et les raisons pour lesquelles on a créé des langages orienté objet.

                              Après ce cours combiné "apprendre à programmer et à utiliser le langage C", on pourrait ensuite facilement passer à des langages orienté objet comme le C++ ou l'Objective-C dans un premier temps (car ce sont des langages compilés proche du C dans leur syntaxe), puis d'autres langages de programmation impératifs ou orientés objet (compilé ou interprété), comme le Python, le Java, le PHP ou encore le Lua.

                              Bonne journée.

                              -
                              Edité par colorguest il y a 19 minutes

                              Je ne suis pas d'accord. Tu parles d'apprendre à poser un pseuo-code et un algorithme avant de coder. Resituons le contexte, il a 14 ans et veut découvrir la programmation ! Je pense que si au début de ma découverte on m'avait foutu des algo de tri sous le nez ça m'aurait lassé très rapidement.

                              Vous venez tous avec vos conseils de programmeur. Ok moi aussi dans ce cas je peux lui conseiller d'apprendre ce qu'est une mémoire, comment fonctionne les processus, les services, les appel système etc... avant de se lancer dans la prog. Oui ce que je donne est un bon conseil... mais hors contexte !

                              Il va pas devenir expert en prog à 15ans, faut laisser découvrir la chose, vous avez tous commencé par des gros cours théoriques ? Je pense que non, on a tous commencé émerveillé devant un hello world sur une console et voila. L'apprentissage de tout ce qu'il y a autour viens ensuite. Les problématiques viennent d'elles mêmes par la suite.

                              Ainsi pour moi, commencer avec le C est une bonne chose. Car on va vite se heurter aux pointeurs, aux erreurs de segmentations etc... Pour passer ensuite à l'orienté objet. Commencer par des languages de script tel que python ou perl est très bien aussi. Ou alors commencer par du haut niveau, pourquoi pas, le HTML, puis ensuite le CSS, on va vouloir aller plus loin on va se diriger vers le Php, pui Oh tiens, vers les scripts.... Puis aller encore plus loin, les socket... tiens, du C pourquoi pas ? etc etc etc.... Les choses viennent petit à petit, on se pose pas sur une chaise en se demandant comment coder tel ou tel algo. Un débutant a envie de tester plein de truc, resituez le contexte.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 avril 2015 à 12:58:31

                                C'est vrai que le pseudo code n'est pas très motivant pour un débutant... peu importe de toute façon par quoi on commence; il faut être curieux sur le pourquoi les choses fonctionnent comme elles fonctionnent...

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 avril 2015 à 16:00:43

                                  ... ce qui est exactement ce que j'ai dit il y a une dizaine de jours dans la première réponse de ce sujet. Quelle discussion productive.

                                  -
                                  Edité par BananeFraise 3 avril 2015 à 16:01:23

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  OCaml, un langage expressif et performant qui vous ferait du bien.
                                    3 avril 2015 à 16:42:06

                                    @Avicularia: pardon, je crois que je me suis mal exprimé.

                                    En fait, je ne dis pas qu'il faille commencer par voir les algos de tri, pour trouver le chemin le plus court, ou des concepts comme leDivide to Conquer à froid, sans avoir taper quelques lignes de code.

                                    Je dis qu'avant de commencer à créer des petits programmes fonctionnels (du genre un programme qui dit si un nombre est pair ou impair, que l'on appellerait via la ligne de commande), il faut déjà savoir comment on va construire son programme en fonction de ce que l'on veut qu'il fasse. L'apprentissage du pseudo-code ou de l'UML est pas une fin en soi, le but est seulement de permettre de comprendre comment l'on passe d'une idée à un algorithme, une étape essentielle pour créer n'importe quel logiciel.

                                    Ensuite, concernant les algorithmes plus évolués, il ne faudrait pas les apprendre juste pour les apprendre lorsque l'on souhaite coder pour le fun. Au contraire, il faudrait voir ces algorithmes comme la solution à un problème pratique (par exemple, quel chemin doit-on prendre pour relier un certain nombre de villes en faisant un minimum de kilomètre). On peut très bien passer à côté si l'on ne souhaite pas résoudre de tels problèmes dans le cadre de son loisir.

                                    En réalité, voilà comment je vois les étapes de la création d'un programme:

                                    • Résoudre le problème sous forme d'une suite d'étapes.
                                    • Traduire cette marche à suivre sous forme de pseudo-code ou d'UML (optionnel si l'on passe directement au code).
                                    • Transcrire ce pseudo-code sous forme de fichier de code source C, C++ ou autre.
                                    • Mettre des conditions de contrôle, pour éviter tout problème, et documenter son code (commentaires dans le code et fichiers annexes).

                                    Cependant, cette démarche ne me semble valable que pour des langages de type impératif, la démarche est un peu différente pour des problèmes requérant des langages de type orienté objet ou fonctionnel.

                                    Après, je peux me tromper.

                                    Concernant les aspects particuliers aux composants des ordinateurs ou aux systèmes d'exploitation, je pense que de telles notions ne doivent être apprises qu'en dernier lieu, car il faut vraiment comprendre comment fonctionneUN système particulier, surUNE configuration particulière, ce qui n'est pas évident et n'est pas forcément très intéressant pour une première approche de la programmation (il s'agit je crois de sujets d'études à l'université).

                                    Pour finir, c'est vrai, on peut commencer par un autre langage que le C, tout dépend de ce que l'on souhaite faire.

                                    Le C est une excellente base pour ensuite aller vers le C++ (le langage le plus répandu dans les programmes qui tournent sur nos ordinateurs) ou l'Objective-C. Le Perl ouvre la voie vers tous les langages de scripts, utile pour automatisé certaines tâches de son système d'exploitation (par exemple, faire des recherches de mises à jour hebdomadaire sur une distribution GNU/Linux). Java et Python permettent de créer des programmes portables de nature (qui puisse, en général, s'exécuter sur tous les systèmes d'exploitation sur lesquels un interpréteur de Python ou un machine virtuelle pour le Bytecode Java sont disponibles). Le trio HTML/CSS/Javascript permet de créer des applications universelles avec une interface graphique très facilement, car chaque application est compartimenté d'office entre ce qui est affiché à l'écran, et ce qui se passe en "coulisse".

                                    Juste encore un petit malentendu que je dois dissiper: je ne suis pas un programmeur professionnel. En fait, je n'ai eu qu'un an de cours intensif de programmation environ. J'ai cependant réussi, à la suite de ces cours, de comprendre du code écrit en Objective-C, et à créer une applications avec trois langages totalement différents qui générait un signal bruité à partir de paramètre, l'échantillonnait et le filtrait pour réduire le bruit, et enfin afficher les signaux brut et traité.

                                    Mon avis est donc basé sur mon expérience d'étudiant curieux qui a suivi cette méthode de cours et qui, il me semble, m'a bien réussi.

                                    Sur ce, bon Vendredi Saint et bonne journée.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
                                    Anonyme
                                      3 avril 2015 à 17:04:41

                                      Bon, déjà pourquoi veux tu apprendre à programmer quels sont tes motivations ?

                                      J'ai 15 ans et j'ai appris à programmer il y a quelques années en Python comme beaucoup de gens sur ce forum, mon but à ce moment la c'était de résoudre mes mathématiques en programmant, ensuite j'ai voulu programmer pour mes projets web j'ai appris PHP et Javascript, j'ai pratiqué le PHP pendant plus d'une année entière et maintenant j'apprends à programmer en Swift pour le développement d'applications natives sous iOS dans le cadre d'un projet web mobile pour lequel j'aimerais obtenir une version native, le but ici n'est pas de dire bon je commence je veux coder, mais le fait que tu veuilles programmer doit t'aider à résoudre un problème qui t'ai posé tu aimerais régler ce problème grâce à un site web ou une application, exemple tu fais parties d'une équipe de foot et tu aimerais pouvoir passionné ta passion sur un site web, c'est comme ça que tu avanceras, après si tu n'as vraiment aucuns projets programmé, je te conseil d'apprendre le langage Python, qui a une documentation complète, c'est un langage multi-plateforme, simple, permettant de créer des sites web et des logiciels.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 avril 2015 à 1:36:09

                                        colorguest a écrit:

                                        Le C est une excellente base pour ensuite aller vers le C++

                                        Non.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          4 avril 2015 à 15:45:42

                                          @entwanne: Arguments s'il te plaît?

                                          Concernant mon affirmation, je pense que le C est une bonne base pour aller vers le C++, car:

                                          • Pour de la programmation impérative, à de rares exceptions (cout en C++, printf en C je crois), la syntaxe du C ou du C++ sont identiques (opération mathématique simples, les boucles while et for, embranchement conditionnel if else, positionnement des virgule, point virgule dans le code, etc...).
                                          • On peut intégrer un bout de code en C dans du code en C++ (de même que dans du code en Objective-C).
                                          • Enfin, les différences entre le C et le C++ viennent en grande majorité dans les parties que j'avais nommée "limites du langage C" et "programmation bas niveau", ce qui permet de distinguer clairement les cas où on peut utiliser le C, et ceux où il est préférable d'utiliser des langages avec une autre approche du problème et offrant d'autres possibilité comme le C++, l'Objective-C ou tout autre langage de plus haut niveau (je me souviens que l'usage des chaînes de caractères est, dans certains cas, plus simple en C++ qu'en C, car on utilise l'objet string au lieu du type char qui est un tableau particulier).

                                          Du coup je ne comprends pas forcément ta réponse (mais bon, peut être que c'est moi qui suis à côté de la plaque, mais pour en être certain il faudrait que ta réponse soit plus complète et argumentée).

                                          Est-ce que ta réponse est liée au fait que, vue que les deux langages se ressemblent beaucoup, un débutant s'emmêle les pinceaux et mélange des fonctions typiques du C et celles typiques du C++ (du genre mélanger dans le code cout et printf), ce qui au final donnerait un code totalement illisible et/ou incompréhensible?

                                          Ou bien est-ce dû au fait que, de ce que j'ai lu à certains endroits du net, le C++ est un mauvais langage pour aborder pour la première fois le concept de la POO, et qu'il faudrait plutôt qu'un débutant s'oriente vers un langage qui implémente plus proprement ce concept (du genre Python, voire Ruby (pas forcément adapté pour l'utilisation en programmation impérative))?

                                          En tout cas, j'ai hâte de lire ta réponse à mes questions, et je te souhaite un bon dimanche et un bon lundi de Pâques.

                                          -
                                          Edité par colorguest 4 avril 2015 à 15:46:35

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
                                            5 avril 2015 à 0:53:50

                                            J'ai répondu avec autant de précision que ton message précédent, où tu sortais simplement cette affirmation comme un cheveux sur la soupe. Ce que je pense c'est que le C et le C++ sont deux langages foncièrement différents bien qu'ils aient une syntaxe proche. Passer du C au C++, c'est pas juste ajouter des classes et remplacer printf par std::cout. Préconiser d'apprendre le C pour s'orienter vers le C++ est donc un non-sens total. La gestion de la mémoire n'a rien à voir de l'un à l'autre. Toute allocation sur le tas passe par malloc (ou équivalents bas-niveau) en C, tandis que le C++ offre des concepts bien plus haut-niveau avec new, et un gestion simplifiée des ressources avec RAII. Ensuite, tout code C n'est pas compatible C++, et le fait de pouvoir s'interfacer avec du C est possible avec de nombreux interpréteurs de différents langages. Mais oui, je ne recommanderais pas vraiment le C++ à quelqu'un souhaitant expérimenter la programmation orientée objet pour la première fois, simplement car je trouve ce langage bien trop complexe pour un débutant, et que les concepts liés au polymorphisme et à la généricité sont assez ardus à appréhender.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              7 avril 2015 à 17:08:57

                                              Boudiou. On recommence.

                                              Non, le C n'est pas un passage obligatoire pour le C++. Bien au contraire. Il met l'apprenant dans un état d'esprit de pays magique où les erreurs n'existent pas. Il prend des mauvaises habitudes, et là où il ne perdait qu'un pied en C, c'est la jambe qu'il perdra en C++.

                                              Les exceptions changent fondamentalement la donne dans l'approche entre ces deux langages. D'où la réponse de entwanne qui n'a fait que reprendre très rapidement ce que l'on rabâche dans les forums depuis plus de 20 ans. Ma réponse n'est pas plus détaillée, mais c'est avec plaisir que je peux ressortir la 10aine(20aine?) de liens qui trainent dans mes bookmarks pour ceux qui débarquent dans ces guerres de clochers.

                                              Pour du premier langage, le C est très mauvais. Au lieu de laisser l'apprenant se concentrer sur des trucs cools (s'il est jeune), ou importants comme l'algorithmie (si à la FAC), il va se prendre le choux avec la mémoire. Il bidouillera des trucs ou d'autres qui en réalité ne font que tomber en marche (j'anticipe l'argument bidon comme quoi le C apprend la rigueur alors que pas un seul code qui a servi à "apprendre" cette rigueur n'est robuste (i.e. qui passe le "test" de Raymond Chen avec un if toutes les deux lignes ; ou qui utilise bien deux pointeurs dans realloc, ou ...)).

                                              Bref, certains survivent, beaucoup échouent. Ce qu'il apprend à faire : bidouiller, et donner une vague compréhension du modèle mémoire offerte par les couches hautes des OS dans lesquels nous travaillons. La confrontation avec les détails de gestion de la mémoire est bien trop prématurée en C. Si vous vous tenez à des langages impératifs, il y avait le Pascal, et si en plus vous voulez du carré, il y avait l'Ada. Mais pour le cool pour des ados, il faut se rendre à l'évidence, c'est le python.

                                              Une fois qu'il aura les bases de l'algorithmie : if-else, while/for, traitements de tableaux, vous pourrez lui parler de mémoire et d'aspects plus avancés d'algorithmie (les tris et autres joyeusetés). Et d'objet ensuite. Fonctionnel en parallèle. Déclaratif, et tutti-quanti.

                                              En bâclant les étapes, il n'y a rien de tel pour dégouter du domaine.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                                8 avril 2015 à 11:29:29

                                                Combien de temps on va se ramasser cette ânerie ... Je pense qu'il faudrait ajouter une image en avec du texte en gros et rouge dans le cours de C++ disant "C est différent de C++, bordel de chiotte, et non C ne vous aidera pas du tout à appréhender C++, il vous foutra dedans plus qu'autre chose".

                                                (On pourrait aussi mettre un lien vers le cours de @gbdivers, histoire que les gens apprennent du C++ plus récent, mais OC vont râler si on redirige les gens ailleurs).

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                                  10 avril 2015 à 19:15:12

                                                  @entwanne, Imghs & Ksass`Peuk:

                                                  Après lecture de vos commentaires, je me rend effectivement compte que je me suis lourdement trompé!

                                                  J'avais dans l'idée que, étant donné que, s'il l'on veut programmer quelque chose d'une certaine importance, on sera fatalement confronté un jour ou l'autre au C et/ou au C++, et que l'on n'a jamais pour diverses raisons assez de temps libre pour ce que l'on veut faire (expérience personnelle), il serait plus pragmatique de passer directement au C et au C++.

                                                  @entwanne:

                                                  Selon mon ancien jugement, il me semblait que la gestion mémoire devait faire partie d'un chapitre du C plus avancée que le "gros" du sujet de la programmation impérative.

                                                  Cependant, si la gestion de la mémoire doit impérativement être abordée très tôt dans l'apprentissage du C, alors déjà mon idée de passer du C au C++ grâce à la syntaxe quasi-identique des deux langages tombe à l'eau.

                                                  @Imghs:

                                                  Concernant la gestion des exceptions, le constat est le même que celui pour la gestion mémoire dans la partie de mon commentaire destiné à entwanne.

                                                  Je suis d'accord avec toi, ce n'est pas le C qui apprend la rigueur, mais l'algorithmie. En effet, si un algorithme (donc la solution à ton problème) est mauvais (solution valable mais pas du tout élégante et inefficace), alors, peu importe le langage, le programme et le code seront mauvais.

                                                  Cependant, je n'avais pas pensé justement que la gestion mémoire arriverait si vite dans la programmation en C, et que cela pourrait être aussi contraignant pour un débutant (quoique, si les notions nécessaires concernant la mémoire sont bien expliquées et pas trop poussées (pyramide de la mémoire, notion de "blocs" dans la mémoire, défaut de cache, etc...), on pourrait ne pas trouver cela trop barbant, mais bon...).

                                                  Enfin, concernant les habitudes de codage du C qui font exploser un programme en C++, j'avais l'impression que cela marche plutôt dans l'autre sens.

                                                  Etant donné que le C++ est plus haut niveau, je pensais qu'il y avait des "filets de sécurité" (présent de par un plus grand niveau d'abstraction de la machine) qui permettraient de tolérer certains écarts, et qui seraient absent dans la programmation en C, ce qui ferait s'effondrer le code si l'on codait comme en C++.

                                                  Si tu vois ce que je veux dire, merci de confirmer ou infirmer mon impression.

                                                  @Ksass`Peuk:

                                                  Oui, j'ai dit une ânerie (je pense plutôt à un mot commençant par c, mais je ne sais pas si la charte du site me permet ou non de l'utiliser), mais pas vraiment là ou tu le penses.

                                                  Oui, mon argumentation (comme je vais le montrer plus bas) sur le "passage naturel du C vers le C++" s'effondre comme un château de carte, mais par contre je n'ai jamais dit que le C et le C++ sont pareils.

                                                  Par contre, là où tu aurais pu me taper sur les doigts, c'est lorsque j'ai balancé que "l'on peut écrire du C directement dans du code C++", ce qui, après quelques secondes de réflexions, me semble totalement faux.

                                                  En fait, on interface du code C avec du C++, je crois en utilisant des fonctions codées en C (de ce dont je me souviens, lorsque j'avais créé une application iOS en Objective-C, j'avais utilisé pour dessiner une figure géométrique avec des éléments de la bibliothèque CoreGraphics, qui est semble-t-il codée en C).

                                                  @tous: en fait, si on reprend mon argumentation point par point:

                                                  • Le premier point est difficilement attaquable, le C++ ayant été conçu dès le départ pour ressembler le plus possible au C (pour ne pas trop dépayser les développeurs de l'époque, qui devait déjà apprendre un paradigme de programmation quasi-inédit à ce moment là). Cependant, une syntaxe quasi-identique est elle suffisante pour justifier le passage d'un langage bas niveau à un langage haut niveau.
                                                  • Le deuxième point, c'est de la (le mot qui commence par c) en barre!
                                                  • Le troisième point dépend de la rapidité d'arrivée de concepts avancés qui distingue clairement le C du C++ (parce que, si on apprend juste 20-25% de la totalité des connaissances totales au niveau du C (syntaxe + quelques concept comme les chaînes de caractères montrant ces limites pour de la programmation haut niveau) pour ensuite passer au C++, autant commencer par le C++ non?).

                                                  Par contre, de ce que je retiens de ce qui a été dit:

                                                  • Dire qu'il faut apprendre le C pour passer au C++, c'est idiot, car ces deux langages se séparent assez vite l'un de l'autre en terme de notions à avoir.
                                                  • Apprendre directement le C comme premier langage, cela risque d'être ardu pour un débutant, qui risque d'abandonner ce langage (voire la programmation) de par le faible ratio "réalisation personnelle (ce que l'on peut faire avec le langage)/cours (connaissance)".
                                                  • Apprendre le C++ pour apprendre la POO, ce n'est pas semble-t-il malin (certains langages implémente mieux ce paradigme).

                                                  Bref, pour un débutant, autant mettre le C et le C++ dans un coin, et commencer par un langage simple à apprendre et qui corresponde à ses besoins et envies.

                                                  Pas besoin de forcément commencer par du Python, mais selon moi il faudrait choisir un langage multi-paradigme (au moins impératif et orienté objet, ce qui semble exclure d'office le Ruby qui n'est pas strictement impératif) et qui prépare en douceur un possible passage vers le C++ (Objective-C), voire peut-être le C (après être passer par un langage bas niveau plus accessible), vue que, de toute façon, un futur programmeur sera tôt ou tard confronté au premier langage, et peut-être aussi au second.

                                                  Me concernant, je me retire de la discussion, n'ayant (plus) rien de constructif à apporter à ce sujet.

                                                  Bon week-end et bonne soirée.

                                                  -
                                                  Edité par colorguest 10 avril 2015 à 19:15:52

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
                                                    10 avril 2015 à 21:58:33

                                                    colorguest a écrit:

                                                    Enfin, concernant les habitudes de codage du C qui font exploser un programme en C++, j'avais l'impression que cela marche plutôt dans l'autre sens.

                                                    Etant donné que le C++ est plus haut niveau, je pensais qu'il y avait des "filets de sécurité" (présent de par un plus grand niveau d'abstraction de la machine) qui permettraient de tolérer certains écarts, et qui seraient absent dans la programmation en C, ce qui ferait s'effondrer le code si l'on codait comme en C++.

                                                    Oui ... et non. En fait si on fait du C++ "moderne" (en ce qui me concerne : si on fait du C++), effectivement la gestion de la mémoire n'est en soi plus un problème, il s'agit simplement définir qui est responsable de quoi, d'utiliser les types correspondant et le tour est joué (la majorité du temps). Le problème en fait est que beaucoup de cours (comme celui d'OC) n'enseigne pas le C++ facile mais le C++ où l'on gère les ressources à la main mais, bien sûr, sans expliquer le côté exception du langage. Le résultat c'est du code non robuste, difficile à écrire et à debugger.

                                                    C'est cette gestion des ressources manuelle qui est (entre autre) une catastrophe quand on passe de C à C++.

                                                    colorguest a écrit:

                                                    Oui, mon argumentation (comme je vais le montrer plus bas) sur le "passage naturel du C vers le C++" s'effondre comme un château de carte, mais par contre je n'ai jamais dit que le C et le C++ sont pareils.

                                                    J'ai extrapolé à travers le fait que pour beaucoup de gens (même plutôt compétents) C++ est toujours du C avec des classes. C'est, je pense, le plus grand boulet de C++ : se coltiner le rôle de descendant du C.

                                                    colorguest a écrit:

                                                    • (1) Le premier point est difficilement attaquable, le C++ ayant été conçu dès le départ pour ressembler le plus possible au C (pour ne pas trop dépayser les développeurs de l'époque, qui devait déjà apprendre un paradigme de programmation quasi-inédit à ce moment là). Cependant, une syntaxe quasi-identique est elle suffisante pour justifier le passage d'un langage bas niveau à un langage haut niveau.
                                                    • (2) Le troisième point dépend de la rapidité d'arrivée de concepts avancés qui distingue clairement le C du C++ (parce que, si on apprend juste 20-25% de la totalité des connaissances totales au niveau du C (syntaxe + quelques concept comme les chaînes de caractères montrant ces limites pour de la programmation haut niveau) pour ensuite passer au C++, autant commencer par le C++ non?).

                                                    (1) Le C++ a été conçu sur la base de C pour pouvoir profiter de sa bibliothèque, de ses compilateurs et d'une large part de syntaxe déjà prêtes. Cela a nettement contribué à le rendre populaire, puis plus récemment à le rendre très impopulaire pour qui veut le maîtriser et concevoir des programmes très robustes avec. Les dernières normes corrigent le tir amis arrivent très (trop ?) tard.

                                                    (2) Autant commencer par le langage que tu veux apprendre.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                                      13 avril 2015 à 0:47:12

                                                      Quand je suis cantonné au C, je suis frustré. Je n'ai plus le RAII qui va me simplifier grandement mes codes -- cf le billet d'Aaron Lahman. Je sais écrire du robuste, mais c'est lourdingue. Quelqu'un qui vient du C et qui n'a jamais été initié au RAII, ni compris l'importance de cette bête écrira des codes non robustes en C++. Le langage doit une grande partie de sa mauvaise presse à cela : "il y a C dedans ? Je vais donc faire du C avec des classes. Ca plante, ça fuit, je ne comprends rien aux exceptions (à vouloir s'entêter à ne pas assimiler et utiliser les RAII) => le C++ est pourri".

                                                      Bref, un dev C++ qui fait du C ne fera pas quelque chose de moins robuste qu'un dev C. En revanche le contraire est bien plus probable.

                                                      Concernant les niveaux, le C n'est pas plus bas niveau que le C++. Le C++ est aussi bas niveau que le C. En fait ces notions de niveau ne veulent rien dire quand on regarde les langages de 3e génération. Je vois à la place des axes et chaque langage va être noté plus ou moins fortement sur chacun de ces axes (procédural, fonctionnel, généricité, méta-prog, OO, DbC, gestion des ressources, bibliothèques, communication avec le hard, MT, réseau, perfs, ...), et on arrive à un diagramme de Kiviat.

                                                      Pour ce qui est de commencer par le C pour faire du C++ ensuite, effectivement, c'est idiot dans ce cas là. En fait, paradoxalement, le C++ est plus abordable que le C en temps que premier langage. Bien d'autres langages seront bien mieux. Toujours est-il que peu sont un aussi mauvais choix que le C vu qu'il fait mettre la charrue (la mémoire) avant les boeufs (algos & cie).

                                                      Pour la POO, Eiffel, Smalltalk, voire Ruby seront mieux que le C++ probablement. Java et C# tendent à introduire une vision assez biaisée de la POO. Mais C++, c'est bien plus que la POO. Il ne faut pas voir cette dernière comme une finalité, mais comme une corde de plus à notre arc.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                                        13 avril 2015 à 6:47:19

                                                        para_doxx a écrit:

                                                        Car la programmation n'est pas que haut niveau -_-" les moteurs de BDD ne sont pas écrit en python...

                                                        Des "petites" bases de données en Python :

                                                        http://buzhug.sourceforge.net/
                                                        http://www.pydblite.net/en/PyDbLite.html
                                                        http://gadfly.sourceforge.net/
                                                        https://github.com/adewes/blitzdb (NoSQL)

                                                        Elles se comparent à SQLite.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          13 avril 2015 à 12:16:42

                                                          Personnellement je pense que PHP est un bon langage il pourra faire rapidement des projets, apprendre le Javascript / Jquery et l'ajax et plus tard apprendre la POO ainsi qu'un framework si il en a envie.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Par quel langage commencer?

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown