Question Chemin de progression Python - De l'apprenti au gourou


J'ai appris, travaillé et joué avec Python pendant un an et demi maintenant. En tant que biologiste faisant lentement le tour de la bio-informatique, ce langage a été au cœur de toutes les contributions majeures que j'ai faites au laboratoire. Je suis plus ou moins tombé amoureux de la façon dont Python me permet d'exprimer de belles solutions et aussi de la sémantique du langage qui permet un tel flux naturel des pensées au code réalisable.

Ce que j'aimerais savoir, c'est votre réponse à une question que j'ai rarement vue dans ce forum ou dans d'autres. Cette question me semble centrale pour quiconque sur le chemin de l'amélioration de Python mais qui se demande quelles devraient être ses prochaines étapes.

Permettez-moi de résumer ce que je ne veux pas demander d'abord;)

  • Je ne veux pas savoir comment apprendre rapidement Python
  • Je ne veux pas non plus trouver la meilleure façon de me familiariser avec la langue
  • Enfin, je ne veux pas connaître l'approche «un truc qui fait tout».

Ce que je veux savoir sur vous, c'est:

Quelles sont les étapes que vous recommanderiez à un compagnon Python, de l'apprentissage au statut de gourou (n'hésitez pas à arrêter là où votre expertise le dicte), afin que l'on s'améliore constamment, devenant un meilleur et meilleur codeur Python, une étape à la fois. Certaines personnes sur SO semblent presque dignes de vénération pour leurs prouesses en Python, merci de nous éclairer :)

Le genre de réponses que j'apprécierais (mais n'hésitez pas à surprendre le lectorat: P), est formaté plus ou moins comme ceci:

  • Lisez ceci (par exemple: tutoriel python), faites attention à ce genre de détails
  • Code pour tant de fois / problèmes / lignes de code
  • Ensuite, lisez ceci (par exemple: tel ou tel livre), mais cette fois, faites attention à cela
  • S'attaquer à quelques problèmes de la vie réelle
  • Ensuite, continuez à lire Y.
  • Assurez-vous de saisir ces concepts
  • Code pour l'heure X
  • Revenez à telle ou telle base ou allez plus loin ...
  • (tu obtiens le point :)

Je tiens vraiment à connaître votre opinion sur ce à quoi il faut prêter attention, à différentes étapes, afin de progresser CONSTAMMENT (avec les efforts nécessaires, bien sûr). Si vous venez d'un domaine d'expertise spécifique, discutez du chemin que vous voyez approprié dans ce domaine.

EDIT: Merci à votre grande contribution, je suis de retour sur la piste d'amélioration Python! J'apprécie beaucoup!


659


origine


Réponses:


Je pensais que le processus de maîtrise Python était quelque chose comme:

  1. Découvrir listes de compréhension
  2. Découvrir générateurs
  3. Intégrer carte, réduire, filtre, iter, gamme, xrange souvent dans votre code
  4. Découvrir Décorateurs
  5. Écrire des fonctions récursives, beaucoup
  6. Découvrir itertools et functools
  7. Lis Le monde réel Haskell (lire gratuitement en ligne)
  8. Réécrivez tout votre ancien code Python avec des tonnes de fonctions d'ordre supérieur, de récursion, et autres joyeusetés.
  9. Agitez vos compagnons de cabine chaque fois qu'ils vous présentent une classe Python. Réclamez qu'il pourrait être «mieux» implémenté comme un dictionnaire plus quelques fonctions. Embrasser la programmation fonctionnelle.
  10. Redécouvrez le Stratégie motif, puis toutes ces choses du code impératif que vous avez essayé d'oublier après Haskell.
  11. Trouver un équilibre.

471



Un bon moyen de faire progresser votre connaissance de Python est de creuser dans le code source des bibliothèques, des plates-formes et des cadres que vous utilisez déjà.

Par exemple si vous construisez un site sur DjangoVous pouvez répondre à de nombreuses questions qui peuvent vous soulever en regardant comment Django implémente la fonctionnalité en question.

De cette façon, vous continuerez à ramasser de nouveaux idiomes, styles de codage et astuces Python. (Certains seront bons et d'autres seront mauvais.)

Et quand vous voyez quelque chose Pythony que vous ne comprenez pas dans la source, hop sur le canal IRC #python et vous trouverez de nombreux «juristes» heureux d'expliquer.

Une accumulation de ces petites clarifications au cours des années conduit à une compréhension beaucoup plus profonde de la langue et de tous ses tenants et aboutissants.


108



Comprendre (plus profondément) les types de données de Python et leurs rôles en ce qui concerne la gestion de la mémoire

Comme certains d'entre vous dans la communauté le savent, J'enseigne les cours Python, les plus populaires étant le cours complet Intro + Intermediate ainsi qu'un cours «avancé» qui introduit une variété de domaines de développement d'applications.

Assez souvent, on me pose une question assez similaire à «Devrais-je prendre votre intro ou cours avancé? J'ai déjà programmé Python pour 1-2 ans, et je pense que l'intro est trop simple pour moi, donc je voudrais aime sauter directement à l'avance ... quel cours serait toi recommander?"

Pour répondre à leur question, je cherche à voir à quel point ils sont forts dans ce domaine - pas que c'est vraiment la meilleure façon de mesurer s'ils sont prêts pour un cours avancé, mais de voir à quel point leurs connaissances de base sont des objets Python. modèle de mémoire, qui est une cause de beaucoup Bugs Python écrits par ceux qui ne sont pas seulement des débutants, mais ceux qui sont allés au-delà de cela.

Pour ce faire, je les pointe vers cette simple question en deux parties: Ex1: x=42; y=x; x+=1; print x,y Ex2: x=[1,2,3];y=x;x[0]=4;print x,y

Plusieurs fois, ils sont en mesure d'obtenir la sortie, mais le Pourquoi est plus difficile et beaucoup plus important d'une réponse ... Je pèserais la sortie comme 20% de la réponse tandis que le "pourquoi" obtient 80% de crédit. S'ils ne peuvent pas comprendre le pourquoi, quelle que soit l'expérience Python, je dirigerai toujours les gens vers le cours complet intro + intermédiaire parce que je passe une conférence sur les objets et la gestion de la mémoire au point où vous devriez pouvoir répondre avec le sortie et le pourquoi avec une confiance suffisante. (Juste parce que vous connaissez la syntaxe de Python après 1-2 ans ne vous rend pas prêt à aller au-delà d'un label "débutant" jusqu'à ce que vous ayez une meilleure compréhension de la façon dont Python fonctionne sous les couvertures.)

Une enquête qui nécessite une réponse similaire est encore plus difficile, par exemple,

Exemple 3

x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y

Les prochains sujets que je recommande sont de bien comprendre le comptage des références, d'apprendre ce que signifie «interner» (mais pas nécessairement l'utiliser), d'apprendre les copies superficielles et profondes (comme dans l'exemple 3 ci-dessus) et enfin les interrelations entre les différents types. construit dans le langage, c'est-à-dire les listes contre les tuples, les dicts contre les ensembles, les compréhensions de liste contre les expressions de générateur, les itérateurs contre les générateurs, etc .; Cependant, toutes ces autres suggestions sont un autre message pour une autre fois. J'espère que cela aide entre-temps! :-)

ps. Je suis d'accord avec les autres réponses pour avoir plus d'intimité avec l'introspection ainsi que d'étudier le code source d'autres projets et ajouter un fort "+1" aux deux suggestions!

pps. Bonne question BTW. Je voudrais avoir été assez intelligent au début pour avoir demandé quelque chose comme ça, mais c'était il y a longtemps, et maintenant j'essaie d'aider les autres avec mes nombreuses années de programmation Python à plein temps !!


92



Découvrez l'essai de Peter Norvig sur devenir un programmeur maître dans 10 ans: http://norvig.com/21-days.html. Je parie que c'est vrai pour n'importe quelle langue.


67



Comprendre l'introspection

  • écrire un dir() équivalent
  • écrire un type() équivalent
  • comprendre comment "patch de singe"
  • Utilisez le dis module pour voir comment les différentes constructions de langage fonctionnent

Faire ces choses sera

  • vous donner de bonnes connaissances théoriques sur la façon dont python est implémenté
  • vous donner une bonne expérience pratique dans la programmation de bas niveau
  • vous donne une bonne idée intuitive des structures de données python

59



def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?

48



Je vais vous donner le conseil le plus simple et le plus efficace que quelqu'un puisse vous donner: code.

Vous ne pouvez que mieux utiliser une langue (ce qui implique de la comprendre) en codage. Vous devez activement apprécier le codage, être inspiré, poser des questions et trouver des réponses par vous-même.

Vous avez une heure à perdre? Écrire du code qui va inverser une chaîne, et trouver la solution la plus optimale. Une soirée gratuite? Pourquoi ne pas essayer le web-scraping. Lisez le code d'autres peuples. Voyez comment ils font les choses. Demandez-vous ce que vous feriez.

Quand je m'ennuie sur mon ordinateur, j'ouvre mon IDE et mon code-tempête. Je note des idées qui semblent intéressantes et stimulantes. Un raccourcisseur d'URL? Bien sûr, je peux le faire. Oh, j'ai appris comment convertir des nombres d'une base à l'autre comme effet secondaire!

Ceci est valable quel que soit votre niveau de compétence. Vous n'arrêtez jamais d'apprendre. En codant activement pendant votre temps libre, vous arriverez, avec peu d'effort supplémentaire, à comprendre la langue et, finalement, à devenir un gourou. Vous allez construire des connaissances et du code réutilisable et mémoriser des idiomes.


41