Describir: Programming an architecture of learning environments