Journal Lycée et informatique : spécialité ISN en terminale S

42
23
mar.
2013

Cher nal,
Je voudrais partager avec toi mon expérience en spécialité ISN (Informatique et Société Numérique) au Lycée, qui est apparue avec la réforme des Lycées. Pour rappel, les terminales S ont le choix désormais entre : biologie, physique, mathématiques et informatique en spécialité. Toutes les spécialités ont un coefficient deux au bac.

La première chose que l'on peut dire sur le programme officiel est qu'il est beaucoup trop large, étant donné qu'avec deux heures par semaines, nous sommes censés aborder aussi bien les arcanes de la programmation, de l'algorithmique, des réseaux, du fonctionnement interne d'un ordinateur, du traitement des données, ainsi que de l'organisation d'un projet informatique.

Il a aussi la particularité d'être enseigné par des professeurs qui ne sont pas forcément spécialisés dans l'informatique, puisqu'il « suffit » d'une autorisation du ministère à enseigner (ce qui évite de recruter de nouveaux profs). D'ailleurs, nos cours sont assurés par deux professeurs, simultanément ou en alternance (en fonction du cycle lunaire principalement).

Ainsi, devant une classe d'environ 18 élèves (pour toutes les terminales S), les professeurs ont essayé de faire un cours qui était intéressant pour tous. En effet, il y a des très grandes différences de niveau entre les élèves : certains ont déjà des connaissances en informatique poussées et d'autres sont incapables d'ouvrir paint.

Devant cette problématique, ils ont décidé de programmer, parce que cela laisse une grande liberté au niveau du cours, et parce que cela procure très vite une certaine satisfaction à l'élève.
Les ordinateurs étant fournis par le lycée avec Python2 (sur un Windows XP ou Seven) qui contient turtle, le choix était vite fait vu que le service informatique est très lent à réagir, et donc installer sur toutes les machines un environnement de développement était impensable.

Le choix forcé de python a causé plusieurs problèmes, surtout au niveau de la compréhension. L'indentation est principale fautive, puisque mélanger espaces et tabulations ne fait pas bon ménage avec python, et beaucoup de gens ont pleuré des larmes de sang, ayant recopié à l'identique un programme affiché au tableau qui ne voulait pas tourner.

De plus, la boucle for a causé beaucoup de problèmes, puisqu'elle met en jeu des concepts assez haut niveau (générateurs), alors que mes camarades étaient habitués à leur TI-Basic, où le for est identique au C.

Le troisième problème le plus courant est la difficulté à appréhender la portée lexicale, et le concept de fonctions. Ainsi les variables liées (arguments) n'était pas vu comme variables, mais comme définit plus haut dans le programme … Ça c'est pas la faute de python, mais même la comparaison avec les mathématiques n'a pas tout élucidé pour certains.

Le quatrième problème est le typage. Comme en python les types sont implicites, cela incite les gens à faire n'importe quoi, en pensant que python fera le travail pour eux. C'est d'ailleurs assez pénible de savoir en lisant un programme, de quel type est une variable dans un morceau de code quand on débute.

Par contre, turtle a été très bien reçu ! Des primitives simples pour dessiner, pas ou peu de complexité, une prise en main facile, et tout le monde, quelque soit son niveau, a pu bien s'amuser dessus.

Pour revenir au sujet initial, se déroule maintenant la deuxième phase de l'année, dans laquelle des groupes de quatre se sont formés et doivent travailler en commun sur un projet qu'ils présenteront au bac, lors d'un oral (individuel) de 20 minutes. Les cours sont donc découpés en deux heures : une d'apport théorique général, puis une où les groupes travaillent leur projet et peuvent demander de l'aide (bien entendu, une heure par semaine ne suffit pas, il faut que les gens travaillent chez eux, car l'oral est dans seulement 5 semaines si mes souvenirs sont bons).

Qu'en pensez vous ? Est-ce utile de faire un programme généraliste sur cette matière, quand on sait que le bac doit nécessairement se présenter sous forme d'un projet présenté à l'oral, et donc d'une certaine « production » ? Quels outils auriez-vous préféré ? Comment donner une note à chaque trimestre ?

