Database query people use languages such as EASYTRIEVE,
In addition, there are data entry people, CAI, command/control, library
information retrieval, computerized banking, wordprocessing, supermarket
1. Learning the language. A crude way to assess programming experience
This is an on-going task
as new features (styles of usage, languages, utilities, editors...) require
- Naive -- non-programmer with no training
- Novice -- less than one year experience
- Intermediate -- one to three years experience
- Expert -- more than three years experience.
2. Design of the program requires a detailed knowledge of the problem
domain, experience in the application area, and creative insight. The designer
It is a difficult area to
evaluate since much depends on subjective value judgements.
- assess user needs
- evaluate costs
- determine realistic schedules
- understand what programmers can accomplish.
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
- small --less than 100 lines
- medium -- 100 - 1,000 lines
- large -- 1,000 - 10,000 lines
- very large -- over 10,000 lines
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:
This process differs for
- understand each line;
- understand the overall function;
- understand the control structures, module design, data structures.
- 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
Most syntactic errors are caught by the compiler. Semantic errors may be:
- syntactic -- incorrect use of syntax or
- semantic -- errors in designer composition.
7. Documentation is extremely important
especially with a high level of modification.
- obvious flaws in the output
- irregular, non-obvious impact on output
- design flaws
- composition bugs
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
- internal documentation
- external write-ups
- system diagrams (OO notations or flowcharts, etc.)
- detailed diagrams
- audio documentation
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.:
It also includes social interaction factors --
- room size,
- arrangement of desks,
- degree of privacy,
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
- working alone or in teams,
- friendliness, etc.,
- managerial structure,
- rewards and bonuses,
- support for education/conferences....
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
Program composition involves problem solving. Polya (1966) suggests four
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
- understanding the problem
- defining a plan or general strategy for solution
- carrying out the plan - translating plan to action
- checking the result - testing
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 play a critical role in determining interaction among
programmers and in the work style of individual programmers. Some factors are:
(1976) defines cognitive style as a mode of information processing
analytic or heuristic:
- assertive/passive -- often an assertive individual who is not afraid to
ask questions, has initiative to get things done is seen as better;
- introverted/extroverted -- good programmers may be either, a warm
cooperative style for work in teams is often preferred.
- internal/external locus of control -- people with strong internal locus of
control can dominate situations, they feel able to influence the world and
control events; people with external locus of control feel victims of events
and tend to allow others to dominate them;
- high/low anxiety -- moderate levels improve performance, high levels lead
to more errors which lead to higher anxiety, a vicious circle;
- high/low motivation -- highly motivated people can accomplish much more,
managers usually try to improve morale and motivation;
- high/low tolerance for ambiguity -- early stages of program design need a
tolerance for ambiguity, decisions must be made on limited data, risks must be
- compulsive precision -- later stages of program composition require a
precise attention to detail;
- humility -- a successful programmer should not be too ego-involved, a more
humble approach leaves a programmer open to suggestion;
- tolerance of stress -- projects may fall behind schedule and pressures
build up, a good programmer can work well in stressful situations.
Many studies have looked at programmer personality,
and many consider it to be of more importance than other factors.
- analytic implies sequential, linear, verbal symbolic processing,
- heuristic implies intuitive, global, pictorial processing,
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,
An individual's preference in each dimension is not as important as the
interaction of preferences.
Finding Out -- Forest or Trees?
| Like solving new problems
||Dislike new problems unless there are standard ways to solve them.
| Dislike doing the same thing over and over again.
||Like an established routine.
| Enjoy learning a new skill more than using it.
|| Enjoy using skills already learned more than learning new ones.
| Work in bursts of energy powered by enthusiasm, with slack periods in
||Work more steadily, with realistic idea of how long it will take.
| Frequently jump to conclusions.
|| Must usually work all the way through to reach a conclusion.
| Are patient with complicated situations.
|| Are impatient when the details get complicated.
| Are impatient with routine details.
|| Are patient with routine details.
| Follow their inspirations, good or bad.
|| Rarely trust inspirations, and do not usually get inspired.
| Often tend to make errors of fact.
|| Seldom make errors of fact.
| Dislike taking time for precision.
|| Tend to be good at precise work.
Deciding -- Rigid or Flexible?
| Tend to be good at adapting to changing situations.
|| Best when they can plan their work and follow the plan.
|| Do not mind leaving things open for alterations.
|| Like to get things settled and wrapped up.
|| May have trouble making decisions.
|| May decide things too quickly.
|| May start too many projects and have difficulty in finishing them.
|| May dislike to interrupt the project they are on for a more urgent one.
|| May postpone unpleasant jobs.
|| May not notice new things that need to be done.
|| Want to know all about a new job.
|| Want only the essentials needed to get on with it.
|| Tend to be curious and welcome new light on a thing, situation or
|| Tend to be satisfied once they reach a judgement on thing, situation or
Where's your world? -- Expressive or Reserved>
| Like quiet for concentration.
|| Like variety and action.
| Tend to be careful with details, dislike sweeping statements.
|| Tend to be faster, dislike complicated procedures.
| Have trouble remembering names and faces.
|| Are often good at greeting people.
| Tend not to mind working on one project for a long time uninterruptedly.
|| Are often impatient with long slow jobs.
| Are interested in the idea behind their job.
|| Are interested in the results of their job, in getting it done and in how
other people do it.
| Dislike telephone intrusions and interruptions.
|| Often do not mind the interruption of answering the telephone.
| Like to think a lot before they act, sometimes without acting.
|| Often act quickly, sometimes without thinking.
| Work contentedly alone.
|| Like to have people around.
| Have some problem communicating.
|| Usually communicate well.
Analysis -- Head or Heart?
| Tend to be very aware of other people and their feelings.
|| Are relatively unemotional and uninterested in people's feelings.
| Enjoy pleasing people, even in unimportant things.
|| May hurt people's feelings without knowing it.
| Like harmony. Efficiency may be badly disturbed by office feuds.
|| Like analysis and putting things into logical order. Can get along
| Often let decisions be influenced by their own or other people's personal
likes and wishes.
|| Tend to decide impersonally, sometimes ignoring people's wishes.
| Need occasional praise.
|| Need to be treated fairly.
| Dislike telling people unpleasant things.
|| Are able to reprimand people or fire them when necessary.
| Relate well to most people.
|| Tend to relate well only to other thinking types.
| Tends to be sympathetic.
|| May seem hard-hearted.
Combinations of perception and judgement compared
|people who prefer
||sensing & thinking
||sensing & feeling
||intuition & feeling
||intuition & thinking
|and handle these with
|they tend to be
||practical & matter-of-fact
||sociable & friendly
||enthusiastic & insightful
|and are good at
There are many other tests used with programmers.
Intuitive needs a sensing type:
- to bring up pertinent facts
- to apply experience to problems
- to read the fine print in a contract
- to notice what needs attention now
- to have patience
- to keep track of essential detail
- to face difficulties with realism
- to remind that the joys of the present are important
type needs a thinker:
- to bring up new possibilities
- to supply ingenuity on problems
- to read the signs of coming change
- to see how to prepare for the future
- to have enthusiasm
- to watch for new essentials
- to tackle difficulties with zest
- to show that the joys of the future are worth working for
Thinker needs a feeling type
- to analyse
- to organize
- to find the flaws in advance
- to reform what needs reforming
- to hold consistently to a policy
- to weigh "the law and the evidence"
- to fire people when necessary
- to stand firm against opposition
- to persuade
- to conciliate
- to forecast how others will feel
- to arouse enthusiasm
- to teach
- to sell
- to advertise
- to appreciate the thinker
Practical Software Engineering, Department of Computer Science