Rédaction d'une collection de tutoriels Python

Qui ? Quoi ? Comment ?

a marqué ce sujet comme résolu.

Si tu mets des objets muables en argument par défaut, tu t'exposes à des surprises. ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
>>> def myfunc(arg=[]):
...     arg.append('spam')
...     print(arg)
... 
>>> myfunc()
['spam']
>>> myfunc()
['spam', 'spam']
>>> myfunc()
['spam', 'spam', 'spam']
>>> myfunc()
['spam', 'spam', 'spam', 'spam']

Du coup je préfère placer des tuples vides : des itérables immuables, quoi.

+2 -0

C'est aussi pour ça que j'attend un tuto clair sur Python : je lui trouve pas mal de qualités, mais j'ai régulièrement l'impression de voir des énormités dans le langage. Du coup je ne sais pas si c'est parce qu'il y a vraiment des énormités ou si c'est parce que je ne "pense pas Python".

Là par exemple, c'est un non-sens pour moi qu'un paramètre optionnel soit statique (dans le sens C du terme), et que le nom des types ne corresponde pas à leur sémantique. La fonction attend des tuples, on lui donne des listes.

Enfin merci pour l'explication, je vais éviter de partir sur un HS.

(je ne sais pas s'il y a quelque chose de prévu lors de la rédaction pour indiquer les dépendances).

il y a une zep en rédaction il me semble et perso j'ai des idées à ce propos qui seraient encore plus puissantes que ça. Mais là j'ai la ZEP 12 alors je ne prends même pas la peine de tout bien mettre au clair.

HS

La raison est simple :

  • tout est explicite
  • tout est passé par référence

Ainsi, si j'écris arg=list() je dis explicitement que arg est une référence sur une liste qui est créée à la définition de la fonction (il n'y a pas de compile-time vs. execution-time en Python). Ce n'est pas une volonté de rendre l'argument statique, c'est simplement que la sémantique est strictement la même PARTOUT, y compris dans la déclaration des arguments par défaut. Sinon pour avoir une sémantique plus proche de C++, il suffit de dire que arg attend une fonction, auquel cas on peut mettre arg=list (sans les parenthèses), et l'utilisateur n'aura qu'à passer lambda: un_objet à l'argument. Certains constructeurs utilisent cet idiome, quoique c'est pas courant.

Pour la remarque sur les types : Python ne fonctionne pas avec un typage statique. Partant de là, il faut repenser la notion d'interface : la fonction va attendre un itérable (quelque chose que je peux utiliser avec un for). Que cet itérable soit une liste, un tuple, un objet qui implémente sa méthode __iter__ ou un générateur, ça marchera pareil : tout ce dont elle a besoin, c'est d'itérer, donc il est inutile de forcer l'utilisateur à utiliser un type particulier.

Si tu préfères : Python fonctionne par duck typing par défaut. En gros, par interfaces abstraites, mais dont on n'a pas besoin d'hériter. Si je passe un tuple en argument par défaut, alors l'utilisateur de la fonction peut me passer n'importe quoi du moment que ça a le même comportement qu'un tuple.

/HS

+0 -0

Je trouve cette idée excellente ! Je n'ai certainement pas le niveau pour rédiger des tutoriels, mais je veux moi aussi apporter ma lettre à l'édifice. Je me porte donc volontaire pour la relecture/correction/vérification du bon-sens de l'écrit !

Impatient de voir ce que cela va donner ! :)

Salut,

je trouve l'idée assez originale et intéressante, dans le sens où je pense que cela peut permettre aux cours de sortir plus rapidement, une personne n'ayant pas forcément le temps ou la motivation de rédiger un cours complet, ou n'étant pas à l'aise sur certains points sur lesquels elle aurait fait l'impasse, cette solution semble donc présenter de multiples avantages, à voir ce qu'il en sera en pratique.

Dans l'absolu, j'aurais préféré que ça soit sur Ruby mais bon…j'ai bien compris que c'est malheureusement un langage relativement impopulaire (par rapport à Python). :(

Au passage, le début de cours sur la programmation système est passionnant et bien expliqué, à la portée d'un débutant, vivement la suite. :)

Merci ! :)

