Como les aconseje en el siguiente post :
http://emanuelpeg.blogspot.com.ar/2013/06/introduction-to-systematic-program.html; un curso que esta muy bueno en cursera es "Introduction to Systematic Program Design". En este curso se utiliza el lenguaje Racket.
Racket es un lenguaje de la familia de lisp/scheme, multiparadigma y es un lenguaje de propósito general que se utiliza para la enseñanza, investigación y para cualquier otra cosa. Tiene un entorno que se llama DrRacket, funciona en diferentes plataformas; yo lo estoy corriendo en Linux sin problemas.
Como se pueden imaginar al ser un lenguaje derivado de lisp es funcional, pero también fue influido por scheme y eiffel. De este ultimo toma la programación dirigida por contratos. A la vez soporta macros y es muy extensible. Una cosa curiosa es que soporta elementos gráficos, en realidad me resulta curioso a mi, podemos hacer esto:
(require 2htdp/image)
(triangle 80 'solid 'red)
y dibujara un triangulo.
Esta muy bueno para enseñar programación funcional y también para introducir a los alumnos a programación dirigida por contratos.
También tiene funciones similares a doctest de python es decir podemos hacer:
;; devuelve la suma de dos nros
(check-expect (suma 2 3) 5)
(check-expect (suma 5 3) 8)
(check-expect (suma 2 30) 32)
(check-expect (suma 2 -3) -1)
(define (suma nro1 nro2)
(+ nro1 nro2)
)
y haciendo esto la ide nos devolverá: "All 4 tests passed!"
Es lanzado con licencia LGPL por lo tanto lo podemos usar para hacer proyectos GPL y también comerciales.
Dejo links:
http://racket-lang.org/
https://en.wikipedia.org/wiki/Racket_(programming_language)
Dejo unas fotos de la IDE: