designing software requires knowing how to program