Keynote address for Inspire’96, European Software
Institute, Bilbao Spain, September 1996
Closing the feedback loop
Essence and accident of software engineering education
Daniel M. Roy
Software Technology,
Process & People
20 Forest Rd. Bradford
Woods, PA 15015 USA
Visiting scientist,
SEI
Abstract: In a landmark paper
written over 10 years ago, Frederick Brooks discussed the inherent difficulties
of engineering software and examined
various possible solutions to the software crisis [Brooks-87]. Since
then, a volley of bullets and other
projectiles of various silver contents have been fired amidst beaucoup noise
and smoke.
This talk explores
some of the advances in software process, technology, and applied psychology
that have produced measurable positive results in software engineering
practice. It is proposed that further
advances hinge on the disciplined application of a self improvement paradigm
that scales up from the personal, to the team, to the organizational level.
Already, a shift
can be noticed in software engineering education toward a more disciplined
approach based on the experimental paradigm of the scientific method. It is
proposed that the same principles can be applied to the very education and
training of software practitioners.
The evolution of
organizational paradigms from Taylor to McGregor, to Lewin and Weisbord is used
to show that our greatest challenge goes even beyond inspiring. In these times
of fast paced and incessant change, it is proposed that the essence of our
mission is to coach our students into inspiring themselves for their entire
professional life.
‘The problem of
quality management is not what people don’t know about it. The problem is what
they think they do know... In this regard, quality has much in common with sex.
Everybody is for it. (Under certain conditions of course.) Everyone feels they
understand it. (Even though they wouldn’t want to explain it.) Everyone thinks
execution is only a matter of following natural inclinations. (After all, we do
get along somehow.) And, of course, most people feel that problems in these
areas are caused by other people. (if only they
would take the time to do things right.) [Crosby-79]
This rather... unorthodox analogy
by one of the founding fathers of the quality movement seems applicable to
software education and training as well. In particular, both industry and
academia may very well feel that software expertise problems are caused by the
other. Interestingly, it is a well known characteristic of immature
organizations to blame the people when they should be fixing their process. Do
industry and academia have a formal mechanism, a cooperative process, to fully
prepare students for their professional life and keep their skills current and
sharp thereafter? If product quality is directly dependent on the quality of
the process, what about the continuous process of education and training
itself? As Weinberg puts it in his landmark book about the psychology of
programming: “Good programmers are made not born; therefore, we should turn our
attention to the manufacturing, or training process.” [Weinberg-71] Like with
other processes, the first step in doing this is to establish a baseline of
known strengths and difficulties.
In his famous paper, Brooks
borrowed from Aristotle’s philosophy to divide the difficulties facing software
practitioners “...into essence, the
difficulties inherent in the nature of software, and accidents, those difficulties that today attend its production but
are not inherent... Past progress has so reduced the accidental tasks that
future progress now depend upon addressing the essence.” [Brooks-87]
I propose that the same kind of
distinction (between essence and accident) can be made with the problems facing
software engineering educators in university and industry alike. If this holds,
then the same kind of discussion and potential solutions may apply to fostering
continuous progress in our field. By essential difficulties, I mean the
difficulties inherent in the nature of communicating software engineering
knowledge. The accidental difficulties are those that attend the production and
delivery of software engineering courses but are not inherent. I will
concentrate on the essence.
Following Brooks, I can see four
categories of reasons why teaching software engineering is and will remain
inherently difficult (I borrowed the first one from Mary Shaw):
1.
Immaturity of
computer science
2.
Complexity of interlocking concepts
3.
Conformity to a broad range of requirements
4.
Changeability of the technology
Mary Shaw makes the point that
computer science is still too immature to meet current engineering needs
[Shaw-90]. To show this, she distinguishes five phases in the evolution of any engineering (i.e. scientific)
discipline:
1.
Ad hoc solutions:
practices are entered in the folklore if they work
2.
Systematic
folklore: some folklore analysis is made, some procedures and heuristics
are written down
3.
Codification:
crisper procedures and rules are systematically written down and passed along
4.
Models and
theories: experiments are made to validate models, practice is improved by
using models
5.
Experience from
practice: new theories and principles are continuously discovered,
validated and put into practice.
Mary Shaw argues that even though
some part of computer science such as basic “algorithm, data structures, and
compiler construction theory can be considered mature, current demands is far
ahead of the scientific base” [Shaw-90]. Clearly, the electronics engineer and
the chemist for instance may draw on centuries of scientific developments in
physics, mathematics, and chemistry in their daily practice. More importantly,
it is by building on this solid scientific base that new models and theories
continuously enrich their field. The software engineer often has to be content
with commonly accepted practices (at
best up to codification in Mary’s model). This, in turn, poses a formidable
problem to the educator. On what science can we base teachings that will endure
the test of time?
According to Brooks,
“the essence of a
software entity is a construct of interlocking concepts: data sets, relationships
among data items, algorithms, and invocations of functions. I believe the hard part of building software to be the
specification, design, and testing of this conceptual construct, not the labor
of representing it and testing the fidelity of the representation.” [Brooks-87]
In the field of education, the
complexity of the interlocking concepts that we must introduce, is compounded
by the three dimensions of technology, process and people. In their outstanding
book on software technology innovations, the experimental scientists of IBM
Santa Theresa laboratories remark that,
“in general, a
quality strategy works best if the leadership, process, and technology
innovations are in balance. A program that is overly skewed to one at the
expense of the others can produce dysfunctional results. For example, too much
leadership can result in a dictatorial group. Too much process emphasis can
lead to bureaucracy. Too much technology can lead to technical virtuosity
without a consistent direction.” [Kaplan-95]
This concept of balance is
fundamental. I like to compare it to the concept of impedance matching in
electronics. Already, experiments teaching process in the classroom have shown
the importance of this concept of balance
in practice. I have felt the difficulties to implement this concept with
students of the studio project for the masters of software engineering at CMU,
I have seen teams of my PSP students struggle with it at SEI as well as in
industry, and others have reported the same kind of findings. For instance, in
discussing the results of student team projects at the last CSEE conference,
Robillard et al. confessed:
“We were lured by
the ability of the students to deliver process oriented documentation. It seems
that team cohesion and communications is better than process rules to obtain a
good product.” [Robillard-94]
Teaching the optimum balance of
technology, process and human aspects of
the complex interlocking concepts of software engineering is and will
remain inherently hard.
Another essential complexity of
software education lies in the broad range of conflicting requirements that are
constantly being hurled at us.
We claim to be teaching analysis,
design, coding, testing, management, teamwork, process, programming languages,
etc. for any domain of application, all in one swoop. Do they teach masonry in
architecture schools? Our broadside approach is at least in part a consequence
of the immaturity of our field. Other professions, say electronics, make a
distinction between specialties (from various grades of technicians to
certified engineers) and in different domains such as microelectronics, power
systems, microwaves, digital electronics, and so on. At the very least, while
teaching design for instance, we should follow Budgen’s advice to take into
account the difference between “the minority of students who will have to produce designs and the majority that
will simply have to comprehend them”
[Budgen-95]. This remark applies to other phases of the life cycle, and to
teaching process concepts as well.
Furthermore, in teaching software
engineering, the usual tension between theory and practice, is compounded by
the requirement to balance whatever science we can muster, with learning the
programming language, OS, or process model, currently popular in industry. Even
though it makes sense to give our students the best chance at finding a job,
there is a danger here for academia to abdicate our mission of education for
the reinforcement of what has been called ‘lemming-gineering’. In my view, the
lemming-like behavior of blindly espousing whatever is in demand at the time is
responsible for the slow adoption of
better and proven solutions in industry. It is Lemming-gineering that
makes industry mandate C for all applications. It is lemming-gineering that
makes us cave in to the ‘demand’ and use the C language instead of Ada to teach
good programming practices. In so doing we show the wrong example; we turn our
students into leming-gineers. No wonder they carry this learned behavior on the
job, and when they are promoted to management, they end up slowing down the
progress of their organization.
Striking the right educational
balance to meet these numerous evolving requirements without producing leming-gineers
is and will remain, for the foreseeable future, an essential (albeit mainly
political) difficulty of our job.
We often hear how slow our
progress is compared to the neck breaking speed of hardware engineering. Brooks
observes that “...the anomaly is not that software progress is so slow, but that computer hardware
progress is so fast.” [Brooks-87] Indeed, progress in software technology is
fast enough that teaching evolving methods, languages, operating systems,
networks, tools, and so on require vigilantly tracking a multitude of moving
targets. Blending process concepts, and psychological factors, with this
technology, all in careful balance, make the evolution of curriculum a
formidable challenge. The pace of evolution in all three dimensions of
technology, process and people issues is such that the half life of a software
engineer education is probably less than three years and it is clearly
decreasing.
Since knowledge and technology
are both fueling the knowledge inflation, this essential difficulty of our
mission, can be expected to get worse. This is already having a profound effect
on the value of our degrees, the meaning of education, and the role of
educators in the work place.
Like in software engineering,
past progress has been achieved by addressing the accidental complexity of the
field.
For instance, the ACM/IEEE-CS
joint curriculum task force [JCTF-91] has produced documents that help in the
production and delivery of undergraduate software education. It has also
generated a healthy debate. Lin Zucconi provides an excellent summary of the issues in [Zucconi-95]. She states that
the proposed curriculum
“...is overwhelmed
by the CS component and should include:
SQA and related activities such as CM
software testing-theory and practice
software maintenance
software measurement
software safety, reliability, security
and integrity
systems engineering
a practicum of a minimum of one
semester in industry or an industry-like setting
a minimum of a full year team
project-oriented course during which software life cycle issues of process
definition and product development and production are experienced first hand.”
Addressing most of these issues,
the CMU MSE core curriculum [MSE-95] is organized along discipline lines
instead of along life cycle activities. It achieves a good balance between
theory and practice and is taught in 5 semester courses, elective/directive
courses and the studio team project to cover:
Models of software systems
Methods of software development
Management of software development
Analysis of software artifacts
Architectures of software systems
Advanced curriculum supported by
teamwork on real projects (more along
the line of French ‘grandes écoles’ than universities) are indeed becoming
increasingly popular. One can cite the SE integrated curriculum at Embry Riddle
Aeronautical University, the Real World Lab at the Georgia Institute of
technology, the SE curriculum at Rochester Institute of Technology, the
capstone software engineering course at the University of Alabama, and the
master of software engineering at Carnegie Mellon University to name a few. It
is only when the concepts are practiced on real projects that students can
judge their own progress. This in turn helps to close the feedback loop between
instructors and students, curriculum and evolving industrial needs. I believe
this principle to be central to finally addressing the essence of software engineering education.
In the paper quoted earlier
[Zucconi-95], Lin Zucconi also lists
“...five areas of
knowledge and capability necessary for the software engineer to achieve broad
competency:
1.
Systems and software engineering and computer science
2.
Hardware platform-specific knowledge (hw, OS, network,
etc.)
3.
Application domain
4.
Personal and interpersonal skills, ethics and
5.
Business culture (better learned by experience with the
help of a mentor)”
Clearly, such an education cannot
be offered without tight University-Industry cooperation. Lin views
universities as having primary responsibility for the first 2 skills, industry
for the last 3 with some shared and complementary responsibilities for skills 3
and 4.
In fact, active collaboration
between industry and universities from traditional education to full-fledged
partnerships is happening [Carpenter-95]. Examples are the Software Engineering
Laboratory (SEL) at NASA Goddard Space Flight Center (GSFC), the Research
Institute for Computing and Information Systems (RICIS) in Texas, the Software
Center at Embry Riddle Aeronautical University and the University of Southern
California Center for Software Engineering under Barry Boehm.
Such cooperation is vital to
closing the feedback loop between the producers of software engineers and their
customer/partners in industry.
In his book on instructional
design Gagné lists the external factors that foster effective learning
[Gagné-79]:
Contiguity- Stimulus and desired
response must be contiguous in time
Repetition- Necessary but not
sufficient for true learning
Reinforcement- Not only a reward for
following desired behavior but in the sense of Premak’s definition “A new act
(N) is most readily learned when it is immediately followed by an old act (O)
which the individual performs readily, in such a way that doing O is made
contingent on doing N.” [Premak-65]
He also notes the internal
factors that may be influenced by the instruction (fig. 1):
Factual information (and knowing where
to find it)
Intellectual skills (such as those
needed for Algebra)
Cognitive strategies (knowledge
storage and retrieval, self learning)
Inner drive (attitude, self confidence
and motivation)

