¿Por qué es tan difícil aprender Python?

Soy un programador con muchos, muchos años de experiencia en C y C ++; Alguna experiencia en lenguaje ensamblador; y fui una de las primeras personas en escribir un programa en Visual Basic cuando se desarrolló por primera vez; y experiencia en muchos otros idiomas, incluidos Pascal, Fortran, Java y otros.

También he pasado gran parte del año pasado aprendiendo los puntos finos de Python. Y debo informar que aunque Python tiene la reputación de ser un “lenguaje fácil”, hay situaciones en las que esto no es así. En pocas palabras, algunas cosas que requieren mucho código se pueden hacer con solo unas pocas líneas de código en Python; Pero algunas cosas que son fáciles en otros idiomas son difíciles de hacer en Python, al menos no son obvias.

Para mencionar algunos detalles:

  • Aunque tener que declarar variables puede parecer un trabajo extra, al menos el proceso de declaración de variables deja en claro sus programas. Python no tiene ninguna declaración de variable, en términos de cómo funciona en otros idiomas. En su lugar, en Python, se enlaza un nombre a un valor de datos. Esto lo cambia todo.
  • Por ejemplo, la declaración “x = 1” está bien, porque vincula el nombre x con un valor, 1. ¿Pero es legal “x = y”? La respuesta es: es legal si y ya ha estado vinculado a un valor, pero es ilegal de lo contrario. Esto tiene sentido solo cuando estás acostumbrado a ello.
  • Puede pensar que está usando una variable global en Python, cuando en realidad creó una variable local involuntariamente porque la vinculó a un nuevo valor dentro de una función. Este es un error sutil pero común que puede causarle muchas, muchas horas de depuración a menos que sea un usuario experimentado de Python.
  • No hay paso por referencia ni paso por valor en Python de la forma en que funciona en otros lenguajes como C, Basic, Java, etc. En vez de eso, debes entender la diferencia entre objetos mutables e inmutables, y Cómo eso afecta las cosas. Esto requiere una nueva mentalidad.
  • Y, por supuesto, la sangría precisa tiene una importancia inmensa en Python. Esta es una salida radical de otros idiomas, especialmente la familia C, en la que todos los espacios en blanco son iguales. Pero en Python, tener inadvertidamente caracteres de tabulación en tu espacio en blanco puede causar grandes dolores de cabeza. Lo único seguro es desactivar la capacidad del editor de texto para producir pestañas.

En resumen, si se sienta a aprender Python pensando que va a hacer “la forma Python de hacer las cosas” simplemente cambiando la sintaxis de C o Basic e intercambiando el equivalente de Python, tendrá algunas sorpresas desagradables.

No estoy diciendo que Python sea ilógico o que no haya buenas razones para la forma en que todo funciona en Python. Lo que estoy diciendo es que Python, aunque parece un código de programación indirecto, en realidad se basa en un enfoque que replantea la forma en que todo funciona en un lenguaje de programación.

Irónicamente, si eres completamente nuevo en la programación, es posible que tengas menos tendencia a cometer errores que un programador experimentado que está acostumbrado a hacer las cosas a la manera “C” o “Básica”.

En el lado positivo, es cierto que algunas cosas son mucho, mucho más fáciles de hacer en Python. UNA VEZ que entiendes los aspectos fundamentales. Sin embargo, vale la pena dominar Python, ya que Python tiene características integradas que le permiten hacer lo que requeriría muchas veces la cantidad de código en otros idiomas. Algunas de estas características incluyen: enteros “infinitos”, diccionarios de datos incorporados, listas superflexibles, manipuladores de listas súper potentes y funciones de fácil acceso a archivos. Poner todos estos elementos juntos puede permitirte hacer cosas increíbles en solo una página o dos de código.

Si recién estás comenzando con la programación, Python puede ser difícil … pero eso es principalmente porque la programación es difícil.

La primera vez que decidí enseñarme a programar, intenté comenzar con Python. Utilicé un libro para principiantes (creo que era un “Head First”). Podría concatenar cadenas y realizar operaciones matemáticas básicas en IDLE sin ningún problema, pero no pude comprender cómo Python me permitiría construir algo útil y me rendí.

