No Slide Title

Download Report

Transcript No Slide Title

What Journalists Need to Know
about Computing
Journalistopia.com © Danny Sanchez
Eric Roberts
Professor of Computer Science
Knight Fellowship Program
Stanford University
January 6, 2010
Journalism Faces Enormous Challenges
Journalism Faces Enormous Challenges
• No one in this room needs me to tell them that the entire
profession of journalism is under assault in the Digital Age.
• I believe that the unintended consequences of the growth of
digital technologies and the social patterns those technologies
encourage represent one of the most important issues facing
our world today. This quarter, I’m using that issue as a focus
for the senior seminar in Science, Technology, and Society:
STS 200. Wired Worlds: Promise and Peril in the Digital Age.
Over the two decades since the creation of the World Wide Web,
communication networks—along with the social networks built on
top of that technology—have changed our world in profound ways.
This version of the STS Senior Colloquium will focus on how
modern networking technology affects our society in both positive
and negative ways.
• Today, I want to talk about something slightly different . . .
What Journalists Need to Know
about the Practice of Computing
Eric Roberts
Professor of Computer Science
Knight Fellowship Program
Stanford University
January 6, 2010
General Thesis
• In terms of the dynamics of work in the field, computing is
different from most engineering domains. Assumptions that
hold true in other, more traditional disciplines often turn out to
be wrong when applied to computing, particularly when a
project requires a significant software-development effort.
Understanding these differences is essential to reporting on
the industry or formulating technology policy.
• My intent in today’s talk is to provide an overview of those
characteristics of computing that journalists and policymakers
need to comprehend in order to do their jobs effectively.
Critical Observations about Software
1. Software development is an extraordinarily difficult task,
exceeding in complexity most other engineering work. That
difficulty, moreover, is intrinsic to the discipline and is not
likely to change in the foreseeable future.
2. Despite advances in tools and methodologies (and to some
extent because of those advances), software development and
software education have become more difficult over the
history of the field.
3. Software development requires people with an unusual
combination of skills. Those people are in short supply, but
their economic value is enormous. Experienced programmers
differ in productivity by several orders of magnitude.
4. Economic, social, and political factors are more important
than technology in determining how computing evolves.
Critical Observations about Software
1. Software development is an extraordinarily difficult task,
exceeding in complexity most other engineering work. That
difficulty, moreover, is intrinsic to the discipline and is not
likely to change in the foreseeable future.
2. Despite advances in tools and methodologies (and to some
extent because of those advances), software development and
software education have become more difficult over the
history of the field.
3. Software development requires people with an unusual
combination of skills. Those people are in short supply, but
their economic value is enormous. Experienced programmers
differ in productivity by several orders of magnitude.
4. Economic, social, and political factors are more important
than technology in determining how computing evolves.
Essential and Accidental Complexity
To see what rate of progress one can expect
in software technology, let us examine the
difficulties of that technology. Following
Aristotle, I divide them into essence, the
difficulties inherent in the nature of software,
and accidents, those difficulties that today
attend its production but are not inherent. . . .
The complexity of software is an essential
property not an accidental one. Hence,
descriptions of a software entity that abstract
away its complexity often abstract away its
essence.
—Fred Brooks
“No Silver Bullet”
IEEE Computer, April 1987
What Makes Software Different?
• Computers are used to solve hard problems, which means that
the difficulty is typically intrinsic to the application.
• Software has high “system complexity” and is therefore
difficult to distribute among members of a large team.
Brooks’s Law
“Adding manpower to a late software project makes it later.”
Months
Months
— Fred Brooks, The Mythical Man Month
Number of Workers
Fig. 2.3 Time versus number of workers—
partitionable task requiring communication
Number of Workers
Fig. 2.4 Time versus number of workers—
task with complex interrelationships
What Makes Software Different?
• Computers are used to solve hard problems, which means that
the difficulty is typically intrinsic to the application.
• Software has high “system complexity” and is therefore
difficult to distribute among members of a large team.
• Software systems are discrete rather than continuous: there is
no way to “overengineer” such systems to ensure correctness.
• Software systems are inherently chaotic: small changes in
initial conditions generate massive changes in the results.
• Bugs are omnipresent and inevitable.
The Discovery of Debugging
“As soon as we started programming, we found to our
surprise that it wasn’t as easy to get programs right as we had
thought. Debugging had to be discovered. I can remember the
exact instant when I realized that a large part of my life from
then on was going to be spent in finding mistakes in my own
programs.”
— Maurice Wilkes, lecture on “The Design and
Use of the EDSAC,” September 23, 1979
Maurice Wilkes, 1913-
The Inevitability of Bugs
Simply because of its inevitable large size, the software capable of
performing the battle management task for strategic defense will contain
errors. All systems of useful complexity contain software errors.
— Department of Defense, The Eastport report on
Computing in Support of Battle Management,
December 1985
Although programming techniques have improved immensely since the early
days, the process of finding and correcting errors in programming known
graphically—if inelegantly—as debugging still remains a most difficult,
confused and unsatisfactory operation. . . . Although we are happy to pay lipservice to the adage that to err is human, most of us like to make a small
private reservation about our own performance on special occasions when we
really try. It is somewhat deflating to be shown publicly and incontrovertibly
by a machine that even when we do try, we in fact make just as many
mistakes as other people. If your pride cannot recover from this blow, you
will never make a programmer.
— Christopher Strachey, Scientific American, 1966
Critical Observations about Software
1. Software development is an extraordinarily difficult task,
exceeding in complexity most other engineering work. That
difficulty, moreover, is intrinsic to the discipline and is not
likely to change in the foreseeable future.
2. Despite advances in tools and methodologies (and to some
extent because of those advances), software development and
software education have become more difficult over the
history of the field.
3. Software development requires people with an unusual
combination of skills. Those people are in short supply, but
their economic value is enormous. Experienced programmers
differ in productivity by several orders of magnitude.
4. Economic, social, and political factors are more important
than technology in determining how computing evolves.
The March of Progress
1536 pages
911 pages
266 pages
274 pages
Sobering Thoughts
• There are more public methods in Java’s standard package
hierarchies than there are words in Jensen and Wirth’s Pascal
User Manual and Report. Thus, the amount of explanation
once deemed sufficient to teach the standard introductory
programming language is no longer sufficient for an index of
the operations available today.
• Typical software today exists at a level of scale and complexity
that would have been unthinkable a generation ago. The most
common operating system used in mobile phones, for example,
contains approximately 100 million lines of code.
If I had had to learn C++, I would have majored in music.
—Don Knuth, October 11, 2006
Critical Observations about Software
1. Software development is an extraordinarily difficult task,
exceeding in complexity most other engineering work. That
difficulty, moreover, is intrinsic to the discipline and is not
likely to change in the foreseeable future.
2. Despite advances in tools and methodologies (and to some
extent because of those advances), software development and
software education have become more difficult over the
history of the field.
3. Software development requires people with an unusual
combination of skills. Those people are in short supply, but
their economic value is enormous. Experienced programmers
differ in productivity by several orders of magnitude.
4. Economic, social, and political factors are more important
than technology in determining how computing evolves.
Variations in Programmer Productivity
• In 1968, a study by Sackman, Erikson, and Grant1 revealed that
programmers with the same level of experience exhibit variations
of more than 20 to 1 in the time required to solve particular
programming problems.
• More recent studies2, 3, 4 confirm this high variability.
• Most industry insiders believe that the productivity variance is
even higher today. In 2005, Google’s VP for Engineering, Alan
Eustace, told The Wall Street Journal that one top-notch engineer
is worth 300 times or more than the average.5
1
2
3
4
5
H. Sackman, W. J. Erikson, and E. E. Grant. Exploratory experimental studies comparing on-line and off-line programming
performance. Communications of the ACM, January 1968.
W. Curtis. Substantiating programmer variability. Proceedings of the IEEE, July 1981.
T. DeMarco and T. Lister. Programmer performance and the effects of the workplace. Proceedings of the 8th International
Conference on Software Engineering. IEEE Computing Society Press, August 1985.
G. E. Bryan. Not all programmers are created equal. In Richard Thayer, Software Engineering Project Management (second
edition), IEEE Computer Society, 1997.
T. Pui-Wing and K. Delaney. Google’s growth helps ignite Silicon Valley hiring frenzy. Wall Street Journal, November 23, 2005.
The Microsoft Programming Personae
Microsoft’s cultural lore defines three types of programmers:
Mort is your most common developer, who doesn’t have a CS
background, may even be a recent newcomer, and doesn’t quite
understand what the computer is doing under the covers, but who
writes the dinky IT programs that make businesses run. Elvis, more
knowledgeable, cares about code quality, but has a life too. Einstein
writes some serious-ass piece of code like device drivers, wants to
get things done, needs to be able to go low level and high level,
needs a language without restrictions to get his job done.
— Wesner Moise, “Who are you? Mort, Elvis or Einstein,” September 25, 2003
http://wesnerm.blogs.com/net_undocumented/2003/09/who_are_you_mor.html
For the most part, Microsoft (along with
Google and other first-rank companies)
are seeking to hire the Einsteins, which
explains the low hiring ratio.
Productivity Variations Are Common
• The idea that individuals might differ in productivity by two or
more orders of magnitude initially seems hard to believe.
• In fact, such differences in effectiveness occur across a range
of occupational categories:
–
–
–
–
–
–
Mathematicians
Creative artists (writers, composers, poets, painters)
Performers (musicians, actors)
Motion picture directors
Financial wizards, CEOs
Professional athletes
• No one achieves mastery in any of these fields on the basis of
raw talent alone. Training and practice are essential.
Critical Observations about Software
1. Software development is an extraordinarily difficult task,
exceeding in complexity most other engineering work. That
difficulty, moreover, is intrinsic to the discipline and is not
likely to change in the foreseeable future.
2. Despite advances in tools and methodologies (and to some
extent because of those advances), software development and
software education have become more difficult over the
history of the field.
3. Software development requires people with an unusual
combination of skills. Those people are in short supply, but
their economic value is enormous. Experienced programmers
differ in productivity by several orders of magnitude.
4. Economic, social, and political factors are more important
than technology in determining how computing evolves.
The Importance of Economics
• Economics has more impact on directions in modern computing
than technology does. The most significant factors are:
– Low distribution costs. Software is expensive to produce, but
essentially free to duplicate and distribute. Because development
costs can be distributed across a larger base, big players have a
distinct advantage.
– Network externalities. The value of software increases with the
number of people using that software.
– High cost-effectiveness. Software tends to be remarkably useful,
even when bugs exist.
– Shortage of highly skilled labor. As noted earlier, productivity
varies widely among individuals. Demand is high for the most
productive programmers, but the supply is extremely limited.
– Economics affects student choices. From 2001 to 2007, students
shied away from computer science majors, choosing instead
majors that lead to careers in finance.
The Pipeline Paradox in Computing
• The computing industry offers some of the best employment
opportunities for college graduates in the United States today:
– The number of jobs in the domestic software industry are at an all-time
high and are projected to grow dramatically over the next decade.
– Salaries for newly minted B.S. graduates in Computer
Employment Science are
high, sometimes exceeding the $100,000 mark. (thousands)
Growth
Top 10 job growth categories (2006-2016)
2006
2016
– In
2005,systems
Money
rated software
1.
Network
andmagazine
data communications
analysts engineer
262as the
402number
53.4 one
job in America.
2. Personal and home care aides
767
1,156
50.6
–
Employment
in
this
area
is
vital
for
national
competitiveness.
3. Home health aides
787
1,171
48.7
4.
Computer software engineers, applications
507
733
44.6
• At
same
time, and
student
interest in these71 disciplines
5. the
Veterinary
technologists
technicians
100
41.0has
plummeted.
The
Computing Research Association
(CRA)
6. Personal financial
advisors
176
248
41.0
Google and Facebook are fighting hard to hire this year’s
estimates
that computing
enrollments
by3almost
7. Makeup
theatrical
and performance
2
39.8 50
crop of artists,
computer
science graduates,
we’ve heard, andhave fallen
ground zero is Stanford. Most of the class of 2008 already
percent
since
their
peak
in is2000.
8. Medical
assistants
465
148
35.4
have job
offers even
though
graduation
months away.
•
Last year, salaries of up to $70,000 were common for the
9. Veterinarians
best students. This year, Facebook is said to be offering
ThisSubstance
decline
has
been
more
rapid
$92,000,
and
Google
increasedeven
some
offers
to $95,000
10.
abuse
andhas
behavioral
disorder
counselors
62
84
35.0
among
women
83
112
34.3and
to get their share of graduates. Students with a Master’s
minority
students,
reducing
diversity
as theProjections:
pool shrinks.
in
Computer
Science
are of
being
offered
as much
as
Source: U.S.degree
Department
of Labor,
Bureau
Labor
Statistics,
Employment
2006-16, December 2007.
$130,000 for associate product manager jobs at Google.
Degree Production vs. Job Openings
160,000
140,000
120,000
100,000
Ph.D.
Master’s
Bachelor’s
Projected job openings
80,000
60,000
40,000
20,000
Engineering
Physical Sciences
Biological Sciences
Computer Science
Sources: Adapted from a presentation by John Sargent, Senior Policy Analyst, Department of Commerce, at the
CRA Computing Research Summit, February 23, 2004. Original sources listed as National Science
Foundation/Division of Science Resources Statistics; degree data from Department of Education/National
Center for Education Statistics: Integrated Postsecondary Education Data System Completions Survey;
and NSF/SRS; Survey of Earned Doctorates; and Projected Annual Average Job Openings derived from
Department of Commerce (Office of Technology Policy) analysis of Bureau of Labor Statistics 2002-2012
projections. See http://www.cra.org/govaffairs/content.php?cid=22.
Students Like Our Courses But Go Elsewhere
Gateway Gateway
Course for
Course
Management
for Computer
ScienceScience
& Engineering
Computer Science
Management Science & Engineering
student
flow
There Is an Image Problem
Dilbert
QuickTime™ and a
H.263 decompressor
are needed to see this picture.
“The Knack”
http://www.youtube.com/watch?v=CmYDgncMhXw
The Reality Is Also a Problem
Has anyone considered the possibility that it’s just not fun anymore?
—Don Knuth, October 11, 2006
• Students at Stanford have expressed the following concerns:
– Long hours with little chance for a balanced life
– A less pleasant social milieu than other occupations
The Code-Rush Syndrome
QuickTime™ and a
H.264 decompressor
are needed to see this picture.
But the Reality Is Also a Problem
Has anyone considered the possibility that it’s just not fun anymore?
—Don Knuth, October 11, 2006
• Students at Stanford have expressed the following concerns:
– Long hours with little chance for a balanced life
– A less pleasant social milieu than other occupations
– A sense that success in programming is possible only for those
who are much brighter than they see themselves to be
– Work that is often repetitive and unchallenging, particularly
when it involves maintaining legacy technology
– Programming has become more difficult than it used to be
– No chance for a lasting impact because of rapid obsolescence
– Fears that employment with an individual company is dicey even
though opportunities are good in the industry as a whole
– Frustration at being managed by nontechnical people who make
more money but are not as bright
– A perception that programmers are definitely on the labor side of
the labor/capital divide
The Capital-Labor Divide
Capital
Labor
Suggestions for further reading . . .
E. M. Forster’s The Machine Stops
Anybody who uses the Internet
should read E. M. Forster’s The
Machine Stops. It is a chilling,
short story masterpiece about
the role of technology in our
lives. Written in 1909, it’s as
relevant today as the day it was
published. Forster has several
prescient notions including
instant messages (email!) and
cinematophotes (machines that
project visual images).
-Paul Rajlich
http://brighton.ncsa.uiuc.edu/~prajlich/forster.html
(Formerly top Google entry for “Forster "Machine Stops"” — now behind Wikipedia)
The Mythical Man-Month
Frederick Brooks, Jr., The Mythical
Man-Month: Essays on Software
Engineering, 2nd edition, AddisonWesley, 1995.
Originally published in 1975, The
Mythical Man-Month remains the
classic text on software engineering
and its importance. Even though
Brooks is an expert programmer
with experience in both industry and
academia, The Mythical Man-Month
is easily accessible to a popular
audience.
Psychology of Computer Programming
Gerald M. Weinberg, Psychology of
Computer Programming, Dorset
House, 1998.
From the time it first appeared in
1971, this book has offered the best
popular description of the mental
processes of programmers. The
1998 edition includes reflections on
how well each chapter has held up
over time.
Normal Accidents
Charles Perrow, Normal Accidents:
Living with High-Risk Technologies,
New York: Basic Books, 1984.
Although this book does not focus
specifically on programming—and
indeed does not include software or
programming in its index—the issues
that it raises are critical to an
understanding of why complex
technological systems fail.
The End
Paul Graham’s Hackers and Painters
When I finished grad school in computer science I went to
art school to study painting. A lot of people seemed surprised
that someone interested in computers would also be
interested in painting. They seemed to think that hacking and
painting were very different kinds of work—that hacking
was cold, precise, and methodical, and that painting was the
frenzied expression of some primal urge.
<tab>Both of these images are wrong. Hacking and painting
have a lot in common. In fact, of all the different types of
people I’ve known, hackers and painters are among the most
alike.
<tab>What hackers and painters have in common is that
they’re both makers. Along with composers, architects, and
writers, what hackers and painters are trying to do is make
good things.
http://www.paulgraham.com/hp.html
Paul Graham
(photo by Niall Kennedy)
Dick Gabriel’s Proposal for a Software MFA
Softwareapt
education
todaycan
is be
embodied
Computer
Another
comparison
found ininthe
creative Science
writing
and ItSoftware
programs,
supplemented
by
arts.
is entirelyEngineering
possible to become
an extraordinary
writer
informal
mentoring
on the
job. and
I find
this and
approach
by
one’s self,
by simply
writing
reading,
many
unsatisfactory.
development
is a way
performance
excellent
writers Software
progress this
way. A faster
to gain
exhibiting skills
developed
an individual—often
in
competence
is through
a Masterbyof Fine
Arts program, which
groups
of teams
in order
to achieve
is
designed
to rapidly
increase
one’s the
skillsscale
and ofto software
get one
required. toInbring
this way,
software
is like
putting
prepared
to bear
criticaldevelopment
thinking to the
process
of
on a play, which
requires Some
the skills
and that
performances
continuing
improvement.
believe
all aspectsofofa
number of
people
in tandem
on stage
and behind
software
design
andworking
development
are really
engineering
or
the scenes.disciplines
Such skillswhere
can bethe
developed
in isolation
through
scientific
models of
engineering
and
practice apply,
with other
even by
putting
in
science
and Iamateurs
will notorquarrel
with
themon
norplays
try to
public without
any training
convince
them otherwise.
. . . at all. But how much faster
could
be is
developed
educational
that
<tab>
Thistalent
proposal
predicatedinona the
belief that program
being a good
recognizeddesigner
that writing
software has
enoughtalent,
of an and
arts-like
software
and developer
requires
that
performance
programliken
was the
tailored
to it?of
talent
can be component
developed. that
We the
explicitly
practice
software to the practice of fine art.
http://www.dreamsongs.com/MFASoftware.html
Dick Gabriel
software wizard
prizewinning poet
Alternative Models of Software Education
Although Dick Gabriel’s model of an MFA
in software is worth investigating, it may be
more appropriate to create “conservatories”
for the teaching of software arts, similar to
music conservatories. One possibility might
be some sort of New England Conservatory
of Coding. (Or
Or perhaps
perhaps a Hogwarts School
for Software Wizardry.)
Wizardry.
SEMESTER AT C++
SEA
Another model might be to create intensive
programs that encourage students to focus on
the art of software development, in much the
same way that programs like the University
of Virginia’s Semester at Sea program offers
a concentrated immersion in oceanography,
geography, and cultural anthropology.
A Thought Experiment about Offshoring
• Suppose that you are Microsoft and that you can hire a software developer
from Stanford whose loaded costs will be $200,000 per year. Over in
Bangalore, however, you can hire a software developer for $75,000 per year.
Both are equally talented and will create $1,000,000 annually in value.
What do you do?
• Although the developer in Bangalore has a higher return, the
optimal strategy is to hire them both. After all, why throw away
$800,000 a year?
• Any elementary economics textbook will explain that one hires
as long as the marginal value of the new employee is greater
than the marginal cost. The essential point is that companies
seek to maximize return, and not simply to minimize cost.