Moderators: El_Goretto, xaviermiller


Je pense que si, ça évite de tout avoir à apprendre à la fois, grands principes et détails techniques confondus. Quelqu'un qui passe de Python à C++, il n'a qu'à apprendre une nouvelle syntaxe et quelques notions techniques comme la gestion mémoire, ça reste moins rebutant que de tout faire d'un coup. Bon, après, le risque (mais est-ce vraiment grave ?) c'est qu'il se dise «Pourquoi je me ferais chier à apprendre un langage bas niveau alors que je fais déjà ce que je veux avec un langage haut-niveau ?»...kwenspc wrote:je sais pas si commencer avec un language de haut niveau est une bonne idée.
Un débutant qui ne connais pas l'objet, ça ne lui pose pas de question existentielle. Faire "machin.truc()", ça n'est pas moins naturel pour lui que de faire "truc(machin)". De ma petite expérience de l'enseignement, je retire que l'utilisation d'objets est une notion parfaitement anodine. Après, la conception objet, c'est une autre affaire, mais ça rien n'oblige à en faire dès le début.(en plus c'est un langage objet...pour commencer c'est pas la joie)
Si on tient à commencer par le C, alors oui, je le conseille aussi chaudement.aLexTaze wrote:http://www.eyrolles.com/Accueil/Livre/9 ... angage.php
Je doute qu'on peut faire plus clair, plus simple pour un débutant

