Apprendre à programmer

Mathématiques, sciences humaines, anthropologie, écologie, biologie, génétique, médecine, ou encore philologie, linguistique, grammaire et autres. La vaste partie consacrée aux sciences dans leur ensemble, et dans leur unicité.
Répondre
Avatar du membre
Fu
Messages : 987
Enregistré le : dim. 4 févr. 2018 21:54
Présentation : viewtopic.php?f=9&t=9137
Profil : Diagnostic +
Test : WAIS

Apprendre à programmer

Message par Fu »

J’ai trouvé et essayé ce site avec mon fils, pour l’initier à la programmation : http://algoblocs.fr/

C’est très sympa, également pensé pour les écoles, et utilisable gratuitement. Je pense l’avoir déjà croisé il y a des années, ou alors quelque chose qui utilisait un format similaire de blocs.

Et bien sûr c’est utile aussi pour les adultes qui veulent s’y essayer. :)

J’ai trouvé d’autres sites mais qui faisaient plus compliqué et moins complet, avec des graphismes certes plus sympas mais aussi une certaine lourdeur qui va avec. Ici on est plutôt sur des graphismes minimalistes, façon Logo (qui semble être une inspiration), et très efficace.

PS : et il y a des défis, certains assez chauds, de quoi passer des heures.

Avatar du membre
Calvinethobbes
Messages : 210
Enregistré le : jeu. 20 déc. 2018 15:53
Profil : Diagnostic +
Test : WAIS
Âge : 43

Re: Apprendre à programmer

Message par Calvinethobbes »

Ici les enfants utilisent Scratch (version en ligne) pour débuter...les plus jeunes s'amusent bien dessus. Les plus grands utilisent la partie consacrée à la programmation de Khan Academy, mais je ne sais pas trop s'ils sont assidus (ça a l'air assez ardu, il me semble). Je vais de ce pas jeter un oeil sur alogbloc! Merci pour le lien :)

Avatar du membre
Polgara
Messages : 55
Enregistré le : mar. 2 avr. 2019 18:49
Présentation : [url=https://adulte-surdoue.fr/viewtopic.php?f=9&t=10029] Ma présentation [/url]
Profil : Diagnostic +
Test : WAIS

Re: Apprendre à programmer

Message par Polgara »

https://www.code-decode.net/

Je faisais des animations avec les mômes pour créer des jeux vidéos.
J'le trouve vraiment bien fait et marrant. :)
J'y ai initié ma petite cousine, ça lui a bien plu.

Avatar du membre
pixelvois
Papa Ours
Papa Ours
Messages : 6056
Enregistré le : dim. 27 nov. 2011 10:50
Présentation : topic1098.html
Profil : Diagnostic +
Test : WAIS
Localisation : planète Mars en navet rond
Âge : 48

Ancien Membre de l'équipe

Re: Apprendre à programmer

Message par pixelvois »

Fu a écrit :
sam. 6 avr. 2019 17:12
J’ai trouvé et essayé ce site avec mon fils, pour l’initier à la programmation : http://algoblocs.fr/

C’est très sympa, également pensé pour les écoles, et utilisable gratuitement. Je pense l’avoir déjà croisé il y a des années, ou alors quelque chose qui utilisait un format similaire de blocs.
Calvinethobbes a écrit :
sam. 6 avr. 2019 18:14
Ici les enfants utilisent Scratch (version en ligne) pour débuter...
A première vue, c'est bonnet blanc et blanc bonnet ^^

Scratch n'est plus si jeune (version 3.x actuellement, version 0.1 datant de 2003 début du développement, première version "mature" 1.x en 2006-2007) et développé au MIT il poursuivait des buts semblables à ceux de son (illustre?) ancêtre Logo (initiation, éducation). Il est probablement le premier à mettre en oeuvre le concept de brique graphiques à assembler, apparament directement hérité du concept de programmation object (les premières versions de scratch sont d'abord développées en Smalltalk/Squeak -- le second est lui-même héritier du Logo et une implémentation du premier à but éducatif, les deux sont initialement développés par le département de recherche et dévelopement de Xerox, les mêmes qui sont à l'origine de l'invention de la souris et des interfaces graphiques que d'autres se sont mutuellement volés pour les faire passer de l'invention confidentielle à l'innovation et commercialisation grand public -- ensuite en ActionScript -- Flash -- et aujourd'hui en JavaScript via une bibliothèque logicielle "Blockly" dédiée à ce type d'interface de programation graphique de plus en plus répandue, pour ceux que la méta-programmation tenterait :mrgreen:).

Si les premières fois que j'en ai entendu parlé je n'ai pas été très convaincu et demeure assez dubitatif sur son intérêt pour "vraiment" apprendre à programmer, force est de constater qu'il a un succès certain et qu'il semble remplir son rôle :P Il n'en reste pas moins à mes yeux le Duplo de la programation, et qu'il s'agit d'un outil d'initiation avant tout qui ne saurait remplacer un Mécano ou un Légo Technics pour qui veut aller ne serait-ce qu'un peu plus loin, sans parler de se mettre à utiliser des "vrais" outils pour les plus téméraires qui s'ennuyront rapidement de se contenter de faire de l'assemblage (maquettes à prêtes à assembler versus maquettes où il faut fabriquer ses pièces, montage de meubles en kit versus fabrication de meuble sur mesure) ;)

Polgara a écrit :
dim. 7 avr. 2019 15:49
https://www.code-decode.net/

Je faisais des animations avec les mômes pour créer des jeux vidéos.
J'le trouve vraiment bien fait et marrant. :)
J'y ai initié ma petite cousine, ça lui a bien plu.
Le site ne montre pas grand chose de ce que ça propose concrètement, et la partie "gratuite" semble très limitée par rapport aux solutions payantes, tout en nécessitant d'au minimum créer un compte (d'où les guillemets entourant le terme "gratuit", puisque visiblement il n'y a pas d'accès tout à fait libre, ne serait-ce que pour se rendre compte) : c'est toujours dommage je trouve :(
"Dans un monde où chacun triche, c'est l'homme vrai qui fait figure de charlatan." ( André Gide - Les faux monnayeurs )

