Sugerencias de qué? Tutorials básicos? Avanzados? Ideas para proyectos?
Yo creo que la mejor forma de aprender cualquier cosa es mediante retos prácticos, que te impulsen a buscar una solución y por tanto a aprender. Y después revisión de cómo lo han hecho (o harían) otros. Esas plataformas que ponen "rompecabezas" de programación me parecen bastante adecuadas, mientras no tengas un proyecto real
El sitio realpython.com me parece una excelente fuente de tutoriales medios/avanzados para cuando quieras aprender algún aspecto concreto (iteradores, multihilo, frameworks web, etc.) Tienen montones y todos muy buenos. Casi el problema es aclararse de por dónde empezar o qué mirar.
@abulafia Empecemos por la pregunta más básica. Python3 o Python2, he leído demasiadas cosas referentes a dicho tema. La verdad que prefiero ir a por lo nuevo. Pero dado que yo aprendí el Python2 en la Universidad, no se si la diferencia sea tan abrumadora.
Hubo una época en la que se recomendaba Python2 porque muchas de sus librerías más importantes no funcionaban con python3. Ya no es el caso. Todas han sido portadas. Y las nuevas ya no funcionan con python2
además se ha anunciado el fin del soporte a python2 para el 2020. No más actualizaciones ni siquiera de seguridad
lo más importante con la que ya puedes ir tirando sin problemas es recordar tan solo tres o cuatro cosas:
1) print es una función. Requiere paréntesis print("Hola")
2) input() retorna siempre cadenas, y por tanto equivale al viejo raw_input() que ya no existe en python3
3) range() no devuelve una lista, sino un generador, y por tanto equivale al viejo xrange() que ya no existe
y con eso ya puedes portar la mayoría de tu código, probablemente.
Si además hacías entrada/salida a disco o a red, debes tener en cuenta una cuarta cosa:
4) En python3 las cadenas son unicode. No existe el viejo tipo Unicode. Sin embargo lo que lees/escribes en disco o red han de ser cadenas de bytes. Es necesaria la conversión explícita . Por ejemplo: "Esto es una cadena Unicode. ñññ".encode("utf-8") para convertirla a bytes, o bien recibido_de_la_red.decode("utf-8") para convertirlo a cadena
Y ya que vas a tirar por python3, ve directamente si puedes a la última versión (3.7) que tiene cosas guays como las f-strings, las dataclasses, los diccionarios que conservan el orden de inserción, las primitivas async/await y una mejora de rendimiento general
Vamos, que puedo asumir que prácticamente estas haciendo un "reboot" de tu aprendizaje Python. En ese caso Python3 también tiene ventajas. Es más coherente en su diseño
También tiene lo de los "type hints", que es una cosa que no he usado mucho porque no soy yo muy fan de los lenguajes tipados. Pero si vienes de java igual te gusta
@MauricioContreras Volviendo a mi consejo de "aprender haciendo", puedes empezar por aqui: codechalleng.es/bites
no los hice, pero echando un vistazo me ha parecido que están al nivel ideal para empezar. Y cada "reto" te servirá para ir aprendiendo (o recordando) un aspecto del lenguaje. Y es para Python3, claro, como casi todo hoy dia
@abulafia En realidad mis raíces son bastante más antiguas que Java, empecé con Basic en D.O.S., luego Fortran, Pascal y terminé dando el paso a Visual Basic. Me enganché rápido con VB5. Y hacía maravillas con Excel usando las VBA. Luego aprendí a programar en serio cuando Java anunciaba con bombos y platillos Java 2.
Tu historia es similar a la mía. Yo empecé con BASIC en Spectrum, después ensamblador del z80, después pascal, C, C++ y python, y ahí me quedé :-) A veces me veo obligado a hacer cosas en Java, pero lo odio. JavaScript también me parece un lío tremendo de paquetes, pero he tenido que aprenderlo también. Tengo un ojo puesto en otros lenguajes que me gustaría aprender como C#, Swift, Kotlin o incluso Go o Rust
Lisp o Haskell ni me los planteo. Demasiado abstractos para mi mente procedural.
@abulafia lío tremendo de paquetes XD. Yo programo con Javascript, mucho. Pero jamás en mi vida hice nada serio con JQuery. Lo detesté desde el principio, fue la razón por la cual dejé de un lado Javascript por un tiempo y me dediqué a C#. Ahora, con ES6, y la muerte casi segura de JQuery, he vuelto a JS con todo el ánimo del mundo, tanto que ya C# lo veo ajeno. XD
@abulafia XDDD, claro, cuando tienes que realizar cosas muy complejas, vas a tener una cantidad de dependencias que se vuelven inmanejables, y luego todo se puede romper al tener que actualizar alguna. Pero eso sucede con cualquier lenguaje, unos antes otros después. Lamentablemente en JS eso sucede muy rápido. Y es que todo es una carrera de frameworks.
A mi lo que me gusta de python es lo de "batteries included". Su biblioteca estándar trae montones de utilidades que hacen que no necesites módulos externos para la mayoría de las cosas habituales.
sólo si lo vas a usar en contextos específicos (servidor web, machine learning, procesamiento matricial, etc) necesitarás módulos adicionales, pero incluso ahí la cosa es bastante estable. Instalando los "sospechosos habituales" (numpy, pandas, matplotlib) ya puedes hacer de todo.
No es para almas sensibles... y aunque los ejemplos usan python creo que se puede (no) entender igualmente aunque vengas de otros lenguajes, con tal de que admitan funciones que retornen funciones.
@MauricioContreras You will learn nothing practically useful in this tutorial. No packaging. No tools. No libraries. No deployment. No magic Python programming techniques. And certainly learn nothing you would ever want to apply to a real project.