Pregunta Trayectoria de progresión de Python: de aprendiz a gurú


He estado aprendiendo, trabajando y jugando con Python durante un año y medio ahora. Como un biólogo que lentamente está pasando a la bioinformática, este lenguaje ha sido el centro de todas las principales contribuciones que he hecho en el laboratorio. Más o menos me enamoré de la forma en que Python me permite expresar hermosas soluciones y también con la semántica del lenguaje que permite un flujo tan natural de los pensamientos a un código viable.

Lo que me gustaría saber es su respuesta a un tipo de pregunta que rara vez he visto en este u otros foros. Esta pregunta me parece central para cualquier persona en el camino a la mejora de Python, pero quién se pregunta cuáles deberían ser sus próximos pasos.

Permítanme resumir lo que NO quiero preguntar primero;)

  • No quiero saber cómo aprender RÁPIDAMENTE Python
  • Tampoco quiero saber la mejor manera de familiarizarme con el idioma
  • Finalmente, no quiero conocer el enfoque de "un truco que lo hace todo".

Lo que sí quiero saber sobre tu opinión es:

¿Cuáles son los pasos que USTED recomendaría a un funcionario de Python, desde el aprendizaje hasta el estado del gurú (no dude en parar donde lo indique su experiencia), para que MEJORA CONSTANTEMENTE, convirtiéndose en un mejor y mejor codificador de Python, paso a paso. Algunas de las personas en SO casi parecen dignas de adoración por su destreza en Python, por favor ilumínanos :)

El tipo de respuestas que me gustaría (pero siéntete libre de sorprender a los lectores: P), está formateado más o menos así:

  • Lea esto (por ejemplo: tutorial de Python), preste atención a ese tipo de detalles
  • Código por tanto tiempo / problemas / líneas de código
  • Luego, lea esto (por ejemplo: este o aquel libro), pero esta vez, preste atención a esto.
  • Abordar algunos problemas de la vida real
  • Luego, proceda a leer Y.
  • Asegúrate de comprender estos conceptos
  • Código para X time
  • Vuelve a lo básico y sigue o ...
  • (tú entiendes :)

Realmente me importa saber su opinión sobre a qué se debe prestar atención exactamente, en varias etapas, para progresar CONSTANTEMENTE (con los debidos esfuerzos, por supuesto). Si proviene de un campo de especialización específico, analice el camino que considere apropiado en este campo.

EDITAR: Gracias a su gran contribución, ¡estoy de vuelta en la pista de mejora de Python! ¡Realmente lo aprecio!


659


origen


Respuestas:


Pensé que el proceso de dominio de Python fue algo así como:

  1. Descubrir lista de comprensiones
  2. Descubrir generadores
  3. Incorporar mapa, reducir, filtro, iter, rango, xrange a menudo en tu código
  4. Descubrir Decoradores
  5. Escribir funciones recursivas, mucho
  6. Descubrir itertools y functools
  7. Leer Real World Haskell (leer gratis en línea)
  8. Reescribe todo tu antiguo código de Python con toneladas de funciones de orden superior, recursión y otras cosas.
  9. Molesta a tus compañeros de cubículo cada vez que te presenten con una clase de Python. Afirma que podría ser "mejor" implementado como un diccionario más algunas funciones. Abraza la programación funcional.
  10. Redescubre el Estrategia patrón y luego todas esas cosas del código imperativo que intentaste olvidar tan duro después de Haskell.
  11. Encuentra un equilibrio.

471



Una buena forma de ampliar su conocimiento de Python es profundiza en el código fuente de las bibliotecas, plataformas y marcos que ya utilizas.

Por ejemplo, si está construyendo un sitio en Django, muchas preguntas que podrían arruinarle pueden ser respondidas mirando cómo Django implementa la característica en cuestión.

De esta manera continuarás recoger nuevos modismos, estilos de codificación y trucos de Python. (Algunos serán buenos y otros malos).

Y cuando ves algo Pythony que no entiendes en la fuente, saltar al canal de IRC #python y encontrarás muchos "abogados de idiomas" dispuestos a explicarte.

Una acumulación de estas pequeñas aclaraciones a lo largo de los años conduce a una comprensión mucho más profunda del lenguaje y de todos sus pormenores.


108



Comprender (más profundamente) los tipos de datos de Python y sus roles con respecto a la memoria mgmt

Como algunos de ustedes en la comunidad saben, Enseño cursos de Python, los más populares son el curso integral de Introducción + Intermedio, así como un curso "avanzado" que introduce una variedad de áreas de desarrollo de aplicaciones.

