designing software requires knowledge of programming