Le "HelloWorld" de Python, c'estanigel wrote:Quitte à travailler sur un langage "non-propre" (autrement dit : n'importe quoi sauf du C), autant travailler sur JAVA non ?
Code: Select all
print "Hello World!"Code: Select all
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Là non plus, je ne trollais pas ! Et là par contre, j'ai de solides arguments ! Ne pas apprendre à gérer la mémoire, c'est aussi ne pas comprendre les effets de bord des surcharges que peuvent induire certains structures informatiques. Genre des boucles qui allouent un bloc à chaque tour, avec des conditions d'arrêt plus ou moins douteuses. J'ai vu cette année un bel exemple, sur du code threadé qui plus est (non content de programmer comme un cochon, il le faisait en multithread le bougre !). Et ben merci le debuggage ! On s'y est mis à 3, et on y a passé 2H !TGL wrote:Quant à ton "non-propre", franchement, c'est du troll.
Là en revanche, c'était de la provoc gratuite. Mais je l'ai indiqué : j'exagérais.Anigel wrote:Pour commencer, l'assembleur me paraît donc tout indiqué...
Ouais, mais bon, t'as à peu près autant de ressources pour Python, et plein de code libre à te mettre sous la dent, etc. À ce niveau là, je trouve que ça se vaut.anigel wrote:Le principal avantage à démarrer sur du java, c'est l'immense quantités de petits tutos disponibles sur le net. Pas forcément du java académique, juste du JAVA "qui marche", sans se soucier de rien. Ca me semblait sympa pour quelqu'un qui va apprendre à partir d'un bouquin. Il ne s'agissait pas de troller là-dessus.
Bah nan, enfin j'irais pas jusqu'à dire qu'il faut se préocuper de l'allocation mémoire. Dans un langage garbage-collecté, il suffit pour être précis dans son code de l'être sur les notions d'instance des objets ou structures que tu manipules. En Python, faut avoir compris que "listeB=listeA" c'est pas pareil que "listeB=listeA[:]", ça ok. Mais c'est un point de vue qui est plus haut-niveau que celui de l'allocation/désallocation de la mémoire, et qui est pourtant suffisant pour comprendre parfaitement le fonctionnement du code que l'on écrit. Même si on ne comprend pas le fonctionnement de l'interpréteur, on peut prévoir son comportement et c'est ce qui importe.anigel wrote:Effectivement, sans aucune notion d'allocation mémoire, c'est très très difficile de lui inculquer une programmation "précise". Or, c'est une condition sine qua non pour produire du code propre, que de parfaitement maitriser le comportement de son code, non ?
Bah nan, j'suis pas vraiment d'accord. À mon avis, la gestion explicite de la mémoire c'est vraiment un aspect supplémentaire de la programmation, propre à certains langages, mais je vois pas trop où ça aiderait pour comprendre la programmation à gestion automatique (à part dans pour certains types de programmes calculatoires très gourmands en mémoires et où justement tu peux avoir à penser ton code en fonction du comportement du garbage collector, pour conserver des perfs raisonnables). En général, t'as juste à savoir que les objets/structures conservés en mémoire c'est ceux auquels tu as accès (t'as conservé des références, etc.) et que les autres bah tu t'en fous, ils vont disparaitre et c'est plus ton problème. Ça me semble assez naturel en soit comme fonctionnement, sans avoir à l'expliciter ça en termes d'allocation/désallocation. La gestion explicite, tu peux l'ajouter dans un deuxième temps, dire que pour certains langages ils faut faire un vrai ménage soit même plutôt que de se contenter de détourner le regard des ordures. La difficulté n'est alors pas vraiment cette notion supplémentaire en soit, mais plus le peu d'intérêt qu'elle suscite a priori (le "pourquoi se faire chier si y'a des langages qui s'en passent").anigel wrote:Je veux dire par là, que la compréhension acquise du fonctionnement interne des allocations / libérations de mémoire, ne peut qu'aider ensuite pour l'apprentissage de langage disposant d'un garbage collector (c'est un "plus" !). L'inverse est beaucoup beaucoup plus dur, je trouve. Non ?
Je suis tout à fait pour le "précis et autoritaire" (non, j'ai jamais fouetté personne ;p), mais pas pour autant pour le "tout à la fois". J'aime bien pouvoir faire explorer aux étudiants une seule notion à la fois. La programmation à de multiple facettes souvent dissociables, et on a la chance d'avoir des langages variés qui en font briller certaines et en dissimulent d'autres. Je trouve Scheme très agréable pour s'initier à l'algorithmique fonctionnelle et Python pour celle impérative, OCaml formidable pour bien comprendre le typage, Ruby sur l'ongle pour apprendre l'objet, Eiffel au poil pour se pencher sérieusement sur la robustesse du code, etc. Le C là dedans, bah... très bien pour étudier dans le détail les structures de données (mais si ça ne tenait qu'à moi, ça serait après les avoir vues d'un plus haut niveau en OCaml), et de manière générale le fonctionnement interne des autres langages, mais je commencerais vraiment pas par ça.je pense que commencer avec une méthode "précise et autoritaire" pour aller vers un langage plus libéral comporte plus d'avantages que l'inverse. C'est juste mon point de vue, en fonction des étudiants que j'ai vu passer.
Mouaif, enfin c'est pas non plus leur premier contact avec la programmation dont je parlais là. Ils ont derrière eux au moins de la programmation fonctionnelle (Scheme) et de la programmation impérative (l'infâme Java à trous que je verrais volontier remplacé par du Python ou au moins du BeanShell), et en même temps d'autres langages.Et le retour de tes étudiants me laisse à penser que cette "austérité" ne leur déplairait pas forcément ?
Idem, comme toujoursAnigel wrote:Amicalement,
Ruby est plus jeune et souffre sûrement de sa nationalité japonaise. Il paraît pourtant que là-bas, Ruby a purement et simplement détrôné Python !TGL wrote:Je conseillerais volontier Ruby aussi un peu pour les même raisons, mais il n'y a pas encore à ma connaissance autant de bonnes ressources pédagogiques qui l'utilise, et surtout pas en français.
Et le "HelloWorld" de Ruby, c'est... "Hello World!". Plus simple, c'est difficile !TGL wrote:Le "HelloWorld" de Python, c'estCode: Select all
print "Hello World!"
Les editeurs francais sont aussi un peu frileux ... On en a contacte certains avec Dave Thomas, en envisageant la traduction en francais de Programming Ruby (2nd ed), mais on n'a meme pas recu une reponse (ne serait-ce que pour dire: ca ne nous interesse pas ..)ghoti wrote: Ruby est plus jeune et souffre sûrement de sa nationalité japonaise. Il paraît pourtant que là-bas, Ruby a purement et simplement détrôné Python !
Il y a aussi RubyFr, et puis ce blogEn français, il y a tout de même 2 ou 3 choses sympas, par exemple :
- Apprenez Ruby
- différents tutoriels
- Guide utilisateur du langage ruby en VF
Sauf que dans le cas que tu donnes, "Hello World" ne sortira pas sur la sortie standard ....Et le "HelloWorld" de Ruby, c'est... "Hello World!". Plus simple, c'est difficile !TGL wrote:Le "HelloWorld" de Python, c'estCode: Select all
print "Hello World!"![]()
Code: Select all
puts "Hello World!"