Como profesor: elegir un lenguaje de programación adecuado

8

No estoy seguro de si es el lugar correcto para esta pregunta. Perdón si te vas un poco fuera de tema.

Elegir un lenguaje adecuado para el primer curso de programación es una de las cosas más importantes que todo maestro / profesor relacionado debe tener en cuenta; especialmente si los estudiantes son jóvenes o tienen un conocimiento matemático limitado.

Actualmente estoy enseñando a un grupo de jóvenes muy entusiastas (de 16 a 17 años de edad) con un conocimiento medio de matemáticas . Están asistiendo a la escuela secundaria en la clase de décimo grado ahora. Voy a comenzar a enseñar un lenguaje de programación para el próximo semestre.

Son un grupo de estudiantes cuidadosamente seleccionados en toda la ciudad con un nivel extraordinario de creatividad y diligencia, por lo que veo que trabajar con un lenguaje de programación real no sería una tarea difícil para ellos. Por lo tanto, elegir soluciones gráficas simples y arrastrar y soltar como Turtle Art, Scratch y Tynker no se consideran opciones.

Hay algunos factores que deben verificarse antes de tomar una decisión:

  • Simplicidad : la mayoría de ellos probablemente no hayan experimentado ningún tipo de acción de codificación real antes.
  • Simplicidad, una vez más : una de las ideas principales es enseñar a pensar algorítmicamente . Tener un lenguaje sofisticado o apenas sintaxis los desviará del camino.
  • Generalidad : es mejor que el lenguaje no esté diseñado para casos especiales de desarrollo. Tome PHP y MATLAB como ejemplos que están diseñados respectivamente para Desarrollo Web y Cálculo / Modelado.
  • Material objetivo mínimo : No hay programación forzada de OO (como Java). O al menos con la mínima dependencia de los conceptos OO.
  • Plataforma : es importante tener Windows como un entorno de desarrollo compatible, ya que prácticamente todos están en Windows.
  • Fácil de configurar : es mejor tener una forma sencilla de configurar el entorno de desarrollo.
  • Preferencia de la industria : no es un problema grave. Pero debería ser al menos un lenguaje actualmente activo que permita a los estudiantes alcanzar experiencias de desarrollo casi reales.
  • Portabilidad de hardware : es importante (pero no obligatorio) que el lenguaje sea lo suficientemente flexible como para ser utilizado en la programación de hardware. (No estoy hablando de lenguajes de descripción de hardware como Verilog y VHDL). El objetivo es programar hardware más simple basado en procesadores como microprocesadores AVR o interfaz GPIO Raspberry Pi .

quiero saber eso

  1. ¿Hay otros factores que me faltan?
  2. ¿Y qué idiomas sugieres como opciones?
zxcmehran
fuente
2
Para conocer otros criterios que puede faltar, consulte esta pregunta .
David Richerby
1
@DavidRicherby Lo había visto antes de publicar la pregunta y, por supuesto, me ayudó mucho.
zxcmehran
Dale una oportunidad a Lua.
Ankur
1
@zxcmehran Sobre el tema de los paradigmas de programación, me encontré con esto en Wikipedia hoy y pensé que podría ser relevante para su pregunta: Comparación de lenguajes de programación multi-paradigma
tehDorf

Respuestas:

11

¿Mi respuesta? Pitón.

Déjame explicarte abordando todos tus puntos.

  1. Simplicidad . El código de Python se lee como el inglés. En serio, lo simple que es print("Hello World!")
  2. Generalidad . Python se puede utilizar para el desarrollo web (a través de Flask / Django), análisis de datos (a través de. NumPy / Pandas / SciPy), juegos (a través de. PyGame), así como a una multitud de otras tareas debido a la gran cantidad de bibliotecas que existen. son.
  3. Mínimo material objetivo . Puedes hacer algo de OOP en Python pero no es obligatorio.
  4. Plataforma . Python2.7 está en casi todas las distribuciones de Linux y hay muchos videos de YouTube sobre cómo configurarlo en Windows / Mac. En todo caso, puede utilizar el intérprete en línea que ofrece Repl.
  5. Preferencia de la industria . Corrígeme si me equivoco, pero Python siempre ha sido calificado como uno de los idiomas más populares.

