El “lenguaje más simple para aprender algoritmos y estructuras de datos” es casi seguro el Esquema (http://en.wikipedia.org/wiki/Sch…). También es una muy buena opción para ejercicios en algoritmos y estructuras de datos.
Lo alienta a pensar de manera funcional, y proporciona un lenguaje general muy simple, poderoso para razonar sobre programas y datos. Le permite actualizar las referencias de forma imperativa, pero hace que esas actualizaciones sean muy explícitas. Ambas características lo ayudarán a ver la forma y la estructura del problema en el que está trabajando, en lugar de los detalles de la implementación de su solución.
Esto será más difícil y más lento al principio que muchos otros enfoques, pero vale la pena el esfuerzo. Intente comenzar con Estructura e interpretación de programas de computadora (http://mitpress.mit.edu/sicp/) si aún no es un programador experimentado: es gratis en línea y es un clásico. Hay buenos videos, si están fechados, de las conferencias originales disponibles también: http://groups.csail.mit.edu/mac/….
- ¿Por qué una clasificación rápida es mejor que una clasificación múltiple?
- Algoritmos: ¿Cómo la combinación de ordenamiento tiene complejidad espacial O (n) para el peor de los casos?
- ¿Qué tiene de malo este programa?
- Cómo escribir un algoritmo de aprendizaje automático que prediga la edad de alguien
- Cómo identificar la recursividad en un problema de programación
Si ya eres un programador experimentado, también te animo a que consideres OCaml, pero definitivamente no es “simple”. La sintaxis es pesada, el sistema de módulos es complicado y el tipeo estático fuerte le dará problemas a los principiantes. Pero esas mismas cosas son poderosas herramientas de ingeniería que le permitirán expresar grandes combinaciones de algoritmos y estructuras de datos de manera clara y correcta.
No recomendaría ninguno de estos idiomas que otros mencionan, por las siguientes razones:
- Python: es un lenguaje terrible para el CS académico, incluso peor que Perl (que tampoco recomiendo). Vea la respuesta de Jesse Tov aquí: ¿Cuáles son las principales debilidades de Python como lenguaje de programación?
- C: la gestión manual de la memoria y el toque inseguro del puntero te dejarán pasar la mayor parte de tu tiempo luchando contra el idioma, no aprendiendo. Y estará mucho menos seguro si sus implementaciones son realmente correctas. Sin mencionar las capacidades muy limitadas del lenguaje en sí.
- Haskell: Me encanta el haskell en pedazos, pero la falta de actualizaciones obligatorias significa que tendrá que adoptar un enfoque de aprendizaje muy diferente, y la mayoría de los recursos clásicos para algoritmos y estructuras de datos serán muy difíciles de seguir. El sistema de tipos y la pereza también serán obstáculos innecesarios para un principiante. Dicho esto, hacer el mismo trabajo la segunda vez en Haskell podría ser muy divertido.
- Java: es lento para escribir, no muy expresivo, y te encierra en una cosmovisión incómoda orientada a objetos. Simplemente no es divertido.