He estado aprendiendo, trabajando y jugando con Python durante un año y medio. Como biólogo que lentamente se está volcando a la bioinformática, este lenguaje ha sido el núcleo de todas las principales contribuciones que he hecho en el laboratorio. Me enamoré más o menos de la forma en que Python me permite expresar hermosas soluciones y también de la semántica del lenguaje que permite un flujo tan natural de los pensamientos al 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 hacia la mejora de Python, pero que 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 encontrar la mejor manera de familiarizarme con el idioma.
- Finalmente, no quiero conocer el enfoque de 'un truco que lo hace todo'.
De lo que sí quiero saber tu opinión es sobre:
¿Cuáles son los pasos que USTED recomendaría a un viajero de Python, desde el aprendizaje hasta el estado de gurú (siéntase libre de detenerse donde su experiencia lo dicte), para que uno MEJORE 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 disfrutaría (pero no dude en sorprender a los lectores: P), está formateado más o menos de esta manera:
- Lea esto (por ejemplo: tutorial de Python), preste atención a ese tipo de detalles
- Código para tantas veces / problemas / líneas de código
- Luego, lea esto (por ejemplo: este o aquel libro), pero esta vez, preste atención a esto
- Afronte algunos problemas de la vida real
- Luego, proceda a leer Y.
- Asegúrese de comprender estos conceptos
- Código para el tiempo X
- Vuelva a lo básico o avance más para ...
- (tú entiendes :)
Realmente me importa saber su opinión sobre a qué se debe prestar atención, en varias etapas, para progresar CONSTANTEMENTE (con el debido esfuerzo, por supuesto). Si proviene de un campo específico de especialización, discuta la ruta que ve según corresponda en este campo.
EDITAR: Gracias a su gran aporte, ¡estoy de vuelta en la pista de mejora de Python! ¡Realmente lo aprecio!
Una buena manera de ampliar su conocimiento de Python es profundizar en el código fuente de las bibliotecas, plataformas y marcos que ya usa.
Por ejemplo, si está creando un sitio en Django , se pueden responder muchas preguntas que podrían confundirlo al observar cómo Django implementa la función en cuestión.
De esta manera, continuarás aprendiendo nuevos modismos, estilos de codificación y trucos de Python . (Algunos serán buenos y otros serán malos).
Y cuando vea algo de Pythony que no entienda en la fuente, diríjase al canal #python IRC y encontrará muchos "abogados de idiomas" felices de explicar.
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 todos sus entresijos.
fuente
Comprender (más profundamente) los tipos de datos de Python y sus roles con respecto a la gestión de memoria
Como algunos de ustedes en la comunidad saben, enseño cursos de Python , los más populares son el curso completo Intro + 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: "¿Debo tomar tu 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 como para saltar directamente a la avanzada ... ¿Qué curso se recomienda?"
Para responder a su pregunta, investigo para ver qué tan fuertes son en esta área, no es que sea realmente la mejor manera de medir si están listos para un curso avanzado, sino para ver qué tan bien son sus conocimientos básicos de los objetos de Python y modelo de memoria, que es la causa de muchos errores de Python escritos por aquellos que no solo son principiantes sino también aquellos que han ido más allá.
Para hacer esto, les señalo esta simple pregunta de 2 partes:
Muchas veces, son capaces de obtener el resultado, pero el por qué es más difícil y mucho más importante de una respuesta ... Yo consideraría el resultado como el 20% de la respuesta, mientras que el "por qué" obtiene el 80% de crédito. Si no pueden entender por qué, independientemente de la experiencia de Python que tengan, siempre guiaré a las personas al curso completo de introducción + intermedio porque paso una conferencia sobre objetos y administración de memoria hasta el punto en el que debería poder responder con el salida y el por qué 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 Python funciona debajo de las cubiertas).
Una consulta posterior que requiera una respuesta similar es aún más difícil, por ejemplo,
Ejemplo 3
Los siguientes temas que recomiendo son comprender bien el conteo de referencias, aprender lo que 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 frente a tuplas, dictados frente a conjuntos, listas de comprensión frente a expresiones generadoras, iteradores frente a 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 intimar más con la introspección, así como para 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 Python a tiempo completo!
fuente
print
no es una declaración.Echa un vistazo al ensayo de Peter Norvig sobre cómo convertirte en un maestro programador en 10 años: http://norvig.com/21-days.html . Apuesto a que es cierto para cualquier idioma.
fuente
Comprender la introspección
dir()
equivalentetype()
equivalentedis
módulo para ver cómo funcionan las diversas construcciones de lenguajeHacer estas cosas lo hará
fuente
type()
equivalente" que sería muy difícil si toma la especificación completa de metaclases detype
!fuente
Te daré el consejo más simple y efectivo que creo que cualquiera podría darte: código .
Solo puedes ser mejor usando un lenguaje (lo que implica entenderlo) codificando . Tienes que disfrutar activamente de la codificación, inspirarte, hacer preguntas y encontrar respuestas por ti mismo.
¿Tienes una hora libre? Escriba código que revierta una cadena y descubra la solución más óptima. ¿Una tarde libre? ¿Por qué no probar un poco de raspado de la web? Lea 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 tormenta de códigos. 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 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 idioma y, en última instancia, se convertirá en un gurú. Desarrollará conocimiento y código reutilizable y memorizará expresiones idiomáticas.
fuente
Si estás usando Python para la ciencia (lo que parece que eres), parte de eso será aprender y comprender las bibliotecas científicas, para mí estas serían
Saber cómo utilizar las bibliotecas adecuadas y vectorizar su código es esencial para la informática científica.
Quería agregar que manejar grandes conjuntos de datos numéricos en formas pitónicas comunes (enfoques orientados a objetos, listas, iteradores) puede ser extremadamente ineficiente. En computación científica, puede ser necesario estructurar su código de manera que difiera drásticamente de la forma en que la mayoría de los codificadores de python convencionales abordan los datos.
fuente
Google lanzó recientemente una clase de Python en línea ("clase" como en "un curso de estudio").
http://code.google.com/edu/languages/google-python-class/
Sé que esto no responde a su pregunta completa, ¡pero creo que es un excelente lugar para comenzar!
fuente
Descargar Twisted y mira el código fuente. Emplean algunas técnicas bastante avanzadas.
fuente
Comprenda a fondo todos los tipos y estructuras de datos
Para cada tipo y estructura, escriba una serie de programas de demostración que ejerciten cada aspecto del tipo o estructura de datos. Si haces esto, podría valer la pena escribir notas en el blog sobre cada uno ... ¡podría ser útil para mucha gente!
fuente
Aprendí Python primero solo durante un verano solo haciendo el tutorial en el sitio de Python (lamentablemente, parece que ya no puedo encontrar eso, así que no puedo publicar un enlace).
Más tarde, Python me fue enseñado en uno de mis cursos de primer año en la universidad. En el verano que siguió, practiqué con PythonChallenge y con problemas de Google Code Jam . La solución de estos problemas ayuda desde una perspectiva algorítmica, así como desde la perspectiva de aprender qué puede hacer Python y cómo manipularlo para sacar el máximo provecho de Python.
Por razones similares, he oído que el código de golf también funciona, pero nunca lo he probado por mí mismo.
fuente
Algoritmos de aprendizaje / matemáticas / archivo IO / optimización Pythonic
Esto no te hará gurú, pero para empezar, intenta resolver los problemas del Proyecto Euler. Los primeros 50 más o menos no deberían gravarte si tienes buenas matemáticas en la escuela secundaria y sabes cómo buscar en Google. Cuando resuelves uno, entras en el foro donde puedes ver las soluciones de otras personas que te enseñarán aún más. Sin embargo, sea decente y no publique sus soluciones, ya que la idea es alentar a las personas a que lo resuelvan por sí mismas.
Obligarse a trabajar en Python será implacable si utiliza algoritmos de fuerza bruta. Esto le enseñará cómo diseñar grandes conjuntos de datos en la memoria y acceder a ellos de manera eficiente con las funciones de lenguaje rápido como los diccionarios.
Al hacer esto yo mismo aprendí:
Y también muy importante
Todo esto debería ser relevante para la bioinformática
Es cierto que no aprendí sobre las características OOP de Python de esa experiencia.
fuente
¿Has visto el libro " Programación de bioinformática usando Python "? Parece que eres un miembro exacto de su grupo de enfoque.
fuente
Ya tiene mucho material de lectura, pero si puede manejar más, le recomiendo que aprenda sobre la evolución de Python leyendo las Propuestas de mejora de Python, especialmente las PEP "Terminadas" y las "Diferidas, Abandonadas, Retiradas y Rechazadas" PEP
Al ver cómo ha cambiado el lenguaje, las decisiones que se tomaron y sus fundamentos, absorberá la filosofía de Python y comprenderá cómo surge la "Python idiomática".
http://www.python.org/dev/peps/
fuente
Intente http://challenge.greplin.com/ usando Python
fuente
Enseñar a alguien más que está comenzando a aprender Python siempre es una excelente manera de aclarar sus ideas y, a veces, generalmente recibo muchas preguntas interesantes de los estudiantes que me obligan a repensar cosas conceptuales sobre Python.
fuente
No es exactamente lo que estás pidiendo, pero creo que es un buen consejo.
Aprende otro idioma, no importa demasiado cuál. Cada idioma tiene sus propias ideas y convenciones de las que puedes aprender. Aprenda sobre las diferencias en los idiomas y, lo
why
que es más importante , son diferentes. Pruebe un lenguaje puramente funcional como Haskell y vea algunos de los beneficios (y desafíos) de las funciones sin efectos secundarios. Vea cómo puede aplicar algunas de las cosas que aprende de otros idiomas a Python.fuente
Recomiendo comenzar con algo que lo obligue a explorar el poder expresivo de la sintaxis. Python permite muchas formas diferentes de escribir la misma funcionalidad, pero a menudo existe un enfoque único, más elegante y rápido. Si está acostumbrado a las expresiones idiomáticas de otros idiomas, es posible que nunca encuentre o acepte estas mejores formas. Pasé un fin de semana caminando por los primeros 20 problemas del Proyecto Euler y creé una aplicación web sencilla con Django en Google App Engine. Esto solo lo llevará de aprendiz a novato, tal vez, pero luego puede continuar creando aplicaciones web algo más avanzadas y resolver problemas más avanzados del Proyecto Euler. Después de unos meses volví y resolví los primeros 20 problemas de EP desde cero en una hora en lugar de un fin de semana.
fuente