'Derive a list of programs in which the given user is engaged.
Returns:
list of program dicts, ordered by most recent enrollment'

@cached_property
def engaged_programs(self):

    inverted_programs = self.invert_programs()
    programs = []
    for course_run_id in self.course_run_ids:
        for program in inverted_programs[course_run_id]:
            if (program not in programs):
                programs.append(program)
    return programs
