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.
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 flowcharts
- detailed flowcharts
- 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 lend
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.
Intuitives:
- Like solving new problems
- Dislike doing the same thing over and over again.
- Enjoy learning a new skill more than using it.
- Work in bursts of energy powered by enthusiasm, with slack periods in
between.
- Frequently jump to conclusions.
- Are patient with complicated situations.
- Are impatient with routine details.
- Follow their inspirations, good or bad.
- Often tend to make errors of fact.
- Dislike taking time for precision.
Sensing Types:
- Dislike new problems unless there are standard ways to solve them.
- Like an established routine.
- Enjoy using skills already learned more than learning new ones.
- Work more steadily, with realistic idea of how long it will take.
- Must usually work all the way through to reach a conclusion.
- Are impatient when the details get complicated.
- Are patient with routine details.
- Rarely trust inspirations, and do not usually get inspired.
- Seldom make errors of fact.
- Tend to be good at precise work.
Perceptives:
- Tend to be good at adapting to changing situations.
- Do not mind leaving things open for alterations.
- May have trouble making decisions.
- May start too many projects and have difficulty in finishing them.
- May postpone unpleasant jobs.
- Want to know all about a new job.
- Tend to be curious and welcome new light on a thing, situation or
person.
Judging Types:
- Best when they can plan their work and follow the plan.
- Like to get things settled and wrapped up.
- May decide things too quickly.
- May dislike to interrupt the project they are on for a more urgent one.
- May not notice new things that need to be done.
- Want only the essentials needed to get on with it.
- Tend to be satisfied once they reach a judgement on thing, situation or
person.
Introverts:
- Like quiet for concentration.
- Tend to be careful with details, dislike sweeping statements.
- Have trouble remembering names and faces.
- Tend not to mind working on one project for a long time uninterruptedly.
- Are interested in the idea behind their job.
- Dislike telephone intrusions and interruptions.
- Like to think a lot before they act, sometimes without acting.
- Work contentedly alone.
- Have some problem communicating.
Extroverts:
- Like variety and action.
- Tend to be faster, dislike complicated procedures.
- Are often good at greeting people.
- Are often impatient with long slow jobs.
- Are interested in the results of their job, in getting it done and in how
other people do it.
- Often do not mind the interruption of answering the telephone.
- Often act quickly, sometimes without thinking.
- Like to have people around.
- Usually communicate well.
Feeling Types:
- Tend to be very aware of other people and their feelings.
- Enjoy pleasing people, even in unimportant things.
- Like harmony. Efficiency may be badly disturbed by office feuds.
- Often let decisions be influenced by their own or other people's personal
likes and wishes.
- Need occasional praise.
- Dislike telling people unpleasant things.
- Relate well to most people.
- Tends to be sympathetic.
Thinking Types:
- Are relatively unemotional and uninterested in people's feelings.
- May hurt people's feelings without knowing it.
- Like analysis and putting things into logical order. Can get along
without harmony.
- Tend to decide impersonally, sometimes ignoring people's wishes.
- Need to be treated fairly.
- Are able to reprimand people or fire them when necessary.
- Tend to relate well only to other thinking types.
- May seem hard-hearted.
Combinations of perception and judgement
compared
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
mildred@cpsc.ucalgary.ca 9-Jan-96