Unos meses más tarde, comencé de nuevo, pero esta vez con C. Definitivamente fue un desafío, pero las estrictas convenciones me obligaron a pensar detenidamente sobre los conceptos de programación que estaba tratando de implementar, lo que a su vez me ayudó a entenderlos más profundamente. nivel.

No me quedé con C por mucho tiempo, pero lo poco que aprendí me permitió aprender PHP y JavaScript con relativa rapidez. Cuando finalmente regresé a Python (a través de Django) en realidad fue tan fácil y conveniente como la gente dijo que debería ser. Ahora lo uso todos los días para todo, desde el desarrollo web hasta el análisis de datos.

Entonces, mi consejo es comenzar con un lenguaje diferente que no abstraiga tanto de lo que está sucediendo “debajo del capó”. Conozca los conceptos fundamentales de la programación y el “panorama general” del desarrollo de aplicaciones … luego vuelva a Python con un nuevo reconocimiento por su comodidad y facilidad de uso.

La dificultad de aprender un idioma depende de su punto de partida con la programación en general.

Si eres un principiante, cualquier lenguaje de programación será difícil porque estás tratando de entender las construcciones lógicas que conforman los programas al mismo tiempo que intentas aprender la sintaxis necesaria para crear esas construcciones.

La mayoría de las personas que dicen que un lenguaje de programación es “fácil” de aprender son generalmente aquellos que ya han internalizado esas construcciones. Entonces, elegir un nuevo lenguaje de programación es realmente aprender una nueva sintaxis que cubre todos los mismos conceptos básicos.

Por mi propia experiencia reciente, encontré a Python no “difícil” per se, sino un poco inusual. Lo digo principalmente al hecho de que Python es un lenguaje sensible al espacio en blanco donde, en lugar de usar delimitadores explícitos (think {}) para marcar el principio y el final de los cierres, usan sangría.

Esto es bastante exclusivo de Python y sin una comprensión profunda de las reglas de sangrado puede hacer que el proceso de aprendizaje parezca “difícil”.

Sintaxis y semántica de Python.

Pero si es la estructura básica de programación con la que está teniendo problemas, no es realmente un problema de Python.

Supongo que este es su primer idioma, que ha leído a todos los que recomiendan Python porque es fácil y ahora lo encuentran difícil.

Con toda probabilidad, entonces estás haciendo uno o todos los siguientes:

  1. Tratar de demostrarle a tu computadora (bueno, a ti mismo en realidad), que tienes razón al recibir un error.
  2. Realizar cambios rápidos y ad hoc cuando se recibe un error, sin perder el tiempo suficiente para comprender e identificar el error.
  3. Copie y pegue código de otro lugar (por ejemplo, ejemplos de cursos) y vaya desde allí en lugar de tratar de entender lo suficiente como para escribir la pieza usted mismo. (ocasionalmente, esto es culpa del curso)

Los dos primeros le impedirán escribir código de trabajo, pero lo que es peor, le impedirán aprender. Este último te hará “avanzar” más rápido de lo que deberías.

Las soluciones son afortunadamente simples, aunque no fáciles:

  1. No discuta con una computadora, será más obstinado que usted y más correcto que usted. Si dice que estás equivocado, estás equivocado. Así que entrá en una mentalidad de averiguar por qué se equivoca, no por qué tiene razón. (porque no lo estás hasta que se ejecuta sin error y con los resultados esperados)
  2. Tómese su tiempo para leer el error, entienda lo que significa (busque en Google;)), identifique dónde ocurre y cómo puede ocurrir allí. Si salta a la línea y comienza una “reparación” ad-hoc, es probable que necesite más iteraciones. Pero peor aún, si encuentra una solución por casualidad, en realidad no habrá aprendido nada.
  3. No copie y pegue nada que pudiera haber pensado de usted mismo. Claro, saber cómo buscar en Google y cómo aprovechar el trabajo de otras personas es importante cuando se trata de ser un desarrollador productivo. Pero no es cuando se trata de aprender.