En mi experiencia docente, es extremadamente importante asegurarse de que la sintaxis sea lo más fácil posible de escribir y comprender. Para un nuevo programador, puede ser bastante desalentador cuando escribe código solo para ver un mensaje de error (especialmente si no tiene la habilidad de leer un mensaje de error y depurarlo).

Nota al margen, PythonTutor será realmente útil para explicar algunos conceptos importantes de informática / programación.

Lawrence Vo
fuente
Gracias por compartir. Estoy de acuerdo con usted y pienso en Python como una de las mejores opciones.
zxcmehran
1
Hablando de PythonTutor, JetBrains PyCharm Edu también es una buena herramienta para comenzar con python.
zxcmehran
Trabajo en la investigación de lenguajes de programación y creo que los buenos lenguajes de programación de propósito general deben ser mecanografiados estáticamente, pero también creo que Python es un gran lenguaje de aprendizaje, especialmente para estudiantes jóvenes. Hay muchos factores que otros han señalado, pero permítanme decir también esto: en mi experiencia, un principiante necesita ver su programa bloquearse y arder con sus propios ojos. Si el gran mal compilador sigue diciéndole "no puedes hacer esto porque se bloqueará y se quemará", eso es de poca ayuda. Un poco como les dije a mis hijos "no toquen el horno, hace calor".
Andrej Bauer
1
Y nunca subestimes el hecho de que en Python la sangría de bloques hace que la estructura del programa sea evidente. Sólo tener que escribir {y }o beginy enda los bloques de código delimitan es una carga cognitiva significativa en un estudiante principiante. Si piensa lo contrario, cambie al esquema y vea lo que piensa sobre los paréntesis.
Andrej Bauer
También puede programar en python en la frambuesa pi, lo cual es bueno.
heather
10

Antecedentes

Esta pregunta levanta su cabeza fea cada 5 años más o menos en nuestro departamento. Teníamos a Miranda y Pascal hace mucho tiempo, luego teníamos a Haskell, ahora tenemos C porque el departamento de EE decidió enviarnos a sus estudiantes como antes, pero exigió "algo práctico como C" y nuestro liderazgo despiadado no tenía nada mejor que hacer que cumplir.

¿Por qué no alguno de los recomendados anteriormente?

He enseñado algo de esto y he visto a estudiantes salir de esto durante más de 20 años. Lo único que se destacó fue que el lenguaje apenas importa siempre que le permita expresar conceptos fundamentales de computación con la suficiente facilidad y que si no hiciera lo correcto, obtendría buenos mensajes de error, preferiblemente del compilador. Ahí es donde falla Python. Los tipos son importantes! Ahí es donde falla C: ¡los tipos son importantes y el polimorfismo es importante! (Y no, hacer que todo tenga un tipo de vacío no es una solución. Simplemente te mudas a Python Land). Ahí es donde falla Java: los programas no caben en las diapositivas: hay demasiada placa de caldera y verbosidad.

Entonces, personalmente, no iría con ninguna de las respuestas anteriores. Yo iría con Haskell. Está bellamente alineado con las matemáticas. Es más conciso que cualquiera de los otros. Puede centrarse en los elementos esenciales de la computación. Y ghc tiende a producir un código mejor y más rápido que los compiladores de C para los débiles intentos de optimización que presencio cada vez que dejo que los estudiantes usen C.

Pero en serio..

Dicho esto, en mi experiencia, lo más importante es que el maestro realmente conoce el idioma mejor que solo unos pocos cursos en línea. Los primeros idiomas son solo eso, los primeros idiomas. Si sus estudiantes son serios, van a recoger muchos más en el camino. Concéntrese en los conceptos en lugar de la sintaxis.

Kai
fuente
7

