Practical Software Engineering

Programming as Human Performance

Classes of Computer Users

Professional programmers : system programmers, application programmers

System programmers work on operating system, compilers, utilities used by application programmers who solve problems. These include banking, reservations, payroll, personnel management, accounts receivable, data collection, statistical analysis, inventory and management reporting systems.

Occasional programmers outnumber professional by about 10:1. They write for scientific research, engineering develop, marketing research, business applications....

Programmer hobbyists work on small business, personal and home computers.

Database query people use languages such as EASYTRIEVE, Query-by-example, SQL.

In addition, there are data entry people, CAI, DSS, command/control, library information retrieval, computerized banking, wordprocessing, supermarket checkout.

Programming Tasks

1. Learning the language. A crude way to assess programming experience is: This is an on-going task as new features (styles of usage, languages, utilities, editors...) require continuous learning.

2. Design of the program requires a detailed knowledge of the problem domain, experience in the application area, and creative insight. The designer must:

It is a difficult area to evaluate since much depends on subjective value judgements.

3. Composition involves taking a problem or design and coding it for execution. A crude classification of program size is:

It may be an individual process, team process or a multiple team process. Management and coordination of the project is essential.

4. Comprehension of a program is vital. Old programs are read to promote communication among workers, prepare a modification, locate a bug. There are levels of comprehension: understand each line; understand the overall function; understand the control structures, module design, data structures. This process differs for own programs and others, short and long programs, novices and professionals, low and high level languages, documented or undocumented programs.

5. Testing is verification that the program meets the design specifications. It may involve construction of test data or merely checking the specs. It should be done by each programmer, then by someone not involved in writing the program.

6. Debugging or error removal is best avoided. Errors may be syntactic -- incorrect use of syntax or semantic -- errors in designer composition. Most syntactic errors are caught by the compiler. Semantic errors may be:

7. Documentation is extremely important especially with a high level of modification. Many languages facilitate self-documentation. Sometimes professional documenters are used who use a standardized format, a uniform level of detail, lucid English. It is a difficult skill which must be practised.

8. Modification may be as much as 75% of a programming task. It requires competence in comprehension, composition. The comprehension must be done on large programs in a short time, and modifications made which do not affect the rest of the program.


The programming environment is a key determinant of behaviour, e.g. room size, temperature, arrangement of desks, lighting, noise, degree of privacy, interruptions.... It also includes social interaction factors -- working alone or in teams, friendliness, etc., managerial structure, rewards and bonuses, support for education/conferences.

Cognitive Model

A syntactic/semantic model includes the basic programming tasks, plus a cognitive model which describes the cognitive structures that the programmer uses and the cognitive processes involved in using or changing this knowledge.

What kind of knowledge is available to the programmer in long-term memory; what kind of processes does the programmer use in building a problem solution in working memory?

Problem Solving

Program composition involves problem solving. Polya (1966) suggests four stages:
  1. understanding the problem
  2. defining a plan or general strategy for solution
  3. carrying out the plan - translating plan to action
  4. checking the result - testing
The first phase involves the problem entering the cognitive system of the programmer and going into working memory via short-term memory, and analysed in terms of the given state and the goal state. General information from the programmer's long-term memory is called up.

The second phase is devising a general plan for writing the program, and is done iteratively, i.e. general approaches followed by functional solutions and the making of subgoals.

Personality Factors

Personality factors play a critical role in determining interaction among programmers and in the work style of individual programmers. Some factors are: Doktor (1976) defines cognitive style as a mode of information processing analytic or heuristic: Many studies have looked at programmer personality, and many consider it to be of more importance than other factors.

The Myers-Briggs Type Indicator is a psychological test which is sometimes used to put together programmer teams. It looks at four dimensions extroversion/introversion, sensing/intuition, thinking/feeling, judging/perceptive.

An individual's preference in each dimension is not as important as the interaction of preferences.


Sensing Types: Perceptives: Judging Types: Introverts: Extroverts: Feeling Types: Thinking Types: Combinations of perception and judgement compared

There are many other tests used with programmers.

Intuitive needs a sensing type:

Sensing needs an intuitive: Feeling type needs a thinker: Thinker needs a feeling type
Practical Software Engineering, Department of Computer Science 9-Jan-96