Avatar du membre
Youpla
Messages : 543
Enregistré le : sam. 8 déc. 2018 00:50
Présentation : http://adulte-surdoue.fr/viewtopic.php? ... 39#p284095
Profil : Diagnostic +
Test : WAIS
Âge : 41

Re: Apprendre à programmer

Message par Youpla »

On doit initier les collégiens à la programmation et aussi les préparer à l'épreuve de DNB, en fin de 3ème, ils ont un exercice obligatoire dessus.
Le nom de "scratch" n'est pas mentionné sur le sujet, mais les captures d'écran montrent un logiciel en mode "blocs" qui y ressemble étrangement.
Je l'enseigne donc à mes élèves, de la 6ème à la 3ème. En grande majorité, ils adorent. Certains l'ont déjà utilisé en primaire.

Au lycée, ils passent à d'autres logiciels qui ne sont plus sur le mode "blocs" a priori.
Un des principaux enseignés semble être algobox.

Pour les enfants, ça me semble très "sympa" de passer par cette étape duplo-logiciel, et même indispensable pour certains.
Surtout, ça permet de passer par un niveau de conceptualisation moindre pour débuter, zapper aussi les difficultés de tape...

Avatar du membre
Joemanix
Messages : 92
Enregistré le : ven. 11 oct. 2019 15:47
Profil : Diagnostic +
Test : WAIS
Localisation : dans ma tête
Âge : 44

Re: Apprendre à programmer

Message par Joemanix »

Ma sœur, prof de maths dans un collège privé, doit les initier à scratch. Mon plus grand garçon à lui-même débuté au collège avec scratch. Comme le dit pixelvois, il s'agit là de :
Il n'en reste pas moins à mes yeux le Duplo de la programation

Mon deuxième gars, au collège public, apprend également avec scratch.

Mon plus grand est maintenant au lycée, et au programme de mathématique, ils apprennent le Python dès la seconde. Cela semble être au départ une bonne idée.

N'ayant pas fait de cursus dans l'informatique, qui est pourtant mon métier depuis 25 ans et que je pratique depuis 34 ans, j'ai fait mes premières armes en Basic sur Amstrad. Aujourd'hui, je jongle avec une multitude de langage. :rock:

Et le constat est sans appel : LA base, c'est l'algorithmique... Le langage derrière n'est qu'une traduction.
Le choix du langage dépend de plusieurs critères : facilitée d'écriture, bibliothèque disponible, portabilité, etc...

Dans l'algorithmique, les briques de bases (et c'est sûrement là l'intérêt de scratch et consorts, mais pas testé personnellement) sont en gros :

- les variables / les constantes
- les opérations / opérateurs
- les boucles
- les conditions
- la gestion des entrées / sorties

Maintenant, il ne doit pas être évident d'attaquer l'algorithmique au plus jeune âge. Et pour le coup, les logiciels type scratch, peuvent en faire une première approche semble t'il.

Pour un adulte, je ne peux, dès lors, que conseiller de travailler d'abord sur l'algorithmique, puis de choisir un langage en fonction de ses besoins, mais ce n'est que mon avis par rapport à mon expérience.
Des sites comme openclassroom (gratuit) permettent une première approche de plusieurs langages.

Enfin, il y a deux grandes classes de langage, et dans une moindre mesure, une petite troisième, correspondant aux trois paradigmes principaux (procédurale / orientée objet / événementielle) :

- Les procéduraux : Basic / Pascal / C / GO / Fortran / rust (bien qu'avec un peu d'objet dedans), etc..
- Les objets : ADA / C++ / C# / Python / Java / Ruby / PHP, etc... (ADA est en hommage à Ada Lovelace, que l'on considère comme la première femme "informaticienne".)
- Les événementielles : VB / MATLAB / etc... Et dans une certaine mesure quelques langage ci-dessus.