Muy a menudo, me hacen una pregunta bastante similar a "¿Debería tomar su introducción o curso avanzado? Ya he estado programando Python durante 1-2 años, y creo que la introducción es demasiado simple para mí, así que les gusta saltar directamente al avanzado ... qué curso  ¿recomendar?"

Para responder a su pregunta, investigo para ver qué tan fuertes son en esta área, no es que realmente sea la mejor manera de medir si están listos para un curso avanzado, sino para ver qué tan bien su conocimiento básico es de los objetos de Python y modelo de memoria, que es una causa de muchos Errores de Python escritos por aquellos que no son solo principiantes sino aquellos que han ido más allá de eso.

Para hacer esto, les señalo esta simple pregunta de prueba de 2 partes: Ex1: x=42; y=x; x+=1; print x,y Ex2: x=[1,2,3];y=x;x[0]=4;print x,y

Muchas veces, pueden obtener la salida, pero el por qué es más difícil y mucho más importante que una respuesta ... Pondría el producto como un 20% de la respuesta, mientras que el "por qué" recibe un 80% de crédito. Si no pueden obtener el por qué, independientemente de la experiencia de Python que tengan, siempre guiaré a la gente al curso completo de intro + intermedio porque dedico una conferencia sobre objetos y gestión de la memoria hasta el punto en que debería poder responder con la salida y el porqué con suficiente confianza. (El hecho de que conozca la sintaxis de Python después de 1-2 años no lo prepara para ir más allá de una etiqueta de "principiante" hasta que tenga una mejor comprensión de cómo funciona Python bajo las cubiertas).

Una consulta posterior que requiera una respuesta similar es aún más difícil, por ejemplo,

Ejemplo 3

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

Los siguientes temas que recomiendo son entender bien el recuento de referencias, aprender qué significa "internamiento" (pero no necesariamente usarlo), aprender sobre copias superficiales y profundas (como en el Ejemplo 3 anterior) y, finalmente, las interrelaciones entre los diversos tipos y construcciones en el lenguaje, es decir listas vs. tuplas, dictados vs. conjuntos, listas de comprensiones vs. expresiones de generadores, iteradores vs. generadores, etc .; sin embargo, todas esas otras sugerencias son otra publicación para otro momento. Espero que esto ayude mientras tanto! :-)

PD. Estoy de acuerdo con las otras respuestas para tener más intimidad con la introspección y estudiar el código fuente de otros proyectos y agregar un fuerte "+1" a ambas sugerencias.

pps. Gran pregunta por cierto. Desearía ser lo suficientemente inteligente al principio para haber preguntado algo como esto, pero eso fue hace mucho tiempo, y ahora estoy tratando de ayudar a otros con mis muchos años de programación de Python a tiempo completo.


92



Eche un vistazo al ensayo de Peter Norvig sobre convertirse en un programador maestro en 10 años: http://norvig.com/21-days.html. Apuesto que es cierto para cualquier idioma.


67



Comprenda la introspección

  • escribe un dir() equivalente
  • escribe un type() equivalente
  • averiguar cómo "mono-parche"
  • utilizar el dis módulo para ver cómo funcionan diversos constructos de lenguaje

Hacer estas cosas

  • darle un buen conocimiento teórico sobre cómo se implementa Python
  • darte una buena experiencia práctica en programación de bajo nivel
  • darle una buena sensación intuitiva para estructuras de datos 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



Te daré el consejo más simple y efectivo que pueda darte cualquiera: código.

Solo puedes ser mejor usando un lenguaje (lo que implica entenderlo) codificación. Tienes que disfrutar activamente de la codificación, inspirarte, hacer preguntas y encontrar respuestas por ti mismo.

¿Tienes una hora de sobra? Escriba el código que invertirá una cadena y descubra la solución más óptima. Una tarde libre? ¿Por qué no intentar raspar la web? Lee el código de otras personas. Mira cómo hacen las cosas. Pregúntate qué harías.

Cuando estoy aburrido en mi computadora, abro mi IDE y Code-storm. Anoto ideas que suenan interesantes y desafiantes. Un acortador de URL? Claro, puedo hacer eso. ¡Oh, aprendí cómo convertir números de una base a otra como un efecto secundario!

Esto es válido sea cual sea tu nivel de habilidad. Nunca dejas de aprender Al codificar activamente en su tiempo libre, con poco esfuerzo adicional llegará a comprender el lenguaje y, finalmente, a convertirse en un gurú. Desarrollarás conocimiento y código reutilizable y memorizarás expresiones idiomáticas.


41