Figure 1: External
and internal learning factors
I believe that educators will
increasingly bring to bear all external factors to particularly emphasize self learning
and inner drive in their students, helping them close the feedback loop on
themselves through real-world engineering assignments. In a paper given at CSEE
94, Melody Moore calls on cognitive psychology to make the point:
“In an influential
book, Donald Schon [Schon-83] presents evidence that ...expertise is the
interplay of two competencies: core competencies that permit the practitioner
to act and respond effectively in familiar problem situations, and reflective
skills that let the practitioner reason about his/her skills and knowledge when
the most immediate course of action seems likely to be unfruitful.... Our
position is that software engineering educators have a responsibility, to
accelerate that learning process and that this can best be achieved by means of
integrating project classes into the curriculum.” [Moore-94]
Needless to say, such assignments
won’t be easy to grade. How do we reconcile Schon’s principles of ‘reflection
in action’ with the student’s inner drive to get ‘good grades’? How do we
reconcile structured learning and free discovery? The danger is great that we
will end up encouraging students to prefer book work or playing the teacher’s
‘hot buttons’ instead of concentrating
in creative work such as analysis and design. And how do we reward leadership
and risk taking in the face of project failure? Weinberg remarks that
“The fear of new
things, the expectation of failure, and the reluctance to admit weakness all
have a direct retarding effect on learning, whether in a formal classroom
situation or on the job...” [Weinberg-71]
Closing the feedback loop between
teacher and student, and between the industrial customer and the educational
institution will prove central to the learning experience of all parties
involved. We must nurture an environment where students are encouraged to admit
and openly discuss their errors. Only then can we expect to beat cognitive
dissonance at its own game[1]
because only guilt free coaching and sensitive feedback can lead to true
egoless programming in the classroom and on the job.
Weinberg remarks “It is a well
known psychological principle that in order to maximize the rate of learning,
the subject must be fed back information of how well or poorly he is doing.”
[Weinberg-71] Indeed, experiments have repeatedly shown that people who know
they are being judged but are not sure exactly how, will try variations on
their performance to get some feedback even at the risk of a poor evaluation! I
remember doing this myself as a student. I even tried this later at SEI with
various degree of success!
A most powerful closed loop
improvement paradigm is Vic Basili’s experience factory (Fig. 2). Here, two
complementary organizations work in synergy to the fulfillment of the long term
and short term goals of the company. The project organization’s goals are
pragmatic and short term: develop the product on cost and on schedule with the
minimum of overhead. The experience factory organization’s goals are every bit
as pragmatic but also long term: help the project organization select the right
process, tools and components so that they do not re-invent the wheel, provide
developers with real-time feedback on the state of the project, and be the
repository of all project data and lessons learned to do even better next time.
This repository is the experience base. In practice it consists of reports,
models, metrics data bases, memos, handbooks, libraries, process elements, and
other artifacts that collectively constitutes a true corporate memory.
[Basili-94]