On pourrait aussi parler de scripting (Bash / PowerShell / JavaScript / etc...), multi-paradigmes, mais pas langage en tant que tel. Ou de langage "intermédiaire" comme le perl / macro / VBA (Macro et VBA étant lié au programme dans lequel il s'exécute genre Word / Excel)

Là aussi, cela dépend de la sensibilité du programmeur, de la disponibilité de bibliothèque (morceau déjà prêt à l'emploi pour ne pas réinventer la roue), et du but recherché.

Pour finir, pour les puristes, reste l'assembleur (c'est ce langage que comprend la machine et donc très dépendant de celle-ci). Quel que soit le langage, il est transformé en assembleur pour que la machine le traite, soi directement (langage compilé), soi indirectement (langage interprété / pré-compilé / langage intermédiaire).
Il y a quelques années, quand la rapidité de traitement était privilégiée, on choisissait les langages compilés. De nos jours, avec la puissance des machines, la différence de rapidité n'est plus flagrante.

Ce post est incomplet, et il faudrait un site dédié pour en voir tous les aspects.

Donc, pour conclure, en dehors de l'éducation nationale qui penche pour scratch (bien que pas cité directement ? cf. Youpla) au collège et python au lycée, encore que cela semble dépendre du Lycée ? (cf. Youpla avec algobox) actuellement, c'est sûrement aux parents de voir dans le cercle privé, quels outils ils pensent le mieux adaptés (voir les post précédents).

Hors-sujet
Hors sujet, et je n'ai pas encore cherché sur le forum. Je suis toujours épaté par ceux qui parlent des langues étrangères. Y a-t-il un lien avec l'algorithmique. Je veux dire par là, un mécanisme commun genre sujet / verbe / complément, puis une traduction dans la langue ? Sachant que, comme pour les langages informatiques, on fini par penser directement dans le langage (donc la langue).
Conservation de l'énergie : Em=Ec+Ep. Sans chute, cela reste potentiel...

Invité

Re: Apprendre à programmer

Message par Invité »

Je vais être un peu moins d'accord et un peu plus nuancé, en tant que docteur en informatique (j'ai certes beaucoup moins d'expérience que toi, même si je programme depuis près de 20 ans). Ou du moins des éléments qui sont assez imprécis ou qui peuvent prêter à confusion à mon sens.
Et le constat est sans appel : LA base, c'est l'algorithmique... Le langage derrière n'est qu'une traduction.
Il faut surtout savoir de quoi on parle. Si on parle de programmation pure et dure, l'algorithmique n'a rien avoir là dedans. Si on parle de faire de l'informatique (donc résoudre des problèmes complexes au moyen de l'outil), il faut en effet prendre en compte l'algorithmique qui est une sous discipline des maths. En d'autres termes, tout le monde peut apprendre à programmer, mais pas tout le monde est capable de résoudre tous les problèmes, et c'est là une différence majeure. Pour imager, tout le monde peut prendre une casserole, mettre de l'eau et cuir des pâtes, mais uniquement un cuisinier peut réaliser des pâtes aldente.

Donc non l'algorithmique n'est pas la base de la programmation. Ensuite, l'algorithmique ne s'apprend pas avec les briques de bases que tu énonces qui ne sont qu'un moyen de formaliser facilement un problème. La vérité c'est qu'on apprenait au primaire l'algorithmique bien avant l'arrivée de l'informatique par un truc simple: la résolution des problèmes en maths. Exemple:
"Le train A par de la gare C à 9h20. Elle est distance de la gare B de 20km. Sachant que le train J part de la gare B à 9h26, à quel endroit les deux trains vont-ils se croiser s'ils roulent à vitesse constante ?"
Trouver une méthode pour résoudre ce problème, c'est de l'algorithmique et c'est bien plus efficace en terme d'apprentissage de cette discipline, c'est même la base. Une autre façon de faire de l'algorithmique: jouer avec des légos. C'est d'ailleurs à la base ça qui a motivé l'essor de la programmation par blocs (qui est en quelque sorte un paradigme de programmation de la famille des paradigmes visuels) que vous mentionnez dans vos post précédents.

