Partage
  • Partager sur Facebook
  • Partager sur Twitter

Premier petit projet

    12 avril 2022 à 21:28:47

    Bonjour =)

    Alors voilà je débute dans le domaine j'ai appris les bases a l'aide des cours sur OpenClasserooms et de ressource extérieur j'ai fait plusieurs petits exercices sur chaque sujet.

    Mon projet est simple j'aimerais pouvoir faire un petit programme console qui affiche (par intervalle de X minute) le prix d'un article ou d'une devise par exemple.

    Ce programme aurait comme tache d'aller rechercher sur un site le prix de N'article est de l'afficher en console.

    j'ai fait plusieurs recherches je suis tombé plusieurs fois sur les librairies BOOST LIBCURL mais sa à l'air un peux "overkill" pour ce que je veux faire et j'avoue ne pas me sentir assez expérimentez sur les sujets qui suivent pour travailler avec ces librairies.

    J'ai bien compris qu'il y a des choses plus complexes derrière ces libraires comme comprendre qu'es qu'un socket les protocoles etc..... 

    J'aimerais avant tout avoir un conseil pour la direction à prendre, es que BOOST, LIBCURL etc... sont ce dont j'ai besoin de connaitre où je fais fausse route en essayant d'apprendre des choses qui n'ont rien à voir avec ce que j'essaie de faire. 

    Désolé pour les explications si ce n'est pas clair, c'est la première fois que je poste sur un forum ^^'.

    Merci pour le temps qui me sera accorder ! 

    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2022 à 22:06:14

      Tu as pleins d'autres libs pour faire du réseau en C++ https://en.cppreference.com/w/cpp/links/libs#Communication 

      Tu as le choix d'utiliser des libs bas niveaux (comme les sockets du système) et donc de devoir toi même implémenter toutes les couches intermédiaires, ou utiliser des libs haut niveaux qui implémentent ces couches pour toi.

      L'approche la plus efficace est d'utiliser dans un premier temps des libs haut niveaux, de façon à te concentrer sur ton programme et ne pas réinventer la roue. (Ensuite, dans un second temps, si tu veux apprendre a écrire toi même les couches intermédiaires, tu peux réinventer la roue, mais cela implique que tu passeras du temps a implementer des choses existantes - en moins bien en general - et passer moins de temps sur ton application proprement dite)

      • Partager sur Facebook
      • Partager sur Twitter
        13 avril 2022 à 4:54:57

        __Rémy a écrit:
        > Alors voilà je débute dans le domaine j'ai appris les bases a l'aide des cours sur OpenClasserooms et de ressource extérieur
        Je pense que tu es mal parti. Les cours d'OpenClassrooms ne sont pas du tout à jour ni appropriés.
        gbdivers a déjà écrit lui-même des cours.
        Le cours de Zeste de Savoir est plus approprié:


        https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/



        -
        Edité par PierrotLeFou 13 avril 2022 à 4:57:21

        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          13 avril 2022 à 5:34:58

          gbdivers a écrit:

          L'approche la plus efficace est d'utiliser dans un premier temps des libs haut niveaux, de façon à te concentrer sur ton programme et ne pas réinventer la roue.

          À ce sujet je ne sais pas si c'est de l'obstination de la curiosité ou ma manière d'apprendre, mais j'ai le sentiment de devoir constamment décortiquer chaque chose pour bien les comprendre, rapidement je tombe sûr d'autre petite chose a exploré et ça devient vite hors de contrôle, ça me prends du temps pour bien assimilé, mais après c'est ancré, peut être que je devrais radicalement changer mes approches ?

          Es-que tu rejoins son point de vue ?PierrotLeFou a écrit:

          Je pense que tu es mal parti. Les cours d'OpenClassrooms ne sont pas du tout à jour ni appropriés. gbdivers a déjà écrit lui-même des cours.

          En effet les cours de Zeste de savoir ont l'air plus pousser, je devrais faire un "reset" est reprendre tout avec ce support ?

          -
          Edité par __Rémy 13 avril 2022 à 10:04:12

          • Partager sur Facebook
          • Partager sur Twitter
            13 avril 2022 à 7:40:35

            __Rémy a écrit:

            peut être que je devrais radicalement changer mes approches ?

            Oui.

            Imagine si tu voulais suivre la même démarche, juste pour taper sur le clavier de ton ordinateur, c'est à dire de vouloir comprendre tous les détails avant de taper une touche. Alors tu devrais voir en détail un cours d'architecture des ordinateurs et des systèmes d'exploitation. Et pour bien comprendre ces cours d'architecture, tu devrais suivre avant un cours d'électronique numérique, pour comprendre comment fonctionnent les composants dans l'ordinateur. Et avant cela suivre une cours de physique quantique des semi-conducteurs pour comprendre comment les composants fonctionnent. Et donc avant cela suivre un cours approfondi de math. Et au final, tu te retrouve a avoir besoin d'un doctorat de math, de physique, d'electronique et d'informatique avant de taper sur un clavier...

            Ou tu as juste besoin de savoir que quand tu appuis sur une touche du clavier, ça affiche le caractère correspondant à l'écran.

            Tu ne le réalise pas, mais un simple programme "hello world" en C++, on peut écrire un livre de 500 pages pour expliquer tous les concepts utilisés.

            #include <iostream>
            
            int main(int argc, char *argv[]) 
            {
                std::cout << "hello world" << std::endl;
            }

            Est-ce que tu sais comment fonctionne include (et plus généralement le pré-processeur et toutes les étapes de la compilation) ? Est-ce que tu sais comment le compilateur résout les chemins pour include (et aussi la différence entre <> et "" pour les includes) ? Est-ce que tu sais comment fonctionne les paramètres de main (et plus généralement comment fonctionne la communication entre le système et une application via ces paramètres) ? Est-ce que tu sais ce qu'est std::cout (est-ce que tu sais que c'est un objet global avec lazy initialisation via un Schwarz Counter) ? Est-ce que tu sais comment fonctionne << (qui est une surcharge) ? Comment fonctionne std::endl (qui est un pointeur de fonction) ?

            Il est fort probable que la réponse a ces questions sera majoritairement "non". Et ca ne t'empeche pas de savoir écrire un hello world et comprendre comment il fonctionne.

            La raison est que dans la vie de tous les jours et en informatique, on utilise des abstractions, c'est à dire des représentations simplifiées des choses qu'on utilise et qui sont suffisantes pour les tâches qu'on veut accomplir. C'est indispensable d'utiliser des abstractions, parce qu'il n'est pas possible de tout comprendre et qu'on ne pourrait rien faire si on devait tout comprendre avant d'utiliser.

            Ton problème actuellement, c'est que tu ne sais pas gérer le niveau d'abstraction. Tu veux savoir les détails sans te poser la question si connaître ces détails est nécessaire pour la tâche que tu veux accomplir. Si ton but est d'apprendre a écrire un programme qui va chercher des infos en ligne, alors tu n'as pas besoin de savoir comment une lib réseau va chercher ces infos. Si ton but est d'implémenter une lib réseau, alors tu dois connaître ces détails. Mais ça serait une erreur de vouloir connaître les détails si ton but est juste de créer l'application.

            C'est une erreur parce que le temps que tu passes a apprendre des détails qui ne sont pas utiles pour ton objectif, c'est du temps perdu pour apprendre des choses qui sont plus utiles pour ton objectif (ou du temps perdu pour bosser sur ton objectif suivant). Par exemple, sais tu comment on design un application qui utilise une lib réseau ? Sais tu comment écrire des tests unitaires et fonctionnels pour tester une application réseau ? Sais tu comment mettre en place un mock server pour tester ton application ? Toutes ces choses sont beaucoup plus importante pour l'objectif "créer une application qui utilise le réseau" que connaître les détails d'implémentation d'une lib réseau.

            C'est pour cela que je te conseille de commencer par faire ton application avec une lib réseau, pour te focaliser dans un premier temps sur les choses importantes à apprendre pour utiliser le réseau. Puis seulement dans un second temps, quand tu as atteint ton premier objectif, si tu veux aller plus loin dans l'apprentissage de l'implémentation d'une lib réseau, alors tu pourras faire ça. Mais pas dans un premier temps.

            Et bla bla bla, et bla bla bla, je parle trop, on dirait le koala...

            Bref, tu dois apprendre à identifier le niveau de détail que tu as besoin pour réaliser un projet et savoir ne pas aller trop loin dans les détails inutiles pour ce projet.

            __Rémy a écrit:

            En effet les cours de gbdiver ont l'air plus pousser

            Le cours sur Zeste de Savoir n'est pas de moi. Mon cours n'est plus en ligne.
            • Partager sur Facebook
            • Partager sur Twitter
              13 avril 2022 à 9:57:49

              Un hello world en C++ utilise ces concepts mais ce n’est pas strictement nécessaire pour résoudre le problème, un hello world en basic ne ferais pas tout ça en dessous. Et je trouve que quand on veut apprendre c’est bien de ne pas chercher à faire des trucs super compliqués, donc par exemple ici au lieu d’utiliser une lib pour combler les lacunes, bah tout simplement on se passe de la fonctionnalité et on commence simplement par envoyer un socket sur une autre machine et ensuite on complexifie petit à petit. C’est tres frustrant de faire un truc en ne sachant pas comment on a fait. Alors oui les sockets c’est déjà très haut niveau par rapport à du sable mais ça reste un des niveaux les plus bas accessibles au programmeur, et elle est là la différence, entre tout comprendre depuis le sable (ce qui serait compliqué) et tout comprendre à partir d’un simple environnement de dév qui en fait le moins possible côté programmeur. Si on part d’en haut pour ensuite descendre on a des chances de laisser des trous et ignorer comment marche tel ou tel truc.
              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2022 à 10:17:45

                JadeSalina a écrit:

                Si on part d’en haut pour ensuite descendre on a des chances de laisser des trous et ignorer comment marche tel ou tel truc.

                Et réciproquement. La question est juste où avoir des trous est acceptable : dans les mécanismes bas niveau que les libs font et feront toujours 100 fois mieux que toi, ou dans les aspects haut niveaux (design, tests, etc. tout ce qui fait la qualité logicielle) de ton application, qu'il n'y a que toi qui peut le faire.

                Le bas niveau, ca sera des connaissances qui te serviront dans 10% de tes projets de la vie pro (sauf si tu te spécialise sur le dev de lib bas niveau). Le haut niveau (= tout ce qui fait la qualité logicielle, pour simplifier), c'est des connaissances qui te serviront dans 90% de projets de la vie pro.

                Et c'est une tendance qui est de plus en plus forte, parce que les logiciels et les architectures sont de plus en plus complexes, avec de plus en plus de lignes de code, par des équipes de plus en plus grandes. L'approche bottom-up était valide dans le passé ou pour certains types de projets actuels (par exemple en embarqué), mais pour le dev de logiciels modernes, c'est complètement dépassés (parce que inefficace).

                -
                Edité par gbdivers 13 avril 2022 à 10:22:36

                • Partager sur Facebook
                • Partager sur Twitter
                  13 avril 2022 à 10:26:49

                  gbdivers

                  je viens de me prendre une claque et de comprendre pourquoi je n'arrive pas à atteindre certains objectifs, tu as parfaitement cité des situations aux qu'elle je me confronte chaque fois que j'essaie d'approcher quelques choses.

                  Ce que je retiens: a trop vouloir comprendre on se perd de chemin en chemin sans aller au bout du précédent. Merci beaucoup pour ce point de vue car pour le coup sa ne concerne pas que ce sujet dans ma vie "perso" tout est similaire, donc parfois on se sent "nul" sa me donne un autre point de vue. Je vais procéder dans le sens inverse sur ce projet pour voir si j'arrive à quelque chose.

                  JadeSalina

                  Oui je comprends mieux la notion de "passer" à côté de certaines choses pour mieux se focaliser sur une. 

                  Punaise je suis sur le c** merci encore ! 

                  -
                  Edité par __Rémy 13 avril 2022 à 10:28:27

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Premier petit projet

                  × 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