¿Cuál es el lenguaje de programación más ortogonal? [cerrado]

45

Me siento repetidamente molesto por tener que enseñarles a los estudiantes de primer año las reglas especiales de lenguaje (como la desintegración de matriz a puntero) que no tienen absolutamente nada que ver con la programación en sí misma. Así que 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 restricciones técnicas molestas? ¿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 expliquen nada serán eliminadas. Consulte Good Subjective, Bad Subjective para obtener más información.

    
pregunta fredoverflow 25.08.2011 - 13:06

9 respuestas

53

Cuando se trata de "muy pocas reglas", yo diría que Lisp o Smalltalk ganarán. La sintaxis básica 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 imperativo de los lenguajes 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 : encuentra (casi) todos los conceptos básicos en ellos (OK, no hay punteros), pero no necesita entenderlo. Desde el principio para hacer que algo funcione.

    
respondido por el keppla 25.08.2011 - 13:19
40

Yo diría que LISP, o el Esquema o un lenguaje de esa familia serían los más ortogonales. Con let , lambda , define , if , cons , list y ( ) puedes enseñar casi todo lo que quieras en un curso de introducción. Tampoco hay necesidad de directivas de preprocesamiento o int main() y cosas por el estilo que los estudiantes solo incluyen pero no ven una razón para hacerlo.

En mis cursos de introducción a CS, hicimos muchas cosas geniales con Scheme: implementamos una máquina Turing, implementamos una computadora TC-201, escribimos una gramática libre de contexto, utilizamos recursión, escribimos combinación y ordenamos por inserción, implementamos agregadores, y toneladas de otras cosas.

Había hecho Java en compilación de AP antes de la universidad, pero Scheme era genial porque podía reducir el desorden y centrarme en los conceptos reales de mi programa. Fue una gran clase y te recomiendo que la pruebes para tu enseñanza.

    
respondido por el BlackJack 25.08.2011 - 13:24
17

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í).

    
respondido por el Henrik 25.08.2011 - 15:49
14

Logotipo: todavía está vivo y pateando !

; draws a triangle
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120

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. Tratar de 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 una aversión a las tortugas, realmente creo que Scheme es el camino a seguir.

    
respondido por el benzado 25.08.2011 - 23:32
10

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 que no está 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 son impulsadas por los 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 en ambos idiomas (eqtypes en SML, seq en Haskell), pero aún son más comunes que cualquier otra cosa en términos de interacciones extrañas de características del lenguaje no relacionadas.

    
respondido por el Lambdageek 25.08.2011 - 21:45
7

Cualquiera que sea la opción, recomendaría encarecidamente que se enseñe un lenguaje "real" . Enseñar 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 la relevancia en el mundo real como una motivación para el aprendizaje, y no es nuestro lugar para juzgar esta estrategia de aprendizaje (de hecho, eso es un error común).

Esto descalifica lenguajes como Logo, pero también lenguajes específicos de dominio como Processing . Mientras que el último es extremadamente útil para ciertas cosas (por ejemplo, para producir gráficos de información), el uso es 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. también excluye a Pascal porque aunque este último se ha utilizado en proyectos reales, simplemente ya no es relevante y simplemente carece de características esenciales (por ejemplo, cadenas integradas).

De los lenguajes prácticos, estaría de acuerdo con los ya mencionados: dialectos Lisp o Scheme modernos, Haskell, Python o Ruby. Personalmente, probablemente usaría Python, pero todas esas opciones tienen su parte de ventajas y desventajas.

    
respondido por el Konrad Rudolph 26.08.2011 - 14:22
6

Tcl tiene 12 reglas que rigen todo el idioma.

[1] Commands. 
[2] Evaluation. 
[3] Words. 
[4] Double quotes. 
[5] Argument expansion. 
[6] Braces. 
[7] Command substitution. 
[8] Variable substitution.
[9] Backslash substitution.
[10] Comments. 
[11] Order of substitution. 
[12] Substitution and word boundaries.

Hay muy pocos casos especiales o palabras o caracteres reservados.

    
respondido por el Bryan Oakley 25.08.2011 - 22:03
4
  

¿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 restricciones técnicas molestas? ¿No sería ese lenguaje el idioma de enseñanza perfecto?

Para ampliar mi comentario, en Jot todo es de primera clase (porque es un cálculo lambda) y se puede componer. Sólo hay una instrucción. Es un lenguaje de enseñanza absolutamente horrible.

En general, los tarpits de Turing tienen muy pocas reglas especiales y requieren que usted entienda muy bien los fundamentos de la computación antes de poder hacer algo. El lenguaje de enseñanza perfecto les permite a los estudiantes experimentar sin quitarse todo el pelo, por lo que las abstracciones de nivel superior son realmente una buena cosa.

    
respondido por el Peter Taylor 26.08.2011 - 10:33
2

Las características más importantes de una lengua que aprendes son:

  • principio de menor sorpresa (PASCAL)

  • legibilidad (Ada)

En mi opinión, el segundo triunfa sobre el primero, ya que leer el código es incluso más importante que escribirlo.

De nuevo, escribo C #, Java, Objective-C y Javascript para ganarme la vida, todos los cuales tienen horribles peculiaridades: D

Aún si tuviera que elegir una lengua para empezar, iría por C #. Es relativamente fácil de leer, tiene pocas sorpresas serias en sí mismas (la mayoría de las veces están ocultas en herramientas / marcos de trabajo de MS ...) y una gran cantidad de código para leer y documentación, ambos de los cuales son esenciales para un buen aprendizaje.

    
respondido por el Kheldar 26.08.2011 - 00:00

Lea otras preguntas en las etiquetas