Teaching programming for secondary school : a pedagogical content knowledge based approach