The University of Queensland Homepage
School of ITEE ITEE Main Website

 skills needed

Skills Needed


Given the discussion about what programming is, let’s consider more specifically the kind of cognitive skills which apply at the extremes of coding and the whole life cycle.

  • just coding
    at this level, some comprehension and application of knowledge is required
    • understand design
      the design has to be understood: some notation is used for it (whether formal, pseudocode, graphical, etc.). It may also be necessary to know standard definitions and algorithms (or where to look them up), e.g., sorts, searches
    • understand formal language
      the language needed to program must be understood at least at the level of how its constructs implement design elements, even if detailed design cannot be done (e.g., choose an appropriate loop construct for specified repetition)
    • typing
      typing in the code is of course a “skill” even if one for which formal training often does not occur. Perhaps this is more a manual than a cognitive skill
  • the whole implementation cycle
    if the whole life cycle is considered, some fairly sophisticated skills are applied; let’s think about the skills this time, rather than the steps of the life cycle, as the basis for ordering topics:
    • abstraction
      abstraction requires see what is essential and what is not, and finding commonality in situations where it is not obvious. Considerably creativity is needed to perform abstraction
    • design
      choosing suitable elements to combine, and breaking a problem into manageable components are both aspects of design. Both require a significant amount of skill, and are not easy to master
    • formalization
      finding a formal representation of real-world concepts is not easy; a`s Dijkstra has said, the less skilled mathematician had better stick to pure mathematics. Here the concern is not necessarily mathematical formalism; a formal language, for example, is a kind of formalism in which an aspect of the real world can be modeled
    • combining components
      although this is an aspect of design, this skill is worth repeating, because it occurs at other levels, including system integration, using standard libraries and understanding interactions between language constructs. This too is a difficult skill, and one which, if not mastered, can be a source of major errors
    • trouble-shooting
      understanding what went wrong can often encompass not only all of the other skills listed here, but the ability to think out of the box – to see things in a new way, to work around previous mental blocks, misperceptions or errors.
    • … and the “just coding” skills
      aside from all the other skills, “just coding” still has to be understood, and done right

So the overall life cycle involves a large body of skills. Of course, a view of what programming is may place the skill set somewhere between the overall life cycle and “just coding” – but any point on the spectrum which is significantly more than “just coding” quickly starts demanding significantly more sophisticated cognitive skills.


Programming Early Considered Harmful SIGCSE 2001 23 March, Charlotte, NC