Partage
  • Partager sur Facebook
  • Partager sur Twitter

Grande débutante en programmation et langage C

    22 novembre 2018 à 11:33:42

    michelbillaud a écrit:

    Vous savez, en Lisp, le programme qui écrit Hello World, c'est

    "Hello World"

    donc LISP c'est mieux et tout le reste c'est de la merde.

    Tu veux dire que le Lisp pourrait être amélioré en Lisp++, en supprimant les guillemets dans cette syntaxe ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2018 à 11:58:27

      michelbillaud a écrit:

      ...

      Sauf à penser que les informaticiens qui font tourner leur boutique avec des outils jugés "lourds" ou "caca" par un type qui les a vu de loin pendant deux heures, sont de parfaits irresponsables ?

      -
      Edité par michelbillaud il y a environ 1 heure


      Je parle pour les système embarqué.

      JKe comprend pas bien pourquoi on accepte de perdre de la ressource sur java alors que théoriquement (si on suis la GPLv3 ce serait même réellement sans difficultés) on devrait pourvoir mettre des programme C (ou autre ^^) sur no téléphones.

      Tu ne me contredira pas quand je dit que nos téléphones actuels sont très puissant ( par rapport à un PC d'il y a 10 ans) mais ça rame en continue.

      Je ne permettrais pas de dire qu'un type qui dev sur JAVA est un irresponsable, mais bon je ne le soutiendrait pas non plus :lol:.

      Surtout que JAVA-Android ce n'est que pour les Androids on oubliera l'autre moitié dur marché avec IOS ^^

      -
      Edité par ox223252 22 novembre 2018 à 12:01:00

      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

        22 novembre 2018 à 12:18:26

        ox223252 a écrit:

        Je comprend pas bien pourquoi on accepte de perdre de la ressource sur java alors que théoriquement (si on suis la GPLv3 ce serait même réellement sans difficultés) on devrait pourvoir mettre des programme C (ou autre ^^) sur no téléphones.


        Ben déjà au niveau des décideurs. Le type te répondra : je vois pas pourquoi on accepterait de perdre des ressources financières à développer un software en C, alors qu'on obtient un système viable plus rapidement en Java.

        Et d'un point de vue sécu, vu le nombre de familles de sécurité que les apps contiennent avec du Java, avec du C, ça me ferait beaucoup rire de voir ça.

        • Partager sur Facebook
        • Partager sur Twitter

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

          22 novembre 2018 à 13:19:47

          Ksass`Peuk a écrit:

          ox223252 a écrit:

          Je comprend pas bien pourquoi on accepte de perdre de la ressource sur java alors que théoriquement (si on suis la GPLv3 ce serait même réellement sans difficultés) on devrait pourvoir mettre des programme C (ou autre ^^) sur no téléphones.


          Ben déjà au niveau des décideurs. Le type te répondra : je vois pas pourquoi on accepterait de perdre des ressources financières à développer un software en C, alors qu'on obtient un système viable plus rapidement en Java.

          Et d'un point de vue sécu, vu le nombre de familles de sécurité que les apps contiennent avec du Java, avec du C, ça me ferait beaucoup rire de voir ça.

          Linux fonctionne très bien, donc pas besoin de dev grand chose, et niveau secu… le C/C++, ce sont des langages et tu fais ce que tu veux avec, je vois pas ce qui te ferais rire ?

          -
          Edité par ox223252 22 novembre 2018 à 13:22:14

          • Partager sur Facebook
          • Partager sur Twitter

          la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

          Mon GitHub

            22 novembre 2018 à 13:48:49

            Oh bah oui Linux n'a aucune faille de sécurité et son développement ne coûte pas cher. T'aurais une liste des boîtes qui aujourd'hui développent des applications pour Android et ont les moyens (proportionnels à la taille du code) alloués à Linux ?

            Je ne dis pas qu'il est impossible de faire du software solide en C, c'est mon boulot, mais il y a peu de boîtes qui ont les moyens financiers pour y arriver. A vrai dire les seuls endroits dans lesquels je vois du software blindé en C aujourd'hui c'est dans le critique et dans la recherche. Il faudrait être d'une mauvaise foi extrême pour prétendre que faire du software sécurisé en C c'est aussi facile et peu coûteux qu'avec un langage memory safe. 

            -
            Edité par Ksass`Peuk 22 novembre 2018 à 13:49:22

            • Partager sur Facebook
            • Partager sur Twitter

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

              22 novembre 2018 à 13:59:03

              Ksass`Peuk a écrit:

              T'aurais une liste des boîtes qui aujourd'hui développent des applications pour Android et ont les moyens (proportionnels à la taille du code) alloués à Linux ?

              Facile ! Utilises le C++ et Qt et tu auras des applications multi-plateformes Android et Linux. Sans aucun coût supplémentaire. (Et Windows, et MacOSX, et iOS)

              -
              Edité par gbdivers 22 novembre 2018 à 13:59:22

              • Partager sur Facebook
              • Partager sur Twitter
                22 novembre 2018 à 14:08:28

                Arrête de faire ton trollesque toi :p
                • Partager sur Facebook
                • Partager sur Twitter

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

                  22 novembre 2018 à 14:10:40

                  ox223252 a écrit:

                  Tu ne me contredira pas quand je dit que nos téléphones actuels sont très puissant ( par rapport à un PC d'il y a 10 ans) mais ça rame en continue.

                  Les applis sur téléphones rament parce qu'elles passent leur temps à aller chercher des données par le réseau. Bande passante des réseaux, surcharge des serveurs.

                  Et les navigateurs rament parce que les pages web chargent des ressources absolument monstrueuses.

                  -
                  Edité par michelbillaud 22 novembre 2018 à 14:11:21

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 novembre 2018 à 14:29:24

                    Je parle pas des applis mais bien du téléphone en lui même (les appli aussi bien sur mais déjà le système).

                    Pour les appli c'est encore un autre problème, a aller à la facilitée on à ça :

                    par exemple pour un navigateur web sur Raspberry : midori (ça fonctionne) 18 Ko

                    sur mon Android :

                    • Chrome : 102 Mo,
                    • Firefox 136 Mo,
                    • Google 206 Mo.

                    Pire la pendule fait 6Mo... c'est une pendule.

                    Le problème à dire au gens de faire au plus facile, c'est qu'ils finissent par nous faire des truc horrible.

                    EDIT : on s'éloigne un peut du sujet ^^, donc pour du dev mobile je ne conseil pas JAVA, mais Qt, ou les autres technos alternatives comme Reac Nativ (pas test mais ça semble plutôt populaire).

                    -
                    Edité par ox223252 22 novembre 2018 à 14:40:29

                    • Partager sur Facebook
                    • Partager sur Twitter

                    la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

                    Mon GitHub

                      22 novembre 2018 à 15:37:59

                      A croire que ton navigateur web ne fait pas la meme chose sur RPi et sur Android...

                      Sans oublier que quand on a plus de mémoire (ce qui est le cas des mobiles vs RPi), on va se permettre d'ajouter plus d'images (et autre ressources), des images plus grosses, etc. La difference de taille n'est pas juste du code.

                      Et bien sur qu'entre un programme qui va avoir une gestion de la mémoire via garbage collector aura un binaire plus important, fera travailler plus le CPU et pourra allouer differement la mémoire qu'un programme qui ne fait rien de tout cela. Mais c'est regarder que les mauvais coté de la problématiques, pas voir les avantages que cela apporte. (Et c'est un gars qui n'aime pas le Java qui dit ca)

                      Bref, si l'application tourne bien en Java, pas besoin d'autre chose. (Sauf du C++ et Qt, parce que c'est la meilleur chose au monde). S'il y a des problèmes de performances, alors on optimise (au pire avec du code C/C++/OpenGL) la partie qui doit etre optimisée. Pas besoin de rejetter par defaut le Java. (Sauf pour troller les Javaistes)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 novembre 2018 à 16:54:40

                        gbdivers a écrit:

                        Sans oublier que quand on a plus de mémoire (ce qui est le cas des mobiles vs RPi), on va se permettre d'ajouter plus d'images (et autre ressources), des images plus grosses, etc. La difference de taille n'est pas juste du code.

                        Et surtout des caches.

                        • Partager sur Facebook
                        • Partager sur Twitter

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

                          23 novembre 2018 à 17:46:08

                          Sakuto a écrit:

                          Si les gens qui n'ont aucune connaissances mis à part 2 heures sur un tuto pouvait s'abstenir de donner des conseils, ce serait fort aimable. Je ne compte plus le nombre d'ineptie que j'ai pu lire sur ce sujet.

                          (Cypher__, ox223252 [Kotlin pour Android], bxdfr, je parle de vous.)

                          -
                          Edité par Sakuto 21 novembre 2018 à 20:03:55


                          Navré de t'apprendre que même si je reste un débutant avec plein de chose à apprendre, je peux te garantir d'avoir programmé pendant un peu plus de deux heures. C'était l'avis de débutants qui étaient demandés, j'y ait répondu.

                          Il ne me semble pas non plus avoir sorti des inepties particulières.

                          Même si mon point de vue sur le C est très certainement discutable. Chaque langage a ses avantages et inconvénients. Dire que le langage machine est pourri parce que c'est compliqué n'a pas de sens, tout comme dire qu'un langage de Haut Niveau est mauvais partout. Des langages comme python conviendront à ceux qui souhaitent faire du réseau ou pour apprendre les bases de l'algorithmique (de mon point de vue, pas les bases de la programmation, c'est une très mauvaise école) ou encore JAVA sur lequel tout le monde crache. Java reste un langage particulièrement puissant et même si ce n'est pas le plus rapide, il permet d'accéder facilement à des fonctionnalités complexes et permet le portage d'applications sur plusieurs systèmes facilement, y compris Android ce qui en fait selon moi aujourd'hui un incontournable.

                          En soit, le C aujourd'hui n'est plus très utilisé mis à part dans des circonstances particulières (qui restent tout de même courantes) mais il permet d'avoir une bonne vision du fonctionnement de la mémoire par exemple (encore une fois, selon moi), la gestion de celle-ci étant beaucoup moins abstraite que dans d'autres langages.

                          @gbdivers la programmation sous android avec Qt/c++ n'est-elle pas un peu limitée dans ses fonctionnalités si on se cantonne à ce langage avec ce framework ? Nous somme bien obligés de passer par des fonctions java pour obtenir des résultats corrects, ne serait-ce que pour des actions avec l'utilisateur comme demander de sélectionner une photo ?

                          -
                          Edité par Cypher__ 23 novembre 2018 à 17:49:09

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 novembre 2018 à 18:11:00

                            Un jour, il faudra que les gens qui disent "le langage XYZ est puissant" se donnent la peine d'essayer d'exprimer clairement ce qu'ils entendent par là.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 novembre 2018 à 18:15:22

                              Cypher__ a écrit:

                              @gbdivers la programmation sous android avec Qt/c++ n'est-elle pas un peu limitée dans ses fonctionnalités si on se cantonne à ce langage avec ce framework ? Nous somme bien obligés de passer par des fonctions java pour obtenir des résultats corrects, ne serait-ce que pour des actions avec l'utilisateur comme demander de sélectionner une photo ?

                              Les frameworks de developpement multiplateforme comme Qt (mais on pourrait citer aussi Xamarin et Unity) peuvent proposer des outils comme l'accés aux photos. Tout dépend de la demande des utilisateurs et des moyens dont disposent les devs du framework pour proposer de tels outils. Et ils proposeront généralement d'autres outils que ne proposeront pas les SDK non multiplateformes.

                              Le choix du langage et framework/libs est toujours complexe, quelque soit le projet. Mais il ne faut pas simplifier en se disant : Android = Java, iOS = Objective-C, embarqué = C/Asm, etc.

                              Cypher__ a écrit:

                              mais il permet d'avoir une bonne vision du fonctionnement de la mémoire par exemple (encore une fois, selon moi), la gestion de celle-ci étant beaucoup moins abstraite que dans d'autres langages.

                              "moins abstraite" = c'est quand même une abstraction. Si tu considères le dev embarqué, sur un microcontroleur sans OS, sans caches mémoire/instruction, etc., on est d'accord que l'abstraction sera très proche de la réalité matérielle. Si tu prends un ordi de bureau classique, avec un OS, des caches mémoires/instructions partout, des architectures CPU/ordi/reseau complexes, ton abstration de la mémoire en C, c'est du folklore.

                              Or, la grande majorité des débutants apprennent sur un ordi, pas un microcontroleur. (Je ne me souviens pas de l'architecture sur Arduino, mais même un Raspberry Pi a dejà une architecture plus complexe que l'abstraction dans le C).

                              Le consensus, a mon sens, est le même avec toutes les personnes expériementés avec qui j'ai discuté de ça : le C ne permet pas d'apprendre le fonctionnement interne d'un ordi. Si on veut apprendre ça, on prend un cours d'archi des ordi/CPU, pas un cours de C. 

                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 novembre 2018 à 18:24:45

                                michelbillaud a écrit:

                                Un jour, il faudra que les gens qui disent "le langage XYZ est puissant" se donnent la peine d'essayer d'exprimer clairement ce qu'ils entendent par là.

                                @Cypher__ : j'ai repris ton message. Dans les affirmations qui n'ont pas particulièrement de fondement, voir sont carrément fausses :

                                • C donne de la rigueur -> non, il en nécessite mais il ne l'imposera jamais,
                                • après C, tu apprendras le reste facilement -> non, les développeurs, après C, ont souvent la manie de ne pas vouloir abstraire leur raisonnement,
                                • la plupart des langages sont inspirés de C -> c'est faux, et de moins en moins d'ailleurs,
                                • Python c'est de la merde -> c'est argumenté
                                • Python c'est un langage "trop" simple -> ça veut dire quoi "trop simple ?"
                                • sans compter son extrême lenteur -> soit tu es en train d'apprendre et ça n'a pas d'importance, soit ce n'est plus le cas, et tu t'interfaces avec des bibliothèques hautes performances,
                                • tu vas être limité en Python -> tellement limité qu'il est utilisé sur des gros systèmes en industrie,
                                • chercher pendant des heures une espace oubliée -> une seule, j'en doute déjà, et ensuite le processus de debugger, c'est pas lire le code,
                                • "ce langage est le pire pour commencer" -> tellement le pire qu'on le sélectionne partout, et qu'il est devenu standard de fait pour l'apprentissage parce qu'il se concentre sur l'essentiel
                                • "es bugs inconnus vont survenir par manque de rigueur sur le typage des données" -> par rapport au C, sérieux ?

                                -
                                Edité par Ksass`Peuk 23 novembre 2018 à 18:53:10

                                • Partager sur Facebook
                                • Partager sur Twitter

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

                                  24 novembre 2018 à 2:48:40

                                  @Ksass`Peuk

                                  • après C, tu apprendras le reste facilement -> non, les développeurs, après C, ont souvent la manie de ne pas vouloir abstraire leur raisonnement,

                                  -> Généraliser n'est pas une bonne idée. La programmation réside dans une manière de concevoir un programme. Le C donne une bonne idée de base. Apprendre un langage comme le c++ après avoir commencé par du Python sera beaucoup plus compliqué que d'aborder le c++ après du C. Et ce n'est qu'un exemple, c'est valide pour de nombreux langages.

                                  • la plupart des langages sont inspirés de C -> c'est faux, et de moins en moins d'ailleurs,

                                  -> C'est vrai que de moins en moins de langages en découlent. Mais aujourd'hui, la syntaxe et une partie de la logique du C est reprise par les langages les plus couramment utilisés, notamment C++, C#, Java et j'en passe ...

                                  • sans compter son extrême lenteur -> soit tu es en train d'apprendre et ça n'a pas d'importance, soit ce n'est plus le cas, et tu t'interfaces avec des bibliothèques hautes performances,

                                  ->Python reste un langage de haut niveau, et même si tu interfaces avec des bibliothèques hautes performances, ce sera toujours à mon sens, moins clair et moins efficace que de programmer à "bas niveau" (tout est relatif)

                                  • tu vas être limité en Python -> tellement limité qu'il est utilisé sur des gros systèmes en industrie,

                                  ->1) Je demande des exemples d'utilisation concrètes    2)Encore une fois et comme je l'ai déjà dit, ça dépend de ce que tu veux en faire.

                                  • chercher pendant des heures une espace oubliée -> une seule, j'en doute déjà, et ensuite le processus de debugger, c'est pas lire le code,

                                  ->Vrai. Par ailleurs, le débogueur de python natif est pas trop mal foutu. heureusement.

                                  • "ce langage est le pire pour commencer" -> tellement le pire qu'on le sélectionne partout, et qu'il est devenu standard de fait pour l'apprentissage parce qu'il se concentre sur l'essentiel

                                  ->Je parle d'expérience. Si Python sera adapté pour apprendre l'algorithmique à des lycéens ou des classes prépas ou n'importe quel formation ne visant à te faire devenir programmeur, je trouve son utilisation inadaptée dans des écoles plus spécialisées. Python est un langage possédant tout de même des particularités fortes par rapport aux "standards" les plus utilisés en programmation. Encore une fois ça dépend de ce que tu veux faire. Pour apprendre la programmation en vue de faire du traitement temps-réel, je ne suis pas sûr que ce soit le meilleur choix.

                                  • "Des bugs inconnus vont survenir par manque de rigueur sur le typage des données" -> par rapport au C, sérieux ?

                                  ->Un minimum de rigueur en C t'éviteras ce genre de problèmes alors qu'il en faudra énormément pour les éviter en Python.

                                  @michelbillaud Par Puissant, j'entends un langage permettant de faire des choses complexes avec un code simple. Et je ne suis pas sûr que ce soit encore exactement ce que je pense.

                                  @gbdivers les boîtes de dialogues de sélection de fichiers natives à Qt offrent un aspect presque inutilisable sur Android, elles n'y sont pas du tout adaptées. Même si je suis tout à fait d'accord sur le fait que l'utilisation d'un framework multi-plateforme est une excellente solution.

                                  gbdivers a écrit:

                                  Le consensus, a mon sens, est le même avec toutes les personnes expériementés avec qui j'ai discuté de ça : le C ne permet pas d'apprendre le fonctionnement interne d'un ordi. Si on veut apprendre ça, on prend un cours d'archi des ordi/CPU, pas un cours de C. 

                                  Je ne peux qu'être en accord avec cette réflexion. D'où l'utilisation du "moins abstrait". Loin de moi l'idée de dire que le C sur ordinateur est très proche de la machine. Tout est relatif.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 novembre 2018 à 4:39:26

                                    Cypher__ a écrit:

                                    -> Généraliser n'est pas une bonne idée. La programmation réside dans une manière de concevoir un programme. Le C donne une bonne idée de base. Apprendre un langage comme le c++ après avoir commencé par du Python sera beaucoup plus compliqué que d'aborder le c++ après du C. Et ce n'est qu'un exemple, c'est valide pour de nombreux langages.

                                    Tu ne réalises pas que tu n'es pas forcément cohérent. Quand tu parles de "manière de concevoir un programme", on est bien d'accord que c'est relativement indépendant de la syntaxe. C'est tout ce qui concerne les paradigmes, les idiomes, les patterns (DP, application, etc), etc. Bref, tout ce qui concerne le "génie logiciel".

                                    Quand tu compares le C et le C++, c'est purement syntaxique. Tu considères que le C peut etre une base aux autres langages par rapport à leur relation historique. 

                                    Mais en fait, en termes de conception et de façon de penser des devs, le C est clairement très différent des autres langages, aussi bien objets que fonctionnels. Ce que disait ksass'peuk, c'est que les devs C pensent très peu en termes d'abstraction, contrairement à ce qu'essaient de faire (avec plus ou moins de succès) les devs des autres langages.

                                    Et pour aller plus loin : la proximité du C avec les autres langages est en fait un très gros problème pour l'apprentissage. C'est pour cela que beaucoup de devs C++ déconseillent d'apprendre le C avant le C++. Un syntaxe correcte en C ne le sera pas en C++. Et la trop grande proximité des syntaxes entre le C et le C++ fait que ceux qui apprennent le C avant le C++ ont beaucoup de mal a faire du C++ correct.

                                    Cypher__ a écrit:

                                    -> C'est vrai que de moins en moins de langages en découlent. Mais aujourd'hui, la syntaxe et une partie de la logique du C est reprise par les langages les plus couramment utilisés, notamment C++, C#, Java et j'en passe ...

                                    Du coup, non.

                                    Cypher__ a écrit:

                                    ->Python reste un langage de haut niveau, et même si tu interfaces avec des bibliothèques hautes performances, ce sera toujours à mon sens, moins clair et moins efficace que de programmer à "bas niveau" (tout est relatif)

                                    C'est souvent une illusion. Pour faire des programmes performants en bas niveau, il faut des compétences très poussées dans de très nombreux domaines. Trop de domaines. Beaucoup trop. Tu ne pourras jamais rivaliser avec les centaines de personnes qui ont bossé sur les libs ou les compilateurs. 

                                    J'avais un exemple très concrét d'un article sur la comparaison d'implémentation d'algos d'anti-aliasing pour le rendu de texte (de mémoire - j'ai lu ça il y a longtemps) en utilisant les fonctionnalités SIMD des CPU ou en laissant le compilateur faire le boulot. Et la conclusion était effectivement que les implémentations manuelles bas niveau étaient plus performantes !!

                                    Mais...

                                    1. le gars était très très compétent. Beaucoup plus que moi. Alors que j'ai utilisé du calcul numérique haut performances dans la recherche pendant plusieurs années. Donc je n'étais pas un bleu-bite, mais les compétences pour implémenter ces algos sont très spécifiques.

                                    2. les implémentation étaient super hardcore a ecrire et a maintenir. Chaque implémentation était meilleur dans un cas particulier, et très mauvaise dans les autres cas. Il fallait donc gérer dynamiquement les algos pour utiliser l'algo correct dans chaque contexte.

                                    3. le gain de performances était ridicule. Genre moins de 1%. Parce que le compilateur fait déjà très bien son boulot. Le rapport gain-performance / temps de dev et maintenance est juste totalement ridicule.

                                    Donc bas niveau plus efficace ? Peut etre en théorie. En pratique, c'est rarement la cas.

                                    Cypher__ a écrit:

                                    ->1) Je demande des exemples d'utilisation concrètes    2)Encore une fois et comme je l'ai déjà dit, ça dépend de ce que tu veux en faire.

                                    Le python est très utilisé pour l'analyse de données, el data science ou les IA par exemple.

                                     Cypher__ a écrit:

                                    ->Je parle d'expérience. Si Python sera adapté pour apprendre l'algorithmique à des lycéens ou des classes prépas ou n'importe quel formation ne visant à te faire devenir programmeur, je trouve son utilisation inadaptée dans des écoles plus spécialisées. Python est un langage possédant tout de même des particularités fortes par rapport aux "standards" les plus utilisés en programmation. Encore une fois ça dépend de ce que tu veux faire. Pour apprendre la programmation en vue de faire du traitement temps-réel, je ne suis pas sûr que ce soit le meilleur choix.

                                    "temps réel" ? Dans le monde hyperconnecté actuel, la tendance va pas mal vers des applications utilisant les réseaux, donc du vrai temps réel, on oublie. Ou des bases de données, dont les performances seront gérées par le moteur de la BdD. Ou avec des applications graphiques, qui passent plus de temps a attendre les actions des utilisateurs (pas le rendu de jeux vidéos bien sûr, mais des UI de bureau classique).

                                    Et pour l'apprentissage. La syntaxe du python s'éloigne un peu de celles du C, C++, C#, etc. Mais les principes de dev seront les mêmes (fonctions, objets, etc). Tres clairement apprendre le python en premier n'est pas un frein a apprendre les autres langages ensuite.

                                     Cypher__ a écrit:

                                    ->Un minimum de rigueur en C t'éviteras ce genre de problèmes alors qu'il en faudra énormément pour les éviter en Python.

                                    Ca aussi, c'est une illusion.

                                    Déjà, vu le nombre de hacks qu'il existe à cause de problème de gestion de la mémoire (buffer overflow, etc) ou des problèmes de qualité logiciels (bugs, fuites, etc), ca me parait naïf de croire que "un peu de rigueur" évites les problèmes.

                                    La rigueur permet juste de diminuer le risque de faire des erreurs. Mais plus un programme est gros ou critique (ce qui est le cas de la grande majorité des programmes de nos jours), plus tu auras de chance d'avoir quand même des erreurs. Et ajouter plus de rigueur est possible (c'est ce qu'on fait pour les systemes critiques), mais cela a un très gros cout.

                                    Et depuis la création du C (idem pour le C++, le Java, etc. Bref, les langages historiques), il y a eu enormement de progrès dans la théorie des langages et le génie logiciel, justement pour diminuer les erreurs dans les programmes. Ca va aussi bien de la syntaxe (eviter les ambiguités, avoir un code lisible), que l'apprentissage, les pratiques, l'analyse du code, les runtimes (garbage collection, JIT, etc), etc. Un langage comme le C a été concu a une epoque où toutes ces notions n'existaient pas et contient de nombreux problèmes (le premier étant probablement la gestion manuelle de la memoire). Des langages plus récents (en partie Python, le C++14/17/20, mais certains nouveaux langages sont encore meilleurs) proposent des syntaxes qui minimisent encore plus le risque d'erreurs.

                                    -
                                    Edité par gbdivers 24 novembre 2018 à 4:40:05

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 novembre 2018 à 11:59:34

                                      Cypher__ a écrit:

                                      -> Généraliser n'est pas une bonne idée. La programmation réside dans une manière de concevoir un programme. Le C donne une bonne idée de base. Apprendre un langage comme le c++ après avoir commencé par du Python sera beaucoup plus compliqué que d'aborder le c++ après du C. Et ce n'est qu'un exemple, c'est valide pour de nombreux langages.

                                      Apprendre C++ est probablement beaucoup plus dur après C qu'après n'importe quel autre langage de ce que j'ai pu constater après ces années passées sur les forums C++, et aussi en tant qu'étudiant, et aussi en tant qu'enseignant. A vrai dire, on reconnaît un dév qui est passé par C au premier coup d'oeil. Parce qu'il gère tout manuellement, ce qui est une très mauvaise pratique en C++. Et même avec quelques années, il risque en permanence de retomber dans le piège d'écrire un bout de C parce que ça peut pas faire de mal, sauf que la majorité du temps ce sera invalide en C++.

                                      Ensuite la conception en C, ben comme qui dirait elle est guidée les possibilités du langage. La conception en C n'a littéralement rien à voir avec la manière de concevoir dans les mondes objets, fonctionnels, et j'en passe. Donc une nouvelle fois, franchement pas une base de travail qui permettra de comprendre les nouveaux langages facilement.

                                      Cypher__ a écrit:

                                      Mais aujourd'hui, la syntaxe et une partie de la logique du C est reprise par les langages les plus couramment utilisés, notamment C++, C#, Java et j'en passe ...

                                      La syntaxe c'est une part infime du langage. Et pour ce qui est de la logique du coup comme je dis au dessus, non. Même les appels de fonction ne sont pas comparables avec la très vaste majorité des autres langages.

                                      Cypher__ a écrit:

                                      • sans compter son extrême lenteur -> soit tu es en train d'apprendre et ça n'a pas d'importance, soit ce n'est plus le cas, et tu t'interfaces avec des bibliothèques hautes performances,

                                      ->Python reste un langage de haut niveau, et même si tu interfaces avec des bibliothèques hautes performances, ce sera toujours à mon sens, moins clair et moins efficace que de programmer à "bas niveau" (tout est relatif)

                                      Tu éjectes complètement le trade-off temps de développement/performances. Et pour le reste c'est toujours ta méconnaissance de Python qui parle.

                                      Si tu veux développer un système qui utilise à balle du calcul linéaire de toute façon tu vas t'interfacer avec une bibliothèque HPC, que tu l'écrives en Python ou en C, parce que t'as pas les compétences, le temps et les moyens pour réécrire ce type de bibliothèque. C'est par exemple le cas avec Eigen, t'as juste aucune chance de les égaler en termes de performances et de stabilité. Donc tu vas te contenter d'assembler les briques de base qu'il te fournissent pour réaliser ton application. Et ça représente un petit peu de code, mais du code qui représentera peut être 5% à tout péter de ton temps de calcul. Alors se casser le cul à écrire ce code en C, alors qu'il t'aurait demandé quelque chose comme 10 fois moins de temps de développement en Python et qu'en prime tu aurais eu un code, plus court, plus maintenable, moins buggé, c'est juste une perte sèche. Et c'est pas un cas isolé, on peut recommencer la réflexion avec du data-mining, des systèmes distribués, de l'IA, de l'analyse de système, de la résolution de contraintes ...

                                      On ajoutera un encart sur les langages haut niveau "nécessairement" moins performants. La plupart des problèmes qu'on cherche à résoudre en informatique, ils nécessitent une bonne optimisation algorithmique, pas une bonne optimisation technique. Et il s'ajoute à cela les problématiques de sécurité. Le résultat, c'est que même dans le calcul hautes performances, on peut très bien s'en servir de manière efficace. Exemple avec Jane Street qui fait du trading haute fréquence, en OCaml.

                                      Cypher__ a écrit:

                                      • tu vas être limité en Python -> tellement limité qu'il est utilisé sur des gros systèmes en industrie,

                                      ->1) Je demande des exemples d'utilisation concrètes    2)Encore une fois et comme je l'ai déjà dit, ça dépend de ce que tu veux en faire.

                                      Allez juste un seul, et dans un domaine pour lequel les performances sont cruciales. Le jeu vidéo, avec Eve-Online qui utilise massivement stackless python. Et de manière générale, le développement des logiques de gameplay dans le jeu vidéo, on le fait dans des langages de scripts, parce que C n'apporte rien ici. Donc en gros quand on sort du moteur les performances deviennent beaucoup moins cruciales à toute vitesse.

                                      S'ajoute à ça toutes les boîtes qui travaillent en R&D, le calcul scientifique, et j'en passe et des meilleures. Et puis sinon, il suffit d'aller jeter un oeil sur les offres d'emplois pour voir Python utilisé en industrie.

                                      Cypher__ a écrit:

                                      Pour apprendre la programmation en vue de faire du traitement temps-réel, je ne suis pas sûr que ce soit le meilleur choix.

                                      Pour le temps réel, effectivement. Maintenant on peut se demander si commencer en premier par le temps réel est très pertinent pour apprendre à programmer (spoiler: non). Et ensuite pour le dév temps réel, au choix Ada permettra au développeur d'avoir une sémantique claire à son programme contrairement à un programme écrit en C. Ou alors mieux, faire travailler l'étudiant avec Atelier B, comme ça il se conformera tout de suite au genre de standard qu'on attendra de lui sur du système critique (comme c'est très souvent le cas en temps réel).

                                      C est probablement l'un des pires langages pour débuter. Parce que du code faux peut purement et simplement fonctionner, donnant l'illusion à l'apprenant qu'il comprend et maîtrise ce qu'il fait alors que ce n'est pas le cas. Du code faux en Python, il crashe.

                                      Cypher__ a écrit:

                                      ->Un minimum de rigueur en C t'éviteras ce genre de problèmes alors qu'il en faudra énormément pour les éviter en Python.

                                      Alors tellement que :

                                      • tu n'es même pas sûr de repérer à l'exécution une corruption de la mémoire à l'exécution en C,
                                      • tu n'es même pas sûr de repérer à l'exécution un débordement arithmétique ou une division par 0 en C,
                                      • tu n'es même pas sûr de repérer à l'exécution une utilisation de valeur non-initialisée en C,
                                      • les erreurs de types en C, elles sont souvent résolues par le fait que le langage autorise silencieusement des conversions unsafe.

                                      Statiquement, ça se fait, mais c'est encore plus dur et les boîtes qui peuvent financièrement se le permettre, elles sont pas nombreuses. Et tu peux bien me vanter la discipline des développeurs C, ça leur échappe. Point. Il y a pas besoin de tergiverser même sur des trucs aussi cons que des listes chaînées on trouve des erreurs dans du code industriel qui sont liées à la mémoire.

                                      Pendant ce temps : la 1 et la 3 n'existe pas en Python. Pour la 2, il n'y pas d'overflow et la division par 0 est catchée. La 4 est nécessairement repérée à l'exécution.

                                      C'est plus dur de faire du code solide en C. Sinon les boîtes qui en font massivement investiraient pas à coups de millions dans des analyseurs pour les programmes en question.

                                      -
                                      Edité par Ksass`Peuk 24 novembre 2018 à 12:01:52

                                      • Partager sur Facebook
                                      • Partager sur Twitter

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

                                        24 novembre 2018 à 12:27:08

                                        Ksass`Peuk a écrit:

                                        Sinon les boîtes qui en font massivement investiraient pas à coups de millions dans des analyseurs pour les programmes en question.

                                        Ah ! Tu l'avoues enfin que tu gagnes des milions pour ton boulot de recherche sur la prouvablité ! Je le savais ! Bourgeois ! ;)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 novembre 2018 à 13:20:55

                                          Ksass`Peuk a écrit:

                                           Alors se casser le cul à écrire ce code en C, alors qu'il t'aurait demandé quelque chose comme 10 fois moins de temps de développement en Python et qu'en prime tu aurais eu un code, plus court, plus maintenable, moins buggé, c'est juste une perte sèche. Et c'est pas un cas isolé, on peut recommencer la réflexion avec du data-mining, des systèmes distribués, de l'IA, de l'analyse de système, de la résolution de contraintes ...

                                          Il y a même un effet contre-productif à vouloir programmer à bas niveau, parce qu'il y a des trucs, tu sais que tu pourrais le faire bien en C si tu avais que ça à faire, mais ça va être galère d'y passer des plombes.  Alors au lieu de rajouter un hachage (par exemple) qui permettrait d'accélérer les choses, tu vas coller tes données dans un tableau  ou une liste chainée, ça ira bien comme ça, et en avant la recherche séquentielle en O(N).



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 novembre 2018 à 14:29:50

                                            Pour ma part je débute en commençant par étudier algorithme avec le langage C car il y'a les pointeurs... 

                                            Et la programmation objet par JAVA car j'ai trouvé un beau cours en JAVA avec des animations. question de pratique.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 novembre 2018 à 14:32:40

                                              Rose93 a écrit:

                                              Pour ma part je débute en commençant par étudier algorithme avec le langage C car il y'a les pointeurs...

                                              Les pointeurs n'ont aucun intérêt particulier pour les questions d'algorithmique hein, ils ont même plutôt tendance à amener plus de problème qu'ils n'en résolvent.

                                              • Partager sur Facebook
                                              • Partager sur Twitter

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

                                                24 novembre 2018 à 14:35:03

                                                Ksass`Peuk a écrit:

                                                Rose93 a écrit:

                                                Pour ma part je débute en commençant par étudier algorithme avec le langage C car il y'a les pointeurs...

                                                Les pointeurs n'ont aucun intérêt particulier pour les questions d'algorithmique hein, ils ont même plutôt tendance à amener plus de problème qu'ils n'en résolvent.


                                                oui c'est ce que j'ai remarqué je débute là. Mais je pense que j'aurai du viser un langage plus simple sachant que je galère déjà en algorithme.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 novembre 2018 à 18:55:54

                                                  Apprendre à programmer, foncièrement, ce n'est pas apprendre les éléments d'un langage de programmation. C'est à apprendre à  analyser un problème et à construire une solution automatisée fabriquée avec les éléments qu'on a sous la main.

                                                  En théorie, on peut donc apprendre la programmation avec n'importe quel langage, et c'est une compétence transférable aux autres langages de programmation (pour peu que le paradigme ne soit pas trop éloigné).

                                                  Maintenant, tous les langages de programmation ne sont pas égaux pour faciliter cet apprentissage.  Le langage C contient (relativement) peu d'éléments, qui sont très basiques (entiers, reels, fonctions, pointeurs, structures,...). On peut bien apprendre beaucoup de choses avec ça, mais ça veut dire qu'un exercice "pas compliqué', ça va pas être passionnant, à moins - ça se discute pas - d'avoir un gout particulier pour "faire la somme des éléments d'un tableau" et "recopier les lignes d'un fichier dans un autre".  Alors que les copains qui apprennent avec Processing, par exemple, avec le même niveau de difficulté, ils vont avoir des trucs qui se dessinent sur l'écran.

                                                  C'est pas qu'intrinsèquement ça soit mieux ou ça apprenne plus de choses, mais avoir des exos sexys, ça compte énormément pour entretenir la motivation. Avec avoir fait la somme des éléments, c'est rare que celui qui apprend se dise spontanément "ah cool, maintenant je vais voir comment on fait le produit au lieu de la somme". Si vous envoyez un, appelez un docteur.  Tandis que "et si maintenant,  comment je fais pour que, quand je clique sur un rond, ça le fasse disparaitre", c'est une curiosité assez naturelle. On s'auto-motive pour chercher comment on pourrait faire, au lieu de bachoter les exos du cours.

                                                  La conclusion, c'est justement que le langage C est trop simple : dès qu'on veut faire quelque chose de "significatif" avec, c'est tout de suite la galère parce qu'il faut aller s'occuper de détails sordides (faut il que je duplique la chaine pour la stocker ? et qui s'occupera de la libérer ?). Ca conduit à des exercices plus techniques, et beaucoup moins motivants.

                                                  -
                                                  Edité par michelbillaud 24 novembre 2018 à 18:59:26

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 novembre 2018 à 19:14:43

                                                    michelbillaud a écrit:

                                                    La conclusion, c'est justement que le langage C est trop simple : dès qu'on veut faire quelque chose de "significatif" avec, c'est tout de suite la galère parce qu'il faut aller s'occuper de détails sordides (faut il que je duplique la chaine pour la stocker ? et qui s'occupera de la libérer ?). Ca conduit à des exercices plus techniques, et beaucoup moins motivants.

                                                    C'est pas un peu contradictoire, c'est simple mais dès qu'on veut faire quelque chose c'est compliqué ? De plus je pense que savoir comment ça se passe au niveau de la mémoire ou du passage des donnée entre les différentes parties du programme permet de faire de gros progrès assez rapidement.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 novembre 2018 à 19:22:55

                                                      @Splintz Peux-tu expliquer ce que tu entends par "savoir comment ça se passe au niveau de la mémoire" ?

                                                      Pour le passage des données entre les parties du programme, je suppose que tu parles d'un appel de fonction avec passage de paramètres. Que penses-tu avoir appris à ce sujet, que tu n'aurais pas appris avec un autre langage ?

                                                      -
                                                      Edité par michelbillaud 24 novembre 2018 à 19:23:17

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        24 novembre 2018 à 20:44:33

                                                        Ou est ce que ta variable sera allouée en mémoire et pour le passage des paramètre, par copie, pointeur ( et référence pour le ++)  et ce que cela implique dans ton code. Pour la plupart des langages "récents" tout cela est caché et globalement tout le monde s'en fout de comment ça se passe en dessous.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          24 novembre 2018 à 21:53:39

                                                          A moins que tu sois en train de coder un OS, tu ne sais pas ce qui se passe au niveau de tes allocations/désallocations mémoire. Il faut arrêter avec cette légende.

                                                          -
                                                          Edité par Ksass`Peuk 24 novembre 2018 à 21:54:05

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

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

                                                            24 novembre 2018 à 21:58:30

                                                            Ksass`Peuk a écrit:

                                                            A moins que tu sois en train de coder un OS, tu ne sais pas ce qui se passe au niveau de tes allocations/désallocations mémoire. Il faut arrêter avec cette légende.


                                                            Même sans coder un OS tu sais si ta variable va dans la pile, le tas ou si elle est alloué statiquement pas sur que dans d'autre langages les gens qui les utilisent savent qui va ou

                                                            -
                                                            Edité par Splintz 24 novembre 2018 à 21:59:02

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              24 novembre 2018 à 23:02:02

                                                              En realite tu n'est meme pas sur que ta variable fasse un tour par la mémoire, elle peut très bien n' exister que comme contenu d'un registre.

                                                              Ce que tu penses avoir compris, c'est une illusion. Tu as en tête un modèle, une "machine abstraite". Et le compilateur fait autre chose, qui est juste censé avoir le même résultat.

                                                              -
                                                              Edité par michelbillaud 24 novembre 2018 à 23:07:13

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Grande débutante en programmation et langage C

                                                              × 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