Me siento repetidamente molesto por tener que enseñar a los estudiantes de primer año acerca de las reglas especiales del lenguaje (como la descomposición de matriz a puntero) que no tienen absolutamente nada que ver con la programación en sí misma. Entonces me preguntaba:
¿Cuál es el lenguaje de programación con el menor número de reglas de lenguaje especiales, donde todo es de primera clase y se puede componer sin molestas restricciones técnicas? ¿No sería ese lenguaje el idioma de enseñanza perfecto?
Nota del moderador
Estamos buscando respuestas largas que brinden alguna explicación y contexto. No solo enumere un idioma: explique por qué cree que el idioma responde a la pregunta. Las respuestas que no explican nada se eliminarán. Vea Buen subjetivo, Mal subjetivo para más información.
fuente
I=SKK
. Lo último en lenguajes ortogonales son los lenguajes de instrucción única como Jot y RSSB.Respuestas:
Cuando se trata de "muy pocas reglas", diría que Lisp o Smalltalk ganarían. La sintaxis simple se puede escribir en una pestaña de cerveza.
Pero en mi experiencia, la simplicidad de Lisp y Smalltalk no significa que sean simples de entender y fáciles de enseñar. Si bien no es la forma 'pura', en mi experiencia, el estilo de lista de tareas de los idiomas imperativos es el más fácil de entender para los novatos.
Por lo tanto, sugeriría Python, Ruby o algo de abstracción similar : encontrará (casi) todos los conceptos básicos en ellos (OK, sin punteros), pero no necesita comprenderlo desde el principio para que algo funcione.
fuente
Yo diría que LISP, o Scheme o un idioma de esa familia sería lo más ortogonal. Con
let
,lambda
,define
,if
,cons
,list
, y(
)
se puede enseñar casi cualquier cosa que te gustaría en un curso de introducción. Tampoco hay necesidad de directivas de preprocesamiento oint main()
cosas por el estilo que los estudiantes solo incluyen pero no ven una razón.En mis cursos introductorios de CS, hicimos muchas cosas realmente geniales con Scheme: implementar una máquina Turing, implementar una computadora TC-201, escribir una gramática libre de contexto, usar recursión, escribir fusión e inserción, implementar sumadores y toneladas de otras cosas.
Había hecho Java en AP comp sci antes de la universidad, pero Scheme fue genial porque pude cortar el desorden y centrarme en los conceptos reales de mi programa. Fue una gran clase y le recomiendo que lo pruebe para su enseñanza.
fuente
Pascal fue diseñado específicamente para enseñar programación. Es fácil de aprender (fue uno de los primeros lenguajes de programación que aprendí).
fuente
Logotipo: ¡sigue vivo y coleando !
Puede parecer más un juguete que un lenguaje de programación, pero no sería un mal primer paso para mucha gente. La sintaxis es muy simple, pero la tortuga proporciona una forma más concreta de retroalimentación que la mayoría de los idiomas / entornos. Intentar crear una forma específica es una excelente manera de aprender el proceso de pensar con anticipación para resolver un problema.
Sin embargo, si tienes aversión a las tortugas, realmente creo que Scheme es el camino a seguir.
fuente
Propondría tanto SML como Haskell. La ortogonalidad ha sido un punto de diseño principal para ambos. En particular, el núcleo de SML (es decir, la parte del lenguaje no relacionada con la modularidad) es más o menos un cálculo lambda escrito. Como resultado, la mayoría de las características del lenguaje están controladas por tipos y los tipos a su vez impulsan las formas de introducción y eliminación de los valores. Esto es bastante ideal.
Hay algunas verrugas no teóricas de tipo en ambos idiomas (eqtipos en SML, seq en Haskell) pero aún superan los límites de cualquier otra cosa en términos de interacciones extrañas de características del lenguaje no relacionadas.
fuente
Cualquiera sea la opción, le recomendaría que enseñe un lenguaje "real" . La enseñanza de idiomas de juguete funciona para algunas personas, pero para otros es muy, muy frustrante debido a la desconexión con el mundo real. Algunas personas necesitan relevancia en el mundo real como motivación para el aprendizaje, y no es nuestro lugar juzgar esta estrategia de aprendizaje (de hecho, es un error común).
Esto descalifica idiomas como Logo, pero también idiomas específicos de dominio como Processing . Si bien este último es extremadamente útil para ciertas cosas (por ejemplo, producir gráficos de información), el uso está demasiado restringido para la mayoría de los usos (y, por lo tanto, la mayoría de los usuarios). Esto también excluye a Gofer , un subconjunto inútil de Haskell. Es también excluye Pascal porque aunque este último ha sido utilizado en proyectos reales, simplemente no es relevante más y simplemente carece de las características esenciales (por ejemplo, una función de cuerdas).
De los lenguajes prácticos, estaría de acuerdo con los ya mencionados: dialectos modernos de Lisp o Scheme, Haskell, Python o Ruby. Personalmente, probablemente usaría Python, pero todas esas opciones tienen sus ventajas y desventajas.
fuente
Tcl tiene 12 reglas que rigen todo el idioma.
Hay muy pocos casos especiales o palabras o caracteres reservados.
fuente
Para ampliar mi comentario, en Jot todo es de primera clase (porque es un cálculo lambda) y se puede componer. Solo hay una instrucción. Es un lenguaje de enseñanza absolutamente horrible.
En general, las lonas de Turing tienen muy pocas reglas especiales y requieren que comprenda los fundamentos de la computación muy bien antes de poder hacer algo. El lenguaje de enseñanza perfecto permite a los estudiantes experimentar sin quitarse todo el cabello, por lo que las abstracciones de nivel superior son realmente algo bueno.
fuente
Las características más importantes en un idioma que aprende son:
principio de la menor sorpresa (PASCAL)
legibilidad (Ada)
En mi opinión, el segundo triunfa sobre el primero, ya que leer el código es aún más importante que escribirlo.
Ahora, de nuevo, escribo C #, Java, Objective-C y Javascript para vivir, todos los cuales tienen peculiaridades horribles: D
Aún así, si tuviera que elegir un idioma para comenzar, elegiría C #. Es relativamente fácil de leer, tiene pocas sorpresas serias en sí mismas (a menudo están ocultas en herramientas / marcos de trabajo de MS ...) y una gran cantidad de código para leer y documentación, los cuales son esenciales para aprender bien.
fuente