Esta pregunta es muy obstinada, en mi opinión. No hay nada que pueda desencadenar una guerra santa como "qué idioma es el mejor para X". Aún así, voy a morder.

  1. ¿Hay otros factores que me faltan?

Primero, le recomendaría que lea lo que Dijkstra dijo sobre la enseñanza . Es antiguo pero aún relevante, posiblemente mucho, mucho más relevante hoy que en el pasado.

En segundo lugar, también recomendaría leer una publicación de blog de Joel Spolsky sobre el mismo tema.

Tercero, y menos importante, mi propio criterio para un primer idioma sería:

  1. Cualquier error de tiempo de ejecución se debe informar con un mensaje de error claro.
  2. Debe ser mecanografiado.
  3. No existe un lenguaje de programación único que pueda hacerle comprender todos los aspectos de programación. Para convertirse en un verdadero programador, uno necesita aprender muchos idiomas, especialmente los radicalmente diferentes.

El punto 1 es muy, muy útil para un principiante. La mayoría de los lenguajes satisfacen eso, con la notable excepción de C y C ++. Si bien creo que C es un lenguaje imprescindible para cualquier programador (ver punto 3), creo que es innecesariamente duro para un principiante. La recolección de basura es un requisito previo para el punto 1.

El punto 2 es el más controvertido. Si bien creo que también se debe aprender a trabajar en un lenguaje sin tipo (nuevamente, punto 3), creo que comenzar con los tipos es más beneficioso. Incluso en un entorno sin tipo, los programadores a menudo piensan qué tipo de datos deben pasarse a una subrutina. Además, detectar errores antes del tiempo de ejecución es bueno.

