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.