Figure 2: The
experience factory
This closed loop improvement
paradigm was most successful in practice as demonstrated by the software
engineering laboratory (SEL) at the NASA Goddard Space Flight Center (GSFC).
The SEL is a joint venture of the University of Maryland, Computer Sciences
Corporation, and the flight dynamics branch at GSFC. Over a period of 15 years,
this 200+ organization doubled its productivity and divided by 4 its number of
post delivery errors on real and complex projects, at a cost of 11% of its
total development effort. This achievement was recognized in 1994 with the
award to SEL of the first IEEE process achievement award. [McGarry-94]
By establishing specific goals, documenting
hypotheses and quantifying expectations, by treating each project as an
experiment, by measuring the results objectively to compare them to
expectations, and by documenting what was learned, the experience factory
brings the scientific method to software engineering. Indeed the SEL status
report offered each year at the Software Engineering Workshop at GSFC shows
that new models, “new theories and principles are continuously discovered,
validated and put into practice” within the SEL, as described by Mary Shaw at
the highest level of her model. [Shaw-90]
Furthermore, one of the most
interesting ideas behind the experience factory is the movement of people and
ideas between the factory proper and the project organization. The scientists
join their engineering colleagues in the project to help implement previous
knowledge and new concepts. During the post mortem phase, engineers join
scientists to write down lessons learned, updating process and enactment data.
This circulation of people and ideas drastically reduces the endemic resistance
that so often hampers software improvement in practice.
I believe the concepts of
experience factory to be eminently applicable to establishing a truly
cooperative process between industry and academia. I believe that only such a
tight cooperation will allow us to tackle the essential complexity of both
software engineering and software education.
At the other end of the scale,
that of the individual engineer, Watts Humphrey offers a novel paradigm to
learn disciplined software engineering by developing programs and other
software work products in a closed loop framework.
This paradigm detailed in Watts’
latest work on the Personal Software Process (PSP) [Humphrey-95] is strikingly
similar to that of the experience factory. While the PSP is described as
downscaling the Capability Maturity Model (CMM), I believe that it can also be seen as a downscaled experience
factory [Roy-94], as an ‘experience workshop’ (fig. 3).
Like with each project in the
experience factory, each PSP exercise embodies a specific set of improvement
goals. The student applies a well defined process to derive a plan to achieve
these goals and then executes the plan. All along the student enacts the
process and collects data (such as time spent by process phase, defects
injected and corrected, etc.). Finally, a post mortem is performed at the end
of the exercise. Lessons learned are contributed to a private experience base
(PSP data, reports, process elements) to feed the next cycle of improvement.
This effectively closes the feedback loop on the student himself [Roy-96].
Note that the PSP measurement
framework, upward compatible processes and contiguous feedback, cover all
external and internal factors listed by Cagné (fig. 1) with an emphasis on
inner drive and self improvement. Furthermore, by emphasizing process
improvement, the PSP also directly implements Schon’s principles of reflection
in action.

