¿Por qué se recomienda Python como lenguaje de programación de nivel de entrada? [cerrado]

16

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?

JohnDoDo
fuente
17
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 ...
Péter Török
@ Péter Török: Sí, y te quita todo el pie (c ++: D). Dije "más estático" tratando de evitar las guerras de llamas por algo como ... ¡No sé ... Java?!?! ... que todo el mundo parece odiar, ya que se piensa en la escuela / universidades y la gente tiene algunos se asusta ...
JohnDoDo
1
Creo que C ++ es un mejor lenguaje inicial, porque me ha ayudado a comprender mejor las cosas en otros idiomas.
systemovich
1
Tengo mis fortalezas con Python como lenguaje de inicio después de TAing una clase de programación del primer semestre que lo usó. Los estudiantes a menudo no entendían los 'tipos' y las dependencias de espacios en blanco los mataron. También les fue difícil entender los objetos con ese "auto" que hacía referencia a los negocios de OO. Tiene sus méritos, pero definitivamente tiene sus detractores también.
Plataforma
2
@MahmoudHossam Estoy de acuerdo. Solo estaba destacando algunos de los puntos conflictivos de mi experiencia. Java, C #, Lisp, etc.todos tienen sus problemas. Esos fueron solo los problemas principales que encontré al enseñar Python a los programadores por primera vez.
Plataforma

Respuestas:

30

En mi opinión, los puntos más destacados que hablan de Python como lenguaje básico son los siguientes:

  • tiene una curva de aprendizaje superficial : pasar de nada a "Hola mundo" es mucho más rápido que en la mayoría de los otros idiomas
  • está intuitivo : la sintaxis fue diseñada para seguir el principio de la menor sorpresa, y es muy consistente en general (desafortunadamente, las bibliotecas estándar no siempre siguen esta consistencia)
  • Requiere muy poca información : un típico "Hola mundo" es una línea de código, y se pueden escribir programas simples sin ruido de fondo adicional que deba explicarse (como palabras clave de declaración de función, declaraciones de importación, construcciones de clase, directivas de preprocesador, etc.)
  • hay excelentes, sencillas herramientas para trabajar con código python, especialmente el intérprete interactivo; no necesita aprender un sistema de compilación, IDE, editor de texto especial o cualquier otra cosa para comenzar a usar python: todo lo que necesita es un símbolo del sistema, un editor interactivo y un editor de texto simple.
  • utiliza la escritura dinámica , pero a diferencia de muchos otros lenguajes de escritura dinámica, los tipos son transparentes y las dificultades relacionadas con los tipos son raras
tdammers
fuente
Solo quiero enfatizar la intuición del lenguaje. He visto a personas con experiencia en programación 0 aprender rápidamente Python. Esto se debe en gran medida a que la sintaxis / gramática está muy cerca del inglés hablado.
Stephen Gross
12
En el último punto: las personas a menudo mezclan la escritura dinámica con la escritura débil. Python se escribe dinámicamente (tipos asociados a valores en lugar de variables) pero también se escribe fuertemente (por lo que los programas se bloquean en lugar de tragarse silenciosamente los errores de conversión)
hugomg
@missingo I second - Eagle eyes you have;)
yati sagade
@missingno: Sé la diferencia. Un ejemplo de tipos no transparentes son las claves de matriz de PHP: las matrices se comportan de manera diferente para las claves enteras que para cualquier otro tipo; Si agrega dos enteros suficientemente grandes, puede terminar con un flotante. Y ese es solo un ejemplo: especialmente PHP y javascript (los dos lenguajes dinámicos más populares en el desarrollo web) están llenos de oscuros casos extremos de escritura.
tdammers
A juzgar por su comentario, ¿por "los tipos son transparentes" quiere decir que las reglas que rigen los tipos son fáciles de entender? ¿Qué pretendías decir exactamente?
phant0m
8

El hola mundo en python:

 print "Hi there"

hola mundo en Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

hola mundo en C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

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.

metal de piedra
fuente
15
Olvidó el "retorno 0"; declaración en su implementación C :) ¡Advertencia del compilador!
Stephen Gross
2
Es por eso que BASIC existió en primer lugar. 10 IMPRIME "¡Hola, mundo!" 20 FIN Para obtener crédito adicional, el programa Python falla el "¿Dijo 'Hola mundo!'" prueba unitaria :-)
Ross Patterson
3
Lo mismo en F #: printfn "Hello World!". ¡Sí, F # es bueno para principiantes!
Den
7

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 thisen 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.

Daniel Roseman
fuente
1
Sí, pero con respecto a esas partes "privadas", dado que tiene acceso a ellas, es posible que tenga la tentación de hackear algunas soluciones / atajos a su alrededor sin saberlo mejor.
JohnDoDo
@JohnDoDo ¿Qué diferencia hay si, en C # o Java, decidí convertir los privatecampos publicpara piratear? Por cierto, en Python, puede prefijar la propiedad con un guión bajo para que sea privada (aunque no realmente oculta)
OnesimusUnbound
4

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", simplementeprint "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:

  • Muchas bibliotecas que hacen muchas cosas
  • Flexibilidad para enseñar técnicas de programación tanto orientadas a objetos como funcionales sin que parezca que uno se vio obligado a encajar en un lenguaje diseñado para hacer el otro.
muestreador
fuente
3
Contra analogía: enseñarle a tu hijo a no jugar con fuego. 1) Puedes hablar con él, explicarle qué es el fuego y qué hace el fuego, mostrar diapositivas de PowerPoint lo que sea ... o 2) dejarlo jugar con fuego y quemarse. El segundo método es mucho más eficiente. Lo que me interesa es la posibilidad de que pueda incendiar la casa o incluso gustarle y convertirse en un pirómano porque no se tomaron medidas de seguridad. Una especie de situación extrema pero realmente no puede expresarla en palabras.
JohnDoDo
1
@JohnDoDo - Entonces, que se quemen ... ¿es la mejor escuela y quién no se quemó en un partido cuando era niño? No va a matarlo ...
Rook
1
@JohnDoDo: El hecho de que el lenguaje te permita jugar con fuego no significa que el maestro no señale que el fuego es muy peligroso y explica alguna forma de evitarlo. Creo que la otra cosa que te estás perdiendo es que alguien no está vinculado a un idioma. Después de obtener una comprensión básica de la programación, pueden usar un lenguaje diferente para aprender conceptos más grandes (como no quemar el edificio).
unholysampler
3

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.

dsimcha
fuente
2

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.

Mar
fuente
1

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.

Descifrador
fuente
1

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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".

hugomg
fuente
1

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:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

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.

Izkata
fuente
0

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. !

rzzzwilson
fuente
-1

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.

JohnC
fuente