Edit : Tes remarques à propos du Ruby et du cours de prog système m'ont donné à réfléchir. En fait, même si ce n'est pas son objectif premier, je suis certain que ce cours en particulier sera en très grande partie réutilisable (sur le long terme) pour un auteur qui désirerait l'adapter à un langage de la même "famille" que Python, comme Perl ou Ruby. Le sujet s'y prête bien.

En soi, vu que le cours est rédigé sous une licence libre, je pense que je rajouterai une mention dedans lorsqu'il sera terminé, pour encourager les Rubyistes et autres Perleux à le faire (la seule contrainte serait de mentionner le cours original ainsi que mon nom, comme pour tous les documents sous licence libre). J'en serais flatté et ravi !

+0 -0

Bonjour !

J'ai commencé (très) récemment l’écriture d'un Big Tuto sur l'informatique en classe préparatoire MPSI/MP, découpé en deux parties.

Voici mon introduction :

Vous êtes étudiants en classe préparatoire MPSI/MP, et souhaitez progresser en informatique ? Ce cours est fait pour vous !

J'ai eu la chance d'être initié très jeune a la programmation informatique, ce qui m'a permis de toujours réussir en cours lorsqu'il était question de programmer. Cependant, je me suis tristement rendu compte que les cours d'informatique que j'ai reçu dans ma scolarité, que ce soit au lycée ou en classe préparatoire, étaient dans la majorité des cas clairement en deçà de mes espérances. J'ai trop souvent vue des camarades de classe peiner sur des notions simples mais qui avaient été présentées de façon bien trop superflue et/ou rendue artificiellement complexe par un cours mal rédigé.

Vous êtes dans ce cas ? Et bien j'ai une bonne nouvelle pour vous ! l'informatique, c'est simple ! Sisi, je vous le promet ;) Voici le programme de ce cours :

  • En premier lieu, on reprendra à partir de zéro et lentement les connaissances fondamentales a la programmation avec python. Ce sont des bases qui sont simples et pourtant trop souvent mal maîtrisées ;
  • Ensuite, on s’intéressera a des notions plus spécifique a l'informatique en MPSI/MP. En comparaison avec les autres enseignements de classe préparatoire, ce qui est étudié en informatique est simple, mais il est nécessaire d'avoir bien assimilé les bases pour pouvoir progresser.

Bien évidemment, ce cours traitera l'ensemble du programme informatique de MPSI/MP, et j'attacherais un soin tout particulier au fait que chaque notions soit présentées de façon simple et claire ! Ce cours reprend l'informatique a partir de zéro, vous n'avez donc pas besoins d'être en classe préparatoire MPSI/MP pour le suivre. Je pense notamment à la première partie qui est accessible a tous quel que soit l'âge et le niveau en informatique ! ;)

Le découpage des mes chapitres :

Partie I : Les base de python

1 : Avant de commencer // logiciel, comment créé un projet, etc, etc

2 : Variable et interaction // les variable, print, input

3 : les condition

4 : boucle

5 : fonction

6 : Structure de données // tuples, listes…

7 : Application ! // Recherche dans une liste, recherche du maximum dans une liste de nombres, calcul de la moyenne et de la variance. Recherche par dichotomie dans un tableau trié. Recherche par dichotomie du zéro d’une fonction continue et monotone. Méthodes des rectangles et des trapèzes pour le calcul approché d’une intégrale sur un segment. Recherche d’un mot dans une chaîne de caractères.

Partie II : Pour aller plus loins :

1 : Comprendre les variables // les différents type, le stockage, l' overflow, problème de la comparaison à zéro

2 : Complexité

3 : Pile

4 : recursivité

5 : Tris

6 : Base de donnée

7 : Simulation numerique

Si la seconde partie n'a pas grand chose a faire dans votre projet, la première a des choses en commun. J'ai déjà fini les trois premier chapitre (modulo la correction) et j'espère finir ma partie I d'ici une semaine. Si cela peut aider qui que ce soit :)