Les briques que tu décris d'ailleurs ne sont qu'une méthode de pensée lié à la programmation impérative, et quand on passe en programmation fonctionnelle, certaines n'existent plus (pas de boucle, pas de condition par exemple). Ce n'est donc pas du tout lié à l'algorithmique et plus largement c'est quelque chose de restreint à une famille de paradigmes.
Enfin, il y a deux grandes classes de langage, et dans une moindre mesure, une petite troisième, correspondant aux trois paradigmes principaux (procédurale / orientée objet / événementielle)
Alors non il y a beaucoup plus de paradigmes que ca, et les langages ne correspondent pas aux paradigmes, il n'y a pas de "classe de langage" (ou bien on parle au niveau de la théorie des langues et ce n'est pas du tout la même chose). De nombreux langages sont multi paradigmes justement (le C++ est classé par abus de langage dans la catégorie des langages "orientée objet", mais en réalité, c'est un langage qui permet d'expliciter un problème selon différents paradigmes dont le plus courant est l'orienté objet; le Java lui ne permet pas de faire du déclaratif mais il permet de faire de l'orientée objet, de l'évènementielle, de la programmation concurrente etc; Smalltalk ne permet de formaliser qu'un problème pensé en orientée objet). Les grandes familles de paradigmes sont: le type impératif qui regroupe les paradigmes qui explicite un problème sous forme d'instructions (Allez ici, ouvrir le coffre, mettre la pièce, fermer le coffre, etc), le type orientée objet qui décrit le problème sous forme de relation entre objet (pour accélerer la voiture, je dois appuyer sur la pédale qui va entraîner l'ouverture de la chambre à combustion, qui va permettre au gaz de s'échapper et d'entrer les pistons qui vont faire tourner la chaine motice), le type déclaratif qui permet de décrire la solution à un problème sous forme d'une description (typiquement la toile est composée de couleurs bleu, noir blanc en haut à gauche, et rouge vert jaune en bas à droite) et les autres qu'on ne classifie pas parce que trop nombreux. On peut également parler des paradigmes visuels cités précédemment.

Le paradigme n'est rien d'autre qu'une manière de conceptualiser un problème, une manière de pensée. Un langage permet d'expliciter cette forme de pensée ou non. Si on veut prendre un exemple dans la vie de tous les jours, la langue française permet d'expliciter le masculin et le féminin mais pas le neutre, tandis que l'anglais permet d'expliciter le neutre, et rarement le masculin ou le féminin.

Les langages de script sont des langages également. Un langage de script est interprété par un programme, et un langage de programmation permet de produire des exécutables qui seront directement exécutés par le processeur ou par une VM.
Il y a quelques années, quand la rapidité de traitement était privilégiée, on choisissait les langages compilés. De nos jours, avec la puissance des machines, la différence de rapidité n'est plus flagrante.
Quelque soit la puissance de la machine, un langage compilé est toujours nettement plus rapide qu'un langage interprété, et ce sera toujours le cas, rien avoir avec la puissance de la machine. Et la vitesse reste flagrante. La réalité c'est que ca dépend du problème à traiter, de la classe de l'algorithme utilisé pour résoudre le problème et du niveau de maîtrise du langage. Dans la majorité des cas, les programmes "simples" s'exécutent très vite, et on parle de vitesse de l'ordre de la micro ou de la nanoseconde, donc ca te donne l'impression que ce n'est pas flagrant, mais ca le reste. Un algorithme qui prendra 10 microsecondes à s'exécuter sur un langage de script, prendra 10 nanosecondes sur un langage compilé. Le seul truc qui fait qu'on choisisse un langage interprété qu'un langage compilé: la facilité d'utilisation. On ne se pose pas la question des différentes architectures et des différentes spécificités des systèmes lorsqu'on implémente un programme, et on laisse ça à l'interpréteur. C'est tout. Dans un langage compilé, tu es obligé de prendre en compte beaucoup plus de paramètres et l'optimisation passe à la fois par l'optimisation algorithmique et par l'optimisation technique, ce qui rend le tout complètement inaccessible à des non-spécialistes. C'est pour ça que des langages comme Python gagnent en popularité, parce qu'ils ne nécessitent pas de connaitre des éléments pourtant important en informatique, et qui sont moins important du point de vue de la programmation. Une personne qui ne connait pas toutes les subtilités du C++ et de sa traduction en ASM peut produire un exécutable 10 à 15 fois plus lent que le même algorithme codé en Python. Est ce que c'est parce que c'est le langage qui est plus "lent" ou parce que la personne n'est pas assez compétente dans ce langage ? Par ailleurs, il y a beaucoup de domaines où la vitesse de traitement est toujours privilégié: le jeu vidéo, les systèmes embarqués, les banques par exemple. On y verra très peu de langage de script et les langages interprétés restent sur les processus peu critiques (tu verras jamais un pilote automatique programmé en autre chose qu'en C ou en Fortran et pour encore longtemps).

Bref, je suis désolé, mais je fais parti de cette génération qui milite pour faire comprendre que l'informatique et la programmation sont deux domaines différents, parce que j'en ai assez de voir débarquer à l'université des personnes qui confondent les deux, et qui se rendent compte rapidement que l'informatique est quelque chose de beaucoup plus complexe et pour lequel la programmation n'est qu'une partie minuscule immergée de l'iceberg.
Au final, on se retrouve avec des étudiants qui ne sont ni bons en informatique ni bons en programmation et c'est de plus en plus compliqué de leur faire comprendre parce qu'ils arrivent dans nos cours totalement formatés (et pas dans le bon sens du terme).

Et pour ma part, si je pense que l'initiation à la programmation est une bonne chose sur le papier, c'est une fabrique à mauvaises habitudes et à incompréhension. Il est de plus en plus difficile dans le milieu universitaire de trouver des informaticiens qui comprennent réellement ce qu'ils font, tout simplement parce qu'il y a un méli-mélo et un amalgame de tous les concepts qu'ils ont appris dans leur parcours. Je pense qu'il serait plus sain de faire comprendre la différence entre s'initier à la conceptualisation (ce qu'on enseigne au final aux enfants au travers des paradigmes visuels), la programmation (qui consiste à un manipuler un langage technique pour formaliser un problème conceptuel - un programmeur se doit de maîtriser tous les aspects du langage qu'il utilise, et pas nécessairement l'algorithmique derrière), et l'informatique qui consiste à résoudre des problèmes liés au traitement de l'information (au sens large) au moyen d'un outil électronique ou non (et là c'est l'algorithmique qui prime sur la maîtrise des langages). D'ailleurs, c'est pour cela qu'il y a deux branches dans les pays anglophones: le Computer Engineering et le Computer Science. Le Computer Engineering sera justement orienté sur l'aspect technique de l'informatique et la maitrise technique, tandis que le Computer Science est plus orienté sur la conceptualisation et la résolution des problèmes.
Hors sujet, et je n'ai pas encore cherché sur le forum. Je suis toujours épaté par ceux qui parlent des langues étrangères. Y a-t-il un lien avec l'algorithmique. Je veux dire par là, un mécanisme commun genre sujet / verbe / complément, puis une traduction dans la langue ? Sachant que, comme pour les langages informatiques, on fini par penser directement dans le langage (donc la langue).
Tu parles de plusieurs choses distinctes. La programmation (ou du moins les langages) n'est issue que de la théorie des langages qui traite justement de la transformation et du traitement symbolique de l'information. Ce que tu appelles langages n'est rien d'autre qu'un ensemble syntaxique auquel on associe une sémantique. Les langages de programmation font parties des langages dits formels qui sont un sous-ensemble des langages dits naturels (que tu appelles langue). Ca devrait répondre à ton interrogation.

