He leído aquí en P.SE más preguntas en las que se recomienda a los programadores principiantes que elijan Python como su primer lenguaje de programación.
No me malinterpreten, me gusta Python. ¡Me gusta mucho! Pero su filosofía gira en torno a "Aquí todos somos adultos consentidos".
Desde el punto de vista de la experiencia / conocimiento, un programador principiante no es un adulto. Lo que significa que es más fácil dispararse en el pie y adquirir algunos malos hábitos, incluso si sobrevive a la herida.
Estoy pensando que en un lenguaje "más estático" sería más difícil dispararse en el pie, ya que será más restrictivo.
De vuelta a mi pregunta. ¿Por qué se recomienda Python como lenguaje de programación de nivel de entrada?
¿Cuáles son los puntos que lo hacen bueno para enseñar un lenguaje de programación? O ... ¿es preferencia personal del asesor?
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot
- bueno, C y C ++ están estáticamente tipados y te sorprendería muchísimo ver cuántas formas diferentes puedes arrancarte el pie al usarlos ...Respuestas:
En mi opinión, los puntos más destacados que hablan de Python como lenguaje básico son los siguientes:
fuente
El hola mundo en python:
hola mundo en Java:
hola mundo en C:
Agregue tener que hablar sobre la compilación para los otros dos, y Python es mucho más simple. Solo tengo que hablar sobre la única idea que me interesa ver, toda la maquinaria que complica el asunto simplemente desaparece en Python. Puedo esperar hasta que estén listos para hablar sobre módulos, no es necesario apresurarlo para obtener stdio.h para programas simples. Puedo esperar hasta que estén listos para temas como clases sin necesidad de apurarlos para sus primeros programas. Tiene un REPL para perder el tiempo en la línea de comando. Python es muy bueno para ser conceptualmente mínimo. Esto es bueno porque ayuda a los principiantes a centrarse en la tarea en cuestión.
fuente
Ese es un punto de vista inusual.
El consentimiento de los adultos es una parte muy pequeña de la filosofía de Python. Ciertamente no "gira" en torno a eso. Ni siquiera es parte del "Zen de Python" que obtienes si lo haces
import this
en el intérprete.Otras cosas, como "lo explícito es mejor que lo implícito", "lo simple es mejor que lo complejo" y "los recuentos de legibilidad" son mucho más centrales para Python, y muestran por qué Python es un buen primer idioma.
De todos modos, los "adultos que consienten" en realidad solo se trata de la falta de objetos privados en Python. Lo que en sí es, en mi opinión, otra indicación de por qué es bueno para los principiantes: no necesita preocuparse por cosas como las interfaces cuando recién comienza.
fuente
private
campospublic
para piratear? Por cierto, en Python, puede prefijar la propiedad con un guión bajo para que sea privada (aunque no realmente oculta)Hay dos puntos diferentes. Al criar a un niño, ¿debería ponerlo en una burbuja que solo tenga cosas seguras o dejarlo jugar en el patio donde podrían tropezarse y caerse?
Estar dentro de la burbuja es muy restrictivo. Debe escribir su código de una manera muy específica para que se ejecute. Cuando las personas comienzan por primera vez, cualquier cosa que no esté allí para hacer lo que la persona quiere se considera un desperdicio. Esto también puede conducir a "No sé por qué está ahí, pero alguien me dijo que era necesario".
En Python, eso no existe. Si quieres decir "Hola mundo", simplemente
print "Hello World"
. El uso de Python como punto de entrada le permite a alguien comenzar a ejecutar y simplemente escribir el código que necesita para que suceda lo que quiere. Un programador por primera vez no puede comprender el valor de la encapsulación antes de comprender los conceptos básicos de la programación.Además, en programas pequeños, la seguridad de tipos no es un gran problema. Cualquier código que escriba un desarrollador principiante será pequeño y contenido. No es hasta que tenga una base de código más grande, con muchas secciones que use como capas de abstracción y no piense activamente, cuando la seguridad de tipografía muestra que es beneficioso asegurarse de hacer lo que necesita. Cuando todo el código está en el mismo archivo, es más fácil simplemente mirar la función y ver qué hiciste mal.
Otros beneficios:
fuente
Python es un gran lenguaje para principiantes porque simplifica las cosas simples al tiempo que hace posibles cosas lo suficientemente complicadas como para que no se considere un lenguaje de juguete inútil e incluso los programadores avanzados consideran que es la herramienta adecuada para algunos trabajos. Específicamente, las cosas simples incluyen:
Un mínimo absoluto de código repetitivo para programas simples.
Recolección de basura.
Escritura dinámica
Limpia, sintaxis simple.
Compare eso con, por ejemplo, Java o C ++ y la dificultad de explicar todos los conceptos involucrados en un programa "Hola, mundo". Las cosas complicadas incluyen:
Introspección (el equivalente de Python a la reflexión).
Mono remendado.
Las cosas que se pueden hacer con la enorme biblioteca estándar.
Dicho esto, nadie que solo conozca Python es un buen programador porque nadie que solo conozca un idioma o un estilo de lenguaje es un buen programador. Cualquier persona seria acerca de la programación eventualmente debería aprender algo de nivel inferior, solo que no mientras él / ella todavía está tratando de asimilar el control del flujo, la recursividad y otros elementos básicos.
fuente
Veo Python como una buena opción. Por lo general, para la programación de nivel de entrada, desea algo simple pero productivo. Recibir comentarios rápidos apoya tanto la motivación como la velocidad de aprendizaje. Me atrevo a decir que no se trata de aprender el "camino correcto" sino más bien "engancharse y enamorarse de la programación de por vida". El resto vendrá muy bien más tarde a través de la experiencia, educación secundaria, lo que sea.
fuente
En mi humilde opinión, enseñar a las personas a codificar en idiomas "seguros" es una muy mala idea. La gente asume que todo es fácil y solo piensa en agregar capas y capas de código. Y perder cualquier posibilidad de poder depurar / solucionar problemas cuando surjan.
Los buenos programadores deben saber absolutamente C / C ++ o incluso ensamblar. Y su mentalidad tiene que venir de ese lado también. Y no: "Oh, GC, hace Magic (tm), somos geniales, y por qué C ++ no tiene GC, es estúpido". actitud.
fuente
Para un programador principiante, la falta de tipos estáticos es una característica, ¡no un error!
Al aprender a programar, incluso las cosas más obvias pueden ser difíciles de entender. Los sistemas de tipo dinámico son muy simples y se apartan de los temas más urgentes en un curso introductorio, como la modularización, el flujo de control, etc.
También hay algunas ventajas conceptuales para la escritura dinámica en un entorno educativo:
Los tipos están asociados con valores, no con variables. Esto podría decirse que es más intuitivo, ya que refleja la razón por la que los programas realmente fallan.
Los mensajes de error son mucho más inmediatos y concretos. En Python, obtienes un hermoso seguimiento de la pila y un mensaje que indica lo que realmente salió mal. En un lenguaje de tipos estáticos se obtiene una advertencia del compilador diciendo lo que sería ir mal.
Los estudiantes que trabajan con un compilador solo pueden trabajar en programas que entienden completamente, para evitar un error de compilación que no puedan resolver.
La comprobación de errores en tiempo de ejecución le permite ejecutar programas incompletos. Esto permite más programas incrementales en los que el estudiante puede primero preocuparse por hacer que el inicio del programa sea correcto y solo luego ver qué sucede.
Algunos conceptos importantes, como el polimorfismo paramétrico y la tipificación de pato, son gratuitos en un lenguaje dinámico, pero requieren sistemas de tipos más complejos en un lenguaje estático.
Finalmente, aunque todavía tiene que manejar la misma complejidad, no obtiene todos los beneficios de la escritura estática al comenzar a programar:
Los programas para principiantes son pequeños y no tienen muchas rutas de código (por lo que no debe preocuparse demasiado por los errores de tipo en los bits de código a los que rara vez se accede)
Los programas Begginer no usan tanto interfaces y funciones de alto nivel, por lo que tampoco hay mucho que ganar en el departamento de "usar el sistema de tipos para diseñar el programa".
fuente
Hay uno muy, muy , muy cosa importante sobre Python para los programadores principiantes que todos parecen haber pasado por alto: forzar una sangría válida.
Como algunos de los otros comentaristas, enseñé a principiantes durante algunos años. Era inquietantemente común ver cosas como esta:
Ahora imagine esta horrible inconsistencia sobre unas cien líneas de código. Para algunos estudiantes, la totalidad de todos sus proyectos se veían así.
No tengo idea de cómo lograron hacerlo, y nunca les molestó. Cada vez que pregunté, su respuesta fue algo así como "Bueno, no importa porque el compilador lo resolverá". Incluso cuando les muestro un error obvio al corregir la sangría, todavía nunca consiguieron una pista.
En Python, este tipo de sangría es simplemente inválido. Se ven obligados a usar algo que al menos sea legible, incluso si es un poco inconsistente. Les da un hábito que, con suerte, continuará cuando eventualmente aprendan algún otro idioma.
fuente
Python es un excelente primer idioma por la mayoría de las razones mencionadas anteriormente. En particular, un requisito de un primer idioma es una curva de aprendizaje suave, que tiene Python. No tiene que saber todo sobre las clases, por ejemplo, para comenzar. A este respecto, es un poco como el Basic en el que muchos de nosotros comenzamos.
Una cosa que no se ha destacado hasta ahora es que muchos idiomas tienen una curva de aprendizaje suave, pero rápidamente se topan con una pared de ladrillos al intentar hacer cosas más avanzadas. Old-school Basic es un buen ejemplo de esto. Con Python puede entrar en algunas cosas muy avanzadas antes de sentir que algún otro idioma podría ser una mejor opción.
En ese momento, un principiante puede comprender más acerca de las opciones y las compensaciones, y está listo para C / C ++, Java, Assembler, Prolog, Lisp, etc. En realidad, Lisp podría ser un buen primer idioma también, aunque es bastante austero. !
fuente
El problema clave con Python como primer idioma son la tipificación dinámica y la falta de declaración de variables. En mi humilde opinión, son el único problema importante con el idioma.
La simple adición de una línea que dice que solo voy a almacenar una cadena en la variable foo permite al programador, el entorno de desarrollo, el lenguaje (y para el "código profesional", el pobre tonto que tiene que quedarse frío y apoyarlo después) trabajar juntos. Para desarrolladores normales y principiantes, especialmente no tiene sentido usar una variable para más de un tipo. Está bastante bien en las raras ocasiones en que tiene sentido usar un tipo var / objeto explícito que permita la escritura dinámica.
fuente