Figure 3: The PSP:
Downscaling the experience factory?
As an example of the power of the
PSP closed loop paradigm, figure 4 shows the effectiveness (measured in number
of defects removed per hour) of design reviews, code reviews, compilation, and
unit test for all ten exercises of the PSP and for all students of a class I
taught at the Lawrence Livermore National Laboratory in California. The data
shows that reviews are typically 2 to 4 times more effective than test in
removing defects.
The effect on students is
striking. Seeing such results on their own data convince them forever not only of the value of personal
reviews, but (in the light of experienced cognitive dissonance) of the
importance of walkthroughs and formal inspections as well.

Figure 4: Reviews vs.
test LLNL data
The path seems clearly marked
from the PSP to the CMM, and from the PSP to the experience factory. I believe
that further advances in both software engineering and its attending continuous
education hinge on the disciplined application of a self improvement paradigm
that scales up from the personal, to the team, to the organizational level.
Here again, we can borrow from applied psychology to sketch a probable
evolution of our field.
We have known since Frederick
Taylor that a rigorous process based on the scientific method can improve
productivity while reducing stress in the work place. We have known since Kurt
Lewin about the importance of learning by doing and doing by learning, the
cornerstone in fact of Lewin’s learning organization. We have known since
Douglas McGregor that people will exercise self control toward objectives they
feel committed to. What is next?
In his marvelous book on the
evolution of industrial organizations [Weisbord-88], Marvin Weisbord sheds a
brilliant light on the evolution of management paradigms (figure 5).