Pour finir sur une note d'optimisme, la réalité c'est vous faites tous de la programmation ou de l'algorithmique sans vous en rendre compte dans la vie de tous les jours. A chaque fois que vous programmez votre micro-onde, vous faites de la programmation. Lorsque vous manipulez votre classeur excel en utilisant les formules, vous faites de la programmation. Lorsque vous programmez votre réveil, vous faites de la programmation. Lorsque vous résolvez un problème de tous les jours, par exemple, vous voulez vous rendre à Paris alors que vous êtes à Brest, vous tracez un itinéraire en prenant en prenant en compte certaines villes selon certains critères, vous faites de l'algorithmique. Lorsque vous cuisinez, vous faites de l'algorithmique. Lorsque vous réparez votre véhicule, vous faites de l'algorithmique. La seule différence c'est que dans le cas "informatique" dans l'imaginaire collectif (ie faire des programmes), on le formalise avec un langage mathématique pour pouvoir donner des instructions à une machine qui ne comprend que ce langage, et ce pour des raisons purement électrique et électronique. Mais il n'y a rien de sorcier. Il est temps de vous libérer de ces images néfastes qu'on entretient pour mystifier la chose.

Après savoir si vous faites réellement de l'informatique ou non, c'est une autre question qui s'éloigne il me semble du sujet original qui était d'apprendre à programmer.
Ces utilisateurs ont remercié l’auteur Invité pour son message (3 au total) :
pixelvoisSwinnKirigol
Classement : 3%

Avatar du membre
Joemanix
Messages : 92
Enregistré le : ven. 11 oct. 2019 15:47
Profil : Diagnostic +
Test : WAIS
Localisation : dans ma tête
Âge : 44

Re: Apprendre à programmer

Message par Joemanix »

Tu as raison Kurai, ce post se voulait très simpliste et plein d'abus de langage qui sont connus du grand public.

Et en effet, je n'emploie pas les bons termes !!!
Si on parle de programmation pure et dure, l'algorithmique n'a rien avoir là dedans. Si on parle de faire de l'informatique (donc résoudre des problèmes complexes au moyen de l'outil), il faut en effet prendre en compte l'algorithmique qui est une sous discipline des maths
Effectivement, je parlais de faire de l'informatique et pas de programmation pure et dure.

Les familles de paradigmes sont plus appropriés. En ce sens, certains langages de programmation sont plus adaptés à une famille. Et d'autre à plusieurs paradigmes. Comme tu le notes justement, le C++, Java et le rust par exemple.

Pour le scripting, je ne sais plus pourquoi j'ai dit : "pas langage en tant que tel" ...

J'ai parlé des paradigmes principaux, sous-entendu qu'il y en a plus. Au passage, je ne connaissais pas ce classement par type.

