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
- ¿Hay otros factores que me faltan?
- ¿Y qué idiomas sugieres como opciones?
fuente
Respuestas:
¿Mi respuesta? Pitón.
Déjame explicarte abordando todos tus puntos.
print("Hello World!")
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.
fuente
{
y}
obegin
yend
a 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.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.
fuente
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.
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:
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.
fuente
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.
fuente
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).
fuente
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)
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.
fuente
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
fuente