Si está tratando de aprender y aplicar prácticamente temas avanzados como metaclases, entonces puede tener una idea de lo extraño que se define el alcance, etc.

Pero si tienes un problema con cosas básicas, entonces eso significa que tu enfoque hacia el aprendizaje de python no funciona, no es difícil, ya que por definición, ¡las cosas básicas son fáciles!

Tienes que encontrar un enfoque que funcione para ti, yo personalmente traté de aprender de “A byte of python”: no me importa. “Sumérgete en Python”: ¿por qué querría hacer eso? “Udacity” regresó cuando tenían los cursos adecuados: está bien, pero vas demasiado rápido sin explicar el panorama general. “MIT 6.00.1x” fue el curso que hizo que todo funcionara. Tenía la cantidad correcta de teoría y aplicación para mi gusto con ejercicios desafiantes.

Para resumir, si su enfoque / método actual no funciona, cámbielo.

Lo primero es lo primero: las cosas no son intrínsecamente fáciles, especialmente en computación: pueden ser muy diferentes al modelo mental que tenemos de lo que es un lenguaje de programación y cómo se comporta, y primero tenemos que generalizar ese modelo para acomode el nuevo … o simplemente no lo use si es demasiado extraño, y no le proporciona ninguna ventaja concreta.

Si ya está familiarizado con FORTRAN y BASIC, entonces es probable que una de las características sintácticas y no de procedimiento de Python sea difícil para usted:

  • Definición de bloques de código a través de sangría : esto puede ser complicado, especialmente si mezcla tabulaciones y espacios; una pestaña se puede contar solo como un nivel de sangría, mientras que otro código utilizará 2 o más espacios (3 o 4 son típicos) para un nivel de sangría léxica. Solo necesita un espacio (o una pestaña) para definir el siguiente nivel; la convención es usar 2, 3 o 4 espacios, pero una vez que lo hayas definido, no puedes usar espacios mixtos para el mismo nivel .
  • Las clases, funciones, listas, conjuntos, diccionarios , especialmente los posteriores, pueden tener un comportamiento inesperado si no aprendes sus peculiaridades. Por ejemplo, el resultado de este código es probablemente inesperado:

En [1]: def f (x = [], y = 1):
…: X.append (y)
…: Volver x
…:

En [2]: f ()
Fuera [2]: [1]

En [3]: f ()
Fuera [3]: [1, 1]

En [4]: ​​f ()
Fuera [4]: ​​[1, 1, 1]

