Skills Needed
Given the discussion about what programming is, lets 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
- understand design
- the whole implementation cycle
if the whole life cycle is considered, some fairly sophisticated skills are applied; lets 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
- abstraction
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 |