Le but du post était pour le "profane". Mais je te remercie pour les précisions importante et ton militantisme, car comme toi, je travaille avec des gens fraîchement sortie d'école et bon .... no comment. Surtout si l'on ajoute la gestion de la donnée (cf. les bases de données et leurs accès), ou les aspects graphiques (pour des jeux selon le moteur / les bibliothèques et langage associé), ou l'IHM qui est encore un autre métier...

Pour revenir sur la vitesse, j'insiste sur le "pas flagrant" sur de petits programmes (toujours dans l'optique où je m'adressais à des débutants). Et c'est même dépendant de la façon dont le code est fait (j'aurais envie de dire de l'algorithme, mais là je ne sais plus trop si c'est adapté)

Je bosse dans le HPC, alors oui un programme bien optimisé, dans un langage compilé et avec un compilateur aux options optimisé pour l'architecture (KNL vs SKL vs ARM vs etc...), sur 1 million de cœur, la différence sera carrément flagrante !!!

J'avais cru que ce fil était plutôt pour des débutants, pour se faire une idée. D'où cette simplification extrême et l'amalgame entre le Computer Engineering et le Computer Science notamment. :1cache:

Pour la même raison, c'était générique =>
Après savoir si vous faites réellement de l'informatique ou non, c'est une autre question qui s'éloigne il me semble du sujet original qui était d'apprendre à programmer
Et donc, en grande partie hors sujet.

Pour finir :
Ou du moins des éléments qui sont assez imprécis ou qui peuvent prêter à confusion à mon sens.
Oui sans aucun doute :( :violent1:
Conservation de l'énergie : Em=Ec+Ep. Sans chute, cela reste potentiel...

Invité

Re: Apprendre à programmer

Message par Invité »

Pas de soucis, je tenais juste à faire ces précisions, parce que meme dans le cadre profane, je trouve que cela reste bien d'essayer d'être clair et de faire la part des choses. Aujourd'hui, on se heurte à une multitude de métiers qui sont mystifiés et qui semblent totalement inaccessibles, ou qui se déclare faire de l'informatique: bio-informatique, chémo-informatique, data scientist, et j'en passe. Et à l'intérieur, il est très rare d'avoir affaire à de vrais informaticiens (on a plus des programmeurs qu'autre chose en réalité lorsqu'on creuse un peu en terme de connaissance - et certains d'entre eux ne sont même pas des programmeurs puisque si on se réfère à ma définition plus haut, ils ne connaissent pas les subtilités du langage qu'ils emploient). Et ca devient compliqué de parler avec eux. Alors de fait, si on peut essayer de faire comprendre, même au profane, la différence qu'il y a entre les différents métiers, je trouve que c'est bien.
Hors-sujet
Et c'est même dépendant de la façon dont le code est fait (j'aurais envie de dire de l'algorithme, mais là je ne sais plus trop si c'est adapté)
Le problème c'est que la notion de code en informatique regroupe deux aspects:
- l'algorithme qui est la solution (in)formelle à ton problème et qui a sa propre classe de complexité mathématique;
- la traduction dans la langage formelle de programmation qui va influencer tes performances réelles.

Admettons que j'ai cette équation: x+3 = 5. Je dois trouver x. Théoriquement en terme algorithmique, la complexité est constante puisque il suffit de faire x = 5-3. Mais il est tout à fait possible que la traduction dans le langage compilé soit tellement mal faite qu'au lieu de prendre une instruction, elle en prend 50. En prenant le même exemple, tu pourrais faire un truc du type: mettre au carré, et résoudre l'équation a²-b²=0 en terme d'algorithme, et traduire ca en une seule instruction.

Donc si on veut vraiment parler vitesse et optimisation, il faut prendre en compte ces deux aspects, et préciser de quoi on parle (parce que la façon dont le code est fait, ca veut pas dire grand chose au final, on peut faire référence à l'algo comme à la manière dont c'est codé). C'est pour ca que je disais que tu pouvais très bien avoir des programmes en C qui soit 10 voir 15 fois plus lent que leur équivalent Python, mais c'est juste lié au fait que le langage est mal exploité. Normalement, à exploitation optimale, la performance ne dépend que de l'algorithme, et auquel cas naturellement ton programme natif sera plus rapide que ton programme interprété. Et dans ce cas, lorsqu'on parle du code, on fait référence à l'algo, alors que dans le premier cas on fait référence à l'exploitation du langage.

Au fond c'est un peu comme écrire un livre: tu as des personnes qui font des phrases courtes qui percutent, et d'autres comme moi qui font des phrases hyper longues et difficile à comprendre et qui vont pas droit au but. Ca ne signifie pas que les idées ne sont pas les mêmes, ca signifie juste que dans un cas l'idée est claire et peut être rapidement comprise, et dans l'autre, c'est confus il faut batailler pour comprendre (exploitation du langage).

Tu peux aussi avoir des raisonnements hyper court qui vont de suite au but, et des raisonnements tordus qui vont finir par y arriver en prenant un super long chemin (indépendant de l'exploitation du langage) <==== Algorithme

Et comme il est plus facile de s'affranchir de l'exploitation du langage puisque tout le monde peut produire un raisonnement, on s'affranchit de la contrainte du langage => Choix du Python. Et sur des programmes simples, ca aura très peu d'incidence comme tu dis parce qu'on ne s'attend pas à des réponses extremement rapide. Mais ce n'est pas parce que la vitesse compte moins. C'est juste qu'on a de moins en moins de bons programmeurs, et de moins en moins de bons informaticiens, et on compense en multipliant la puissance de calcul. Et c'est le serpent qui se mord la queue.

Et si tu veux faire un parallèle avec la société, les enfants massacrent de plus en plus la langue qu'ils parlent (mauvaise exploitation du langage, simplification du vocabulaire et des concepts), mais ils ont de plus en plus de difficulté à produire de bonnes idées (moins d'idée => moins de concept à exprimer => simplification du langage => moins de concept exprimable => moins d'idée) et donc ca se retrouve aussi en informatique et plus spécifiquement en programmation qui n'est justement qu'un moyen d'expression comme un autre.

Mais le vrai problème c'est que généralement on ne maitrise ni l'un ni l'autre, donc au fond, on ne parle plus de grand chose :huhu:

Avatar du membre
Whatif
Messages : 23
Enregistré le : lun. 9 déc. 2019 23:17
Profil : Diagnostic -
Test : WAIS

Re: Apprendre à programmer

Message par Whatif »

Un grand merci Kurai pour ces distinctions !
Jusqu'à ce matin, je confondais informatique et programmation. Je suis arrivée à ces domaines par des chemins de traverse, pour finalement devenir "développeuse" (je pense que ça veut dire programmeuse ?) en m'inscrivant dans une de ces écoles courtes qui font florès actuellement et dans lesquelles il n'y a pas beaucoup de place pour les questionnements théoriques... Il y avait des cours d'algorithmie, mais à un niveau où je me suis fait dispensée pour pouvoir à la place travailler sur les projets à réaliser. Je ne vais pas cracher sur ce genre de formation parce que ça m'a permis de réintégrer le monde normal qui travaille et qui a un toit sur la tête, mais c'est vraiment du survol et l'insuffisance est un peu effrayante quand on arrive ensuite en entreprise.

J'envie les personnes qui ont pu baigner dans l'informatique depuis leur tendre enfance ; il y a tant de choses à apprendre dans ce domaine !

Imhotep
Messages : 14
Enregistré le : lun. 10 févr. 2020 17:06
Profil : En questionnement
Test : NON
Âge : 49

Re: Apprendre à programmer

Message par Imhotep »

Personnellement, j'y suis arrivé plus tard dans mes études, au niveau de B+2.
La seule différence c'est qu'il y a de cela maintenant 23 ans. Donc la formation était très large
car il n'y avait pas tout les outils tel qu'il existe maintenant. Si on avait besoin d'un outil on le
programmais tout simplement.
Maintenant j'ai plus l'impression que l'on essaie de modéliser une méthode de pensé,
mais celle ci n'est pas faite pour tout les mondes, tout dépend de ces inspirations et envie
professionnelle.
Apprendre à programmer est pour moi, plus une manière de pensé que de langage.

Avatar du membre
W4x
Le modo le plus gentil
Messages : 3821
Enregistré le : lun. 21 nov. 2011 23:19
Présentation : topic1075.html
Profil : Diagnostic +
Test : WAIS
Âge : 38
Contact :

Re: Apprendre à programmer

Message par W4x »

Imhotep a écrit :
mar. 11 févr. 2020 15:17
Apprendre à programmer est pour moi, plus une manière de pensée que de langage.
Je dirais qu'il y a des deux. Comme dit plus haut il y a l'algorithmique qui est à la base de la pensée et de l'architecture du programme, et le code qui est sa traduction syntaxique. Apprendre le code c'est comme apprendre une langue étrangère, avec son vocabulaire et sa syntaxe propre, mais c'est aussi y intégrer la façon dont celui-ci est pensé. Pour filer la métaphore des langues, on peut connaître par cœur tout le syllabaire japonais et bon nombre d'idéogrammes, si l'on reste scotché à notre structure française sujet-verbe-complément, on aura bien du mal à formuler une phrase grammaticalement correcte et intelligible en japonais. Sans parler du conditionnel, du futur, du subjonctif et autres nuances qui n'existent dans cette langue qu'au travers d'une grammaire totalement différente de la nôtre (et sans aller chercher aussi loin, il y a aussi de nombreuses différences structurelles entre le français et l'allemand par exemple).
Pour revenir à l'apprentissage de la programmation, c'est depuis quelques années un sujet qui pointe de plus en plus son nez dans les programmes scientifiques du lycée (et un peu en collège avec Scratch), à travers les initiations à l'algorithmique (en langage "naturel" comme ils disent) et au langage Python. Désormais il y a toujours une ou deux questions d'algorithmique dans les sujets de maths au bac, et fut un temps on faisait élaborer de petits programmes sur calculatrices (TI et CASIO, donc en BASIC), mais maintenant la "mode" de l'EN est au Python, qui s'inscrit petit à petit dans les programmes officiels.
Ce n'est pas pour discuter de la pertinence de la chose, mais je trouve qu'au moins ça met en lumière la réalité de l'outil informatique au service des mathématiques, et surtout la réalité de la rigueur nécessaire à l'élaboration d'un code informatique : contrairement à un texte en langue étrangère, la moindre erreur sur un seul caractère fait que le programme ne fonctionnera pas, ou mal. J'aime l'idée qu'en filigrane cela puisse faire toucher du doigt l'idée que la rigueur d'expression dans une langue, qu'elle soit maternelle ou non, impacte directement la compréhension de l'auditeur / lecteur. Et dans le cas d'un ordinateur, c'est zéro ou un. Je dis souvent à mes élèves qui ne comprennent pas pourquoi leur calculatrice ne leur donne pas le résultat attendu : "N'oubliez pas que vous parlez à un bout de plastique ! Ce n'est pas de sa faute si elle vous donne des résultats bizarres ou incohérents."

A ce sujet donc, entre autres multiples ressources comme l'EN sait nous en fournir, j'ai retenu le site france-ioi, qui se veut généraliste et orienté scolaire, mais permet sous forme le plus souvent ludique, de mettre le pied dans le monde de la programmation. En particulier la partie cours et formations permet de découvrir pas à pas différents langages (Python, Java, C...). La courbe de progression est un peu hachée mais à condition d'avoir un bagage mathématique/algo minimum, on arrive à s'initier sans trop de mal aux bases des langages. Hé oui, coder c'est avant tout savoir faire des maths rigoureusement ;)
Mathematics is a game played according to certain simple rules with meaningless marks on paper. D.Hilbert

Imhotep
Messages : 14
Enregistré le : lun. 10 févr. 2020 17:06
Profil : En questionnement
Test : NON
Âge : 49

Re: Apprendre à programmer

Message par Imhotep »

Bonjour

Je suis d'accord avec ce qui est dit, mais contre le fait qu'il faut avoir fait des maths pour être programmeur, personnellement, je n'ai fait aucune étude spécifique math.
Je m'en sors très bien niveau programmation. Après cela fait plus de 20 ans que je pratique et donc j'ai connue la programmation pure et dure en tapant des lignes
dans des fichiers et ensuite les testes à l'aveugle pour voir si cela fonctionne comme prèvu. Ce qui n'était pas toujours le cas :(

Avatar du membre
Fu
Messages : 987
Enregistré le : dim. 4 févr. 2018 21:54
Présentation : viewtopic.php?f=9&t=9137
Profil : Diagnostic +
Test : WAIS

Re: Apprendre à programmer

Message par Fu »

Cela dépend du type de programmation auquel on est confronté. Quand on fait pas mal de 2D ou de 3D (jeux, outils, shaders ou autres), on se retrouve à faire pas mal de maths, pas forcément dans des domaines très variés (vecteurs, optique, statistiques, compression de données, génération de courbes ou de surfaces…). Après, un truc bien avec la programmation, c’est que selon la destination du programme on est souvent amené à apprendre plein de trucs : maths, théorie de la musique, typographie… On n’est jamais aussi bon qu’un expert dans ces domaines mais on apprend des choses, et les mathématiques peuvent en faire partie.
Ces utilisateurs ont remercié l’auteur Fu pour son message :
pixelvois
Classement : 1%

Imhotep
Messages : 14
Enregistré le : lun. 10 févr. 2020 17:06
Profil : En questionnement
Test : NON
Âge : 49

Re: Apprendre à programmer

Message par Imhotep »

Oui c'est vraie personnellement j'ai travaillé dans pas mal de domaine différent, et en ce moment c'est dans
la finance, ce qui est intéressant aussi. Même si les maths sont très basique.

Avatar du membre
W4x
Le modo le plus gentil
Messages : 3821
Enregistré le : lun. 21 nov. 2011 23:19
Présentation : topic1075.html
Profil : Diagnostic +
Test : WAIS
Âge : 38
Contact :

Re: Apprendre à programmer

Message par W4x »

Que l'on programme des choses qui soient de loin ou de près liées aux maths n'est pas forcément la question centrale. Dans mon idée ce n'est pas tant que les maths soient nécessaires à tout bon programmeur pour leur contenu, c’est surtout la proximité des deux domaines en termes de démarche et de rigueur (syntaxique, fonctionnelle etc.).
Au-delà de ça, les deux disciplines sont souvent associées en milieu scolaire et notamment post-bac car les demandes en la matière au service des sciences sont fortes.
Mathematics is a game played according to certain simple rules with meaningless marks on paper. D.Hilbert

Répondre