data directed programming