Database query people use languages such as EASYTRIEVE,
Query-by-example, SQL.
In addition, there are data entry people, CAI, command/control, library
information retrieval, computerized banking, wordprocessing, supermarket
checkout.
1. Learning the language. A crude way to assess programming experience
is:
- Naive -- non-programmer with no training
- Novice -- less than one year experience
- Intermediate -- one to three years experience
- Expert -- more than three years experience.
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:
- assess user needs
- evaluate costs
- determine realistic schedules
- understand what programmers can accomplish.
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:
- small --less than 100 lines
- medium -- 100 - 1,000 lines
- large -- 1,000 - 10,000 lines
- very large -- over 10,000 lines
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:
- obvious flaws in the output
- irregular, non-obvious impact on output
- design flaws
- composition bugs
7. Documentation is extremely important
especially with a high level of modification.
- internal documentation
- external write-ups
- system diagrams (OO notations or flowcharts, etc.)
- detailed diagrams
- pseudo-code
- audio documentation
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....
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?
Program composition involves problem solving. Polya (1966) suggests four
stages:
- understanding the problem
- defining a plan or general strategy for solution
- carrying out the plan - translating plan to action
- 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 play a critical role in determining interaction among
programmers and in the work style of individual programmers. Some factors are:
- 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
taken;
- 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.
Doktor
(1976) defines cognitive style as a mode of information processing
analytic or heuristic:
- analytic implies sequential, linear, verbal symbolic processing,
left-brain oriented;
- heuristic implies intuitive, global, pictorial processing,
right-brain oriented.
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.
Finding Out -- Forest or Trees?
Intuitives |
Sensing types |
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
between. |
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?
Perceptives |
Judging Types |
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
person. |
Tend to be satisfied once they reach a judgement on thing, situation or
person. |
Where's your world? -- Expressive or Reserved>
Introverts |
Extroverts |
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?
Feeling Types |
Thinking Types |
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
without harmony. |
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 |
focus on |
facts |
facts |
possibilities |
possibilities |
and handle these with |
impersonal analysis |
personal warmth |
personal warmth |
impersonal analysis |
they tend to be |
practical & matter-of-fact |
sociable & friendly |
enthusiastic & insightful |
intellectually ingenious |
and are good at |
production
construction
accounting
business
economics
law
surgery |
sales
service
customer relations
gen. practices
welfare work
nursing |
research
teaching
preaching
counseling
writing
psychology
psychiatry |
research
science
invention
securities
analysis
management
cardiology |
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
Sensing needs
an intuitive:
- 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
Feeling
type needs a thinker:
- 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
Thinker needs a feeling type
- 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
Rob Kremer