PS : désolé pour le pavé

  • # Ça, c'est fait.

    Posté par (page perso) . Évalué à  10 .

    […] Basic, où le for est identique au C.

    Avec des affirmations comme ça, tu peux facilement générer un thread de plus de 500 posts dans alt.folklore.computers !

    * Ils vendront Usenet quand on aura fini de le remplir.

    • [^] # Re: Ça, c'est fait.

      Posté par (page perso) . Évalué à  9 . Dernière modification : le 23/03/13 à 20:50

      Clair qu'il y a une différence… mais je crois qu'il faut comprendre qu'en TI-Basic (celui des z80 et celui des 68k) ainsi que dans le basic des casios et comme en C, on peut écrire une boucle for qui aurait pu être écrite par une boucle while de ce type :

      i = min
      while i < max:
          i = i + step
      
      

      pour min = 2, max = 10, step = 4,

      "TI-Basic z80
      For(I, 2, 10, 4)
      
      
      ©TI-Basic 68k
      for i, 2, 10, 4
      
      
      'Casio Basic
      For 2→I to 10 Step 4
      
      

      Quand le lycéen a déjà fait ça dans sa vie, c'est facile de lui dire qu'en C on fait ainsi :

      /* C */
      for (i = 2; i < 10; i += 4)
      
      

      Le lycéen comprend tout de suite, en faisant remarquer tout de même que c'est un peu verbeux.
      Alors oui on peut faire tout à fait autre chose avec le for du C (c'est pourquoi il est plus verbeux), mais ce qui compte c'est qu'il puisse retrouver ses marques et reproduire le peu qu'il connaît déjà.

      Tu mets ce même lycéen devant un for i in 2 6 10 du shell ou du Python, il capte pas et c'est normal, l'exemple que je viens de donner n'est pas le bon exemple pour expliquer le for en Python. Pour utiliser for en Python dans le cas de figure présent (for i from 2 to 10 step 4), il va falloir enseigner d'abord d'autres concepts…

      C'est pas tant que le TI-Basic est comme le C, c'est qu'on peut très facilement tordre C pour qu'il ressemble à du TI-Basic. Avec Python, certains concepts de base sont différents et homonymes.

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Ça, c'est fait.

        Posté par (page perso) . Évalué à  3 .

        Juste comme ça, en bash tu peux aussi écrire for ((i = 2; i < 10; i += 4)); do

        Par contre, je n'arrive plus à retrouver si c'est POSIX et quels interpréteurs le supportent. J'avoue ne pas avoir le reflex de l'utiliser.

  • # Le service informatique...

    Posté par (page perso) . Évalué à  10 .

    Qu'en pensez vous ?

    Que c'est comme tout le reste en ce moment (réforme STIDD…) : c'est fait à l'arrache dans le seul but de faire des économies en réduisant le nombre d'enseignants.

    Mais…

    Les ordinateurs étant fournis par le lycée avec Python2 (sur un Windows XP ou Seven) qui contient turtle, le choix était vite fait vu que le service informatique est très lent à réagir, et donc installer sur toutes les machines un environnement de développement était impensable.

    Ce n'est pas très sympathique.

    Il se trouve que je suis moi-même "le service informatique" d'un lycée dans lequel j'ai - entre autre - une spé ISN. Et pour ma défense, déployer un IDE qu'il m'appartient de choisir (au risque qu'il ne convienne pas) car le(s) enseignant(s) n'y connaissent rien, déployer une version de Python (là encore à moi de choisir) pour devoir la mettre à jour 2 semaines après parce que ça ne convient pas, installer des lib Python quasi tous les jours car le(s) enseignant(s) en ont découvert une nouvelle-trop-bien-qu'ils-connaissaient-pas-avant-et-qu'ils-savent-pas-ce-qu'ils-vont-faire-avec, revoir complètement le réseau de cette unique salle car ils vont aussi bosser là dessus, sachant que rien n'a pu être anticipé puisque tout m'est demander la veille pour l'avant-veille, qu'il y a beaucoup d'autres postes et sections qui ont besoin d'attention ET que je suis tout seul… forcément, tu comprendras que je suis un peu lent à réagir. ;)

    -- Note que je ne jette pas non plus la pierre aux enseignants qui comme tu le fais remarquer, ne sont bien souvent pas formés pour ces nouveaux programmes pourtant très denses et techniques.—

    Pour la petite histoire, j'ai du mettre en place pour la rentrée de septembre, de nouvelles machines pour la réforme STIDD, qui ont été livrées en septembre et sur lesquelles les enseignants me demandent encore aujourd'hui d'installer de nouveaux logiciels (quand ils ne me font pas restaurer les OS toutes les semaines pour certains suite au massacre de la machine tellement ils l'ont bidouillée) - logiciels qu'ils ne connaissent évidemment pas et ne sont bien sûr pas prévus pour fonctionner en réseau avec des droits utilisateurs limités. Je te passe les questions de licences (monopostes), les problèmes de compatibilité et… le regard des élèves qui ont l'impression que je suis un incompétent notoire qui passe son temps à glander. :/

    Bref, c'est la fête tous les jours ! :D

    There is no spoon...

    • [^] # Re: Le service informatique...

      Posté par (page perso) . Évalué à  6 .

      le regard des élèves qui ont l'impression que je suis un incompétent notoire qui passe son temps à glander. :/

      sans doute lié au syndrôme de Stockholm généré par le clic, suivant, clic…

      Tu as noté quelque part tout ce qui t'a été demandé d'être installé ? J'espère qu'il y a une part de libre tout de même ?

      L'académie de Versailles a quelques ressources : http://www.sti.ac-versailles.fr/spip.php?article150 (plus des présentations, visiblement, ça paraît effectivement dense :/). Faire du SysML comme vu sur http://www.sti.ac-versailles.fr/spip.php?article133 ça me semble sympathique, peut-être un peu tôt en secondaire ? (on voit bien les taxonomies en biologie en 4ème / 3ème, mais bon qui y comprend quelque chose à ces abstractions ?).

      • [^] # Re: Le service informatique...

        Posté par (page perso) . Évalué à  7 .

        Tu as noté quelque part tout ce qui t'a été demandé d'être installé ?

        Bien sûr ;). Et j'essaie lorsque j'ai un peu de temps, de mettre en place une solution de déploiement de logiciels (OPSI), mais c'est dur de se concentrer sur un truc comme ça quand on est régulièrement déranger soit par le téléphone soit par un enseignant qui fait irruption dans le bureau pour que je vienne l'aider à brancher sont portable sur le vidéo-projecteur (j'exagère un peu sur la fréquence, mais certains sont durs à éduquer).

        J'espère qu'il y a une part de libre tout de même ?

        J'essaie au maximum, mais je ne décide pas toujours. Pour les nouvelles sections, les enseignants semblent me faire confiance est n'hésitent pas à me demander conseils pour certains choix et j'apprécie de pouvoir le faire. Ces nouvelles sections ont ce côté positif qu'elles nécessitent la mise en place des choses un peu plus pointues quant à l'architecture réseau et logicielle. Ça rend le boulot plus intéressant dans la mesure où je sors un peu des simples dépannages.

        Mais je suis également tributaire des choix des hautes instances académiques qui par exemple imposent l'installation de SolidWorks et d'Autodesk puisqu'ils sont utilisés lors d'épreuves de Bac.
        Par extension, je ne peux pas me débarrasser de Windows sur ces postes (ni même d'Office qui est nécessaire pour certains exports de SW !)

        Les enseignants de maths sont les plus ouverts sur le libre je trouve. Ils tournent quasi exclusivement sous GNU/Linux et n'utilisent que des logiciels libres, même quand ils ont à faire cours dans une salle uniquement équipée de Windows.
        C'est très appréciable.
        Mais c'est paradoxalement ceux dont je m'occupe le moins, puisqu'ils ne font quasiment jamais appel à moi.

        There is no spoon...

        • [^] # Re: Le service informatique...

          Posté par (page perso) . Évalué à  4 .

          imposent l'installation de SolidWorks et d'Autodesk puisqu'ils sont utilisés lors d'épreuves de Bac.

          c'est contraire au RGI, non ?
          bon, installer à la place des équivalents libres est contreproductif, mais peut permettre un élargissement de la réflexion :

          je ne peux pas me débarrasser de Windows sur ces postes

          il y a beaucoup de distributions pour l'éducation, un liveUSB peut redonner de l'indépendance

          Les enseignants de maths sont les plus ouverts sur le libre je trouve.

          cela vaudrait le coup de faire le point avec eux 1h par semaine :-) (histoire de déléguer l'arbitrage des choix de leurs collègues, le faire de manière collégiale est bien plus constructif).

          • [^] # Re: Le service informatique...

            Posté par (page perso) . Évalué à  3 .

            c'est contraire au RGI, non ?
            bon, installer à la place des équivalents libres est contreproductif, mais peut permettre un élargissement de la réflexion :

            Je crois que ce n'est malheureusement pas négociable. C'en est au point que le groupe d'enseignants en charge de pondre des ressources pédagogiques dans l'académie conditionne les enseignants de mon bahut qui exploitent ces ressources et moi-même en me contraignant à des mises à jour régulières puisque leurs ressources sont réalisées avec les dernières versions et qu'il n'y a (selon les enseignants) pas de retro-compatibilité du format. Galère (j'ai juste fini de migrer le parc en 2011-2012 qu'il faut que je fasse la mise à jour vers le 2012-2013 - et vu la lourdeur du soft et le nombre de postes concernés… je te laisse imaginer).

            Mais je vais me renseigner sur les instructions officielles.

            Après, il faudra aussi prendre en compte que changer de logiciel implique une formation des enseignants (qui ne seront pas chauds) et de revoir leurs cours / ressources (là encore, c'est pas gagné).

            il y a beaucoup de distributions pour l'éducation, un liveUSB peut redonner de l'indépendance

            Oui, ça ce n'est pas vraiment un soucis. Je commence à installer du dual-boot (notamment en ISN), mais ce n'est pas la panacée car ça veut dire augmentation de la charge de travail de maintenance du parc puisque ça me fait 2 systèmes, différents qui plus-est, donc le double de config, de mises-à-jour, de problèmes… L'idéal serait d'avoir de l'homogénéité.
            De plus, une version live coupe la machine (et l'enseignant ou l'élève) du réseau, dans la mesure où il n'y aura pas d'accès aux ressources de celui-ci (partage de fichiers essentiellement).

            cela vaudrait le coup de faire le point avec eux 1h par semaine :-) (histoire de déléguer l'arbitrage des choix de leurs collègues, le faire de manière collégiale est bien plus constructif).

            C'est une bonne idée. Je vais creuser ça. ;)

            There is no spoon...

            • [^] # Re: Le service informatique...

              Posté par (page perso) . Évalué à  1 .

              (là encore, c'est pas gagné).

              il faut faire avec le temps de chacun… (le tien aussi)

              C'est une bonne idée. Je vais creuser ça. ;)

              oui, cela me semble pérenne : se constituer en équipe, chacun ses responsabilités, la possibilité pour chacun de convaincre les autres, tu n'es pas tout seul :) chacun fait ce qu'il peut en même temps.

        • [^] # Re: Le service informatique...

          Posté par . Évalué à  4 .

          Pour les mathématiques, l'agrégation se passe sous linux avec des logiciel libre. Ça doit aider.

          Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

          • [^] # Re: Le service informatique...

            Posté par . Évalué à  2 .

            Pareil pour le CAPES de maths. Pour le prochain oral (en juin/juillet), les élèves ont 2h30 pour rédiger une leçon sous OpenOffice.org 3.4 (bientôt Libre Office ?) et d'autres logiciels en général libres, comme Python 3.2. Du coup ça ne m'étonnerait pas qu'ils continuent à s'en servir une fois titulaires.

  • # bien

    Posté par (page perso) . Évalué à  5 .

    au bac, me concernant, c'était plutôt la loi informatique et liberté… et savoir faire un petit programme.

    Les cours : j'avais pu en prendre dès la 3ème, c'était le midi ou après 16h voire 17h, un créneau en commun avec un autre lycée pour avoir 2 profs (de math) et effectivement, certains d'entre nous connaissaient mieux certains sujets qu'eux, cela donnait lieu à des échanges intéressants, relativisant beaucoup la relation prof / élève :-) (sans doute lié au caractère de ces deux profs, faisant passer le message que nous étions tous là pour apprendre :D).

    Bon ok, j'ai passé le bac en 90… 1990 :-)

    et donc installer sur toutes les machines un environnement de développement était impensable.

    il suffit du matériel, un live CD ou un live USB permet ensuite de faire tourner ce que l'on souhaite… (bon, faut pas que les ports usb aient été bloqués au boot, sinon faire appel à du PXE, cela demande un pc connecté au réseau dont on ait la maîtrise, même si ce n'est au final pas beaucoup plus compliqué).

    En tout cas, c'est toujours mieux de faire du python que du Pascal :-)

    • [^] # Re: bien

      Posté par . Évalué à  2 .

      Cela demande au moins autant de Live-CD/USB que d'élèves … Et les problèmes de persistance qui s'en suivent : il faut une autre clé usb pour sauver le travail (ou faire deux partitions), s'il faut des drivers spécifiques (pour le wifi par exemple), avec un peu de chance ils sont installables directement, et même là, il faut ré-installer à chaque début de cours … À ce train là, autant faire passer tous les ordis sur une debian dès le début, au moins on le fait une fois et on y touche plus ! :-).

      Sinon, pascal … on compte à partir de 1, rien que ça c'est déstabilisant !

    • [^] # Re: bien

      Posté par . Évalué à  3 .

      En tout cas, c'est toujours mieux de faire du python que du Pascal :-)

      Sincèrement, s'ils n'ont que 2h par semaine (et que ces 2h ne sont pas dédiées QUE à la programmation), pascal c'est très bien. Je pense que beaucoup de gens ont commencé avec pascal, c'est pas pour rien : c'est très facile a comprendre, c'est quasiment de l'algorythmique traduite en francais.

      • [^] # Re: bien

        Posté par . Évalué à  -2 .

        "Algorythmique" traduite en français ? Ça donne algorithmique. De rien !

        • [^] # Re: bien

          Posté par . Évalué à  2 .

          Au temps pour moi. Vous aurez corrigé pour moi : traduite en anglais

  • # Retour

    Posté par . Évalué à  3 .

    J'ai été surpris aussi lorsque des étudiants m'ont dis qu'ils avaient vu le python au lycée avec les nouvelles options.
    Je pense que c'est surtout les profs qui ne doivent pas être très compétents pour ce genre de cours. ça va surement mettre du temps à devenir correct. En tout cas je trouve ça vraiment bien, ça évitera aux lycéens de se pointer en IUT Informatique en croyant qu'on fait de l'utilisation de logiciel. Ils ont au moins des notions de prog.

    Pour le choix du langage, c'est pas simple parce que si c'est deux heures par semaines, le langage c n'est pas approprié. Si au bout d'un an t'as encore rien fait tu te décourage.

  • # Mon grain de sel

    Posté par . Évalué à  3 .

    C'est indispensable. Et pas qu'en terminale S. L'informatique est une science, mais étant donné la place que tiens ses machines dans nos vies, il me semble absolument indispensable que chaque citoyen, dès le primaire apprenne les principes de fonctionnement de ses machines (et je ne parle pas d'apprendre à utiliser MS-whatever ou un nagivateur web). Sans déconner, les gamins mettent leur vie et sont même parfois dressés à mettre leur vie sur des serveurs états-uniens sans même avoir la plus petite idée de ce qui ce passe au delà de l'interface graphique. Il y a un petit moment j'avais été frappé par la réaction d'un ado à qui j'avais expliquer que oui, microsoft avait accès à toutes les données qui transitaient via MSN. Il devait penser que les messages se téléportaient automagiquement d'une machine à une autre. En fait il s'agit d'un problème d'éducation populaire, parce que l'ignorance des adultes n'est pas moins grave que celles des enfants.

    Concernant les outils, j'aime pas python. Je ne serais pas surpris que dans 10 ou 20 ans les informaticiens déplorent les ravages qu'aura fait python comme Dijkstra déplorait ceux du Basic ou plus tard d'autres ceux de perl ou java. À mon sens ses simples caprices syntaxiques aurait dû l'éliminer des candidats. Le C c'est pas mal, c'est simple. Sans utiliser l'arithmétique des pointeurs ni l'allocation dynamique c'est très abordable comme langage. De plus les analyseurs syntaxiques et statiques sont au top pour C.

    Please do not feed the trolls

    • [^] # Re: Mon grain de sel

      Posté par . Évalué à  -1 .

      C'est une réelle question et non un troll mais est ce que le c à un avenir honnêtement ?
      Je veux bien que pour commencer à apprendre ce soit très bien, par contre ça a tendance à être obsolète, rien que face au c++.

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  4 .

        Je veux bien que pour commencer à apprendre ce soit très bien

        Ca tombe bien, on parlait justement de langage pour apprendre à programmer.

        Quant à l'avenir du C, ne t'inquiète pas pour lui, c'est encore le langage le plus utilisé, et vue l'inertie des langages dans le monde professionnel (on cherche encore des profils pour programmer en fortran ou en cobol…), on est encore très loin d'en avoir terminé avec lui.
        Personnellement, j'aime sa simplicité, le fait qu'il soit assez proche de la machine permet de pouvoir comprendre assez directement les implications en terme de CPU/mémoire quand on fait n'importe quoi.
        Le C a "tendance à être obsolète" ? Il faut être sacrément déconnecté du monde pro pour écrire une chose pareille…

        Chippeur, arrête de chipper !

        • [^] # Re: Mon grain de sel

          Posté par . Évalué à  2 .

          Quant à l'avenir du C, ne t'inquiète pas pour lui, c'est encore le langage le plus utilisé […]

          Ça ça demande des preuves, les trucs comme TIOBE et les offres d'emplois ne vont pas dans ton sens. Oui il reste très utilisé, mais c'est pas le langage le plus utilisé.

          Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  2 .

            Certes mais programmer en langage C c'est toujours indispensable pour travailler dans le domaine des systèmes embarqués (et ce pour au moins encore 10-20 ans) car les composants électroniques ne peuvent se permettre d'avoir beaucoup de RAM nécessaires pour la plupart des autres langages…

            Ce n'est pas un troll sur la lourdeur des langages plus haut niveau, c'est juste que le C est suffisamment compact pour en avoir une version utilisable qui prend peu de place ce uqi est bien plus complexes pour les langages plutôt volumineux de par le nombre de fonctions à dispositions comme C++, Java ou Python.

            • [^] # Re: Mon grain de sel

              Posté par . Évalué à  2 .

              Oui oui je n'ai jamais dis le contraire. C'est juste l'affirmation « C est le langage le plus utilisé en entreprise » qui me semblait faux faute d'arguments supplémentaires.

              Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  2 .

                outre le C, il y a le Pro*C (qui rajoute l'intégration de requêtes SQL directement au code) que j'ai souvent rencontré (bon sinon, c'est Java et parfois PHP, ne pas chercher de cohérence en entreprise…).

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  2 .

        Le C est plus simple conceptuellement car il ne cache rien. En ce sens, il est un bon outil pédagogique. Par contre, son problème est qu'on mélange les concepts algorithmiques avec "le détail d'implémentation/gestion de la mémoire". Ça me dérange pas trop cela dit car l'algo peut être étudiée sur papier puis ensuite traduite sur machine.

        Il me semble impensable de former des étudiants à des langages haut niveaux car ils ont aucune chance de tenir dans le long terme. Le C est un standard qui est vieux et qui ne va jamais disparaître car il fait exactement ce qu'il est sensé faire, abstraire le langage machine.

        Après, je pense qu'il faut se dire que l'objectif ici n'est pas d'apprendre un langage pour aller bosser direct après le bac. Le but c'est de donner une culture et une façon de penser.

        • [^] # Re: Mon grain de sel

          Posté par (page perso) . Évalué à  6 .

          Le C est plus simple conceptuellement car il ne cache rien. En ce sens, il est un bon outil pédagogique.

          Ah ? N'importe qui peut écrire un programme en C qui fasse quelque chose. Pas forcément ce qui était prévu, mais quelque chose.

          It would have taken twice as long to build it properly http://www.programmerexcuses.com/

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  3 .

            Ah ? N'importe qui peut écrire un programme en C qui fasse quelque chose. Pas forcément ce qui était prévu, mais quelque chose.

            Si t'apprend pas la rigueur à l'école, tu l'apprendras quand ? Le C doit être un des rare langage qui te permette de comprendre entièrement ce que tu fais. Pour les plus doués, ça va jusqu'à savoir exactement où vont les données en mémoire et le code généré.

            Quand on apprend, c'est important de comprendre ce qu'on fait et ce que la machine fait. Ce n'est que mon avis, mais l'objectif de la formation est de redonner le contrôle à l'utilisateur, donc autant choisir un langage qui permet de comprendre tout depuis le début.

            • [^] # Re: Mon grain de sel

              Posté par . Évalué à  -8 .

              J'apprécie assez cette approche. Pour ma part, je l'ai rapidement mis en oeuvre dans mon apprentissage de la programmation¹, seul, vers 15 ou 16 ans, en étudiant l'ouvrage "C Programming Language" dit le K&R (des auteurs Kernighan et Ritchie - les concepteurs du langage) dans sa version traduite en français + les deux bouquins d'exercices et de solutions aux exercices. Une lointaine époque où je jouais avec le compilateur privateur "Turbo-C" de Borland sous Dos.

              C'est certain que la découverte et la pratique du C structure nettement la compréhension des fonctionnements sous-jascents. À ce compte-là, il est intéressant de faire aussi un peu d'assembleur, voire de découvrir au moins une fois un peu dans le détail comment sont construits les "opcodes" (opérateur et opérandes, combinés, vus en binaire) qui sont traités, in fine, par le processeur.

              ¹ après la pratique du langage simpliste de la calculatrice TI_66 puis du GWBasic sur PC-XT 4,77 Mhtz :)

            • [^] # Re: Mon grain de sel

              Posté par . Évalué à  3 .

              Le C doit être un des rare langage qui te permette de comprendre entièrement ce que tu fais.

              Le C fait quand même un paquet de conversions de types automatiques qui sont assez relous (genre dans les appels de fonctions variadiques).

        • [^] # Re: Mon grain de sel

          Posté par . Évalué à  10 .

          Autant j'aime beaucoup le C et le C++, mais affirmer :

          ils [les langages haut niveaux] ont aucune chance de tenir dans le long terme.

          Me semble déconnecté de la réalité. lisp, perl, python, ruby, java, (o)caml, haskel,… ont 15 ans pour les plus jeunes et plus de 50 ans pour le plus vieux. Je n'ai pas mémoire de langage un peu notable qui ai disparu.

          Mais quoi qu'il en soit c'est à mon avis triste d'imaginer qu'on apprend un langage pour faire carrière avec derrière (que ce soit au bac, en IUT, en Fac ou en école d'ingénieur). Tu utilise le bon langage point (celui qui est adapté à ce que tu fait et aux contraintes du projet). Le reste c'est de queues de cerises. Se focaliser sur le langage c'est un problème de geek dans son garage, c'est rigolo parce que c'est du troll, on se sent mieux parce qu'on se démarque ou on a l'impression d'appartenir ou pas à un groupe, mais très franchement OSEF.

          Tu as une base de concept que tu retrouve dans tout les langages et une part qui est plus spécifique à une famille de langage (programmation orienté objet par classe ou par prototype, programmation fonctionnelle, les problématiques de gestion de la mémoire (qui existent aussi bien en C qu'en Java ou python), le runtime (en C comme ailleurs), utiliser/subir le typage, etc). Se bloquer sur des histoires de langage me semble puéril et à peu près aussi utile qu'apprendre MS Word dans un cours de traitement de texte (ou on devrait apprendre à traiter du texte).

          Et pour le coup cette manie d'apprendre des langages plutôt qu'apprendre à programmer me semble poser bien plus problème que le mal qu'à pu faire basic ou je ne sais quel langage.

          Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  8 .

            Et pour le coup cette manie d'apprendre des langages plutôt qu'apprendre à programmer me semble poser bien plus problème que le mal qu'à pu faire basic ou je ne sais quel langage.

            je t'ai plussé pour cela :-)

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  2 .

            Me semble déconnecté de la réalité. lisp, perl, python, ruby, java, (o)caml, haskel,… ont 15 ans pour les plus jeunes et plus de 50 ans pour le plus vieux. Je n'ai pas mémoire de langage un peu notable qui ai disparu.

            Je suis globalement d'accord pour cette liste (qui ne contient aucun langage propriétaire et qui ne contient pas non plus Ada), mais qu'en est il de Delphi, Visual Basic, Action Script ou encore Quick Basic ? Que je sache, ces langages ont été très utilisés et ont (bien heureusement) majoritairement disparus (Action Script est en voie).

            Et pour le coup cette manie d'apprendre des langages plutôt qu'apprendre à programmer me semble poser bien plus problème que le mal qu'à pu faire basic ou je ne sais quel langage.

            "C'est quoi cette manie de vouloir apprendre une langue avant de savoir bien s'exprimer"? C'est utopique de croire qu'on peut apprendre à programmer sans apprendre plusieurs langages et les étudier. Apprendre à programmer, c'est pas connaitre 3 mots clés, les boucles, les fonctions et basta. Apprendre à programmer, c'est la complexité algorithmique, c'est du génie logiciel et c'est comprendre les choix possibles avant même d'avoir à le faire choix. Ça demande majoritairement de l'expérience et c'est en forgeant qu'on devient forgeront. Par contre, je suis tout à fait d'accord avec toi pour dire que les gens qui apprennent un ou deux langages et qui s'y limite, c'est pas comme ça qu'ils vont s'améliorer et devenir de meilleurs programmeurs.

            Mais quoi qu'il en soit c'est à mon avis triste d'imaginer qu'on apprend un langage pour faire carrière avec derrière (que ce soit au bac, en IUT, en Fac ou en école d'ingénieur). Tu utilise le bon langage point (celui qui est adapté à ce que tu fait et aux contraintes du projet). Le reste c'est de queues de cerises. Se focaliser sur le langage c'est un problème de geek dans son garage, c'est rigolo parce que c'est du troll, on se sent mieux parce qu'on se démarque ou on a l'impression d'appartenir ou pas à un groupe, mais très franchement OSEF.

            Je trouve cette logique totalement contraire à ce que tu indiques. C'est totalement une idée de geek que se dire qu'il faudrait toujours utiliser le langage le plus adapté pour le projet ou la tâche à faire. Dans la vie, tu changes de langues plusieurs fois par jours? Non, car les autres en face aussi doivent avoir la même aisance que toi dans ces langues. Et puis à baragouiner 10 langues, comment tu peux savoir quel langage est le plus adapté à quelle tâche vu que tu en maîtrise au final aucun? Je caricature à peine d'après certains ingénieurs que j'ai rencontré. Bon, si tu codes h-24 depuis 10 ans, tu as moyen de commencer à avoir une bonne maîtrise de 4-5 langages, ça reste peu. Et, pour finir avec ce point, tu fais quoi si ton projet change de direction? Tu recodes dans un autre langage? Au final, ta logique marche si tu prends en compte que tu es seul et que ton projet est un hack et pas quelque chose que tu vas devoir maintenir et faire évoluer potentiellement dans des directions opposées.

            Personnellement, dans mon travail, j'utilise plusieurs langages et c'est rarement mon langage de choix (C++ avec ou sans Qt). Au contraire, je dois m'adapter aux gens en face et utiliser ce qui permettra à tout le monde d'être le plus productif possible tant que ça ne rentre pas en conflit avec les contraintes du projet. Ça me blase souvent car je ne peux pas exprimer pas mal de ce que je pourrai en utiliser le C++, mais je fais avec (en jurant pas mal quand même).

            Je suis aussi totalement pour le fait d'apprendre des langages pour apprendre des façons de penser différentes. Mais au final, y'a un coeur de langages communs, qui a généralement son sens suivant le niveau d'abstraction que l'on veut avoir. Et puis, ces langages sont généralement pas trop restricteurs. Pourquoi ne pas mettre l'accent sur eux alors? C'est pas le rôle de l'éducation de donner un socle commun aux gens? C'est pas avec des langages de niche que ça va marcher, il faut des langages généralistes.

            • [^] # Re: Mon grain de sel

              Posté par . Évalué à  3 .

              Je suis globalement d'accord pour cette liste (qui ne contient aucun langage propriétaire et qui ne contient pas non plus Ada), mais qu'en est il de Delphi, Visual Basic, Action Script ou encore Quick Basic ? Que je sache, ces langages ont été très utilisés et ont (bien heureusement) majoritairement disparus (Action Script est en voie).

              Je m'en fou pour ma démonstration. Ça suffit à montrer la décorrélation entre langage de haut niveau et courte durée de vie. À coté de ça cobol et fortran bien que toujours utilisés, le sont de moins en moins et ne tiennent que parce qu'il est pour le moment plus chère de convertir les programmes écris dans ces langages dans un autre langage que de les maintenir, mais la main d'œuvre et les offres d'emploi se font rare (du moins en proportion). Pour aller vers des choses plus extrêmes, plus personne ne code en BCPL par exemple.

              Par contre, je suis tout à fait d'accord avec toi pour dire que les gens qui apprennent un ou deux langages et qui s'y limite, […]

              D'où le peu d'importance du premier langage. On à l'impression ici qu'il faut que ce soit le bon, que c'est catastrophique si c'est python, etc. Non ce sera de toute manière un langage parmi d'autres.

              Je trouve cette logique totalement contraire à ce que tu indiques. C'est totalement une idée de geek que se dire qu'il faudrait toujours utiliser le langage le plus adapté pour le projet ou la tâche à faire.

              Tu n'a pas du bien lire ce que j'ai écris.

              Tu utilise le bon langage point (celui qui est adapté à ce que tu fait et aux contraintes du projet).

              Par contraintes j'entends entre autre :

              • l'existant est en brainfuck, ça coûte trop chère de tout réécrire donc on continue sur notre lancé
              • on développe sur iOS, on a pas confiance en la maturité des alternatives donc on choisi de coder en ObjectiveC
              • on a des compétences en whitespace donc on privilégie ce langage pour nous simplifier la maintenance

              Bon, si tu codes h-24 depuis 10 ans, tu as moyen de commencer à avoir une bonne maîtrise de 4-5 langages, ça reste peu.

              Justement on connait tous trsè peu de langage, donc on de bonne chances de devoir se mettre à en apprendre d'autres sur le tas ou en avance de phase pour de nouveau projet. Encore un argument pour expliquer le peu d'importance du premier langage, il faut qu'il soit généraliste et qu'il permettent de présenter quelques principes généraux (apprendre à coder en machine de Turing n'est pas nécessairement une bonne idée sauf à changer rapidement pour autre chose (on en fait rapidement le tour)).

              C'est la manière d'apprendre qui fait que l'enseignement sera bon ou pas. Apprendre un langage de haut niveau sans jamais expliquer le fonctionnement de la mémoire et comment gérer sa mémoire (pour éviter entre autre les mémories leaks, mais aussi prendre en compte le fait qu'il existe (ou pas) de garbadge collector (ou un compteur de référence)), c'est la responsabilité de l'enseignement et pas du langage.

              Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  8 .

                Vous discutez du choix d'un premier langage pour un développeur. Mais là, il s'agit de trouver un premier langage pour initier à la programmation. Il faut donc quelque chose qui ne rebute pas les élèves, qui ne fasse pas perdre de temps à l'enseignant sur des détails alors que le but est surtout d'acquérir une logique algorithmique avec peu d'heures d'enseignement à disposition.

          • [^] # Re: Mon grain de sel

            Posté par . Évalué à  2 .

            Dans l'ensemble je suis d'accord.
            Cependant, le pseudo langage, c'est bien mais ça compile pas.
            à un moment il faut bien utiliser un vrai langage et donc se confronter à ses spécificités.
            Je pense qu'il ne faut pas en apprendre un car on s'enferme vite dedans. Mais plusieurs car aucun ne couvre tous les concepts que l'on peut étudier en théories.
            Commencer par le C, pourquoi pas (sans trop créer de cas tordus avec les pointeurs) car c'est proche de la machine. Après, c'est pas mal d'ajouter un peu d'objet et du fonctionnel. Mais du coup, il faut aussi voir un peu d'assembleur pour se rappeler de ce qui se passe en vrai.

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  3 .

        C'est une réelle question et non un troll mais est ce que le c à un avenir honnêtement ?

        Il a un avenir parcequ'il est très utilisé. Beaucoup de logiciels libres sont écrits en C. Et le C en tant «que langage machine portable» reste incontournable pour la programmation système.

        Je veux bien que pour commencer à apprendre ce soit très bien,

        C'est plutôt très mauvais, le C étant un langage très compliqué. (On reconnaît les gens qui ne savent pas ou peu programmer en C à ce qu'ils croient encore que c'est simple.)

        par contre ça a tendance à être obsolète,

        Vieux oui, obsolète certainement pas. Avec quoi étaies-tu ton point de vue? Quel langage permet de faire tout ce que fait le C en mieux? Si le C est parfois choisi comme premier langage, c'est justement parcequ'il a un avenir, certainement pas parcequ'il est simple.

        rien que face au c++.

        Probablement pas un très bon choix pour la programmation système, par exemple! À mon avis, le C++ est largement plus obsolète que le C++, je ne vois aucune bonne raison de commencer un nouveau projet en C++. (Je suis programmeur C++ professionel, soit-dit en passant…)

        • [^] # Re: Mon grain de sel

          Posté par (page perso) . Évalué à  5 .

          C'est plutôt très mauvais, le C étant un langage très compliqué.

          Honnêtement, je ne trouve pas, ou alors il faut définir ce qu'est la "complexité" d'un langage.
          Par exemple, le C++ est à mon sens un langage beaucoup plus compliqué et "piégieux" que le C, maîtriser le C++ prend un temps bien plus long que maîtriser le C.
          Le C reste relativement proche de la machine, n'offre pas des couches d'abstraction élevées.

          Chippeur, arrête de chipper !

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  6 .

            Honnêtement, je ne trouve pas, ou alors il faut définir ce qu'est la "complexité" d'un langage.

            En C il y a beaucoup de magie (la fonction main, le préprocesseur, les directives include). Ensuite le C te demande de connaître l'édition de liens (mot-clef static), te demande de gérer manuellement la mémoire, éxécution en environnement non supervisé (non managed environment: il y a des undefined behaviour)… franchement, je ne sais pas ce qu'il te faut!

            Le C++ est encore pire, je suis bien d'accord avec toi.

            Un langage comme Scheme ou Caml (light) voire Python ou Perl est infiniment plus simple à apprendre que le C.

            • [^] # Re: Mon grain de sel

              Posté par (page perso) . Évalué à  -3 .

              En C il y a beaucoup de magie

              Il n'y a rien de magique en fait.

              la fonction main

              Qu'elle est ton problème vis à vis de la fonction main ? En quoi cela rend le C magique ou particulièrement complexe vis à vis d'autres langages ?

              le préprocesseur, les directives include

              Le préprocesseur n'a rien de magique et peut même être très sympathique si on l'utilise correctement. Le problème peut vraiment survenir des macros qui ont des effets de bords si mal employés.
              Les include n'ont rien de plus extraordinaire que els import qu'ont les autres langages où alors quelque chose m'échappe ?

              Ensuite le C te demande de connaître l'édition de liens (mot-clef static)

              Bof, l'édition des liens en C n'est pas si contraignant et ne l'est forcément plus que les langages objets où tu as des interdépendances entre objets… Là encore tu as un exemple particulièrement marquant pour illustrer ?

              te demande de gérer manuellement la mémoire

              Avantage et inconvénient. Pour une application simple c'est un inconvénient car te demande de gérer plus de choses conceptuellement.
              Cependant c'est aussi une grande qualité pour les systèmes emparqués ou temps réels où un ramasse-miette n'est vraiment pas le bienvenue par son caractère aléatoire (et le temps CPU nécessaire à son fonctionnement). Cela allège aussi considérablement l'implémentation du langage sur une architecture donnée.

              Un langage comme Scheme ou Caml (light) voire Python ou Perl est infiniment plus simple à apprendre que le C.

              Les concepts de base très certainement, mais tu ne maitriseras probablement pas toutes leurs possibilités ni toute la bibliothèque standard qu'on te fournit tellement que c'est volumineux alors que pour le C c'est possible.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  10 . Dernière modification : le 24/03/13 à 14:05

                En C il y a beaucoup de magie

                Il n'y a rien de magique en fait.

                Bon et bien je sors mon Hello world alors:

                #include <stdio.h>
                
                int
                main(void)
                {
                   printf("Hello, world!\n");
                   return EXIT_SUCCESS;
                }
                
                

                Du point de vue du débutant la seule ligne qui a clairement à voir avec le problème posé (écrire un programme qui écrit Hello, World!) est celle du printf et tout le reste, c'est du vaudou.

                Le préprocesseur n'a rien de magique

                Merci, mais si on se place du point de vue du débutant, soit tu présentes le '#include' comme une directive magique, soit tu te lances dans un tas d'explications qui ne vont pas servir à grand chose jusqu'au jour où le débutant va écrire son premier programme assez long pour être séparé en plusieurs unités.

                Un langage avec un précprocesseur est forcément plus compliqué qu'un langage sans préprocesseur, non?

                Bof, l'édition des liens en C n'est pas si contraignant

                Le sujet n'est pas C est impossible à apprendre le sujet est C est plus compliqué à apprendre que beaucoup d'autres langages. Or il y a plus d'un langage de programmation où on n'a pas besoin de se préoccuper d'édition de liens.

                Cependant c'est aussi une grande qualité pour les systèmes emparqués ou temps réels où un ramasse-miette n'est vraiment pas le bienvenue par son caractère aléatoire (et le temps CPU nécessaire à son fonctionnement). Cela allège aussi considérablement l'implémentation du langage sur une architecture donnée.

                Le sujet n'est pas C est un langage bien adapté à la programmation des systèmes emabarqués mais c'est C est plus compliqué à apprendre que beaucoup d'autres langages et il y a des langages où la mémoire est gérée automatiquement. Est-ce que tu penses que c'est plus facile lorsqu'il ya plus de travail?

                Les concepts de base très certainement

                Qu'est-ce que tu veux apprendre à des débutants?

                mais tu ne maitriseras probablement pas toutes leurs possibilités

                Ce genre d'exploit est difficile dans tous les langages, et ce n'est certainement pas le sujet ici.

                ni toute la bibliothèque standard qu'on te fournit tellement que c'est volumineux alors que pour le C c'est possible.

                Après 10h de Scheme tu peux lire tous les programmes du monde sans jamais rencontrer une règle de grammaire que tu ne connais pas. Ce n'est pas le cas de C, il me semble.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  9 .

                Il n'y a rien de magique en fait.

                On est d'accord.
                Mais ici on parle de donner une introduction à la programmation a des élève du lycée en 2 heures par semaine. Pas de former des programmeurs profesionels.

                Pas le temps donc d'apprendre un langage qui a tout de même une courbe d'apprentissage moins adaptée.

                • [^] # Re: Mon grain de sel

                  Posté par (page perso) . Évalué à  -2 .

                  Je parle d'un langage accessible à un débutant qui veut éventuellement en faire pour son plaisir de manière avancée ou professionnelle (licence/masters et écoles d'ingénieurs en informatique). Pour le programme de Terminale en effet un autre langage peut être plus intéressant voire même pas de langage du tout.

                  • [^] # Re: Mon grain de sel

                    Posté par . Évalué à  5 .

                    voire même pas de langage du tout.

                    Si tu fait que de l'algorithmique avec du pseudo code sur papier je te garanti que tu pert toute ta classe en deux heures.

                    C'est là ou je pense que Python est un bon choix comme tout premier langage.
                    C'est grosso modo du pseudo code executable et le shell intéractif permet aux étudiant d'apprendre par essai/erreur avec des cycles très courts.

                    De plus sa bibliothèque standard très fournie permet aux étudiants de réaliser rapidement quelque chose d'utile et concret, ce qui est très important pour leur motivation.

                    Avec C rien que recueillir une entrée utilisateur demande d'expliquer beaucoup de concepts, et la moitié de ta classe aura des segfault.

                    Mais je suis près à admettre qu'un Python statiquement typé serait peut être plus adapté.

                    • [^] # Re: Mon grain de sel

                      Posté par (page perso) . Évalué à  -1 .

                      Avec C rien que recueillir une entrée utilisateur demande d'expliquer beaucoup de concepts, et la moitié de ta classe aura des segfault.

                      Moui non.
                      Quand tu apprends quelque chose, souvent on te cache volontairement des notions pour simplifier.
                      Il suffit de dire à l'élève que tu mets un & devant le nom de la variable et c'est tout, il aura des explications dans le supérieur.

                      En physique et en maths durant le lycée, de nombreuses notions sont cachées, mises sous le tapis voire volontairement contredites jusqu'à un stade où tu peux comprendre les notions plus.

                      • [^] # Re: Mon grain de sel

                        Posté par . Évalué à  6 .

                        Le problème, c'est que « mettre un & devant le nom de variable », c'est une solution très fragile. Si l'élève se contente de recopier ce qu'il y a au tableau (sans faire de fautes de frappes), tout va bien. Par contre, dès qu'il va tenter d'explorer ou de généraliser ta solution, tout va exploser. Autrement dit, cette solution fonctionne à condition qu'on empêche à l'élève d'apprendre (« touche pas ou tu vas tout casser »). À moins que tu ne te sentes d'expliquer la segmentation de la mémoire au premier cours…

                        • [^] # Re: Mon grain de sel

                          Posté par (page perso) . Évalué à  1 .

                          En terminale, en général tu suis le cours du prof et il n'est pas demandé à ce stade d'apprendre par nous même en plus. Si l'élève souhaite apprendre chez lui des notions au delà du cours, oui il devra apprendre ce type de notions mais cela est vraiment quelque chose qui n'est pas attendu d'un Terminale S.

                          Dans un cours du supérieur cela peut arriver vu qu'il est fortement recommandé d'approfondir les cours chez soi mais eux tu peux directement leur lancer des choses complexes.

                          Typiquement en maths et en physique en Terminale on te fait écrire des conneries ou des choses que tu ne comprends pas (peu de démonstration des formules ou relations exploitées, quelques simplifications comme par exemple les solutions des polynômes qui n'ont pas de racine pour un discriminant négatif, etc.) Tout est approximé et peu expliqué car tout est un cheveu sur la soupe, c'est au supérieur que tu comprends les concepts essentielles à certaines notions déjà abordées que ce soit les maths, la physique ou… l'informatique !

                          • [^] # Re: Mon grain de sel

                            Posté par . Évalué à  4 .

                            En terminale, en général tu suis le cours du prof et il n'est pas demandé à ce stade d'apprendre par nous même en plus. Si l'élève souhaite apprendre chez lui des notions au delà du cours, oui il devra apprendre ce type de notions mais cela est vraiment quelque chose qui n'est pas attendu d'un Terminale S.

                            Tu dis plus haut que ce cours est là pour qu'ils reprennent le contrôle de leur machine. On va pas leur expliquer que bon reprendre le contrôle c'est bien beau mais il faut qu'ils fassent juste la solution donner en cours.

                            quelques simplifications comme par exemple les solutions des polynômes qui n'ont pas de racine pour un discriminant négatif,

                            La pour le coup tu confond avec la troisième. On apprend les nombres complexes au lycée (mais oui il y a des simplifications et on explique par exemple pas les limites de certaines méthodes).

                            Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

                            • [^] # Re: Mon grain de sel

                              Posté par (page perso) . Évalué à  0 .

                              Les polynômes du second degré sont vus en 1ère avant les complexes qui sont vues en terminale. C'est un exemple parmi d'autre qui m'a marqué, les maths/physique du lycée n'ont absolument aucun rapport avec ceux du supérieur ne serait-ce par le fait qu'on a accès à des démonstrations de ce qu'on utilise (ce qui existe mais de manière plus épisodique avant).

                              Tu dis plus haut que ce cours est là pour qu'ils reprennent le contrôle de leur machine. On va pas leur expliquer que bon reprendre le contrôle c'est bien beau mais il faut qu'ils fassent juste la solution donner en cours.

                              Ce cours est pour apprendre à programmer non ? Pas forcément reprendre le contrôle total de la machine ce qui est de toute façon impossible en 40-60h de cours dans une année.
                              Là encore, je dis juste que le C est accessible et n'est pas si complexe qu'on le dit (et qu'on peut aussi se passer de certaines explications au début) après je ne pense pas que ce soit le meilleur choix malgré tout.

                              • [^] # Re: Mon grain de sel

                                Posté par . Évalué à  8 .

                                Les polynômes du second degré sont vus en 1ère avant les complexes qui sont vues en terminale.

                                Ça n’est pas une « simplification », c’est la réalité. Quand tu es en première tu travailles dans ℝ, et ces polynômes n’ont alors pas de solutions. Quand tu travailles dans un autre espace, les solutions changent. Comme quand tu travaillais dans ℕ au CP et que les soustractions par des nombres plus grands n’était pas définies.

                                Le problème est que les compilateurs ne te laisse généralement pas te limiter à un sous-ensemble de leur possibilités, en particulier en C tu ne peux rien faire sans utiliser des fonctions, des includes, et tout le tralala.

                                • [^] # Re: Mon grain de sel

                                  Posté par (page perso) . Évalué à  4 .

                                  Quand tu travailles dans un autre espace, les solutions changent.

                                  Exactement! la seule façon de résoudre l'équation du second degré en toute généralité, c'est de la remplacer par un foncteur! :-)

                                  Et puis on n'est pas obligé de passer sa vie dans les algèbres commutatives. Par exemple dans les algèbres de matrices, on peut résoudre de mille façons les équations du second degré!

                      • [^] # Re: Mon grain de sel

                        Posté par . Évalué à  6 .

                        T'es entrain de recommander un langage qui montre tout pour au final devoir tout cacher ? Il y a pleins de langages qui font ça pour toi (et qui protègent mieux le développeurs de ce que tu veux cacher).

                        Rien empêche d'apprendre C ou un autre plus tard quand ils auront à apprendre ces concepts plus avancés.

                        Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

                      • [^] # Re: Mon grain de sel

                        Posté par . Évalué à  6 .

                        Il suffit de dire à l'élève que tu mets un & devant le nom de la variable et c'est tout, il aura des explications dans le supérieur.

                        C'est loin d'être le seul piège dans lequel l'étudiant peut tomber.

                        En physique et en maths durant le lycée, de nombreuses notions sont cachées, mises sous le tapis voire volontairement contredites jusqu'à un stade où tu peux comprendre les notions plus.

                        Oui cachées ou abstraites, ces notions sont totalement invisible dans le modèle qu'on présente à l'étudiant, il n'y voit que du feu. On lui dit pas "met bêtement un & à cet endroit là, ferme les yeux et ouvre la bouche".

                        Python permet justement de cacher des notion sous le tapis pour rendre la tache plus simple à appréhender pour l'étudiant. Ainsi tu peux leur apprendre tranquillement l'algorithmique, ce qui leur servira toujours même s'ils ne poursuivent pas l'informatique après le lycée, qui à mon avis est plus important que "reprendre le contrôle sur l'ordinateur" ce qui n'à aucune chance d'arriver vu le volume horaire.

                        Et une fois que tes étudiant maitrisent les bases de l'algorithmique, tu puex introduire des notions plus avancées petit à petit, et même pourquoi pas passer à des langages plus bas niveau comme C.

                        Mais faire apprendre l'algorithmique avec C à des lycéens qui pour la plus-part sont là par ce que "je kif call of duty" ou bien "je suis un geek je passe mes week end sur Facebook", pour moi c'est un peu comme apprendre le collage à des CP avec une tronçonneuse et de la super glue.

              • [^] # Re: Mon grain de sel

                Posté par . Évalué à  7 .

                Vu le nombre de developeurs que j'ai rencontres qui ne peuvent pas t'expliquer la difference entre #define CONSTANT 42 et static int constant = 42; (et ne comprennent pas ce qu'extern veut dire), qui s'anusent a en saupoudrer partout dans les libs et t'expliquent que c'est bon, le .a linke sera en mode release parce que le projet qui l'utilise defini RELEASE=1, je suis pas convaincu que le preprocesseur soit si simple que ca a comprendre.
                Et je passe sur ceux qui croient que #define NSLog(…) something est une fonction et que c'est cool de definir int i dans le #define.

                Linuxfr, le portail francais du logiciel libre et du neo nazisme.

                • [^] # Re: Mon grain de sel

                  Posté par . Évalué à  10 .

                  J'oubliais: le c est plein de petit trucs a la con qui sont tout sauf simple, et la plupart dérivent de son typage faible et des regles implicites de conversion a la con qu'il faut connaitre par coeur sous peine de passer qq heures a debugger comme un con.

                  Pourquoi BOOL test = 1024; if(!test) printf("ah ben ca va moins bien marcher, forcemment!"); imprime la celebre replique de bourvil?
                  Pourquoi est ce que BOOL accepte qq chose different de true/false d'ailleurs?
                  Une fois que t'as la reponse a ca, pourquoi est ce que

                  BOOL function1() {
                  int i = 0;
                  i = 4;
                  }
                  NSInteger function2() {
                  int i = 0;
                  i = 4;
                  }
                  NSLog(@"%i %i", function1(), function2());

                  imprimes 0 70 sur x86 en -O0 et 0 32578593 en -Os (et probablement autre chose sur arm, j'en sais rien, pas essaye)? Pourquoi est ce que la sortie varie en fonction de la ou je place mon NSLog?
                  Pourquoi est ce que ca compile tout court d'ailleurs?
                  Perso, j'ai les reponses, mais je suis a peu pres sur qu'une proportion non negligeable de ceux qui ecrivent du C en entreprise n'ai pas le moindre debut d'idée (et pour la premiere question, je me serais fait baise en beauté si j'etais pas tombe par hasard sur une ML qui traitait du sujet recemment).

                  Pourquoi est ce que int myVar = 42 + (i > 0); donne 43 si i = 1? C'est pas tres intuitif d'avoir un concept d'addition d'un nombre et d'un booleen, c'est un peu comme additioner des choux et des carottes. Meme si une fois que t'as admis que les booleens n'existent pas, c'est foutrement pratique, j'en conviens (enfin, jusqu'a ce que t'essaye d'assigner 128+ a un bool et que ca te pete a la gueule, evidemment).

                  Et d'ailleurs:

                  int i = 4000000000;
                  int var = 42 + (i > 0);
                  NSLog(@"%i", var);

                  Combien de dev vont te dire que ca imprime 43? Pourquoi diable est ce que ca compile quand i ne peut de toutes facons pas tenir 4 milliards?

                  Tiens, une autre rigolote aussi:

                  int *a = malloc(4*sizeof(char));
                  NSLog(@"%i %i %i", a, a+1, ((int)a)+1)

                  M'imprime 202493552 202493556 202493553, tu trouves ca simple toi?

                  Ya une difference avoir une specification stricte (encore que, le undefined behavior, comme specification…) et simple.

                  Java ne souffre d'aucun des defauts cites plus haut: tout est logique et formellement spécifie (et venez pas me sortir le seul contre exemple avec l'autoboxing des Integer, il est specifie lui aussi…). Bon il est objet pur, et c'est clairement pas le mieux pour commencer, mais j'irais pas jusqu'a dire que C est simple. Pascal me parait beaucoup plus simple pour commencer.

                  Linuxfr, le portail francais du logiciel libre et du neo nazisme.

          • [^] # Re: Mon grain de sel

            Posté par . Évalué à  1 .

            Il a dit compliqué, pas complexe. Rien à voir.

        • [^] # Re: Mon grain de sel

          Posté par . Évalué à  -2 .

          C'est plutôt très mauvais, le C étant un langage très compliqué.

          je réponds en citant guid :

          le fait qu'il soit assez proche de la machine permet de pouvoir comprendre assez directement les implications en terme de CPU/mémoire quand on fait n'importe quoi.

          et sinon,

          je ne vois aucune bonne raison de commencer un nouveau projet en C++

          Désolé si je dis une bêtise mais on peut faire du c avec du c++. Faire du c++ évite de faire des structures de structures pour tenter de faire de l'héritage. Le c++ permet de programmer de manière plus rapide sur beaucoup de points et rendre les choses plus lisibles pour le prochain développeur. Actuellement, on cherche souvent moins la performance que les fonctionnalités (pour la stabilité on attendra). Et pour cela, la programmation "défensive" permise par un langage objet est bien meilleur.

          Je mettrais bien un lien sur l'article de Richard Stallman à propos du c++ dans gcc mais je ne le retrouve plus.

          Autre question, si on devait faire linux maintenant, le ferions nous en c, en c++ ou autre chose ?

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  2 .

            Le c++ permet de programmer de manière plus rapide sur beaucoup de points

            C'est assez faux: en C++ tu as trente-six façons de gérer chaque problème, et donc à moins d'avoir des recommendations de programmation (coding rules) de 120 pages, tu passes ton temps à te demander que choisir, et à écrire du code interface pour travailler avec les solutions des autres.

            et rendre les choses plus lisibles pour le prochain développeur.

            La seule façon de rendre quoique ce soit lisible au prochain développeur est d'écrire de la documentation.

            Autre question, si on devait faire linux maintenant, le ferions nous en c, en c++ ou autre chose ?

            La première norme iso du C++ date de 1979 et le premier noyau Linux est sorti au début des années 90. La réponse est donc: le C.

            • [^] # Re: Mon grain de sel

              Posté par (page perso) . Évalué à  4 .

              La seule façon de rendre quoique ce soit lisible au prochain développeur est d'écrire de la documentation.

              c'est valable en C comme en C++, bon en awk c'est obligatoire.

            • [^] # Re: Mon grain de sel

              Posté par . Évalué à  1 .

              La première norme iso du C++ date de 1979 et le premier noyau Linux est sorti au début des années 90. La réponse est donc: le C.

              La première norme ISO du C++ date de 98 et non de 79, quant à la première version publique de CFront c'est 82-83.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  2 .

                La première norme ISO du C++ date de 98 et non de 79, quant à la première version publique de CFront c'est 82-83.

                Merci pour cette correction. Ça rouvre la question C ou C++ pour écrire un noyau Linux? Je continue de pencher pour C.

                • [^] # Re: Mon grain de sel

                  Posté par . Évalué à  2 .

                  La question ne se pose pas ou en tout cas elle ne se pose plus depuis longtemps. Parce que sinon on s'expose à de copieuses insultes de la par de Linus :

                  http://article.gmane.org/gmane.comp.version-control.git/57918

                  Pour ceux qui ne se sentent pas de suivre le lien, une phrase tirée de celle-ci résume son opinion de manière simple :

                  C++ is a horrible language.

                  (il est question de git, mais il a déjà dis la même chose pour le noyau)

                  Personnellement, je pense que ce qu'à voulu dire Linus c'est plutôt.

                  C++ isn't C, so it's a horrible language.

                  Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

        • [^] # Re: Mon grain de sel

          Posté par (page perso) . Évalué à  1 .

          C'est plutôt très mauvais, le C étant un langage très compliqué. (On reconnaît les gens qui ne savent pas ou peu programmer en C à ce qu'ils croient encore que c'est simple.)

          Moui non.
          Le C est piégeur, c'est vrai mais cela ne rend pas le C plus complexe que les autres.
          Le C++ par exemple est tellement volumineux qu'il est impossible de maitriser toutes ses entrailles. Le C dans sa version standard a le mérite d'être très simple et léger et du coup tu peux apprendre très rapidement le gros du langage avant de galérer pour maitriser les éléments restants…

          La norme du langage C c'est pratiquement 420 pages sans les annexes, ce qui est similaire a un datasheet d'un micro-contrôleur détaillé avec le descriptif des instructions et du fonctionnement électronique. Certes je ne pense pas qu'un expert du C connaisse parfaitement la norme et inversement, mais cela donne une bonne indication du volume et j'ai de gros doutes qu'avec une norme similaire les autres langages modernes tiennent en si peu de pages.

          Donc oui le C est piégeur et nécessite des années pour être un « expert » mais là encore en comparaison avec les autres langages c'est quelque chose de bien plus atteignable.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  6 .

            le K&R a bien moins de pages que le Bjarne Stroustrup :-) Un informaticien ira souvent vers le plus simple. Un bon informaticien est fainéant. Je laisse quelqu'un trouver le syllogisme afférent.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  4 .

            Le C est piégeur, c'est vrai mais cela ne rend pas le C plus complexe que les autres.

            Dis papa, c'est quoi ce include? C'est quoi ce static? C'est quoi l'édition de liens? Pourquoi il n'y a pas de valeurs de type void? C'est quoi cette fonction main? Pourquoi il y a un '0' à la fin de mon texte? Comment j'initialise une structure? C'est quoi un prototype de fonction? Franchement, je ne pense pas que le C soit simple.

            Donc oui le C est piégeur et nécessite des années pour être un « expert » mais là encore en comparaison avec les autres langages c'est quelque chose de bien plus atteignable.

            Outre les pièges, il y a beaucoup d'éléments complètement arbitraires (include, static, etc.) qu'on ne peut vraiment comprendre qu'en ayant des connaissances dans le monde de l'édition des liens… bref en connaissant un peu de langage machine en somme.

            • [^] # Re: Mon grain de sel

              Posté par (page perso) . Évalué à  2 .

              je pense que tu mélanges deux choses :
              * Savoir programmer
              * Être un expert dans un langage X

              Pour utiliser le C convenablement tu n'as pas besoins de maitriser le concept de l'édition des liens en profondeurs et le concept de base est simple (ou alors qu'il arrête la programmation tout court).
              Les statics et include n'ont rien de particulièrement méchants et inaccessibles à moins que tu aies des exemples concrets pour montrer les cas délicat.
              De même pour main ou les chaines de caractères, les structures, un prototype.

              En fait c'est plutôt simple ces concepts. Et ce n'est pas ça qui va ralentir considérablement ton apprentissage. Après c'est vraiment que ça peut être pénible mais de là à dire que cela rend le C particulièrement complexe je pense que la problématique se situe ailleurs (notamment le fait que le C soit assez peu expressif et n'a pas de fonctions de bases particulièrement évolués sont bien plus handicapants pour un débutant et la productivité que les éléments que tu cites).

              J'ai déjà eu 40h de cours sur C et Python, en 40h tu peux voir pratiquement l'ensemble du C même si tu ne maitrises pas le sujet tu as vu l'ensemble des mots clés, de la bibliothèque standard et de ses possibilités immédiates.
              En 40h de Python c'est bien plus délicat tellement que c'est vaste dès le départ, tu dois te concentrer sur un sous-ensemble (typiquement tu favoriseras l'objet mais tu laisseras de côté l'aspect fonctionnel). Cependant son expressivité permet de faire plus de choses de manière immédiate c'est certain mais cela n'est pas lié à mon sens aux détails que tu cites.

              • [^] # Re: Mon grain de sel

                Posté par (page perso) . Évalué à  5 . Dernière modification : le 24/03/13 à 13:16

                je pense que tu mélanges deux choses :

                Non non pas du tout!

                Apprendre un langage ce n'est pas seulement apprendre à écrire mais aussi à lire dans ce langage.

                Le fait est que si tu donnes un programme C modérément complexes à un débutant en C et que tu réponds à toutes ses questions, tu te retrouves vite à faire un petit cours d'architecture.

                Si tu prends un langage rééllement simple comme le Scheme (ou peut-être le Pascal, mais mes souvenirs datent un peu), il suffit à un débutant de beaucoup moins de 40h pour être capable de lire tous les programmes jamais écrits dans ce langage — oui il existe des programmes écrits en Pascal :-) j'en ai vu — les questions éventuelles du débutant porteront alors sur l'utilisation du langage (tournures de phrases, bibliothèque standard, etc.) et pas sur le langage lui-même. En C les découvertes qui portent sur le langage (ah tiens, on neput pas déclarer de variable de type void — void est un type?) continuent d'arriver bien au delà des 40h fatidiques.

                Ce n'est pas parce que C est compliqué qu'il est interdit de s'en servir ou qu'il est impossible de le maîtriser: mon point de vue est juste que croire que le C est un langage «facile» est une grosse erreur.

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  3 .

        ça a tendance à être obsolète, rien que face au c++.

        Sources ? Preuves ?

        * Ils vendront Usenet quand on aura fini de le remplir.

        • [^] # Re: Mon grain de sel

          Posté par (page perso) . Évalué à  4 .

          Le second graphe et mon second commentaire dans https://linuxfr.org/news/concours-de-programmation-codingame-le-26-mars-2013 .

          En gros, le C++ est un langage qui a tous les avantages de performance et tout aussi proche de la machine que C, mais est cependant un langage de plus haut niveau qui permet de se préoccuper plus du sur le programme en lui même que sur des éléments de bas niveau.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  2 .

            En gros,

            en très gros :-)

            le C++ est un langage qui a tous les avantages de performance et tout aussi proche de la machine que C,

            La surcharge des opérateurs, les conversions implicites et les constructeurs de recopie empêchent d'évaluer à l'œil nu la complexité d'un code — l'existence de ces fonctionnalités viole le principe d'encapsulation.

            mais est cependant un langage de plus haut niveau qui permet de se préoccuper plus du sur le programme en lui même que sur des éléments de bas niveau.

            Comme par exemple, la gestion de la mémoire? L'écriture des destructeurs, des constructeurs de copie, de l'opération d'affectation, … dès que tu écris le mot class tu dois te payer trois pages de saisie pour définir les magic three de ta classe. Cela n'incite pas vraiment à introduire des classes autant qu'il n'en faut.

            De plus, seuls les programmeurs les plus expérimentés sont capables d'utiliser à bon escient la programmation objet, les autres suivent leur intuition et utilisent toutes les mauvaises abstractions possibles et imaginables.

            • [^] # Re: Mon grain de sel

              Posté par (page perso) . Évalué à  5 .

              La surcharge des opérateurs, les conversions implicites et les constructeurs de recopie empêchent d'évaluer à l'œil nu la complexité d'un code

              Cet argument est bidon:

              • On ne peux pas surcharger les opérateurs pour les type de base.
              • Mon IDE m'affiche dans une couleur différente les operateurs qui sont overloadés.
              • Et puis, même en C tu ne peux pas évaluer facilement la complexité puisque tu dois de toute façon connaître la complexité de toute test opérations. Et tu peux avoir des macro partout.

              Exemple: Comment sais tu la complexité de ARRAY_SIZE dans le code suivant?

              for (i = 0 ; i  < ARRAY_SIZE(objects_array); ++i) {
                matrix_mul_vetor(&tmp1, &objects_array[i].m1 , &objects_array[i].v1);
                matrix_mul_vetor(&tmp2, &objects_array[i].m2 , &objects_array[i].v2);
                matrix_add(&tmp3, &tmp1, &tmp2);
                matrix_add(&objects_array[i].state, &objects_array[i].state, &tmp3);
              }
              
              

              Perso, je préfère l'équivalent en C++ .
              Quand tu connais les types des variable en jeux (que mon IDE me donne dans un tooltip), tu peux tout aussi facilement connaître la complexité.

              for (auto &it : objects_array)
                it.state += it.m1 * it.v1 + it.m2 * it v2; 
              
              

              (Et qui, grâce aux expression template, peux aussi être un ordre de grandeur plus rapide)


              l'existence de ces fonctionnalités viole le principe d'encapsulation.

              Je comprends pas.

              Comme par exemple, la gestion de la mémoire?

              Tu ne dois pas vraiment gerrer la mémoire en C++. Merci aux fonctions comme les destructeur, RAII, smart_pointer, …

              L'écriture des destructeurs, des constructeurs de copie, de l'opération d'affectation,

              Dans la pluspart des cas, tu peux être satisfait de ceux par défaut

              dès que tu écris le mot class tu dois te payer trois pages de saisie […]
              De plus, seuls les programmeurs les plus expérimentés sont capables d'utiliser à bon escient la programmation objet […]

              Tu peux utiliser C++ sans faire de POO.

              Par contre, dés que tu dois faire de la POO en C, alors là, je ne te parle pas des pages de saisies de macro bizarre que tu te tape (regarde GTK….. )

    • [^] # Re: Mon grain de sel

      Posté par (page perso) . Évalué à  7 . Dernière modification : le 24/03/13 à 09:37

      Python etc…

      Le choix du langage à enseigner est quelque chose de très compliqué. Je suis enseignant en IUT réseaux & télécoms et outre que je vais récupérer ces bacheliers l'an prochain, je note plusieurs points.

      Tout d'abord, dans nos programmes pédagogiques (à la rédaction desquels, nous, enseignants, participons), les langages ne sont pas précisés, seuls les concepts et notions le sont (de même qu'en réseaux, les marques des routeurs ne sont pas dans le programme…). Et c'est une excellente chose puisque cela remet à sa place l'objectif des cours qui n'est pas de former des gens qui programmeront en java mais de former des gens capables de programmer dans un langage impératif, dans un langage objet ou dans un langage fonctionnel modulo une adaptation à la syntaxe et aux subtilités du dit langage. Bref, j'estime que mettre en avant Python n'est pas une très mauvaise idée (c'est un joli langage), mais que ça peut inciter à enseigner Python plutôt que les concepts de la programmation, ce qui serait fort dommage. Et le fait que Python soit à la mode ne devrait pas avoir d'importance dans le débat.

      Même quand les programmes ne changent pas, le contenu et la mise en oeuvre peuvent évoluer. Ainsi, il y a quelques années nous (et la plupart des autres départements aussi) enseignions presque tout en java (et auparavant presque tout en C, mais c'était avant moi). Récemment, localement, nous avons changé de langage (et nos collègues d'autres départements ont fait une démarche similaire mais ils n'ont pas choisi le même langage). Et ce changement a demandé de tenir compte des spécificités du public (pas excellents en maths donc python, haskell perdent de l'intérêt ; ont des connaissances en système donc sh est envisageable). Ça veut dire que les arguments de choix ne s'appliqueraient pas de la même façon au programme de Terminale S…

      Auparavant, la partie conceptuelle se faisait en une sorte de pascal, la partie implémentation en Java. J'ai décidé de simplifier tout ça pour avoir un même langage et surtout ne pas écrire le moindre mot-clé sans l'expliquer aux étudiants.

      J'ai hésité pour le langage entre plusieurs voici certains des arguments qui m'ont fait les rejeter :

      • Java, Objective C, C++, C# : trop de mots-clefs inexpliqués ; mauvaise boucle for.[1]
      • C : pas de boucle for[1] ; impossible de faire de la manipulation de chaines de caractères sans parler de pointeurs.
      • Python : Indentation significative ; les opérateurs de comparaison ne sont pas binaires, ce qui rend l'explication de l'évaluation des expressions compliquée.[2]
      • Javascript : Problèmes de typage ; mauvaise boucle for.[1]
      • sh : expressions numériques trop complexes ; mots-clefs inconsistants (fi ou end).
      • Ruby, Perl, PHP : je ne les aime pas (et ils ne sont pas les langages les plus accessibles ou lisibles).
      • Ocaml, Haskell, Clojure : pas le bon public.
      • Groovy, Boo : je me rappelle les avoir observés et éliminés, je ne sais plus pourquoi.

      Au final, j'ai choisi Lua que je n'avais jamais vraiment pratiqué mais qui n'a aucun des défauts précédemment énumérés. Il a aussi d'autres avantages (il n'y a pas de surcharge des opérateurs + et / par exemple). Le seul défaut que je lui trouve étant que les variables des fonctions sont par défaut globales. Mais il faut bien se rendre compte que les étudiants n'utiliseront jamais lua dans leur travail : ce langage sert uniquement à poser les concepts algorithmes, à structurer le code, la pensée et la compréhension qu'ils en ont. Je m'applique à leur expliquer que choisir un langage d'implémentation impose aussi des choses sur le comportement (typage ou numérotation des tableaux par exemple). En passant, pour m'amuser un peu, je fais un TP de programmation de jeux (ça ne va pas très loin) et j'ai été heureux de trouver love pour démarrer sans le moindre seuil.

      [1] : la boucle for est censée être utilisée pour une itération bornée au départ. Pour une itération libre, c'est la boucle while. En C et java, le for de base est un while avec un peu de sucre ! Notez que c'est pire en Go !
      [2] : 1<x<3 est une expression acceptable mathématiquement et syntaxiquement correcte en Python mais pas dans la plupart des langages. Pour qu'elle soit syntaxiquement correcte, il faut parler d'opérateurs ternaires (et plus) ce dont je préfère me passer.

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  6 .

        Et as-tu évalué ADA ?

        Chippeur, arrête de chipper !

        • [^] # Re: Mon grain de sel

          Posté par (page perso) . Évalué à  7 .

          +1
          J'ai enseigné la prog de base qqs années en fac/école d'ingé, et Ada est vraiment le meilleur langage que j'ai eu à utiliser pour enseigner, et celui le plus aisément compris par les élèves débutants. Tout est cadré, assez peu de trucs pour les programmeurs (les begin … end, les procédures et les fonctions, les arguments in et out, … ça à l'air de rien, mais ça aide beaucoup). C'est un peu verbeux, mais pour apprendre c'est même un plus. Et puis même après, c'est un langage sympa à utiliser.

          Je mettrai juste un bémol pour enseigner à des élèves qui sortent de sup/spé, le caml leur était plus évident.

          • [^] # Re: Mon grain de sel

            Posté par (page perso) . Évalué à  1 .

            Ayant choisi de faire de l'Ada en école d'ingé (c'était une option), je ne le recommanderais qu'à peu de monde

            • débouchées : principalement du militaire
            • un compilateur insurpassable dès les premiers pas : bon, au moins, une fois que ça compile ça va se lancer, ça ne va pas forcément donner les bons résultats, c'est très frustrant. J'ai mis 1/2 j à avoir mon premier programme qui compile, cela peut être gênant si c'est la veille de rendre le travail pratique…
            • quelques bonnes pratiques avec les exceptions proposées (je ne les ai vu que peu utilisées :/)
            • [^] # Re: Mon grain de sel

              Posté par (page perso) . Évalué à  2 .

              J'ai appris en autodidacte, dans l'ordre, le basic, le PHP, le C et le C++. Ensuite, en arrivant en école d'ingé, on m'a appris l'Ada. Autant dire que lorsqu'on sait déjà coder en C, on est assez réfractaire à l'Ada… Depuis j'ai bien sûr appris toute une flopée de nouveaux langages, mais les principaux que j'utilise sont le C, le Python et le Java.

              Finalement, après 3 ans d'Ada en tant qu'étudiant et maintenant 2 ans que j'encadre des TP et TD pour des étudiants de première année (post-bac), je n'arrive pas à voir quel langage serait meilleur :
              - Le C est un peu trop complexe pour des étudiants qui ne se destinent pas à l'informatique (première années généralistes)
              - Le Python est super cool mais trop laxiste sur le typage. Et puis, je me vois mal expliquer comment coder une recherche de minimum, une liste chaînée ou autres structures de données avancées dans un langage qui permet de faire tout cela de manière si simple.
              - Le Java nécessite d'expliquer tout la notion de POO ce qui n'est pas souhaitable selon moi pour des étudiants qui n'y connaissent rien. Disons que ce n'est pas la priorité dans un volume horaire restreint pour un cours prévu pour enseigner l'algo.
              - Caml ? Je n'ai jamais accroché personnellement… C'est très subjectif, je n'ai pas assez d'expérience avec ce langage pour pouvoir vraiment le juger (je l'ai utilisé principalement lors des cours de prog fonctionnelle).

      • [^] # Re: Mon grain de sel

        Posté par (page perso) . Évalué à  3 .

        Mais il faut bien se rendre compte que les étudiants n'utiliseront jamais lua dans leur travail : ce langage sert uniquement à poser les concepts algorithmes

        oui, c'est l'objectif. Donner des bases pour s'ouvrir à d'autres langages est vraiment un plus de ce genre d'approche. Je te confirme que Lua n'est pas utilisé en entreprise, C et Java le sont déjà bien plus, mais il y a peu de besoins pour des gens qui ne connaissent que le langage.

        • [^] # Re: Mon grain de sel

          Posté par . Évalué à  3 .

          Je te confirme que Lua n'est pas utilisé en entreprise

          Si, il est parfois utilisé. Je l'ai vu utilisé pour développer des extensions à Wireshark.

          • [^] # Re: Mon grain de sel

            Posté par . Évalué à  3 .

            c'est donc déjà mieux que guile :)

            Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

          • [^] # Re: Mon grain de sel

            Posté par . Évalué à  4 .

            Il est aussi très utilisé dans le domaine du jeu vidéo. Notamment pour le gameplay du jeu et le level design. Il est donc faux de dire qu'il n'est pas utilisé en entreprise.

            Au passage, plus j'acquiers d'expérience en C++ et plus je comprends pourquoi le C peut être considéré comme un meilleur langage. Il est quasiment impossible de faire du code C++ avancé portable sur toutes les plateformes encore en 2013. Et le fait de ne pas pouvoir faire confiance à la librairie standard d'un langage est particulièrement insupportable. Sans parler de boost constamment conseillé mais qui est tellement complexe à relire que je suis certain qu'il n'y a quasiment aucune des personnes qui le conseille qui à vraiment jeté un coup d'œil à ce qu'il conseille vraiment. C est performant, efficace et "simple". C++ est performant si on l'utilise comme C ou avec quelque surcouche, permet de déléguer beaucoup de choses au compile-time grâce aux templates mais devient vite très lent si on utilise la STL ou boost. Je rajouterais aussi que d'expérience, les bibliothèques de codes (libres) que je trouve sur internet sont souvent bien mieux écrite et portables lorsqu'elles sont écrite en C que lorsqu'elles sont écrites en C++.

            Donc même si j'utilise quotidiennement et aime C++ je ne peux pas dire que C++ est meilleurs que C.

            Je penses que si je devais conseiller un étudiant je lui conseillerais d'étudier à la fois C et C++, de ne pas utiliser la STL et boost, d'éviter les exceptions (qui sont juste une aberration en C++ en terme de performance), de ne pas utiliser le RTTI, de ne pas utiliser C++11 parce que sinon il se coupe d'une grande partie des plateformes existantes (notamment consoles de jeux et le compilateur majoritaire sous windows MSVC qui a un support exécrable du nouveau standard).
            Au final se pose la question : si il faut éviter d'utiliser les fonctionnalités qui font de C++ un langage de haut niveau pourquoi on l'utilise… Et quitte à ne pas être encore cross-platform (c++11 n'étant pas parfaitement implémenté partout) pourquoi ne pas partir sur D.

  • # En XPGE...

    Posté par . Évalué à  6 .

    … les brouillons de nouveaux programmes dont nous attendons avec impatience la publication officielle prévoient l'enseignement d'une nouvelle matière, l'informatique, avec le langage python (2? 3? Aucune idée) et/ou scilab.

    Je regrette le langage python parce qu'il n'est pas assez explicitement typé, mais le fait que l'indentation soit obligatoire est à mon avis un bon point : ça oblige les étudiants à structurer. Tous ceux qui ont été appelés par un étudiant "Monsieur, ça marche pas" et qui sont arrivés devant une fonction écrite sur une seule ligne (avec des boucles des tests et tout, hein, une vraie fonction) comprendront l'intérêt d'avoir un langage dont la première réaction est de dire "Indente correctement, cornichon!" quand ça ne va pas. Ça règlera déjà 99% des soucis!

  • # Un peu de publicité

    Posté par . Évalué à  2 .

    Je suis en STI2D, particulièrement en spé SIN (Système d'Information et Numérique) et en année de terminale en plus. Toutes les critiques que j'entends par rapport à la réforme des lycées, aux choses fait "va-vite", je ne les trouve pas fondés la plus part du temps.
    Les professeurs que j'ai sont même au contraire bien formés et anticipent efficacement les changements de programme que l'on subit. Par contre, ma formation a aussi de l'électronique.
    Nous avons eu, dans un ordre à peu prêt chronologique, des études beaucoup théorique au début mais avec une pratique qui l'emporte: une initiation à la programmation (les structures, les types, …), du réseau (Cisco Packet Tracer), du montage électronique (Arduino & compagnie), … de la programmation "graphique" (algorigramme), de la schématisation (outils SysML) …
    17 dans la classe, depuis la première, nous avons été plusieurs fois mis en situation de projet où la note obtenue pouvait jusqu'à faire la moitié de la note trimestrielle en spécialité. Maintenant les projets pour le BAC ont commencés. Une problématique est posée et les profs, en temps de cours, endossent aussi le rôle de client pour nous guider. Des groupes de 4/5 travaillent sous leurs nez, on doit poser de bonnes questions pour affiner nos choix, faut forcer quoi …
    Dans l'ensemble, les débuts ont été durs pour quelques élèves, surtout en programmation (rajouter des ";" pour en fin d'instruction et le compilateur n'est pas content ! Charlie, où est l'erreur ?), la classe est solidaire et l'entre aide est courante. Ça a motivé et a plu à beaucoup le fait de simplement programmer Arduino et d'avoir une production à la fin.
    Le seul truc chiant c'était de pas trop vouloir la faire bourrin à aller dans l'éditeur coder et passer d'abord par des algorigrammes validé par les profs …

    Je connaissais pas l'option ISN du bac S. Avec la lecture de ton post, je suis plutôt content d'avoir 3/4 fois ton quota horaire par semaine en spécialité (~9h) … avec en prime les mêmes débouchés.

    Pour répondre aux questions d'une manière générale, je dirais que quelque soit le langage, c'est aussi un effort personnel (sans parler de devoir) de s'y mettre chez soi pour comprendre et approfondir ce qui est vu en cours. C'est un secret pour personne d'ailleurs que programmer c'est en grosse partie du RTFM. Pour l'attribution d'une note, nos profs font quelque chose de simple, "montre ta production et je te dirai ta note", ça se voit si l'élève bosse ou non. S'il arrive à avoir un programme comme l'exige le cahier des charges, il est bien noté. Si en plus, il sait expliquer le fonctionnement de son programme, c'est qu'un plus.

    Au passage, bonne chance pour le BAC !

    • [^] # Re: Un peu de publicité

      Posté par (page perso) . Évalué à  3 .

      Apparemment, la réforme s'est mieux passé en STI2D qu'en S, parce qu'en STI2D, le profs baignaient déjà dans le technique depuis longtemps, et en S on cherche à bourrer le crâne des étudiants pour les préparer aux classes prépa, alors qu'en STI2D, c'est beaucoup plus raisonnable, et malgré tout d'un bon niveau également.

      • [^] # Re: Un peu de publicité

        Posté par (page perso) . Évalué à  1 .

        en S on cherche à bourrer le crâne des étudiants pour les préparer aux classes prépa

        A noter que c'est un des points qui font que peu d'étudiants prennent ISN par rapport aux autres spé. Ils ont peur de la réaction des prépas, écoles, fac etc qui ne vont pas avoir la même considération pour un spé ISN que pour un spé maths.

      • [^] # Re: Un peu de publicité

        Posté par . Évalué à  1 .

        honnêtement le vrai bourrage de crâne ne commence qu'en prépa…

        • [^] # Re: Un peu de publicité

          Posté par (page perso) . Évalué à  3 . Dernière modification : le 27/03/13 à 00:07

          pas vraiment.
          La prépa c'est apprendre à apprendre.

          Plus précisément :

          • la terminale c'est régurgiter ce qu'on t'a appris
          • la prépa : c'est régurgiter ce que tu aurais pu apprendre et que tu as préféré savoir retrouver quand c'était possible, l'ampleur étant d'un ordre de grandeur supérieur…
  • # ADA, Pascal, Logo. L'apprentissage de langages structurés pour avoir de bonnes bases en info/dev ?

    Posté par . Évalué à  5 .

    Au risque de passer pour un vieux réac…

    J'ai choisi l'option info en 4ème/3ème, nous faisions du LOGO, assez structuré, orienté graphique et donc ludique. Le prof (de math) était très motivé.

    Ensuite dans un Lycée de Senlis (1990-1993), j'ai poursuivi en 2nd/1ère/TD l'option informatique (1h par semaine en salle de classe + 2h de TP par quinzaine + devoirs maison) avec principalement du Turbo Pascal, structuré et pratique pour apprendre l'algorithmique de base. L'équipe était composée de 2 profs de math avec une spécialisation en informatique. Pour respecter le programme, nous sommes passés rapidement sur les aspects informatique et liberté (CNIL). La validation de l'option pour le Bac se faisait par écrit (papier!) sur des exercices d'algo (simples mais essentiels) et quelques questions générales sur l'informatique. Ceux qui avait une grosse motivation pour l'option sortaient avec un niveau en programmation/algo proche de la première année de DUT info (ou mieux).

    Plus tard, j'ai repris des cours du soir au CNAM Paris vers 2003-2005 et le langage de formation initial (ou de remise à niveau dans mon cas) était ADA principalement utilisé dans les systèmes de haute criticité. L'intérêt professionnel direct est faible. Mais la structuration du langage ne laisse aucune place à l'improvisation. Ensuite, le CNAM proposait pour le 2ème cycle du Java/J2EE (par exemple) : avec le passage préalable par ADA, on garde les bons concepts de base et les réflexes de bonne structuration pour la programmation.

    • [^] # + Scheme

      Posté par (page perso) . Évalué à  6 .

      J'ai à peu près la même expérience que toi, le Scheme en plus assez tôt dans le cursus, pour apprendre les rudiments de la programmation fonctionnelle.
      Je garde de très bons souvenirs pédagogique du Pascal et surtout de l'ADA, dont le typage fort offre une bonne assise pour concevoir un programme avec rigueur.
      Mais apprendre la programmation avec le C ne me choque pas, à condition que le prof ne parte pas dans tous les sens au départ.

      Chippeur, arrête de chipper !

  • # problème d'espaces et tabulations

    Posté par . Évalué à  2 .

    Peut-être que la solution tiens à l'utilisation d'.editorconfig :
    http://editorconfig.org/

  • # Live USB

    Posté par . Évalué à  6 .

    Les ordinateurs étant fournis par le lycée avec Python2 (sur un Windows XP ou Seven) qui contient turtle, le choix était vite fait vu que le service informatique est très lent à réagir, et donc installer sur toutes les machines un environnement de développement était impensable.

    François Boisson a créé une clef Live USB basée sur Debian (et la live USB de l'agrégation) qui permet d'avoir un environnement tout près à démarrer au lycée ou chez soit. Elle est personnalisable via des extensions :

    http://isn.dnsalias.org/index.php

    Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

    • [^] # Re: Live USB

      Posté par . Évalué à  -10 .

      On peut lire « La clef ISN est une clef dérivée de ClefAgreg, et en est désormais la nouvelle version ».

      Très bien. Et tout à fait paramétrable aux petits oignons !! Merci !

      Par contre, il est déclaré : « Cette clef est disponible en suivant ce lien [ = http://isn.dnsalias.org/ClefISN.iso ] »… Et je ne trouve nulle part de fichier PGP (accessible en https…), voire au moins du SHA256 pour avoir une empreinte du fichier (pour un contrôle d'intégrité basique)… Voire même une empreinte MD5 (mais le MD5 est bien faiblard !).

      Voilà, sécurité on ne peut plus faiblarde. Pendant son transfert, le fichier .iso est par exemple sujet à une attaque du type l'homme du milieu ("Man in The Middle" en anglais), sans difficulté pour un opérateur intermédiaire sur le réseau (comme un FAI…). Dans ces conditions, l'utilisateur final est dans l'incapacité d'opérer une authentification et un contrôle d'intégrité du fichier .iso et s'expose clairement à des actes de malveillance !

      J'ai traité récemment du cas de Trisquel, dans son état actuel¹. J'y renvoie pour des explications complémentaires, qui peuvent être utiles à la compréhension.

      J'espère que mon témoignage pourra aider :

      • à éveiller les consciences des utilisateurs ;
      • à remédier à ce genre de défaillances de base dans la mise à dispositions d'un certain nombre de distributions GNU/Linux…

      ¹ des réactions bientôt, selon toute vraisemblance, en provenance de l'équipe de développement de Trisquel que j'ai sollicitée - je tacherai d'alimenter le même fil de commentaires.

  • # Du côté enseignement

    Posté par (page perso) . Évalué à  4 .

    Je suis étudiant en 3ème année d'école d'informatique et j'ai la chance de pouvoir travailler sur le programme d'une classe d'ISN cette année.

    Une lycée de Grenoble nous a demandé de "l'aide" sur la mise en place du programme, la création de projets à réaliser en cours d'année, le contenu de l'enseignement et sur les projets à présenter pour le bac. J'ai donc pu voir un peu tout ce qui devait être abordé en cours d'année.

    Déjà le programme est très chargé. Avec seulement 2 heures par semaine pour des élèves qui n'ont pour beaucoup jamais vraiment abordé le côté technique de l'informatique, il y a énormément de notions. Entre le dev, le web, le réseau et les projets pour le bac, difficile de tout faire tenir dans l'année. Du coup de notre côté le réseau à presque disparu.

    Les élèves sont assez motivés. Ceux qui sont présents le sont vraiment par choix, ça aide. La classe est assez petite, environ une dizaine de personnes.

    Ils ont fait un puissance 4, une bataille navale, du chiffrement/déchiffrement avec des algos simples (césar par exemple) avant noël. Un peu de web en janvier. Et ils sont lancés sur les projets de fin d'année. Il y a du RSA, un petit serveur lié à un arduino (pour du contrôle à distance d'éclairage par exemple) et de l'affichage avec arduino.

    Du côté technique, c'est le C qui a été choisi. C'est une décision du prof qui a pris ce qu'il maitrisait le mieux. Pas de problème particulier avec. Nous n'avons pas été trop loin, les pointeurs sont abordés rapidement pour faire des tableaux, mais c'est tout. Sinon c'est boucles, variables, conditions, fonctions, je crois récursivité.

    Je crois que ce qui nous a le plus manqué c'est la possibilité de faire quelque chose de graphique très facilement. Du coup sur certains projets, nous avons fait l'affichage et les élèves d'ISN tout le fonctionnement plus "algorithmique". Ça semble être assez motivant. Les petits jeux ou programmes distrayants avec un côté fun ont vraiment aidés.

    Pas certain que le python ou le java auraient été plus intéressants. Peut être pour l'utilisation de bibliothèques particulières. Je sais que beaucoup de prof sont partis sur un dérivé de java avec une environnement très graphique. Qui fait surement moins peur qu'un visual studio.

    Le système de notation est assez bizarre. Avoir des notes en cours d'année n'est pas trop problématique. Petites questions rapides sur papier pour voir si les notions de bases sont acquises, sinon des notes sur les projets. Par contre cela bouffe du temps, alors qu'il y en a déjà peu. Et pour le bac, la note semble être exclusivement sur la présentation, pas du tout sur le résultat des projets finaux. Je trouve cela décevant. Surtout que la présentation est vraiment très courte.

    Au final pour une première année ce n'est pas trop mal, mais il y aura sans doute une bonne évolution l'année prochaine. Notamment une meilleure connaissance du niveau des élèves en cours d'année et donc des projets qui conviennent mieux. Des sujets qui peuvent aussi plus accrocher. Meilleur gestion du programme aussi. Même si je pense vraiment qu'il y a trop de contenu par rapport au temps accordé.

  • # Choix du langage

    Posté par (page perso) . Évalué à  2 .

    Loin de moi l'idée de dénigrer le python comme langage mais la "simplicité" apparente du langage n'entrainerait-elle pas les élèves à penser la programmation de façon plus simpliste qu'elle ne l'est réellement.

    D'ailleurs, tu le dis toi-même, le niveau des élèves pouvant être très différent, il aurait peut-être été préférable de mettre plus de monde sur un pied d'égalité en choisissant un autre langage apportant des paradigmes de programmations moins commun et à mon sens plus adapté dans le cursus "académique" des élèves en prenant un langage fonctionnel.

    J'ai personnellement commencé la programmation sur calculatrice en mode pascal et/ou asm sur TI92/HP48 puis sur PC avec Caml Light que je trouvais à l'époque finalement plus simple à comprendre lorsque l'on baigne dans ce milieu scolaire.

    De plus, avec l'émergence des plateformes multi-coeurs, il me semble que le paradigme fonctionnel a une carte maitresse a jouer.
    Il est vrai que les langages de scripts ont une approche plus sympathique mais ces derniers ont l'avantage de s'apprendre facilement en autodidacte se qui est un peu plus compliqué pour des OCaml, Haskell, LISP, etc. La force d'un enseignement étant justement l'expérience de l'enseignant, j'aurais trouvé cela plus enrichissant de choisir des langages un peu plus rigoureux et moins aisés à apprendre seul dans son coin…

    Sinon, question note à la fin de chaque semestre, mener à bien la réalisation d'un outil dans le langage enseigné peut être une bonne façon d'évaluer le travail fourni. Écrire un programme informatique n'est pas aussi théorique qu'un devoir de mathématiques. Plusieurs réponses peuvent être bonnes. Un programme fonctionnant mal mais bien architecturé peut aboutir à une meilleure note qu'un travail dégueulasse qui marche. Comment note-t-on les élèves dans le filières professionnelles ? J'imagine que l'approche de notation est similaire.

    Un dernier point sur le système de notation. Je trouve que ce dernier insiste en général trop sur le code produit et oublie l'un des aspects les plus importants voire LE plus important dans la programmation à savoir: NE PAS REINVENTER LA ROUE. Je trouve dommage qu'on mette de côté le fait de chercher si quelqu'un n'a pas déjà codé le sujet en question et intégrer ce travail dans le sien pour résoudre le problème. C'est pour moi, l'essentiel de la programmation.

    • [^] # Re: Choix du langage

      Posté par . Évalué à  2 .

      Au contraire, je trouve que Lisp (surtout dans sa variante Scheme) est extrêmement simple à comprendre et enseigner, la syntaxe est minimaliste, les concepts s'ajoutent au fur et à mesure de manière simple et sans jamais poser de problèmes, tout en restant assez abstrait pour faire ce que l'on veut facilement …

      Pour le moment, nous avons eu des devoirs maison, avec des problèmes et nous devions rendre du code python documenté (expliquant pourquoi cet algo fonctionnait), ainsi que des devoirs sur table, stylo et feuille, où il fallait comprendre du code et le modifier pour ajouter des fonctionnalités.

      Au contraire, les profs veulent que nous réinventions la roue, de manière à comprendre comment elle fonctionne. Ainsi on a re-codé des fonctions de tri, crée un module qui traite des matrices etc …

      • [^] # Re: Choix du langage

        Posté par (page perso) . Évalué à  2 .

        de manière à comprendre comment elle fonctionne. Ainsi on a re-codé des fonctions de tri, crée un module qui traite des matrices etc.

        je pense qu'expliquer le choix de bibliothèques existantes en indiquant comment on a compris ce qui est pris en compte serait accepté (pas comme à l'epita où il faut tout réécrire).

    • [^] # Re: Choix du langage

      Posté par (page perso) . Évalué à  6 .

      Un dernier point sur le système de notation. Je trouve que ce dernier insiste en général trop sur le code produit et oublie l'un des aspects les plus importants voire LE plus important dans la programmation à savoir: NE PAS REINVENTER LA ROUE. Je trouve dommage qu'on mette de côté le fait de chercher si quelqu'un n'a pas déjà codé le sujet en question et intégrer ce travail dans le sien pour résoudre le problème. C'est pour moi, l'essentiel de la programmation.

      Oui, enfin, essentiellement pour préparer quelqu'un au monde du travail, mais dans le milieu de l'enseignement, il est plutôt intéressant de refaire faire certaines choses… après, un cours spécifique pour apprendre à chercher des briques plutôt que de les ré-écrire ne me semblerait pas inintéressant (j'irais jusqu'à dire que ça pourrait être essentiel), mais plus tard dans le cursus.

      Chippeur, arrête de chipper !

    • [^] # Re: Choix du langage

      Posté par . Évalué à  4 .

      Loin de moi l'idée de dénigrer le python comme langage mais la "simplicité" apparente du langage n'entrainerait-elle pas les élèves à penser la programmation de façon plus simpliste qu'elle ne l'est réellement.

      On s'en balance un peu non ? Et ceci pour deux raisons:

      Premièrement par ce que quelque soit le premier langage que l'on apprend il y aura toujours de la magie noir. C'est pas grave, on te dit de faire ca, tu fais ca. Contrairement aux discussions du dessus, penser qu'on peut démarrer avec quelque chose ou on comprend tout et peut tout expliqué me semble voué à l'échec.

      Deuxièmement par ce que quelque soit le langage que tu vas choisir, les élèves vont penser de facon simpliste. La seule facon de prendre un peu de recul et de compétences est de manger au moins trois langages complémentaires fonctionnel / C / langage de l'industrie (Python / Java) et de combiner ca aux disciplines qui vont autours. Ca vient avec le temps, pas du langage.

      Alors se palucher sur le langage à choisir et les possibles implications sur les élèves ca me semble un peu discuter dans le vide. Java, Python, Scheme, Pascal & co font tous de très bons langages pour apprendre en terminal (ce genre d'option existait déjà à mon époque, on faisait du turbo pascal) l'important n'est pas là. Il s'agit de démarrer la machine et donné un appercu de la chose. Après quand tu as passé les premières bases et écrit tes premiers trucs, direction le C et un lisp-like pour s'y mettre sérieusement et lancer la machine.

  • # De mon temps ...

    Posté par . Évalué à  4 .

    Y'avait eu un truc qui s'appelait le plan IPT.

    L'instituteur du village avait obtenu un TO7 pour la classe unique (CE1 à CM2) et avait acheté un poste personnel sur ses deniers. Il donnait un cours d'initiation aux parents d'élève le vendredi soir et le même aux élèves le samedi matin. Les parents d'élève amenaient leur postes persos pour compléter l'équipement et avoir un poste pour 2 ou 3. Celui qui "utilisait" était sous la surveillance de celui ou ceux qui attendaient leur tour. C'était assez folklorique mais avec le recul, très formateur.

    J'étais à l'époque au collège en 4e où l'on nous faisait bouger une tortue avec du LOGO. Le seul intérêt de ce cours était que la lumière de la pièce était éteinte …

    Arrivé au lycée, j'avais pris une option qui s'appelait à l'époque (TSA+Productique). Dans la partie productique, on était censé découvrir les joies de l'automatisme, de l'électronique et de l'informatique. Les premiers cours d'info ont consisté à mettre en état les TO7. Les modèles obtenus étaient destinés à l'afrique du nord et il fallait remplacer les touches par des touches AZERTY. Ensuite, on a fait un peu ce que l'on voulait …

    Concernant la spécialité ISN, je trouve effarant que l'on recopie encore des cours affichés au tableau et travailler en groupe de 4, ça doit être assez difficile.
    Sur un autre plan, j'espère que le prof a commenté l a possible utilisation du réseau, des ressources en ligne et des communautés.

    • [^] # Re: De mon temps ...

      Posté par . Évalué à  3 .

      Le tableau est composé de deux parties, une projetée et une pour des schémas et explications à la main, et oui, ils utilisent l'ENT mis à disposition par le lycée pour récupérer les devoirs (bien que l'on puisse envoyer des mails ou donner une clé usb) et les donner.

      Pour les groupes de quatre, c'est comme tout projet en commun, il y en a toujours un qui ne fait rien, mais le plus dur est au fond de ne pas tout faire tout seul dans son coin …

      • [^] # Re: De mon temps ...

        Posté par (page perso) . Évalué à  3 .

        Pour les groupes de quatre, c'est comme tout projet en commun, il y en a toujours un qui ne fait rien

        ah merde, je me suis fait baisé toute ma scolarité avec les groupes de 6 :/ bon on va dire que dans quelques matières, c'est moi qui ne foutait rien. Sérieusement, on était au moins 4 à s'intéresser au sujet, avec nos capacités. Bon en info, j'avais imposé la règle de rendre le rapport au bout des 4h de TP pour ne pas y passer nos nuits. Je n'y ai dérogé qu'une fois : la prof' nous avait filé une bibliothèque bugguée que nous n'avons remis en cause que vers 20h, la suite a été très rapide entre correction puis mise en œuvre. Dès le lendemain nous avons demandé si nous pouvions l'indiquer aux autre groupes de TP, ce qui a été accepté (bon, en école d'ingé il y a parfois un peu plus de solidarité).

        • [^] # Re: De mon temps ...

          Posté par (page perso) . Évalué à  3 .

          Ce qui est chiant c'est que les outils annexes sont rarement enseignés ou valorisés dans l'enseignement de la programmation.
          Par exemple dans les travail du groupe, c'est la guerre pour avoir un style de programmation cohérent (ne serait-ce que l'indentation), les gestionnaires de version ça n'est jamais utilisé car inconnus du bataillon (et non DropBox ça ne vaut pas un git/mercurial/SVN ou même CVS), les gens spécifient trop peu ce qui fait que la conciliation des fonctions séparées demande une grande réécriture pour que tout se coordonne bien, etc.

          • [^] # Re: De mon temps ...

            Posté par (page perso) . Évalué à  0 .

            Ce qui est chiant c'est que les outils annexes sont rarement enseignés ou valorisés dans l'enseignement de la programmation.

            en même temps, une fois le TP rendu et la note obtenue, spa comme si tu allais y revenir… mais oui, appliquant ces préceptes au préalable, cela nous a permis d'obtenir de meilleures notes (mais bon, ça répondait au TP demandé, il n'y avait que 4h, ça fonctionnait, stait lisible et cohérent, ça permet souvent d'obtenir 18 plutôt que 16 pour du code crade, ce qui vaut d'écrire bien du premier coup et d'y avoir réfléchi avant :p).

  • # Python, ça...

    Posté par . Évalué à  -10 . Dernière modification : le 24/03/13 à 12:16

    …forme la jeunesse :)

    Bientôt, tu seras à même de contribuer à MediaGoblin, ce projet soutenu par la FSF, déjà abordé plusieurs fois sur Linuxfr, qui propose une alternative aux YouTube, Flickr, Soundcloud et autres, en offrant un outil permettant de rendre accessibles ses médias vidéos, photos, sons… et maintenant les modèles 3D :)

    Et souviens-toi, petit scarabée, que …« In the future MediaGoblin will provide tools to facilitate collaboration on media projects » (Dans le futur, MediaGoblin fournira des outils pour faciliter la collaboration sur des projets [traitant] de médias (ou médiatiques)), soit l'ambition de fournir une base favorable à l'émergence de The Node¹ ou je ne m'y connais pas :)

    ¹ alias Zin[o|d]…

    • [^] # Re: Python, ça...

      Posté par (page perso) . Évalué à  3 .

      Et souviens-toi, petit scarabée, que …« In the future MediaGoblin will provide tools to facilitate collaboration on media projects » (Dans le futur, MediaGoblin fournira des outils pour faciliter la collaboration sur des projets [traitant] de médias (ou médiatiques))

      tu mériterais d'être plussé pour cela, mais non.
      Être réaliste est si loin de ta portée ? Tu peux faire ton propre site web indiquant tous tes délires et ne mettre en avant que ce qui est motivant et atteignable, cela t'imposera sans doute une certaine rigueur et t'impliquera un peu plus que sur un site autant tolérant que LinuxFr…

      Bon courage dans tes réalisations et mobilisation d'équipe. (vraiment)

      • [^] # Re: Python, ça...

        Posté par . Évalué à  -10 . Dernière modification : le 24/03/13 à 13:25

        Rhoooo ! Je sors la carte quenelle !

        Profonde quenelle masquée (épaulée, je crois) en forme de Nouvel Ordre Mondial CITOYEN - par The Node - l'annonce de la démocratie cybernétique mondiale fédérée à venir !

        // astuce : une fois la page affichée, dérouler vers la bas pour cliquer sur le bouton "Afficher les commentaires précédents", puis cliquer dans la barre d'adresse et enfoncer la touche Entrée.

        • [^] # Re: Python, ça...

          Posté par . Évalué à  -10 .

          Démocratie Cybernétique Mondiale Fédérée alias DCMF pour l'acronyme, qui pourrait volontiers se déployer ainsi en version anglaise, lol : « Democracy by Cybernetic Mutation - Forward ! ».

    • [^] # Python avancé - GLMF hors série

      Posté par . Évalué à  -7 .

      Tiens, j'en profite pour vanter les mérites de ce hors-série de GNU/Linux Magazine France, pub gratuite :

      Hors-série n°65 de GNU/Linux Magazine France : "Python avancé"

      Le sommaire (ainsi qu'un aperçu du magazine) est lisible sur le site officiel. Sur Linuxfr, la dernière Revue de presse — (mars 2013) a présenté ce hors-série. Tu pourras aussi considérer avec intérêt le hors-série de l'année passée de Linux Pratique consacré à Python pour les débutants, référencé au lien précité.

      • [^] # Comprendre comment fonctionne Python pour optimiser son code

        Posté par . Évalué à  -8 . Dernière modification : le 25/03/13 à 21:58

        En écho à ce que j'ai exprimé plus haut, dans ce commentaire, sur l'intérêt de descendre au bas niveau pour bien maitriser, en évoquant le C, l'assembleur et les opcodes, je propose ci-dessous un extrait inspirant, tiré d'un article de Sébastien Chazallet intitulé "Comprendre comment fonctionne Python pour optimiser son code" (publié dans la revue "GNU/Linux Magazine France" n°158 de mars 2013 - page 70 à 75), où on peut lire à la conclusion, je cite :

        « Python est un langage interprété de haut niveau qui permet à chaque développeur de réaliser des applications vite et bien. Autrement dit, il permet d'allier qualité et rapidité de développement, ce qui explique pourquoi ce langage est apprécié pour réaliser des prototypes, par exemple.

        Pour un débutant en programmation, le langage peut s'apprendre facilement, puisqu'il n'est pas nécessaire d'en connaïtre tous les aspects avant d'écrire de petits programmes. Pour ceux connaissant d'autres langages de programmation, Python est forcément proche de l'un d'entre eux et il sera possible de coder en Python plus ou moins de la même manière qu'avec un autre langage, en apprenant simplement les différences. Python revendique ses inspirations venant d'autres langages et elles sont nombreuses (C, Haskell, …). À terme, il faudra s'intéresser au PEP ⁽¹⁾ et de manière plus générale aux recommandations pour savoir quelle est la meilleure manière de gérer de petites problématiques pour enfin écrire du code dit pyhonique.

        Il est parfaitement possible d'être un brillant développeur python sans jamais avoir détaillé ce qui vient d'être décrit ici, puisque le langage est fait pour être utilisé à haut niveau, cependant, descendre dans les entrailles du bas niveau permet de trouver les justifications des recommandations que l'on trouve dans les PEP, de comprendre ce qu'il se passe dans le détail et à terme d'être capable de produire un code optimal. Cela permet également de suivre l'évolution du langage et d'en comprendre les principaux enjeux dans le détail.

        Ainsi, si l'on s'amuse à comparer les pans du langage Python qui ont changé entre les branches 2 et 3, on comprend mieux les raisons des choix qui ont été faits ».

        Pour contextualiser, voici le chapeau de l'article :

        « Python est un langage interprété. Il se compile pour générer du bytecode qui sera exécuté par la machine virtuelle. L'idée de cet article est de faire une introduction sur le fonctionnement de ce bytecode. On ne parle ici que de CPython 3.x, le fonctionnement sous CPython 2.x étant sensiblement différent et celui pour PyPy, IronPython ou encore Jython étant réellement différent ».

        ⁽¹⁾ [NDR] J'ajoute ces sources intéressantes, au sujet des PEPs :

        • http://www.python.org/dev/peps/ - c'est la "PEP 0" sur python.org titrée "Index of Python Enhancement Proposals (PEPs)" - (crée le 13-Jul-2000 ; modifiée le 2013-03-25) …Qui contient (en anglais) l'index de toutes les PEPs
        • http://wiki.openihs.org/PEP_8_fran%C3%A7ais - "PEP 8 français" - traduction (légèrement remodelée) de la PEP 8 originale - ce document donne des conventions d'écriture pour le code Python, y compris la bibliothèque standard de la principale distribution de Python.
  • # Service info + prof d'ISN !!! Yeah !! Jackpot

    Posté par (page perso) . Évalué à  7 .

    Pour ma part, j'ai la chance d'être ET le service info ET le prof qui fait ISN…

    J'encadre 60 élèves dont 4 réellement bons et le reste a fait ça parce que "j'aime pas la physique, ni les maths, ni la SVT… oui je suis en Terminale S, pourquoi ?"

    Le programme est absolument infaisable effectivement MAIS !! c'est nouskonoteaubac. Donc, à la rigueur, programme fait ou pas fait, rien n'est grave. Les élèves ne seront pas intérogés sur les parties non vues.

    Pour notre part, nous n'avons pas fait 1h + 1h sur cette fin d'année. Nous avons fait 2h de TP (rurple fonctionne bien effectivement) jusqu'a Janvier. Depuis nous sommes sur les projets.

    Nous reprendrons la partie "architecture matérielle" après l'épreuve (12-13 mai dans notre académie)

    Vu l'hétérogénité des compétences, nous avons laissé choisir les projets. J'ai du Blender, du Django, de l'Android, du python/Tk, du Web… 25 projets différents.

    A part 1 ou 2 groupes qui ont vu un peu large (Android), ça se passe plutôt bien. L'autonomie est à peu près égale à celle d'une huître sur 50% des groupes mais nous ne nous attendions pas forcément à mieux.

    Choix du python : Je comprends tes soucis avec. Mais quand je vois … allez… Java et Android par exemple ah ah ah , je me marre (ça tombe bien les élèves aussi, enfin…pas trop mais un peu)
    On avait le choix entre du python ou du javaSkool… bon… Python à ce côté sympathique où la syntaxe ne prend pas le pas sur la sémantique.

    Moi, ce que j'aimerais comme langage, c'est du python dans lequel on est obligé de déclarer les types avant, un peu comme en turbo pascal. On aurait le côté super pratique du python (gestion de strings, Duck typing) avec le côté un peu plus rigoriste, qui est pédagogiquement très intéressant.

    Pour le service info, je rejoins mon collègue : on en demande un peu trop des fois. Pour ma part, étant administrateur réseau aussi, j'ai installé : python 3.2, PIL. Sur un poste, j'ai eclipse pour android (c't' enfer) et rurple.

    Un serveur WAMP en VM pour les projets web/php et un poste en Blender.

    C'est tout pour toute l'année.

  • # Une remarque sur l'indentation

    Posté par . Évalué à  3 .

    L'indentation est principale fautive, puisque mélanger espaces et tabulations ne fait pas bon ménage avec python

    Il y a un prof qui a fait son propre langage et le faisait évoluer d'une classe à l'autre pour voire ce qui marche bien ou pas avec des débutants, il avait été surpris de voire qu'avoir un langage ou l’indentation est significative aide beaucoup.

    Donc je pense que l'erreur principal en Python ce n'est pas d'avoir l'indentation significative, mais d'autoriser a la fois les espaces et les tabulations pour ça.

    Pour les langages normaux, c'est beaucoup moins pratique, mais on peut envisager d'imposer l'utilisation d'un "prettifyer".

    • [^] # Re: Une remarque sur l'indentation

      Posté par (page perso) . Évalué à  4 .

      si tu utilises un vrai logiciel pour faire du python (IDLE ou notepad++) correctmeent conguré, ce problème n'en est plus un. (je parle sous windows… tout les KDEistes auront remplacé par Kate)

      • [^] # Re: Une remarque sur l'indentation

        Posté par . Évalué à  2 .

        Je sais, mais visiblement ça a été un problème pour la classe dont il est question..
        Ce qui indique bien que résoudre le problème au niveau de l'IDE n'est pas une bonne idée..

  • # Processing ?

    Posté par . Évalué à  1 .

    Tout est dans le titre…
    Est-ce que Processing ne serait pas une bonne base, plus accessible que le C, sans les soucis d'indentation de Python, avec un typage fort, et avec des réalisations concrètes à la clé donc assez gratifiant (Arduino, fonctions graphiques, etc.) ? Et il y a même une version js pour un usage facile dans un navigateur…

    C'est une question ouverte, je ne suis pas un fin connaisseur de Processing et je commence tout juste à regarder, mais d'après ce que j'en observe il me semble que ça en ferait un bon candidat pour l'enseignement non ?

    • [^] # Re: Processing ?

      Posté par (page perso) . Évalué à  0 .

      euh…………..
      non ? (je ferme ta question)
      Je te prend le 2e exmple du cours :
      void setup() {
      size(480, 120);
      }

      void draw() {
        if (mousePressed) {
          fill(0);
        } else {
          fill(255);
        }
        ellipse(mouseX, mouseY, 80, 80);
      }
      
      

      "ça veut dire quoi "void" ?"

      Pour un élève qui n'a aucune base, je trouve cela compliqué. D'un autre côté, je regrette qu'en python, on ne sache pas facilement le type de retour d'une fonction en lisant le code. Engros, faudrait enlever le "void" et le remplacer par "null" ou "empty"…. qui est compréhensible…

      • [^] # Re: Processing ?

        Posté par . Évalué à  4 .

        void est un mot du dictionaire, hein, ca a pas ete invente par K&R ;-)
        Il est meme plutot proche de sa traduction francaise (vide).

        Linuxfr, le portail francais du logiciel libre et du neo nazisme.

  • # Oh c'est rien ça ...

    Posté par (page perso) . Évalué à  5 .

    Je connais une école où l'enseignement du l'orienté objet c'est "les feuilles et les contrôles VB sont des objets […]" (VB pour Visual Basic et c'est, texto, l'introduction d'un cours C++ avec Borland (où le concept de l'orienté objet c'est d'utiliser les widgets de Borland C++ Builder et la majorité des lignes de codes sont du C89)).
    Il y a aussi le PHP où les "magic quotes" sont un gage de sécurité absolue, "register global" est ce qui est de mieux et tous ce que décourage la documentation officiel de PHP depuis ~2002 est considéré comme la manière professionnelle de faire
    Bien entendu cours de JavaScript, qui est en fait un cours sur jQuery sans avoir vu les bases du langage en lui-même.
    Et les cours réseaux : les classes IPv4 (aboli en 1993) … et rien d'autres (et pas une seule mention de la moindre RFC).

    Bon j'ai quand même dis à l'école et on m'a répondu "pour des raisons pédagogiques" et ensuite j'ai eu des emmerdes graves avec l'état (retiré mes apprentis pour les placer chez l'enseignant qui déclare qu'UTF-8 ne permet pas d'encoder les caractères francophones).

    "It was a bright cold day in April, and the clocks were striking thirteen" - Georges Orwell

  • # Options et BAC S

    Posté par . Évalué à  1 .

    Dans ton petit rappel, tu as oublié l'option SI Sciences de l'Ingénieur !

  • # Lycée et informatique : spécialité ISN en terminale S

    Posté par (page perso) . Évalué à  1 .

    Bonjour je suis professeur de mathématiques et j'enseigne depuis cette année l'isn.
    Nous avons 6 élèves.

    La première chose que l'on peut dire sur le programme officiel est qu'il est beaucoup trop large..

    On traite pas le programme car on ne peut pas mais je ne crois pas qu'il faille tout faire.
    Pour la partie sociétale on a fait faire aux élèves des exposés. On a mis les sujets que l'on voulait et les élèves ont choisit.
    J'ai eu le droit à un exposé sur les licences logiciel, facebook, turing etc….

    Il a aussi la particularité d'être enseigné par des professeurs qui ne sont pas forcément
    spécialisés dans l'informatique,

    Je suis avec un prof de SI et c'est très bien car on se complète. Il faut dire que les profs de technique sont obligés d'enseigner une autre matière alors ils font tout pour rester dans l'établissement.

    Ainsi, devant une classe d'environ 18 élèves (pour toutes les terminales S),

    Nous avons 6 élèves

    Le choix forcé de python a causé plusieurs problèmes, surtout au niveau de la compréhension.

    Pas nous. Quand tu as décidé à l'avance que c'était mauvais alors forcément ca ne peut être que mauvais.

    C'est comme si je devais enseigner un cours sur emacs. Remarque des élèves m'ont demandé si je pouvais faire un cours sur vim :lol

    Nous travaillons sur la clé usb de francois boisson et j'en suis très satisfait.

    Je fait mes extensions, les élèves l'installent et je n'ai pas eu de gros problèmes

    Le seul problème est que j'ai choisit python3 et non python2. Sur le long terme je pense que ce choix sera payant.

    L'indentation est principale fautive

    Je n'ai eu aucun problème de ce coté là!!!!! (enfin si une fois)

    mes camarades étaient habitués à leur TI-Basic, où le for est identique au C.

    Le TI-basic c'est un truc qu'il faut banir. Une calculatrice n'ai pas fait pour programmer mais pour faire mumuse.

    Par contre, turtle a été très bien reçu !

    Pas pour nous. Apprendre turtle mais pour quelle finalité?

    Qu'en pensez vous ? …. Comment donner une note à chaque trimestre ?

    Le problème de l'évaluation est pour moi nun vrai problème car je ne sais pas faire.

    Pour mon collègue de SI ce n'est pas du tout un problème. On a beaucoup tâtonné cette année.

    On a prévu pour l'année prochaine: cours et à la fin de chaque cours un ds de 20 minutes.

    On met aussi une note aux exposés, au revu de projets.

    Nous n'avons un projet sur un jeu avec pygame et un autre projet sur serveur apache+python+cgi+base de donnée sqlite+image. Il rentre des notes et cela va se rajouter dans une base de donnée, calculer la moyenne et faire un graphique en araignée. Cela touche à beaucoup de notions du programme d'isn.

    Le gros problème a été la formation des enseignants.

    Nous avons eut une 10 d'heures l'année passée et cette année zéro, ce que je trouve scandaleux. On est seul dans notre coin sans vois ce que font les autres.

    • [^] # Re: Lycée et informatique : spécialité ISN en terminale S

      Posté par (page perso) . Évalué à  2 .

      "On est seul dans notre coin sans vois ce que font les autres."

      c'est assez impressionnant pour des cours d'informatique… je suis sidéré que très peu de mise en commun ait eu lieu.

      A part le SILO qui avait bien commencé, il n'y a plus un post depuis Janvier.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.