Python et POO - Page 2 — Les-mathematiques.net The most powerful custom community solution in the world

Python et POO

2

Réponses

  • Bonjour,
    effectivement, avant de passer sur des outils "très complexes" il faut optimiser son code.

    Mais dans mon domaine, non seulement je dois optimiser, mais au vue des nombres de calculs que certaines résolutions nécessitent, la puissance de calcul est importante, et surtout celle du langage.

    Ce que je veux dire, à travers tout cela, c'est que, quitte à "s’embêter" avec la POO, autant récupérer de la rapidité de calcul.

    Quand à ce que vous disiez sur l'inversion des opérations, à propos des bibliothèques,
    je me suis mal exprimé.
    Je ne parle pas des Bibliothèques d'optimisations, qui ont pour but d'améliorer l'exécution du code, mais des simples bibliothèques de chaque système, qui sont, hélas, documentés pour quelqu'un qui sait déjà s'en servir.
    Leur documentation n'est pas un cours pour leur "apprentissage", mais un manuel de référence, mémo-technique.
    Ce que je veux dire, c'est que pour faire des choses simples: écrire un fichier, lire un fichier, etc,
    ce qui parait "basic" dans Python ou le "BASIC", est en fait très complexe sous Windows.
    Attention, je ne dis pas que c'est complexe pour lire un simple fichier, mais dans un modèle de conception,
    factoriser la lecture de blocs, pour du décryptage, récupérer les erreurs...

    Quand au bibliothèques d'optimisations, je pense que quelqu'un qui n'a jamais programmé dans le domaine d'optimisation de cette bibliothèque, aura du mal à l'utiliser.
    Bien sur, avant de parler d'optimisation, il faut déjà faire du code "efficace". Je suis d'accord.
    Et d’ailleurs, je suis en train de récupérer un marché "d'optimisation" dans lequel des mauvais programmeurs,
    malgré un bonne bib, ont des performance très très mauvaise, du fait de leur "vilain" code.

    Quand a 100 opérations binaires par seconde, cela ne me suffirai pas pour ce que je fait.
    Sa machine universelle, n'est pas la machine de Von Neumann (nos PC) et est construite autour d'un pb, pour le résoudre, ou dire s'il est solvable, etc... ce qui a mis la claque au Nazis.
    Les gens ont du mal avec un PC, alors avec une machine de Turing ...

    Cordialement
  • La plupart des gens ici ont besoin de développer rapidement des petits programmes qui résolvent des problèmes et Python est un outil bien adapté à cette tâche, il faut bien le reconnaître si on est honnête.
    Ils se fichent de grappiller quelques millisecondes dans l'exécution d'un script Python. Si la solution tombe en 10 minutes alors qu'elle aurait pu tomber en 5, aucune importance.

    A une époque mon dada c'était d'écrire des programmes qui sont les plus petits possibles (sans utiliser de packer) d'où ma prédilection pour le langage assembleur et le langage C. B-)-
  • "Pour en revenir à python, certaines remarques que vous faites à propos de ce langage laissent penser que vous ne le connaissez pas si bien que cela."

    Rien le fait de savoir qu'il est interprété me choque.

    "Je pense que vous feriez mieux de ne pas déborder de votre domaine de prédilection, celui que vous maîtrisez puisque vous le pratiquez déjà depuis fort longtemps : la programmation en C++".

    Ne me restreignez pas sans savoir, à ce seul domaine...

    J'ai vu et suivi depuis mes débuts l'évolution.
    C'est pourquoi je pense que ce langage va devenir rapidement une impasse: interprété, bibliothèques, certes puissantes, mais incohérentes entre elles

    On ne grapille pas des ms avec le C++ et les GPUs, mais on passe de quelques heures à des ms.

    "Vous avez par contre tout à fait raison quant au fait que l'enseignement de la programmation n'a rien à faire dans un cours de mathématiques."

    C'est ce que je démontre, car autant les études de math pur sont longues, autant celles de l'info le sont aussi, et avec des "impasses d'autant plus séduisantes qu'elle sont dangereuses.

    C'est par expérience de l’existence de ces "impasses" (j'en avais prédit hélas plein, tout en souhaitant me tromper à chaque fois) que je cherche à prévenir !

    Ce qui me fait peur, c'est que l'on fait perdre leur temps aux nouvelles générations avec ces impasses...

    Si le Python passe en compilé, avec un AGL digne de ce nom, alors je me serai trompé, ce que je souhaite.

    Cordialement
  • Bruno.Moraut a écrit:
    Rien le fait de savoir qu'il est interprété me choque.

    En effet, tu ne connais vraiment pas Python.
    https://docs.python.org/3/library/dis.html
    Cela dit, je ne vois pas où est le problème. On pourrait très bien écrire un interpréteur pour C (j’en suis incapable) et il existe des moyens pour « compiler » du code Python en un exécutable.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Tu reproches à Python de ne pas être du C++, ce qui est absurde. Reproches-tu à Javascript, à Haskel ou à Lua de ne pas être du C++ ?

    Python a des énormes avantages que n'a pas C++. C++ a des énormes avantages que n'a pas Python. C'est comme comparer des pommes et des oranges.

    Un bon informaticien connait et utilise plusieurs langages, en fonction de ce qu'il souhaite faire et de la situation. Ne jurer que par le C++ comme tu le fais montre juste que tu n'en es pas un. J'arrête d'intervenir sur ce fil, des intervenants et moi-même ayant montré, sources à l'appui, que Python est à la fois un langage extrêmement utilisé, utile et apprécié. Tu suis juste un dogme.
  • Bruno.Moraut a écrit:
    On ne grapille pas des ms avec le C++ et les GPUs, mais on passe de quelques heures à des ms.

    Ce n'est pas le langage seul qui permet ce type de gain. Quand tu parviens à un résultat aussi spectaculaire c'est que du jus de crâne a été nécessaire, c'est-à-dire que l'algorithme utilisé est maintenant beaucoup plus performant.

    Je pense que Python aura une carrière aussi exceptionnelle que le Cobol. Quand tu partiras en retraite, ce langage sera toujours utilisé. B-)-

    Mon langage de script préféré est celui fourni avec le logiciel libre GP PARI. Mais ce langage de script est beaucoup moins puissant que celui de Python.
  • En ce qui concerne le domaine scientifique je me demande si dans quelques années Julia ne supplantera pas Python.
  • raoul.S
    Ce n'est pas évident, Julia à énormément d'avantages sur Python et on arrive à avoir des codes plus rapide que du C++, la vectorisation fonctionne extrêmement bien et le JIT fait un super boulot, mais il est moins facile d'accès que Python qui est plus généraliste.

    Je pense qu'il va y avoir de plus en plus de codes Julia coté calcul scientifique. Python pour tout le reste quand on n'a pas besoin de perfs.

    Après lorsqu'on parle d'applications dans le sens "Desktop", la tendance sous Windows est quand même de plus en plus d'utiliser C# et coté serveur des langages comme Go et Java qui sont particulièrement adaptés.

    C'est vrai que le C++ est un langage puissant mais la maîtrise du langage est difficile et demande plus que quelques années de formation.
    Il y a Rust qui gagne du terrain et avec le quel il est bien plus facile de développer un code robust et rapide (par rapport au C++)

    Ce débat est quand même sans intérêt car comme dit FDP c'est du jus de crâne qu'il faut avant tout. Développer un logiciel ce n'est pas seulement connaître un langage qui n'est rien d'autre qu'une manière d'exprimer des algos, mais bien de concevoir un produit robuste, évolutif (quand on parle de grand codes ou d'applications un peu lourdes) et maintenable. Bien concevoir l'architecture du code et du système qui va le porter, bien choisir ses algos...etc. Et là, aucun langage n'est meilleur qu'un autre, c'est l’expérience des développeurs qui compte avant tout.
  • Julia [...] moins facile d'accès que Python qui est plus généraliste.

    Pas du tout d'accord. Julia est facile d'accès.
    http://www.iecl.univ-lorraine.fr/~Olivier.Garet/livre_julia/
    Vous pouvez lire mon livre en ligne ou sur papier.

    Python bénéficie de sa position dominante, mais c'est un langage vieillissant (1991 !), qui finira par être remplacé.
    L'Education Nationale fait montre de bien peu de clairvoyance en renforçant sa position dominante.
    Imposer un langage au lycée est une perturbation de l'écosystème qui ne devrait pas être.
  • Python a bientôt trente ans mais C++ est encore plus âgé, ne parlons pas du C.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Alea a écrit:
    Python bénéficie de sa position dominante, mais c'est un langage vieillissant (1991 !), qui finira par être remplacé.

    Qu'est-ce que cela veut dire qu'un langage est vieillissant concrètement?
    Les programmeurs ont cessé de ne jurer plus que par la POO?
    Cobol est toujours utilisé me semble-t-il.
  • aléa écrivait:
    > Pas du tout d'accord. Julia est facile d'accès.


    Je n’ai pas dis que Julia est difficile mais que Python est plus facile d’accès, surtout pour des débutants.
    Pour comprendre ce qu’est une fonction, une boucle, une variable, une liste, une liste de liste etc... Comprendre quelques notions de la programmation objet, l’encapsulation, l’héritage... etc Python convient parfaitement.
    Une fois qu’on est à l’aise avec ces notions on peut plus facilement comprendre le multiple dispatch de Julia et utiliser le Duck-Typing sans se faire des noeuds au cerveau.
    Puis quand on a pris confiance s’attaquer aux macros pour libérer toute la puissance de Julia. Avec ça on arrive souvent a enfumé un « kernel » écrit en c++ et optimisé aux petits oignons :)

    Quand a l’EN et la position dominante de Python... Le plan informatique pour tous n’a pas réussi à sauver Thomson (ah nostalgie des MO5 et TO7). Je ne crois pas que l’EN en France soit en mesure d’influer de quelque manière que ce soit sur Python, juste une petit fluctuation.
  • Je ne comprends pas. Tu parles de débutants (lycéens) et après d'héritage ?
    Pour apprendre les bases (boucles, tests, variables), n'importe quel langage convient.
    Je ne crois pas que l’EN en France soit en mesure d’influer de quelque manière que ce soit sur Python, juste une petit fluctuation.

    Bien sûr que si, ce qui est fait dans le secondaire pèse sur ce qui est pratiqué dans l'enseignement supérieur.
    J'ai même un collègue qui a écrit un bouquin de probas/stats de niveau master en illustrant avec Maple, qui était la coqueluche de l'inspection générale à une époque.
  • aléa écrivait:
    > Je ne comprends pas. Tu parles de débutants (lycéens) et après d'héritage ?

    Je ne parle de pas lycéens ici, mais de débutants, de personnes n'ayant jamais utilisé un langage.
    Mon fils à appris Python en dehors du lycée, l'héritage n'a pas poser de problèmes particuliers, j'ai eu plus de mal au début à lui faire comprendre les variables et les listes.
    Maintenant mon objectif c'est de le faire évoluer vers d'autres langages.

    > Bien sûr que si, ce qui est fait dans le secondaire pèse sur ce qui est pratiqué dans
    > l'enseignement supérieur.
    > J'ai même un collègue qui a écrit un bouquin de probas/stats de niveau master en illustrant avec
    > Maple, qui était la coqueluche de l'inspection générale à une époque.

    Maple est enseigné/utilisé dans le secondaire ?

    Si on parle du secondaire, je ne vois pas ce que peut apporter Julia vis-à-vis de Python, à mon avis 90% des lycéens ne retiennent rien de Python et de l'informatique en général. Ce n'est pas les 10 lignes de Python qu'ils écrivent qui va changer quoi que ce soit.

    Si on parle du supérieur mon avis perso c'est que Julia devrait être le langage qui est enseigné, mais comme c'est un langage relativement jeune il faut un peu de temps avant que ça n'arrive, tout est une question de masse critique et d'écosystème. Ce qui manque en ce moment à Julia c'est un IDE complet, mais on y travaille :)

    Dans la société dans la quelle je travaille je ne connais personne qui utilise Maple, en revanche MatLab est très utilisé. Nous sommes en train d'essayer (à coups de formations, démonstrateurs ...etc.) de les faire évoluer petit à petit vers Julia.

    Bref, évitons un débat Julia/Python/C++/... On peut tout faire dans n'importe quel langage, il est plus difficile de tout faire bien avec un seul langage.
  • Juste pour continuer encore un peu le débat... que penser de l'utilisation de Python en deep learning ? Actuellement il est intégré à des outils comme Tensorflow de Google, est-ce qu'à terme il y a une chance pour qu'il cède sa place à Julia ?
  • raoul.S
    Python est utilisé à des fins pédagogiques, comprendre les concepts du Deep learning et surtout de Tensorflow sans se soucier des détails logistique aide grandement. Pour Google il s'agit de démocratiser l'utilisation de Tensorflow, donc ils prennent le langage que tout le monde connaît. C'est un peu comme Galilée qui je crois me souvenir, n'a pas écrit "Dialogue sur les deux grands systèmes du monde" en latin. Son objectif était que le plus grand nombre puissent y avoir accès et non seulement les érudits.

    Dans le milieu académique pourquoi pas pour tester des idées, apprendre les technos... Dans le milieu industriel c'est beaucoup moins le cas.

    Google n'utilise pas Python+Tensorflow en interne pour tout un tas de raisons (la montée en charge à l’échelle des besoins de google est plus compliquée en Python qu'en Go ou même en C++). D'ailleurs ils n'utilisent même plus les GPU depuis un bon moment mais plutôt des TPU maison.

    Julia est déjà utilisé, je pense à Flux.jl par exemple, mais il y en a d'autres. L'utilisation de llvm par Julia aide beaucoup au transfert des "kernel" vers GPU.

    Julia, je pense qu'il faut le voir comme une technologie émergente, je crois que dans les domaines pour les quels il à été pensé il va provoquer un ras de marée. Dans beaucoup de cas Python s'est imposé faute de mieux mais pas parce qu'il était intrinsèquement mieux.
  • OK merci.
    mordicus1973 a écrit:
    Dans le milieu industriel c'est beaucoup moins le cas.

    Bon après il faut voir de quelle échelle on parle. Si on parle de grandes sociétés comme Google je veux bien croire que pour entraîner des réseaux de plusieurs dizaines voire centaines de millions de neurones ils n'utilisent pas Python. Mais pour des boîtes beaucoup plus petites avec des besoins moins grands je pense que le duo Python-Tensorflow fait très bien l'affaire non ?
  • Bonjour,

    On utilise Python à la poste.
    A vous de voir si la poste est une "grande" société.

    Cordialement,

    Rescassol
  • raoul.S écrivait:
    > Python-Tensorflow fait très bien l'affaire non ?

    Dans beaucoup de cas, oui tout à fait.
  • Coucou
    Ce sur lequel quoi je veux attirer l'attention, (et je réalise que je n'ai pas assez insisté sur ce point) est le fait, que en plus du langage lui même (instructions) ce qui est long à apprendre et peux conduire à une impasse si le langage disparaît, c'est l'environnement dans lequel on développe et surtout les bib de fonctionnalités.

    Effectivement, si on a un "algo" à faire, le passage d'un langage à un autre, ou le choix,
    du langage est une question de capacité qu'a chaque langage de réaliser ce même algo.
    Le passage d'un langage à un autre, ne pose pas trop de pb, s'il est dans le même type (poo etc...).

    Mais je veux attirer l'attention sur le fait que le temps qu'il faut pour passer à un autre langage n'est pas seulement de s'adapter à ses "instructions" et "structures" mais aussi de se former l'utilisation des fonctionnalités de ses bib.

    Ce n'est pas l'algo lui même qui est compliqué à réécrire, mais toutes les fonctionnalités de bases d'un logiciel, qui sont indispensables à un logiciel.
    Et l'expérience m'a appris, que apprendre les bibs de fonctionnalités de base d'une langage sont très longues.
    Cet apprentissage est beaucoup beaucoup plus long que le langage lui-même.

    "Python est utilisé à des fins pédagogiques, comprendre les concepts du Deep learning et surtout de Tensorflow sans se soucier des détails logistique aide grandement. Pour Google il s'agit de démocratiser l'utilisation de Tensorflow, donc ils prennent le langage que tout le monde connaît. C'est un peu comme Galilée qui je crois me souvenir, n'a pas écrit "Dialogue sur les deux grands systèmes du monde" en latin. Son objectif était que le plus grand nombre puissent y avoir accès et non seulement les érudits."

    Ceci est formidable, si le Python ne tombe pas dans l'escarcelle d'une boite privée, comme c'est arrivé à MatLab.
    Cordialement.

    PS.
    héhéhé a écrit:
    Un bon informaticien connait et utilise plusieurs langages, en fonction de ce qu'il souhaite faire et de la situation. Ne jurer que par le C++ comme tu le fais montre juste que tu n'en es pas un. J'arrête d'intervenir sur ce fil, des intervenants et moi-même ayant montré, sources à l'appui, que Python est à la fois un langage extrêmement utilisé, utile et apprécié. Tu suis juste un dogme.

    On sent la modestie pour porter un jugement ainsi sur les autres sans les connaître !
    Mais, afin de continuer ce forum dans le respect réciproque, j'ai donc transmis vos propos au modérateur.
  • Bruno.Moraut a écrit:
    Ce n'est pas l'algo lui même qui est compliqué à réécrire, mais toutes les fonctionnalités de bases d'un logiciel, qui sont indispensables à un logiciel.
    Et l'expérience m'a appris, que apprendre les bibs de fonctionnalités de base d'une langage sont très longues.
    Cet apprentissage est beaucoup beaucoup plus long que le langage lui-même.
    Franchement je ne vois pas où est le problème. Changer de langage souvent fait partie du métier, connaître plusieurs langages fait partie du métier, avoir la capacité de s'adapter rapidement fait partie du métier.
    Ce n'est jamais un long apprentissage, si vous avez des problèmes pour prendre en main un nouveau langage et son écosystème je le comprends, mais il ne faut pas généraliser.
    Un langage informatique n'est pas un investissement dans de la pierre. Il y a bien d'autres raisons que la disparition d'un langage qui forcent à en apprendre un nouveau. Quant aux bibliothèques (je suppose que vous parlez du "runtime" sinon je ne vois pas) à part la STL les "runtimes" des langages ne cassent pas trois pattes à un canard. Passer du C++ à Java puis à Go, faire un petit tour sur Python... dans 99% des cas la documentation est suffisante pour très vite être en capacité de faire ce qu'on veut.
    Quelle est votre proposition au final ? Choisir un langage au début de sa carrière et ne plus bouger jusqu'à la fin ?
    Bruno.Moraut a écrit:
    Ceci est formidable, si le Python ne tombe pas dans l'escarcelle d'une boite privée, comme c'est arrivé à MatLab.
    Et après ? Admettons que Python disparaisse, le sujet ici c'est Tensorflow, on utilise la même API via Go, Rust, C++, Lua, Julia...etc.

    J'ai appris la programmation en Locomotive Basic -> n'existe plus
    Puis je suis passé à l'assembleur Z80 -> N'est plus utilisé que dans des cas très particuliers
    Puis je suis passé au Turbo Pascal -> N'existe plus
    J'ai utilisé Borland C/C++ -> Les librairies n'existent plus
    Mes programmes sous DOS avec toutes les fonctionnalités particulières ne compilent plus, essayez d'utiliser la mémoire XMS sous Linux ou Windows... Pourtant c'était du C++, ben, à la poubelle...
    etc etc.
    On change de langage tout le temps et c'est bien, l'informatique ce n'est pas connaître un langage, on s'en moque à la limite.
    Bruno.Moraut a écrit:
    On sent la modestie pour porter un jugement ainsi sur les autres sans les connaître !
    Mais, afin de continuer ce forum dans le respect réciproque, j'ai donc transmis vos propos au modérateur.
    Franchement vous ne manquez pas de culot quand on voit votre premier message que j'ai trouvé très arrogant et insultant envers les membres de ce forum.
  • Bruno.Moraut a écrit:
    Mais je veux attirer l'attention sur le fait que le temps qu'il faut pour passer à un autre langage n'est pas seulement de s'adapter à ses "instructions" et "structures" mais aussi de se former l'utilisation des fonctionnalités de ses bib.

    Quelqu’un a écrit le contraire ici ?
    Tu penses qu’il faudrait faire utiliser deux langages dans le secondaire ? Quand on voit la difficulté à faire comprendre un simple script en Python en lycée, imagine avec du C++.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Coucou

    "Tu penses qu’il faudrait faire utiliser deux langages dans le secondaire ? Quand on voit la difficulté à faire comprendre un simple script en Python en lycée, imagine avec du C++."

    Exacte, vous avez raison, si des élèves ont du mal avec un simple script en Python,
    il ne peuvent pas faire du C++ en claquant des doigts.

    Mais à ces élèves, ne vaut-il mieux pas les faire travailler sur les Maths, que sur la programmation elle-même.
    Celle-ci peut venir plus tard.

    Ou alors ne faut il pas quelqu’un qui connaisse vraiment la programmation (C, C++) et les langages Web
    et du recul sur celle-ci, pour la "vulgariser" avec des outils d'apprentissage à développer ?

    Je pense que la grosse erreur de l'EN, et de bien d'autres, c'est de croire que la programmation se résume à transformer une résolution mathématique en un algo.

    Je ne dénigre pas, contrairement à ce que je perçois dans des réponse qui me sont faites,
    les compétence de certains, mais je perçois souvent un manque de recul face à ce qu'on leur demande.

    Exemple:
    "J'ai appris la programmation en Locomotive Basic -> n'existe plus
    Puis je suis passé à l'assembleur Z80 -> N'est plus utilisé que dans des cas très particuliers
    Puis je suis passé au Turbo Pascal -> N'existe plus
    J'ai utilisé Borland C/C++ -> Les librairies n'existent plus
    Mes programmes sous DOS avec toutes les fonctionnalités particulières ne compilent plus, essayez d'utiliser la mémoire XMS sous Linux ou Windows... Pourtant c'était du C++, ben, à la poubelle...
    etc etc. "

    A part les Premiers (Locomotive Basic l'assembleur Z80), qui ont disparut, et que je connais moi aussi, et pour lesquels il n'y avait pas d'équivalent à long terme, tes autres choix ont été mauvais.

    Quand est apparut le C puis le C++ MIcrosoft (et non pas Borland, ou CodeBlock), personnellement j'ai vue tous de suite que c'était l'avenir.
    (d'accord, j'anticipe ce que certains peuvent dire ou penser: cela fait prétentieux, alors disons que j'ai eu un gros coup de bol si cela leur fait plaisir).
    Mais des coup de bols comme ça, ma petite tête m'en a inspiré pleins.
    Résultat, tous mes programmes, depuis le début du C, je les recompiles.
    Bien sur, comme me l'a dit une Prof assez tourner vers sa main gauche, "j'ai fait le jeu du Grand Capital",
    à savoir Microsoft.
    Et quand à dire que tous les langages ont des avantages ou des inconvénients,
    Je pourrai garder ça pour moi, mais j'ose vous dire que c'était le bon choix, car avec ce c++ si difficile,
    c'est celui avec lequel ont peut tout faire, mais de façon qui n'est pas, hélas à la portée de suffisamment de monde.
    En plus, il était très mal documenté, et on devait beaucoup creuser.

    Pour répondre à:
    "Franchement je ne vois pas où est le problème. Changer de langage souvent fait partie du métier, connaître plusieurs langages fait partie du métier, avoir la capacité de s'adapter rapidement fait partie du métier.
    Ce n'est jamais un long apprentissage, si vous avez des problèmes pour prendre en main un nouveau langage et son écosystème je le comprends, mais il ne faut pas généraliser."

    Je pensait que ceux qui connaissent beaucoup de langage étaient brillant.
    C'est vrai pour certains, peut être même à celui qui m'a fait cette réflexion.
    Tant mieux pour lui, j'en suis ravi : Il faut des gens brillants pour faire avancer l'Humanité.

    Seulement, je me méfie de ce genre de "vantards" parmi les gens brillants (ne vous sentez pas visé si vous maîtrisez tous ces langages, et que vous dites la vérité, ce qui de mon point de vue est tout a fait possible).

    Seulement, j'ai été confronté à une forte majorité de "multi-programmeur",
    qui ne maitrise aucun langage, tout en remplissant un CV de tous les langages de France et de Navarre (et du reste du monde aussi).

    Mais en fait, (certains) utilisent plusieurs langages car ils ne peuvent faire dans un langage, parce que trop compliqué dans celui-ci, ou impossible.
    Ils le font donc dans un autre.
    Quand c'est impossible, ou vraiment inadapté, je comprends.
    Dans les autres cas, ce sont bien des "vantards" (uniquement des ces autres cas) car ils se vantent de beaucoup de langage, pour impressionner, mais ne maitrise rien !

    Ce qui est aussi gênant, c'est les gens qui pense que l'écosystème est facile à apprendre.
    Plusieurs de mes amis qui ont recruté, en ont planté plus d'un, involontairement,
    en les mettant sur une partie de "l'écosystème qui s'apprend facilement".
    Finalement ils sont repartis la queue entre les jambes.

    Effectivement, certains langages facilitent certains points de notre fameux écosystème.
    Je comprend donc la démarche de passer dans un autre langage qui a une la bib faite pour le pb,
    plutôt que de se payer la lecture de X milles pages de docs.
    On a une une solution économique viable à court terme.
    Mais à long terme ?

    Cordialement

    Ps:
    "Franchement vous ne manquez pas de culot quand on voit votre premier message que j'ai trouvé très arrogant et insultant envers les membres de ce forum."

    Je n'ai insulté personne, j'ai piqué aux vif certains, je le reconnais. Mais c'est ma façon de faire,
    car je croie que les conséquences de l'aveuglement vont être graves à courts termes, et le sont aussi actuellement (mais caché par les médias).

    J'ai commencé la programmation à 13 ans, j'en ai 53 pour la petite histoire.
    Ce que je veux faire partager, ce n'est pas mon niveau en informatique,
    que certains certainement dépasse (en python par exemple)
    mais le recul que m'a donner toutes ces années à observer et imaginer la suite des évolutions du domaine.
    J’interviens car j'ai trop vu les conséquences néfastes de la stratégie d'attirer tous le monde dans l'informatique,
    lancée par des grands groupes Informatique, qui profitent de l'aveuglement de l'EN.
    Aussi, comme je le disait, j'au vue trop de placards de logiciels et systèmes, dans les universités, comme dans les entreprise, remplis d'illusions et de poussière avec les utopies "libres" gratuites.

    Je ne dis pas que Python est un mauvais langage, (a part peut être le fait d'être interprété).
    Mais à très court terme, il y a de gros risques de ne plus pouvoir compiler,
    et de perdre un grosse partie de son travail. (a part si on est un génie ou si l'on a du temps à perdre pour tous transférer...)

    Cordialement
  • Du boulot pour AD...
  • @nicolas.patrois: d'une certaine maniere, il y a deja 2 langages utilises dans le secondaire avec scratch et Python :-)

    Le probleme actuel, c'est que Python est impose au lycee au point que les sujets d'ecrits comportent des programmes ecrits dans ce langage, au lieu de laisser l'enseignant choisir un langage (interprete au niveau du lycee general) avec des evaluations ecrites reposant sur l'ecriture d'algorithmes en langage naturel. L'autre probleme a mon avis, c'est que les eleves de prepas ne soient pas tous inities a un langage compile (avec typage, etc.) imposant un controle du code source plus rigoureux et detectant ainsi plus d'erreurs plus tot. Je pense qu'il est bien plus difficile de comprendre certains aspects de complexite/efficacite/importance du choix des structures de donnees si on n'a pas ete confronte a un langage qui les expose.

    Sur le temps necessaire a la maitrise d'un langage et de ses bibliotheques: mon experience personnelle, c'est que cela prend beaucoup de temps. Bien sur, on peut rapidement ecrire des petits scripts ou programmes (disons jusqu'a environ 10^3 lignes) dans un nouveau langage quand on maitrise deja un autre langage, mais ecrire et mettre au point efficacement un gros programme (plus que 10^4 lignes) dans un nouveau langage et un nouvel environnement de developpement demande plusieurs annees quand on est jeune et c'est de plus en plus difficile quand on prend de l'age. Finalement, ce n'est pas tres different d'apprendre une langue etrangere.
  • Donc, si je comprend bien, ce qui vous embête est l'utilisation d'un interpréteur, à la place d'un compilateur, comme source de tous les maux car cela pourrait devenir payant parce que propriétaire dans la plupart des cas ?

    J'avoue ne pas bien cerner où se situe le problème.

    Du reste, dans l'enseignement, si les professeurs ne sont pas en mesure de donner des exercices de programmation centrées sur la réalité des élèves (donc essentiellement des résolutions de problèmes de mathématiques et de sciences), que voulez-vous qu'ils leurs apprennent ?

    Les techniques d'obfuscation de code ?
    Le plaisir de faire son compilateur maison ?
    Et pourquoi pas leur apprendre à transformer un bytecode interprété en fichier compilé ?
    Eventuellement du reverse engineering avec sources inaccessibles ?

    Je ne suis même pas sûr qu'il y ait plus de 5 élèves sur terre à qui se soit utile mais pourquoi pas.

    Il ne vous reste donc plus qu'à postuler dans l'EN (en espérant que vous soyez en mesure de faire ces choses).

    Cherche livres et objets du domaine mathématique :

    Intégraphes, règles log et calculateurs électromécaniques.

  • parisse écrivait :
    > @nicolas.patrois: d'une certaine maniere, il y a deja 2 langages utilises dans le secondaire avec scratch et Python :-)

    Vous ne pensez pas que tout ça va finir comme le plan "Informatique pour tous" dans les années 80 ?
    Je me souviens avoir eu des cours quand j'étais ado, je n'avais strictement rien compris et j'avais conclu que l'informatique ce n'était sans doute pas pour moi...
  • Coucou,

    Effectivement, la solution la plus plausible est d'écrire un algorithme dans un langage naturel, voir avec les symboles mathématiques, me parait une très bonne base.

    D'ailleurs les bouquin d'algo utilise ce principe. Y compris avec la notation à lieur : intersections d'ensembles, opérateurs fondamentaux, etc...

    Avec ça, on prend conscience qu'une bib peut résoudre le pb, ou que un simple algo de recherche du style:
    si A appartient à l'ensemble E alors ...
    la méthode "Renvoyer si A appartient à l'ensemble E(A,E)" peut ensuite être approfondi:
    - Algorithme naif
    - ou on peut expliquer qu'il existe des bib qui le fond de façon optimisée
    - Recherche dichotomique avec un trie
    - etc...

    Ceci donnerai de super bases aux élèves, qui choisirons eux même, plus tard,
    le ou les langages qu'ils veulent apprendre.

    On peut ensuite expliquer l'orientation de tel ou tel langage:
    - WEB
    - Recherche et mise au point de Calculs Scientifiques
    - Optimlisation de Calculs et Logiciels: C/C++, GPU
    - etc...

    Les bases et tries simple peuvent être approfondi, selon le niveau de classe.

    C'est plus facilement corrigeable, et surtout cela donne des bases fiables, pour la suite,
    sans parti pris pour tel ou tel langage.

    Si le prof de math maîtrise Python, Scratch etc.. ou un autre langage de son choix, il peut monter ce que cela donne,
    et/ou pour les élèves "avancés", les laisser tester.

    Comme ça il est libre et plus serin.

    Ses preps de classes ne seront jamais perdus (les maths et leur symboles, eux ne disparaitrons pas ...)

    Mais le pb c'est les examens que vont passer les élèves, qui devrait adopter ce principe.

    C'est ce qui est dangereux: il ne faut pas imposer un langage à ce niveau.

    Malheureusement, si vous en passez un, si vous écrivez votre programme en algo, en langage math ou naturel,
    ou dans un autre langage, on vous met une note éliminatoire, même si tout est juste:
    il n'y a que le Python de vrai pour certains!

    Cordialement
  • Couc,

    Je cite parisse :
    "Le probleme actuel, c'est que Python est impose au lycee au point que les sujets d'ecrits comportent des programmes ecrits dans ce langage, au lieu de laisser l'enseignant choisir un langage (interprete au niveau du lycee general) avec des evaluations ecrites reposant sur l'ecriture d'algorithmes en langage naturel. L'autre probleme a mon avis, c'est que les eleves de prepas ne soient pas tous inities a un langage compile (avec typage, etc.) imposant un controle du code source plus rigoureux et detectant ainsi plus d'erreurs plus tot. Je pense qu'il est bien plus difficile de comprendre certains aspects de complexite/efficacite/importance du choix des structures de donnees si on n'a pas ete confronte a un langage qui les expose. "

    je sent l'expérience concrète derrière ces propos.

    De même:
    "Sur le temps necessaire a la maitrise d'un langage et de ses bibliotheques: mon experience personnelle, c'est que cela prend beaucoup de temps. Bien sur, on peut rapidement ecrire des petits scripts ou programmes (disons jusqu'a environ 10^3 lignes) dans un nouveau langage quand on maitrise deja un autre langage, mais ecrire et mettre au point efficacement un gros programme (plus que 10^4 lignes) dans un nouveau langage et un nouvel environnement de developpement demande plusieurs annees quand on est jeune et c'est de plus en plus difficile quand on prend de l'age. Finalement, ce n'est pas tres different d'apprendre une langue etrangere."

    Après comparaison avec ma propre expérience, les valeurs chiffrage du nombre de ligne par rapport au temps d'apprentissage me paraissent très réalistes.
    Je confirme aussi ses propos, sur le temps d'apprentissage des bibliothèques:
    "ce n'est pas très différent d'apprendre une langue étrange."

    C'est en cela que je veux attirer l'attention:
    ce n'est pas le temps d'apprentissage du langage lui même qui est difficile, (surtout pour des prof de math habitué à apprendre des chose très abstraites) mais c'est l'investissement final, pour faire des logiciels, avec le temps d'apprentissage des bibliothèques !

    Je suis content que parisse vous confirme mes propos.

    Par contre, je vous rassurerai:
    " un nouvel environnement de développement demande plusieurs années quand on est jeune et c'est de plus en plus difficile quand on prend de l'age."

    Finalement, c'est ce que tous le monde me dis.
    Mais je vais vous rassurer:
    au contraire, avec l'expérience, qui compense les rhumatismes, on y arrive plus facilement.

    Pourquoi ?

    Parce que on sait où chercher, et le cerveau ne se dégrade qu'à l'age de 165 ans (d'après la recherche)
    contrairement au reste.

    J'ai "battu" (moins de peur de se remettre en question et plus d'ouverture d'esprit) bien des petits jeunes (j'ai fini major de promo) grâce à ma curiosité intellectuelle et mon sens de la remise en question.
    Je les sentais plus difficile à émerger chez les autres étudiant plus jeunes que moi.
    Je pense cependant qu'ils l'auront très certainement plus tard.

    Cordialement
  • Tiens, par curiosité, comment pourrait-on faire faire quelque chose comme ça (version plus courte ici) en C++ à des élèves de lycée ? Avec la bibliothèque standard de C++, si possible.

    Ensuite, on m'expliquera comment des élèves qui, en 10 ans d'études, ne sont pas capables d'apprendre à additionner deux fractions ou même à simplifier une fraction, pourraient comprendre ne serait-ce qu'une minuscule fraction des concepts de base du C++ (nécessité des fichiers en-têtes, règles de conversion ou promotion entre les types, syntaxe des déclarations, méthodes publiques/privées/protégées/virtuelles, héritage public ou privé, entrées-sorties, utilisation des itérateurs, lvalues, rvalues, xvalues, glvalues, prvalues, etc.). (:D

    (Mince, j'ai marché dedans !)
  • @brian: je ne defends pas l'apprentissage de C/C++ (ou d'un autre langage compile) pour tous les eleves avant le bac, mais pour tous les eleves de prepa (et de licence des parcours a dominante maths et physique, en parcours info, c'est le cas je pense). Il n'y a pas d'interet a mon avis pour faire du calcul de se lancer dans la POO (sauf pour les etudiants interesses par l'info bien sur).

    L'exemple que vous donnez est largement a la portee du public concerne, avec une librairie gerant les grands entiers, par exemple GMP et mpz_class.
    #include <iostream>
    #include <gmpxx.h>
    using namespace std;
    
    int main(){
      mpz_class r=1;
      int s=1;
      for (int i=2;i<2017;i+=2){
        r *= i*s;
        s=-s;
      }
      cout << r << endl;
    }
    
    Alors bien sur, il y a un peu plus de code a ecrire, mais il y a aussi matiere a reflexion sur l'utilisation des types (pour r vs i et s), ainsi que sur l'edition, la compilation et l'utilisation de la librairie GMP (g++ -O2 tst.cc -lgmpxx). Pour l'efficacite, time me donne 0.025s pour la version Python contre 0.003s pour la version C++.

    Le typage peut d'ailleurs faciliter l'optimisation (parenthesage dans r=r*(i*s) si on n'utilise pas *=) et l'etude de la complexite en O(n^2) ou n=2017, ce que l'on peut tester experimentalement avec
    #include <iostream>
    #include <gmpxx.h>
    #include <stdlib.h>
    using namespace std;
    
    int main(int argc,char ** argv){
      mpz_class r=1;
      int s=1,n;
      if (argc==1)
        n=2017;
      else
        n=atoi(argv[1]);
      for (int i=2;i<n;i+=2){
        r *= i*s;
        s=-s;
      }
      cout << r << endl;
    }
    
    puis
    time ./a.out 20000 >& log
    time ./a.out 200000 >& log
    
  • Merci pour l'exemple, parisse ; cependant, je me suis limité au lycée car notre nouvel intervenant fustigeait l'utilisation de Python au secondaire, au lieu du « vrai langage » C++. Votre exemple me conforte dans l'idée que le calcul sur les « grands entiers » en C++ ne peut être fait avec seulement la bibliothèque standard, sauf à réécrire soi-même une bibliothèque de calcul sur les « grands entiers ».

    Edit : pour compiler votre code sur mon système (Debian unstable), il faut ajouter -lgmp à la commande que vous avez proposée, par exemple comme ceci :
    g++ -O2 tst.cc -o tst -lgmpxx -lgmp
    
    Autrement, voici ce qui se passe :
    % g++ -O2 tst.cc -lgmpxx
    /usr/bin/ld: /tmp/ccxaVhES.o: undefined reference to symbol '__gmpz_init_set_ui'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libgmp.so.10: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    %
    
    Edit 2 : compte tenu des « algorithmes » que l'on voit dans les livres ou sujets de lycée, comparer les performances de C++ versus Python dans ce cadre ne me paraît pas très pertinent, bien que l'on puisse s'y intéresser dans l'absolu. Auquel cas, étant donné que le programme Python a un petit temps de démarrage incompressible dû à l'interpréteur, il me semble préférable de comparer les durées d'exécution des deux programmes suivants :
    #! /usr/bin/env python3
    # troisqua.py
    
    for j in range(10000):
      r, s = 1, 1
      for i in range (2, 2017, 2):
        r, s = r * i * s, -s
    
    et
    // tst.cc
    #include <iostream>
    #include <gmpxx.h>
    using namespace std;
    
    int main()
    {
      for (int j=0; j<10000; j++) {
        mpz_class r=1;
        int s=1;
        for (int i=2; i<2017; i+=2) {
          r *= i*s;
          s=-s;
        }
      }
    }
    
    Résultat sur mon système :
    % time ./troisqua.py
    ./troisqua.py  7.56s user 0.01s system 99% cpu 7.576 total
    % time ./tst
    ./tst  1.08s user 0.00s system 99% cpu 1.083 total
    
    Le programme C++ est donc environ 7 fois plus rapide que le script Python sur mon système. Pas très étonnant : c'est pile poil le genre de chose où C++ est censé exceller. D'autre part, si l'on cherche la performance brute sous Python, il est possible d'écrire un module d'extension en C ou C++ (je crois que l'on peut même utiliser Rust de nos jours) pour la partie « calculs » ; les performances devraient alors être très proches de celles d'un programme « pur C++ ». Mais on est là très clairement en dehors du cadre du lycée, auquel mon message précédent se limitait explicitement.
  • Petite parenthese:
    En fait, ce programme ne fait intervenir que des multiplications d'entiers longs par des entiers machines (cout en O(n)), du coup le ratio de vitesse n'est pas tres grand entre Python et C/GMP (un ordre de grandeur environ), et on peut meme penser qu'il devrait etre proche de 1 pour n grand puisque le cout principal dans l'execution sera le cout de la multiplication (code en natif dans les deux cas) et pas le cout de la boucle (interprete vs natif). [Je n'ai pas teste]
    Par contre, si on multiplie des entiers longs entre eux, C/GMP va etre beaucoup plus rapide pour n grand, car la multiplication des entiers avec CPython utilise l'algorithme de Karatsuba (en O(n^(log(3)/log(2))) alors que C/GMP utilise divers algorithmes asymptotiquement bien plus efficaces. Je trouve d'ailleurs assez etonnant que CPython n'utilise pas GMP par defaut (pour MicroPython c'est comprehensible), peut-etre parce que les maths ne sont pas un domaine cible par les developpeurs (comme en temoigne aussi l'absence de support pour l'algebre lineaire, a commencer par l'impossibilite d'utiliser + pour additionner deux vecteurs representes par des listes ou * pour multiplier un vecteur liste par un scalaire).

    Au final, on est bien d'accord qu'au lycee, filiere generale avant le bac, il parait raisonnable d'utiliser un langage qui ne necessite pas de compilation explicite. J'aimerais d'ailleurs bien savoir quel impact le remplacement d'Algobox par Python a eu sur les capacites en algorithmique des eleves faibles et moyens...
    La ou nos avis divergent peut-etre, c'est sur le langage unique qui est impose et le risque helas bien reel que les sujets d'ecrits mettent en avant la programmation en Python au lieu de l'algorithmique en langage naturel. Et dans le superieur en filiere scientifique, il me semble tres important d'ouvrir les etudiants a un langage compile.
  • À ma connaissance, la bibliothèque standard de Python ne s'occupe pas d'analyse numérique. Pour ça (donc pour l'addition de vecteurs avec +, etc.), il faut plutôt regarder du côté de SciPy ou NumPy. Je suis intervenu dans ce fil parce que le nouvel arrivant semblait préconiser le remplacement de Python par C++ dans le secondaire, ce qui me fait bien rire. En revanche, sur le fait d'imposer Python comme langage unique, je ne me suis pas prononcé. J'aime bien Python, mais je préfère un cours avec des choses super intéressantes dans le langage favori du prof. à un se limitant à des « algos » débiles en Python, comme on en voit à chaque fois qu'un exo avec « algorithme » tiré d'un bouquin de lycée est posté ici. Je préférerais de la vraie algorithmique éventuellement en pseudo-code à l'escroquerie que les manuels et programmes actuels désignent sous ce terme.
  • Un langage de programmation pour les petites classes (des personnes qui sont à des années d'entrer dans le monde productif et donc pour qui la maîtrise d'un langage haut niveau particulier est superflue) devrait être le plus bas niveau possible (pourquoi pas l'assembleur), afin de faire connaître au public les mécanismes exacts de la programmation (les langages haut niveau ne font que brasser des abréviations d'enchaînements de ces mécanismes).
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • J'ai utilisé Scilab pendant plus de 10 ans dans un contexte professionnel ; pas de librairie à charger ; on se concentre sur les algorithmes ; un langage inspiré du C ; gratuitiel développé par l'INRIA et qui a été racheté par ESI (groupe privé maintenant)

    Passé de mode mais à mon sens un excellent outil pour le lycée, d'autant que beaucoup utiliseront MATLAB par la suite.
  • Programmer en assembleur suppose de connaître un minimum la structure de l'ordinateur, et de très bien la connaître si on veut vraiment faire quelque chose. De plus ce n'est pas très "lisible", assez complexe même quand on connaît.
    Donc y consacrer quelques séances en fin de lycée ou en début de supérieur pourquoi pas, mais avant ça va juste dégoûter de l'informatique.

    Le débat serait plus sur une compréhension plus profonde de ce qu'est l'informatique en fin de lycée, notamment pour les élèves attirés par un programmation orientée hardware, et bien sûr, vers l'informatique théorique, liens avec les maths etc.

    Parisse, sais-tu pourquoi Algobox a été viré ? Personnellement je l'avais essayé j'avais trouvé ça valable.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Foys, vouloir commencer par de l'assembleur dans les petites classes pour apprendre la programmation est l'équivalent de commencer par l'étude de ZFC pour apprendre les mathématiques. Ce n'est ni adapté, ni pertinent, ni utile à ce stade.
  • @xax: Ce sont des decideurs haut places au sein de la hierarchie de l'EN qui ont impose Python (un des IG a ete particulierement actif si j'ai bien compris, mais probablement aussi des profs de prepas) alors qu'auparavant chaque enseignant pouvait choisir un langage de programmation, l'evaluation se faisant en langage algorithmique naturel.

    Algobox etait il me semble tres populaire parmi les profs avec une interface faite par un enseignant de lycee (qui est aussi l'auteur de texmaker pour ceux qui connaissent). Bien entendu a un moment donne il faut passer a autre chose, mais c'est certainement plus accessible a un eleve moyen ou faible que Python, en particulier en seconde (je serais curieux de savoir quel est le pourcentage d'eleves qui ont un minimum d'autonomie en Python vs Algobox).
  • "Tiens, par curiosité, comment pourrait-on faire faire quelque chose comme ça (version plus courte ici) en C++ à des élèves de lycée ? Avec la bibliothèque standard de C++, si possible."
    resultat = 1
    n = 2
    signe = 1
    while n < 2018:
        resultat = resultat * signe * n
        n = n + 2
        signe = - signe
    print(resultat)
    
    On est sur un forum de mathématiques.
    Quel est le but de ce calcul (du point de vue des mathématiques pour un élève de lycée ?)
    Ici on a trois suites numériques combinées :
    U := { U0 = 2; Un+1 = Un + 2}
    V := { V0 = 1;Vn+1 = -Vn}
    W := { W0=1; Wn+1 = Wn * Vn * Un }

    Est-ce bien au programme du lycée les suites numériques combinées ?
    J'en doute !

    Pour introduire la programmation et les algorithmes,
    je présenterai un algorithme plus simple comme suit.
    Soit la suite Numérique:
    U := {U0 = 1; Un+1 = Un * 2}
    Comment faire afficher les valeurs successives de Un, pour chaque indice n, par un programme ?

    Piste.
    Soit la variable u, qui va contenir à l'étape n, chaque valeur successive de la suite Un

    Donnez une affectation qui permet de réaffecter u à partir de sa valeur précédente.
    Exemple : Affectation de u par u+1 := u <-- u+1
    Remarque: l'affectation de droite à gauche "<--" n'est pas une égalité
    (bien que certains langage de programmation utilisent le symbole "=" !).
    La valeur est d'abord calculé à droite, avec les valeurs en cours des variables, et les opérateurs,
    puis ENSUITE (ré) affectés à la variable (unique) à gauche.

    Donnez un boucle, à partir de n, qui utilise l'affectation ci-dessus
    pour afficher u, valeur de la suite Un, à l'étape n du calcul sur ordinateur
    pour 2048 valeurs

    Réponse.
    n <-- 0 // Compteur étape n de la Suite Un, qui commence pour l'indice 0 de la suite
    u <-- 1 // Initialisation de u à la valeur de départ U0 de notre suite à étudier
    
    // Ma boucle
    tant que n < 2048
       Afficher u // Afficher la valeur de U à l'étape n
       u <-- u * 2  // Affecter maintenant u, la valeur de Un à l'indice n, avec une nouvelle valeur = u x 2
       n <-- n + 1 // Incrémenter l'indice n de la Suite Un, pour passer au suivant
    fin et rebouclage tant que
    
    Dérouler cet algorithme,
    en inscrivant les instructions exécutées, les valeurs initiales et calculées, pour n de 0 à n=3

    "Ensuite, on m'expliquera comment des élèves qui, en 10 ans d'études, ne sont pas capables d'apprendre à additionner deux fractions ou même à simplifier une fraction, pourraient comprendre ne serait-ce qu'une minuscule fraction des concepts de base du C++ (nécessité des fichiers en-têtes, règles de conversion ou promotion entre les types, syntaxe des déclarations, méthodes publiques/privées/protégées/virtuelles, héritage public ou privé, entrées-sorties, utilisation des itérateurs, lvalues, rvalues, xvalues, glvalues, prvalues, etc.)."

    Ben, c'est simple: s'ils ne savent pas simplifier une fraction, à quoi va leur servir la programmation ?

    Je pense qu'une initiation plus simple, comme ci-dessus qui établie la relation entre :
    Une suite Mathématique (simple) Un <----> Un algorithme de boucle n, avec des variables
    est suffisante.

    Pas de Python et de C++ pour ces élèves.

    Pour les autres, tu peux leur donner ton exemple de code, avec juste le passage à compléter,
    et un laïus sur les instructions nécessaires (affectation, multiplication avec * etc...)
    dans le langage QUE TU VEUX (ou que l'on t'impose, comme Python si ça te chante !)

    Voilà pourquoi je suis content de ne pas avoir appris la programmation avec un prof de math !
    Par contre, si tu as présenté cet exercice à tes élèves qui ne savent pas additionner deux fractions,
    je te met 0/20 en pédagogie.
    (PS : je me moque, c'est de l'humour, car je comprends le désarroi des profs de math !)

    Effectivement, il faut comprendre le pb de math pour écrire un programme (algorithme) de calcul/résolution.
    C'est là qu'est votre savoir faire !

    Cordialement
  • Bruno.Moraut a écrit:
    Est-ce bien au programme du Lycée les suites numériques combinées ? J'en doute!

    As-tu bien lu le programme de TS et de TES spécialité ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @Bruno.Moraut

    Dans ma phrase citée en début de message, il y a écrit deux fois C++, car je répondais à un de tes messages précédents. Ce que tu as écrit sur fond jaune n'est pas du C++.

    P.S. : ne te fatigue pas à écrire une solution qui utilise autre chose que la bibliothèque standard de C++ : cela a déjà été fait et ne répond pas à la partie intéressante de ma question.
  • Bonsoir,

    Ce qui serait un peu intéressant, pour bien mettre en évidence la puissance du C++ sur un exemple pas trop complexe, la réalisation d'un jeu du style '2048'.

    Pour ceux qui ne savent pas, c'est un jeu qui consiste, sur une grille carrée (la taille peut aller de 4x4 à 16x16), à transformer des tuiles apparaissant de manière aléatoire sur la grille et représentant les premières puissances de deux (2, 4) suivant le schéma suivant :

    - Quand l'utilisateur rentre une direction (haut, bas, gauche, droite), les tuiles se dirigent vers le bord de cette direction.
    - Quand deux tuiles de valeurs différentes se rencontrent, elles s'arrêtent et il ne se passe rien.
    - Quand deux tuiles de valeurs identiques se rencontrent, elles disparaissent et sont remplacées par une seule tuile, de valeur double, placée dans la direction précitée.
    - Dans l'optique initiale du concepteur du jeu, réussir à obtenir la tuile '2048' était suffisamment dur pour que ce soit l'objectif du jeu.
    Il est toutefois possible d'aller plus loin.

    Vous pouvez vous renseigner. il a fallu juste un week-end au concepteur du jeu pour produire le code (javascript).
    Il existe aussi une implémentation Python de ce jeu.

    A bientôt,

    Cherche livres et objets du domaine mathématique :

    Intégraphes, règles log et calculateurs électromécaniques.

  • Merci pour les précisions Parisse, en fait je comptais utiliser Algobox pour initier junior à l'info, suite à des demandes de plus en plus pressantes :-). Empiler les languettes de Scratch l'a très vite ennuyé.
    Je pense que bien faire passer les choses dans le langage puis dans du pseudo-code et enfin dans les langages de code ce doit être efficace.
    Donc en fait la question qui revient toujours, quel premier langage ? Python n'est pas le choix le plus calamiteux.
    Après je pense qu'un langage largement multi-paradigme peut avoir un grand intérêt à condition de savoir ce quoi on parle (Julia, Oz, Scala etc.).
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Python aussi est multi-paradigme.
    Et comme langage bas niveau pour les élèves, je propose BrainFuck.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @xax: je pense que Python a un defaut majeur pour les debutants, c'est l'utilisation de l'indentation comme delimiteur implicite de bloc. Ca va paraitre paradoxal de dire ca, car c'est parfois presente comme un avantage de Python d'etre oblige d'indenter correctement son code. Mais je pense qu'il vaut beaucoup mieux avoir des delimiteurs explicites de bloc et d'obliger *aussi* a indenter le code, car cela joue le role de code correcteur d'erreur (c'est d'ailleurs aussi valable pour des utilisateurs plus avances).
    Un autre defaut majeur a mon avis, c'est l'abstraction des boucles for en Python vs la boucle for de base en C ou Javascript.
    Ca n'enleve rien a l'interet de Python pour des utilisateurs plus avances dans le domaine ou il est a mon avis le plus pertinent, a savoir ecrire des scripts qui font interagir des briques de base plus fondementales (mais pas pour programmer ces briques de base).
  • @xax: Algobox est un langage sympa, qui avait une certaine popularité en France avant que les décideurs de l'E.N. ne décident qu'il ne fallait plus le voir. Dernière version 2014.
    Je pense qu'il n'y a pas de difficulté à initier avec Julia, tu n'auras pas le problème des indentations, qui a été un des trucs qui m'a fait fuir Python. Si tu veux être plus classique, Scilab est bien.
  • L’intérêt de l’indentation en Python : elle économise les deux caractères des accolades et ainsi, on les utilise pour les ensembles et les dictionnaires.
    Pour l’abstraction, c’est pratique de pouvoir parcourir toutes les valeurs d’une liste ou d’un ensemble sans se planter dans les itérateurs.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • L'indentation en Python permet aussi d'économiser des lignes, de supprimer de la « charge visuelle inutile » — en présence d'une indentation cohérente, les accolades sont presque toujours redondantes — et donc de voir plus de logique du code d'un coup d'œil. En effet, avec les accolades, pour garder un peu de lisibilité, dans toutes les recommandations de style de code que j'ai vues pour (pour C ou C++), l'accolade fermante doit être toute seule sur sa ligne. Quant à l'accolade ouvrante, cela dépend du type de bloc qu'elle commence : souvent seule sur sa ligne pour une accolade qui commence une fonction, variable suivant le projet pour les autres types de blocs (if/then/else, etc.). Un autre avantage important de l'indentation signifiante de Python est que grâce à elle, on ne peut pas se faire tromper par une indentation incohérente : ce que l'on voit est la structure de blocs considérée par l'interpréteur Python.
  • Est-ce qu'il existe des études de référence sur l'apprentissage de l'informatique comme on en trouve sur les maths ?
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
Cette discussion a été fermée.
Success message!