Je vois que Vous êtes a la recherche de quelqu'un pour la base de la base. Mon tuto pourrait peut-être faire l'affaire, même si ça reste très sommaire (je n'attend pas du lecteur qu'il comprenne en profondeur le fonctionnement de python. Etant donné ma cible, les élève de classe préparatoire, je ne m'attend pas a ce qu'il lisent par passion de l'informatique, je limite donc au maximum tout ce que est trop technique…)

+1 -0

Mon tuto pourrait peut-être faire l'affaire, même si ça reste très sommaire

On recherche surtout des contributeurs pour compléter le tutoriel déjà entamé, dont la source est partagée sur GH.

Après, on peut tout aussi bien envisager d'intégrer dans le parcours un tuto de base alternatif (par exemple, destiné aux gens qui savent déjà programmer, donc qui va squizzer les trois quarts des explications pour aller droit à l'essentiel), à condition que celui-ci couvre le même scope. Mais dans l'absolu, je préférerais qu'on finisse déjà celui destiné aux débutants, quels qu'ils soient et d'où qu'ils viennent, plutôt que de s'éparpiller.

+0 -0

En l’occurrence, le mien ne présuppose d'aucune base, j'ai justement peur que ma première partie ne soit trop simple Pour ce que vous recherchez ^^ (c'est bien plus simple que ce qui est partagé sur GH).

A la limite, j'essaye d'utiliser des exemples un peu scientifique, mais la plupart peuvent se remplacer très simplement par des choses grand publique.

C'est toujours utile de me signaler ici étant-donné que l'on travail sur le même sujet. Après, si je peux aider tant mieux sinon tant pis, rien n’empêche que l'on ait deux cours relativement similaire, mais qui ne visent pas le même publique ;)

+0 -0

Le problème c'est que :

  • On vise vraisemblablement le même public,
  • Ce que tu as écrit n'est pas accessible (donc aucun moyen de comparer pour savoir si ton tutoriel est simple ou trop simple ou plus simple ou quoi que ce soit),
  • On est en train de dupliquer l'effort.

Le but du jeu, ici, c'est vraiment d'écrire un truc à la fois grand public et complet, pour faire une réelle différence par rapport aux autres cours existants sur le sujet ; en particulier celui d'OpenClassrooms qui n'est plus maintenu par son auteur malgré les bêtises et les lourdeurs qu'il contient et qu'on lui signale depuis des années, et celui de G. Swinnen qui est encore aujourd'hui LA référence francophone malgré son caractère scolaire, tout simplement parce que personne n'a eu jusqu'ici l'ambition (ou ne s'est donné les moyens) de faire mieux.

L'idée est donc vraiment de concentrer les efforts pour produire collectivement le meilleur cours dont nous soyons capables, tant sur le plan pédagogique que rédactionnel. Et le seul moyen pour y arriver, c'est de bosser sur une source commune et de façon ouverte.

Enfin, je t'encourage à te joindre à nous, tout simplement parce que tu pourrais faire gagner du temps à tout le monde (et en gagner toi-même), et travailler sur un projet qui finira très certainement par toucher un public beaucoup plus large que n'importe quel cours isolé. Par exemple, rien ne t'empêche d'écrire une partie spécifiquement adressée aux prépas maths (ta seconde partie) qu'on pourrait inclure dans ce graphe. Tu auras sûrement des gens prêts à t'aider pour ça !

+3 -0

Je tient a préciser (je pense que c'est important) que je suis loin d'être un expert du python. J'ai appris assez jeune a programmer, donc je comprend très bien la "syntaxe commune a beaucoup de langage", a savoir les condition, les boucle, les fonctions, les types de données… bref les bases. Je n'ai en revanche aucune connaissance plus avancé que cela en python, que j'ai appris spécifiquement pour mes cours de prépa.

Je ne vois aucun inconvénient a rendre publique mon travail actuel en passant mon tutoriel en bêta, histoire que vous puissiez jeter un œil et voir si ça convient, mais il est très jeune…

Je suis bien sur partant pour collaborer si on arrive a trouver un moyen de faire correspondre nos deux projets ! :)

+0 -0

Je tient a préciser (je pense que c'est important) que je suis loin d'être un expert du python.

D'où l'intérêt de bosser en équipe avec des gens qui auront peut-être plus d'expertise que toi sur certains détails, et qui t'aideront à améliorer tes cours. Tu y gagneras même toi-même en expertise au passage : c'est tout bénef !

+0 -0

J'ai activé la bêta que vous pourrez retrouver ici. La partie sur l'installation n'a pas grand intérêt et doit être retravaillé. Pour le reste, ça doit être plein de faute de français, mais le fond me convient (même si ce sera surement modifié suite au retour des lecteurs ;) )

+0 -0

En effet, ça se recoupe beaucoup avec ce que j'ai déjà écrit (et ça s'arrête au même endroit), mis à part que je suis beaucoup plus rentré dans le détail parce que c'est important à mes yeux qu'un débutant ait une bonne intuition de ce qu'il est en train de faire, intuition qu'il faut susciter chez lui activement si on ne veut pas qu'il pense mal (les intuitions erronées qu'on traîne depuis le début de l'apprentissage, ce sont les plus difficiles à corriger par la suite, mes années de d'entraide quotidienne sur le forum python de feu-SdZ m'auront au moins appris ça). Je pense que tu pourrais facilement contribuer en poursuivant le cours de base (cours-python3), en allant droit à l'essentiel comme tu l'as déjà fait, quitte à ce que l'on vienne broder/détailler/harmoniser derrière toi.

PS : Typiquement, un point essentiel qu'à mes yeux un débutant en Python devrait avoir en tête dès le départ, c'est que tout ce qu'il manipule est un objet. Ça désacralise la notion d'objet (il le découvrira en détail au fur et à mesure : c'est suffisant au départ si pour lui un objet c'est juste un truc, tant qu'il est au courant que tout est plus ou moins le même genre de truc dans ce langage), tout en amenant l'apprenant à imaginer de lui-même comment ça peut se passer derrière (les références, etc.).

+1 -0

Je dois bien avouer que le cours présent sur GH est vraiment bien fichu

J'ai tendance a vouloir faire des chapitres court et simple car je destine mon cours a un étudiant qui, il faut bien l'avoué, n'a pas que ça a faire. Je désir lui fournir un cours qui se lit vite, qui se lit facilement et qui soit fiable. En informatique, c'est important de comprendre ce qui se passe dans la machine mais j'y préfère souvent l'efficacité immédiate, réussir a faire fonctionner du code et démystifier la programmation bien trop souvent vue comme "la matière compliqué et exigeante dans laquelle quoi qu'on fasse ce sera toujours faux".

Ton cours, lui, vise plus un passionné qui a du temps et prend plaisir a apprendre… Même si il y a des parties que je souhaite volontairement simplifier, Je dois bien avouer qu'il y a certaines choses qui mangent pas de pains et qui enrichiraient clairement mon texte. (ton conseil en est un représentant d'honneur :p )

Ta proposition me parait parfaite. Je continue a ma manière, en vous fournissant tout mes écrits, que vous pourrez enrichir a votre manière afin d'avoir un cours de base digne de ce nom. Ensuite, je pourrais utiliser ce cours de base pour l'adapter ou améliorer le miens qui vise plus particulièrement les étudiants de classe préparatoire. Ça semble bon ? :)

+3 -0

salut à tous,

je passe juste pour saluer et encourager de tout mon possible cette initiative qui est fabuleuse ! Je n'ai clairement pas un niveau suffisant pour écrire un tutoriel quelconque python mais je me porte hautement volontaire pour de la relecture et de la bêta ! C'est en tout cas quelque chose que je vais suivre de très près. :)

+1 -0

Je voudrai juste faire une petite proposition : plutôt que de mettre des adverts du type "il faut avoir lu tel cours pour suivre celui-ci : lien" comme proposé plus haut, ne serait-il pas mieux de donner un lien vers un "plan" de l'ensemble des cours sur python histoire d'éviter l'effet wikipedia(je dois lire ce truc-là avant de passer à la suite de ce cours là. Oui, mais ce truc-là demande d'avoir lu ça aussi. Ah mince je ne me rappelle plus de la première partie du cours que je suivais à la base, etc…) si le cours est trop partitionné ?

Jespar

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte