Cela fait maintenant un an et demi que j'apprends, travaille et joue avec Python. En tant que biologiste se tournant lentement vers la bio-informatique, cette langue a été au cœur de toutes les contributions majeures que j'ai apportées 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 flux si naturel des pensées au code exploitable.
Ce que j'aimerais savoir, c'est votre réponse à une sorte de question que j'ai rarement vue sur ce forum ou sur d'autres. Cette question me semble centrale pour toute personne sur la voie 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 en premier;)
- Je ne veux pas savoir apprendre RAPIDEMENT Python
- Je ne veux pas non plus découvrir la meilleure façon de se familiariser avec la langue
- Enfin, je ne veux pas connaître l'approche «une astuce qui fait tout».
Ce que je veux savoir sur votre opinion, c'est:
Quelles sont les étapes que VOUS recommanderiez à un compagnon Python, de l'apprentissage au statut de gourou (n'hésitez pas à vous arrêter là où votre expertise le dicte), afin que l'on AMÉLIORE CONSTAMMENT, devenant un meilleur codeur Python, une étape à la fois. Certaines personnes sur SO semblent presque dignes d'adoration pour leurs prouesses en Python, veuillez nous éclairer :)
Le genre de réponses que j'apprécierais (mais n'hésitez pas à surprendre le lectorat: P), est plus ou moins formaté 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 à ce
- S'attaquer à quelques problèmes réels
- Passez ensuite à la lecture de Y.
- Assurez-vous de bien comprendre ces concepts
- Code pour l'heure X
- Revenez à telle ou telle base ou avancez vers ...
- (tu obtiens le point :)
Je tiens vraiment à connaître votre opinion sur ce à quoi il convient de 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 de la voie que vous voyez appropriée dans ce domaine.
EDIT: Grâce à votre excellente contribution, je suis de retour sur la piste d'amélioration de Python! J'apprécie beaucoup!
Un bon moyen d'approfondir vos connaissances sur Python consiste à fouiller dans le code source des bibliothèques, plates-formes et frameworks que vous utilisez déjà.
Par exemple, si vous créez un site sur Django , vous pouvez répondre à de nombreuses questions susceptibles de vous tromper en regardant comment Django implémente la fonctionnalité en question.
De cette façon, vous continuerez à choisir de nouveaux idiomes, styles de codage et astuces Python . (Certains seront bons et d'autres mauvais.)
Et lorsque vous voyez quelque chose de Pythony que vous ne comprenez pas dans la source, passez au canal IRC #python et vous trouverez de nombreux "juristes du langage" heureux de vous expliquer.
Une accumulation de ces petites clarifications au fil des ans conduit à une compréhension beaucoup plus profonde de la langue et de tous ses tenants et aboutissants.
la source
Comprendre (plus en profondeur) 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 le savent, j'enseigne des cours Python , les plus populaires étant le cours complet Intro + Intermédiaire ainsi qu'un cours "avancé" qui présente une variété de domaines de développement d'applications.
Très souvent, on me pose une question assez similaire à: "Dois-je suivre votre cours d'introduction ou avancé? Je programme déjà Python depuis 1-2 ans et je pense que celui-ci est trop simple pour moi, donc je souhaitez passer directement à l'avancé ... quel cours recommanderiez- vous ? "
Pour répondre à leur question, je sonde pour voir à quel point ils sont forts dans ce domaine - non pas que ce soit vraiment la meilleure façon de mesurer s'ils sont prêts pour un cours avancé, mais pour voir à quel point leurs connaissances de base sont des objets de Python et modèle de mémoire, qui est à l'origine de nombreux bogues Python écrits par ceux qui ne sont pas seulement des débutants mais aussi ceux qui sont allés au-delà.
Pour ce faire, je les pointe vers cette simple question en 2 parties:
Plusieurs fois, ils sont capables d'obtenir la sortie, mais le pourquoi est plus difficile et beaucoup plus important d'une réponse ... Je peserais 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 leur expérience Python, je guiderai toujours les gens vers le cours d'introduction + intermédiaire complet 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. (Ce n'est pas parce que vous connaissez la syntaxe de Python après 1-2 ans que vous êtes prêt à aller au-delà d'une étiquette "débutant" jusqu'à ce que vous ayez une bien meilleure compréhension de la façon dont Python fonctionne sous les couvertures.)
Une enquête ultérieure nécessitant une réponse similaire est encore plus difficile, par exemple,
Exemple 3
Les sujets suivants que je recommande sont de bien comprendre le comptage des références, d'apprendre ce que signifie "interner" (mais pas nécessairement de l'utiliser), de se renseigner sur les copies superficielles et profondes (comme dans l'exemple 3 ci-dessus), et enfin, les interrelations entre les différents types et constructions dans le langage, c.-à-d. listes vs tuples, dicts vs sets, list comprehensions vs expressions générateur, itérateurs vs générateurs, etc .; mais toutes ces autres suggestions sont un autre article pour une autre fois. J'espère que cela vous aidera en attendant! :-)
ps. Je suis d'accord avec les autres réponses pour devenir plus intime avec l'introspection ainsi que pour étudier le code source d'autres projets et ajouter un fort "+1" aux deux suggestions!
pps. Grande question BTW. J'aimerais être 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 !!
la source
print
n'est pas une déclaration.Découvrez l'essai de Peter Norvig sur comment devenir maître programmeur dans 10 ans: http://norvig.com/21-days.html . Je parierais que cela vaut pour n'importe quelle langue.
la source
Comprendre l'introspection
dir()
équivalenttype()
équivalentdis
module pour voir comment fonctionnent les différentes constructions de langageFaire ces choses
la source
type()
équivalent" qui serait très difficile si vous prenez la spécification métaclassique complète detype
!la source
Je vais vous donner le conseil le plus simple et le plus efficace, je pense que n'importe qui pourrait vous donner: du code .
Vous ne pouvez être meilleur dans l'utilisation d'un langage (ce qui implique de le comprendre) qu'en codant . Vous devez apprécier activement le codage, être inspiré, poser des questions et trouver des réponses par vous-même.
Vous avez une heure à perdre? Écrivez du code qui inversera une chaîne et découvrez la solution la plus optimale. Une soirée libre? Pourquoi ne pas essayer le web-scraping. Lisez le code des autres peuples. Voyez comment ils font les choses. Demandez-vous ce que vous feriez.
Quand je m'ennuie devant mon ordinateur, j'ouvre mon IDE et mon code-storm. 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 à convertir des nombres d'une base à une 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 comprendrez la langue et, en fin de compte, deviendrez un gourou. Vous accumulerez des connaissances et du code réutilisable et mémoriserez des idiomes.
la source
Si vous utilisez et utilisez python pour la science (ce qui semble être le cas), cela consistera à apprendre et à comprendre les bibliothèques scientifiques, pour moi, ce serait
savoir utiliser les bonnes bibliothèques et vectoriser votre code est essentiel pour le calcul scientifique.
Je voulais ajouter que la gestion de grands ensembles de données numériques de manière pythonique courante (approches orientées objet, listes, itérateurs) peut être extrêmement inefficace. Dans le calcul scientifique, il peut être nécessaire de structurer votre code de manière radicalement différente de la façon dont la plupart des codeurs python conventionnels abordent les données.
la source
Google vient tout juste de publier une classe Python en ligne ("classe" comme dans "un cours d'étude").
http://code.google.com/edu/languages/google-python-class/
Je sais que cela ne répond pas à votre question complète, mais je pense que c'est un excellent point de départ!
la source
Téléchargez Twisted et regardez le code source. Ils utilisent des techniques assez avancées.
la source
Comprendre parfaitement tous les types de données et structures
Pour chaque type et structure, écrivez une série de programmes de démonstration qui exercent tous les aspects du type ou de la structure de données. Si vous faites cela, il pourrait être utile de bloguer des notes sur chacun d'eux ... cela pourrait être utile à beaucoup de gens!
la source
J'ai d'abord appris le python par moi-même pendant un été juste en faisant le tutoriel sur le site python (malheureusement, je ne semble plus pouvoir le trouver, donc je ne peux pas poster de lien).
Plus tard, le python m'a été enseigné dans l'un de mes cours de première année à l'université. L'été qui a suivi, j'ai pratiqué avec PythonChallenge et avec des problèmes de Google Code Jam . La résolution de ces problèmes aide d'un point de vue algorithmique ainsi que du point de vue de l'apprentissage de ce que Python peut faire ainsi que de la façon de le manipuler pour tirer le meilleur parti de python.
Pour des raisons similaires, j'ai entendu dire que le golf de code fonctionne également, mais je ne l'ai jamais essayé par moi-même.
la source
Algorithmes d'apprentissage / mathématiques / IO de fichiers / optimisation Pythonic
Cela ne vous obtiendra pas de gourou, mais pour commencer, essayez de résoudre les problèmes du projet Euler. Les 50 premières ou plus ne devraient pas vous imposer si vous avez des mathématiques décentes au secondaire et savez comment Google. Lorsque vous en résolvez un, vous accédez au forum où vous pouvez parcourir les solutions d'autres personnes qui vous en apprendront encore plus. Soyez décent cependant et ne publiez pas vos solutions car l'idée est d'encourager les gens à les résoudre eux-mêmes.
Vous forcer à travailler en Python sera impitoyable si vous utilisez des algorithmes de force brute. Cela vous apprendra à disposer de grands ensembles de données en mémoire et à y accéder efficacement avec les fonctionnalités linguistiques rapides telles que les dictionnaires.
En faisant cela moi-même, j'ai appris:
Et aussi très important
Tout cela devrait être pertinent pour la bioinformatique
Certes, je n'ai pas appris les fonctionnalités OOP de Python à partir de cette expérience.
la source
Avez-vous vu le livre " Programmation bioinformatique utilisant Python "? On dirait que vous êtes un membre exact de son groupe de discussion.
la source
Vous avez déjà beaucoup de matériel de lecture, mais si vous pouvez en gérer plus, je vous recommande de vous renseigner sur l'évolution de python en lisant les propositions d'amélioration de Python, en particulier les PEP "finis" et les "différés, abandonnés, retirés et rejetés". PPE.
En voyant comment le langage a changé, les décisions qui ont été prises et leurs justifications, vous absorberez la philosophie de Python et comprendrez comment le "Python idiomatique" se produit.
http://www.python.org/dev/peps/
la source
Essayez http://challenge.greplin.com/ à l' aide de Python
la source
Enseigner à quelqu'un d'autre qui commence à apprendre le Python est toujours un excellent moyen de clarifier vos idées et parfois, j'ai souvent beaucoup de questions intéressantes de la part des étudiants qui m'ont amené à repenser les choses conceptuelles sur Python.
la source
Pas précisément ce que vous demandez, mais je pense que c'est un bon conseil.
Apprendre une autre langue, peu importe laquelle. Chaque langue a ses propres idées et conventions que vous pouvez apprendre. Découvrez les différences dans les langues et, plus important encore,
why
elles sont différentes. Essayez un langage purement fonctionnel comme Haskell et voyez certains des avantages (et défis) des fonctions sans effets secondaires. Découvrez comment appliquer à Python certaines des choses que vous apprenez d'autres langues.la source
Je recommande de commencer par quelque chose qui vous oblige à explorer le pouvoir expressif de la syntaxe. Python permet de nombreuses façons différentes d'écrire la même fonctionnalité, mais il existe souvent une approche unique la plus élégante et la plus rapide. Si vous êtes habitué aux idiomes d'autres langues, vous ne pourriez jamais autrement trouver ou accepter ces meilleures façons. J'ai passé un week-end à parcourir les 20 premiers problèmes de Project Euler et à faire une simple webapp avec Django sur Google App Engine. Cela ne vous mènera peut-être que d'apprenti à novice, mais vous pourrez ensuite continuer à créer des applications Web un peu plus avancées et à résoudre des problèmes de Project Euler plus avancés. Après quelques mois, je suis revenu et j'ai résolu les 20 premiers problèmes d'EP à partir de zéro en une heure au lieu d'un week-end.
la source