Authoring programs and toolkits, logic programming and curriculum development