Figure 5: The
evolution of industrial organizations
Starting at the turn of the
century with Frederick Taylor we have the myth of the omniscient expert solving
engineering problems piecemeal. I see the analogy with our field as a teacher
running the classroom according to theory X. In the 50’s, participative
management and McGregor’s Theory Y make everyone attack problems piecemeal
albeit in teams. I remember such a situation in 1970 when, as a EE student, I
participated in the creation of our bio medical electronics section. The next
development occurs when experts start looking at the entire system, similar in
a way to what we are doing ourselves today at this conference. This is followed
by the collective study and resolution of system wide problems along true
democratic principles (third wave management).
Pursuing the analogy, I believe
that the total involvement of the educator, students, and the industrial
customer in the creation and continuous evolution of the software engineering
curriculum is the future of our field and the key to a mature software
engineering profession [Ford-96].
The creation of software
engineering institutes in nearly all major countries, the funding of software
centers of excellence and process
improvement efforts in corporations of all sizes are signs that the continuous
improvement of software engineering has become a strategic concern for
governments and corporations alike. Marvin Weisbord describes the stakes in
these terms:
“Informed self
control, not close supervision is the only way to operate new technologies....
Knowledge and skills can’t be pumped into people the way traditional schools
have done it. They can be mastered only by applying theory directly on the job,
to real problems, here and now. That requires the learner’s direct
involvement... We better fight for the integration of social, technical and
economic change. Otherwise, we surely will put ourselves on the losing side of
the knowledge revolution.” [Weisbord-88]
Educators, like managers, are
seeing their role evolve away from directing, toward mentoring when in school
and coaching thereafter. But in these times of fast paced and incessant change,
our role as educators goes even beyond coaching. Since we are on the first line
of this knowledge revolution, the essence of our mission is to inspire our
students into inspiring themselves for their entire professional life.
The closing sentences in Watts Humphrey’s
last book (A Discipline for Software Engineering) offer a powerful example
of such an inspiring message. It is
with this quote that I conclude each of my PSP courses. Frankly, I don’t see
what I could add to this:
“Deciding what you
want from your chosen field is like asking what you want from life.
Surprisingly often, people achieve their objectives, but in ways they did not
expect. Life rarely turns out the way we plan. While our carefully developed
strategies may go down in flames, a new and more rewarding opportunity shows up
in the ashes. The key is to keep an open mind and to keep looking. In life, we
all reach the same end, so we need to concentrate on the trip. Just as with a
process, once you decide how you want to live, the rest will follow. Devote
yourself to excellence, and you just might achieve it. That would be worth the
trip”. [Humphrey-95]
Bibliography
[Basili-89] Victor Basili,
`Software Development: A Paradigm for the Future’, Proceedings of the
thirteenth Annual International Computer Software & Applications
Conference, Orlando, FL, September 20-22, 1989.
[Brooks-87] Frederick P. Brooks,
‘No Silver Bullet: Essence and Accidents of Software Engineering’, Computer,
April 1987 (first published in Information
Processing’86)
[Budgen-95] David Budgen, ‘Is
Teaching Software Design a “Wicked” Problem Too?’, proceedings of the 8th SEI
CSEE Conference on Software Engineering Education, New Orleans, LA, March 1995,
Springer.
[Carpenter-95] Maribeth B.
Carpenter, ‘Directory of Industry and University Collaborations with a Focus on
Software Engineering Education’, special report CMU/SEI-95-SR-011, SEI, March
1995.
[Crosby-79] Phil Crosby, ‘Quality
is Free’, McGraw-Hill, 1979.
[Ford-96] Gary Ford, Norman E.
Gibbs, “A Mature Profession of Software Engineering’, technical report
CMU/SEI-96-TR-004, January, 1996.
[Gagné-79] Robert M. Gagné and
Leslie J. Briggs, ‘Principles of Instructional Design’, Holt, Rinehart and
Winston, 1979.
[Humphrey-95] Watts S. Humphrey,
`A Discipline for Software Engineering',
Addison Wesley, 1995.
[JCTF-91] Allen B. Tucker, Ed, ‘A
Summary of the ACM/IEEE-CS Joint Curriculum Task Force Report- Computing
Curricula 1991’, CACM, Vol. 34, No 6, June 1991.
[Kaplan-95] Craig Kaplan, Ralph
Clark, Victor Tang, ‘Secrets of Software Quality’, McGraw-Hill, 1995.
[McGarry-94] Frank McGarry et
al., ‘Software Process Improvement in the NASA Software Engineering
Laboratory’, technical report CMU/SEI-94-TR-22, December 1994.
[Moore-94] Melody Moore and Colin
Potts, ‘Learning by Doing: Goals and Experience of Two Software Engineering
Project Courses’, Proceedings of the 7th SEI CSEE Conference on Software
Engineering Education, San Antonio, TX, January 1994, Springer-Verlag.
[MSE-95] David Garlan et al.,
‘The CMU Master of Software Engineering Core Curriculum’, proceedings of the
8th SEI CSEE Conference on Software Engineering Education, New Orleans, LA,
March 1995, Springer.
[Premak-65] D. Premak,
‘Reinforcement Theory’, Proceedings of
Nebraska Symposium on Motivation, Lincoln: University of Nebraska Press, 1965.
[Robillard-94] Pierre N.
Robillard, Jean Maynrand, Jean-Normand Drouin, ‘Process Self Assessment in an
Educational Context’, Proceedings of the 7th SEI CSEE Conference on Software
Engineering Education, San Antonio, TX, January 1994, Springer-Verlag.
[Roy-94] Daniel M. Roy, ‘The PSP:
Downscaling the Factory?’, proceedings of the nineteenth annual Software
Engineering Workshop, GSFC, December 1994.
[Roy-96] Daniel M. Roy, ‘The PSP:
An Ego-Centered SPI Paradigm’, proceedings of the 1996 SEPG conference,
Atlantic city, May 1996.
[Schon-83] Donald A. Schon, ‘The
Reflective Practitioner: How Professionals Think in Action’, Basic books, 1983.
[Shaw-90] Mary Shaw, ‘Prospects
for an Engineering Discipline of Software’, SEI, September 1990. See also, IEEE
Software, November 1990.
[Weinberg -71] Gerald M.
Weinberg, ‘The Psychology of Computer Programming’, Van Nostrand Reinhold,
1971.
[Weisbord-88] Marvin R. Weisbord,
'Productive Workplaces - Organizing and Managing for Dignity, Meaning, and
Community', Jossey-Bass, 1988.
[Zucconi-95] Lin Zucconi,
‘Essential Knowledge for the Practicing Software Engineer and the
Responsibilities of University and Industry for Her Education’, proceedings of
the 8th SEI CSEE Conference on Software Engineering Education, New Orleans, LA,
March 1995, Springer.
[1]
Cognitive dissonance
is the discomfort we feel when we are confronted with a situation that clashes
with our self image. We may avoid truly looking for errors during personal
reviews because of the dissonance with our ego for instance, hence the
advantage of formal inspections in teams. See [Weinberg-71] chapter 4 p. 52..60
for more on this subject.