En [5]: f ()
Fuera [5]: [1, 1, 1, 1] “`

  • Pero tiene sentido, si piensas que la lista vacía se evaluó en el momento de la definición, y no se crea para cada invocación de `f`.
  • Ser capaz de pasar instancias y funciones de clase como valores sin emitir un valor. Por ejemplo, este código:

En [1]: def f (x, y):
…: Devuelve x + y
…:

En [2]: def g (x, y):
…: Retorno x / 2. + y
…:

En [3]: def h (x, y):
…: Volver x / 2. + y / 2.
…:

En [4]: ​​def functor (func, my_list):
…: Return reduce (func, my_list)
…:

En [5]: funtor (f, [1,2,3])
Fuera [5]: 6

En [6]: functor (g, [1,2,3])
Fuera [6]: 4.25

En [7]: funtor (h, [1,2,3])
Fuera [7]: 2.25

  • muestra cómo se puede pasar una función como argumento y tener otra función (`functor`) que proporciona resultados diferentes utilizando una función como parámetro.
  • Otras cosas, como listas, dictámenes de comprensión frente a generadores: puede generar listas o diccionarios, que son objetos indexables con una sintaxis similar; pero si pensó que podría generar una tupla con `(x para x en el rango (0,100))`, recibirá un generador en su lugar; para obtener una tupla, tendría que usar `tupla ([x para x en el rango (0,100)])`

Si está experimentando ese tipo de problemas, intente aprender las formas de Pythonic, y en ningún momento utilizará Python nativo, en lugar de Python similar a FORTRAN.

La programación en Python no es más difícil que aprender programación en general. Python, por su parte, tiene una sintaxis muy simple con algunas reglas, y el código como resultado es generalmente muy fácil de leer. Pasarás mucho más tiempo aprendiendo bibliotecas que el idioma en sí.

Python también es un estado de ánimo. Ellos acuñaron el término “pythonic” para representar líneas de código que resuelven problemas de una manera que se asemeja a la “mentalidad” de python. La mentalidad de python es simple: simplicidad. Si te encuentras haciendo muchas operaciones complicadas, esto es generalmente una señal de que “lo estás haciendo mal” y que hay una forma más eficiente en Python. Por ejemplo:

C / C ++:
para (int i = 0; i <10, i ++)
{
printf (“% d \ n”, i);
}

Considerando que en python (nivel de introducción):
para i en rango (10):
imprimir i

Algunas de las características que realmente amo, que simplifican enormemente la programación, son listas de comprensión:

real_items = [x para x en some_list si x no es None]
processing_items_result = [proceso (elemento) para el elemento en real_items]

(Te dejaré que averigües qué significan estos)

En resumen, si estás empezando es un gran lenguaje porque es probablemente el más fácil.

Python es ahora el lenguaje de programación más creciente en el mundo según el desbordamiento de pila. Creo que Python es el lenguaje más fácil que cualquiera puede aprender, incluso si no tienen experiencia previa en programación. Es un lenguaje de alto nivel y se ha creado como el lenguaje de programación en inglés. Si tiene dificultades para aprender Python, a continuación describo algunos artículos relevantes que aumentarán sus esfuerzos para aprender Python.

Aprenda Python de una manera fácil: una visión general completa

No puedo explicar la razón por la que es difícil para usted, pero ¿por qué no probar otro idioma? El otro idioma que quiero decir es un lenguaje funcional (Cojure, Racket, etc.).

En este momento, algunos de mis amigos están empezando a aprender a programar, y algunos de ellos aprenden los lenguajes imperativos y apesta a la programación funcional, y los otros aprenden rápido en funcional, pero lento en imperativo. No sé por qué, pero sucede.

Para mí, comencé a aprender C cuando estaba en la escuela secundaria y apestaba, y cuatro años después comencé a aprender Clojure. Primero, fue algo raro, pero luego realmente se ajustó a mi cerebro.

Para concluir, ¿por qué no probar otro idioma?

Desde mi punto de vista, porque las herramientas de introspección de Python le dan algunos nombres, pero no la información que necesito para averiguar cómo usar el objeto que estoy inspeccionando. En Ruby es bastante fácil preguntar a un objeto sobre sus métodos (obj.methods) y sus atributos de datos (obj.instance_variables). En Python, uno puede pasar por la sopa _dict__ y dir (), ¿pero la gente de WFT? La respuesta a esta pregunta de StackOverflow me indica por qué es difícil entender las cosas en Python (que es mi sinónimo de “difícil de aprender”): ¿cuál es la mayor diferencia entre dir y __dict__ en python?

Aprende python en 20 minutos.

Hay dos cosas que aprender cuando empiezas a programar. Sí, tienes que aprender el lenguaje de programación; pero también tiene que aprender a pensar conceptualmente durante la programación (independientemente del lenguaje de programación que esté aprendiendo). Es mucho más probable que sus problemas provengan de la segunda parte que de Python. ¿Tiene un programador experimentado y reflexivo que le ayuda con los conceptos? Eso lo hará mucho más fácil.

Si usted es la persona que encuentra Python más difícil que Fortran, BASIC y Pascal, ¿tal vez sea el aspecto orientado a objetos el que está causando problemas?

No puedo garantizar que encuentre este lenguaje más simple, pero podría …
Lua (lenguaje de programación)

También tenga en cuenta que las versiones modernas de Fortran, BASIC y Pascal también permiten la programación orientada a objetos, por lo que podría ser algo a considerar.

Puede que se le enseñe mal, o el curso en el que se encuentra no le conviene.

Prueba este curso por Zed Shaw

Aprende Python por el camino difícil

Lo encontré increíblemente instructivo y entretenido.

Buena suerte con Python!