El punto 2 descarta muchos idiomas. Sin embargo, tenga en cuenta que Python no se descarta: aunque Python no está tipificado, existe el maravilloso proyecto mypy que le permite a uno usar un Python con tipo. Además, Perl6 tiene una tipificación opcional (gradual), por lo que todavía estaría en. TypeScript también agrega tipos a JavaScript. Incluso si se descartan Lisp y Scheme, hay muchos lenguajes de programación funcional tipeados para elegir (Ocaml, Haskell, F #, ...).

El punto 3 también es importante. Uno necesita aprender muchas cosas para ser un buen programador. Desde cosas de bajo nivel (punteros, C) hasta el nivel más alto (recursión, cierres, polimorfismo paramétrico / genéricos, ...), diferentes paradigmas (imperativo, funcional, lógico, ...). Esto no se puede enseñar en un solo curso, por supuesto. Como primer curso, debe allanar el camino hacia el camino completo.

chi
fuente
1

Me gustaría ir con la respuesta de Python, pero también me gustaría recomendar una alternativa: C.

Mi primer lenguaje de programación fue C y en el momento en que lo aprendí realmente lo disfruté. El maestro (y algunos compañeros) habrían tomado Java como primer lenguaje de programación, pero estaba configurado para tomar C. El maestro solía mostrar algunos ejemplos de Python para mostrar los beneficios de un lenguaje de programación más moderno. De todos modos, volviendo al tema:

  • Simplicidad La sintaxis de C es bastante pequeña, pero de vez en cuando es un poco extraña. No está obligado a adoptar el enfoque vudú, pero puede hacerlo.

  • Simplicidad, nuevamente Como resultado de los primeros puntos, los algoritmos pueden implementarse de manera bastante compacta y comprensible. Piensa en Fibonacci o más avanzado en el Knight's Tour.

  • Generalidad Usando C puede implementar lo que desee. También puede usar algunos subsistemas como los lenguajes de script (Lua).

  • El objetivo mínimo Cosas C habla por sí mismo aquí. Debes tener un buen conocimiento de C para implementar cosas OO.

  • Plataforma Cada plataforma principal admite el lenguaje, tome un compilador de su elección y comience a codificar.

  • Fácil de configurar C no necesita un IDE con muchos botones y una gruesa cadena de herramientas. Simplemente tome un archivo make (o un script) y compile su código con algunos comandos. Puede usar un IDE (Codeblocks, ...) si lo desea.

  • Preferencia de la industria Linux, Windows, ...

  • Portabilidad de hardware Funciona bien en microcontroladores AVR o toma Arduino, que también es programable usando el viejo C.


Como alternativa, ¿qué pasa con el desarrollo en una plataforma asequible como Arduino (podría haber mejores alternativas). Puede mostrarles todas las cosas algorítmicas utilizando impresiones stdout simples o puede poner algo de hardware a trabajar. Puede ser beneficioso si el código resultante no solo imprime algo de texto (o imagen, o gui, o cosas ...) sino que también deja que un LED parpadee o algo así. En mi empresa a veces hay cursos para alumnos en los que codifican algunas cosas en una placa Arduino bastante básica y recibimos buenos comentarios de los asistentes.


Creo que está haciendo las preguntas correctas y le deseo todo lo mejor para enseñar a sus alumnos.

maxik
fuente
El único punto negativo de C y C ++ es que el codificador necesita comprender algunas de las estructuras de sintaxis avanzadas (como punteros) para poder construir algo que parece una acción real. En C Family, no puede alcanzar GUI sofisticadas o poder mágico de red sin comprender las partes difíciles del lenguaje. Como estudiante, sería aburrido si todos los esfuerzos a lo largo de un semestre solo se traducen en una lógica que se ejecuta dentro de una ventana de consola negra con un tipo de letra extraño. Por lo tanto, creo que usar un lenguaje con un nivel superior puede ser más interesante para ellos y alentarlos a continuar el camino de la codificación.
zxcmehran
1
@zxcmehran Correcto, por eso sugerí algo como Arduino como un enfoque alternativo.
maxik
C es simple como "administra tu memoria tú mismo" es simple. Un montón de comportamiento indefinido es un problema.
djechlin
1

Yo iría por Swift, usando Swift Playground. Es posible que desee comprobar cuántas personas tienen una Mac o un iPad. Entre los estudiantes es del 90% en algunos lugares. También está disponible en línea en http://iswift.org/playground , por lo que no necesita nada más que un navegador. Puede usarlo en su teléfono si no tiene una computadora.

Swift es un idioma moderno, es un idioma seguro y es un idioma que te conseguirá un trabajo si lo dominas. (Cualquier código nuevo que Apple escriba está escrito en Swift).

gnasher729
fuente
0

Editar: Lo siento, sobre eso, leí mal su punto sobre la plataforma. Básicamente pensé que dijiste que solo tenía que ejecutarse en Windows, pero ahora veo que solo la mayoría de los usuarios usan Windows.

Microsoft ha estado creando soporte para Linux y Mac y VS Code y Visual Studio para Mac , respectivamente, y .NET Core, por lo que creo que esta sigue siendo una respuesta válida, aunque quizás no tan fuerte.


Te sugiero que busques en C #, el marco .NET y el IDE de Visual Studio : cubren casi todos tus 7-8 puntos. (dependiendo de cómo cuentes los dos primeros; D)

  • Simplicidad : la sintaxis es bastante fácil de aprender y hay una gran cantidad de información en la web para tutoriales para principiantes.
  • Simplicidad, de nuevo : C # es un lenguaje fuertemente tipado, que ayuda a resaltar los errores incluso antes de que la aplicación se ejecute. Visual Studio es posiblemente uno de los mejores IDE que puede obtener con un excelente resaltado de sintaxis, Intellisense y soporte de depuración.
  • Generalidad : si bien puede no ser la mejor opción, personalmente lo he usado para una amplia variedad de aplicaciones, desde sitios web y aplicaciones de escritorio hasta equipos robóticos.
  • Cosas de objetivo mínimo : Editar programación orientada a objetos es un estilo de programación que se centra en la encapsulación, la abstracción, la herencia y el polimorfismo. C # tiene características que facilitan la escritura de código OO, pero no requiere que las use. Puede escribir un programa C # de manera procesal.
  • Plataforma : Editar .NET Core es la versión multiplataforma de .NET Framework. Funciona en Mac, Linux y Windows.
  • Fácil de configurar : no creo que pueda encontrar un idioma e IDE más fáciles de configurar en Windows. Editar En cuanto a Mac y Linux, no tengo ninguna experiencia con él, pero hay VS Code (Win / Mac / Linux) y Visual Studio para Mac (solo Mac). Supongo que estos también serían relativamente fáciles.
  • Preferencia de la industria : C # es definitivamente un lenguaje profesional, aunque puede buscarlo usted mismo buscando trabajos en su área en función de los idiomas que esté considerando. Usando Dice , obtuve resultados aproximadamente iguales para C # (6,548) y Python (6,639) en todas las ofertas de trabajo abiertas, pero no sé si Dice tiene un sesgo de una manera u otra, o si hay diferencias regionales significativas.
  • Portabilidad de hardware : tal vez medio punto aquí: no creo que haya mucho soporte para programar microcontroladores con C # que no sean un par de placas especializadas .NET como Netduino , pero la Raspberry Pi es compatible .

Como una ventaja adicional, Microsoft tiene un programa llamado Imagine (anteriormente DreamSpark) donde regalan una gran cantidad de software gratuito para maestros y estudiantes en la escuela secundaria y la universidad. También tienen algunos concursos para los estudiantes también.

tehDorf
fuente
Solo para chicos de Windows. Además, completamente OOP
Eugene
@Eugene Mi error, leí mal el punto sobre la Plataforma, por lo que mi respuesta definitivamente solo se refería a Windows. Lo actualicé para abordar Linux y Mac. En cuanto a "enteramente OOP", también he abordado eso en mi respuesta actualizada en "Cosas de objetivo mínimo". Por favor déjame saber lo que piensa.
tehDorf
Aunque C # es un lenguaje maduro, estaba fuera de mi lista; desde que asumí que tiene un alcance limitado en plataforma y hardware. Te agradezco, vuelve a estar en la lista. Gracias por los enlaces, los revisaré.
zxcmehran
-1

Echa un vistazo a Lázaro:

http://www.lazarus-ide.org

Lazarus es un entorno de programación basado en Free Pascal Compiler (FPC). Funciona muy bien en Windows y también está disponible para otras plataformas importantes. FPC admite una versión modernizada de Pascal, que se llama Object Pascal.

Object Pascal es un lenguaje de programación multi-paradigmático. Puede escribir código en Pascal estándar, luego comenzar a usar las funciones OO cuando lo necesite.

Las aplicaciones del mundo real se pueden desarrollar usando Lazarus / FPC. Ambos son bastante maduros, pero también puedes usar Delphi como alternativa comercial.

FPC puede realizar una compilación cruzada de sus programas con dispositivos como Raspberry Pi o Android.

Además, el futuro de Pascal es brillante. El lenguaje de programación Oberon eventualmente tomará el control como la forma más productiva de desarrollar software:

ht tp: //www.projectoberon.com

Con suerte, las herramientas para desarrollar en Oberón madurarán con el tiempo. Ya hay un compilador genial para el objetivo Win64:

https://github.com/congdm/AyaCompiler

tormenta
fuente
La pregunta menciona como criterio: "Preferencia de la industria: no es un problema grave. Pero debería ser al menos un lenguaje actualmente activo que permita a los estudiantes alcanzar experiencias de desarrollo casi reales". No parece que Lázaro / Pascal le quede tan bien. Sería bueno documentar en su respuesta qué criterios cumple bien Lázaro y cuáles no.
DW
en.wikipedia.org/wiki/… <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/> Cuando Lázaro alcanzó 1.0 hito, ganó mucho interés. La popularidad no ha disminuido desde entonces. <br/> Delphi / Lazarus es una de las herramientas más populares para desarrollar aplicaciones de escritorio. También se están desarrollando marcos para usar FPC en el servidor y aplicaciones móviles.
srcstorm