What Journalists Need to Know Eric Roberts Professor of Computer Science Knight Fellowship Program Stanford University January 6, 2010 Journalistopia.com.

Slides:



Advertisements
Similar presentations
Our school: typical Greek school traditional models of education in its daily instructive practice. Past few years: efforts to modernize these instructive.
Advertisements

OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
Welcome to the seminar course
OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
Patterns in Game Design Chapter 9: Game Design Patterns for Narrative Structures, Predictability, and Immersion Patterns CT60A7000 Critical Thinking and.
I started school with the intention of becoming a web developer and I have been here a year so far working for a degree in Web Technologies. My grades.
Computer Information Systems Jennings A. Jones College of Business Middle Tennessee State University.
No Silver Bullet “There is no single development, in either technology or management technique, which by itself promises even one order-of magnitude improvement.
School of Business University of Bridgeport Admissions Presentation Robert Gilmore, Ph.D. Associate Dean School of Business.
CHAPTER 13 THE LABOR MARKET
Copyright©2004 South-Western 19 Earnings and Discrimination.
Professional Practice and Computing Curricula 2001 Eric Roberts Professor of Computer Science Senior Associate Dean of Engineering Stanford University.
CSCD 555 Research Methods for Computer Science
Earnings and Discrimination Chapter 19 Copyright © 2001 by Harcourt, Inc. All rights reserved. Requests for permission to make copies of any part of the.
© 2007 Thomson South-Western. Earnings and Discrimination Differences in Earnings in the United States Today –The typical physician earns about $200,000.
Computational Thinking Everywhere Eric Roberts Professor of Computer Science Stanford University The “Broad Audience for CS1” Approach Computational Thinking.
Labor Dynamics of the IT Economy What IT Planners Need to Know About the Nature of Programming Eric Roberts Professor of Computer Science Stanford University.
Computing and Competitiveness: Eric Roberts Professor of Computer Science Stanford University CISAC February 4, 2009 Implications of the Programmer Shortage.
Creating Value through Human Resources Chapter 1.
Ch. 21: Production and Costs Del Mar College John Daly ©2003 South-Western Publishing, A Division of Thomson Learning.
OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
Make a Difference! Discover a Career in Healthcare Management!
What Happens When We End Up Teaching All Students Computing
The Impact of Computers on our World Eric Roberts Professor of Computer Science Stanford Club for European Affairs Paris, France 3 June 2013 The View from.
VENDORS, CONSULTANTS AND USERS
Make a Difference! Discover a Career in Healthcare Management!
Computer Programmer By David Cheng. Job Summary A programmer develops and maintains software on a large mainframe system or one who develops software.
Marketing BY: CHEREESE LANGLEY. Nature of work Formulate, direct and coordinate marketing activities and policies to promote products and services, working.
IT Job Roles Task 20. Software Engineer Job Description Software engineers are responsible for creating and maintaining software of various different.
Occupational Career Project By Jimmy Evans. I want to pursue a career in computer engineering. Specifically something in computer software. I think a.
Career Research Project
Presentation by: Scott Geiger
OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
Defining Competitiveness
© Thomson South-Western CHAPTER 1 SLIDE1 Ann K. Jordan Lynne T. Whaley Investigating Your Career Preparing Your Path to Success.
Career Investigation Purpose of this course: To guide students through the career decision-making process - conducting a thorough self-appraisal; investigating.
Working © 2013 Cengage Learning. All rights reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or.
MSCA6-1- Students will understand the personal nature of work and how it relates to them as individuals and as integral parts of society. a) Identify reasons.
Profile of an Engineering Education and Professions Introduction to Mechanical Engineering The University of Texas-Pan American College of Science and.
Why is software engineering worth studying?  Demand for software is growing dramatically  Software costs are growing per system  Many projects have.
Is Graduate School for You?. Nah – Time to Make Some $$ M.S. earns MORE $$$$ –2002 spring: B.S. CS: $53,000; M.S. CS: $63,000 Source: National Association.
Multimedia Developer Herbert Anthony Colon MUM 2702, Professor Calle Miami Dade College Spring 2007 Herbert Anthony Colon MUM 2702, Professor Calle Miami.
© 2006 Cisco Systems, Inc. All rights reserved.Cisco ConfidentialPresentation_ID 1 Note to Presenter  This presentation is intended to be used in hosting.
OverviewOverview – Preparation – Day in the Life – Earnings – Employment – Career Path Forecast – ResourcesPreparationDay in the LifeEarningsEmploymentCareer.
McGraw-Hill/Irwin © 2005 The McGraw-Hill Companies, Inc. All rights reserved. 7-1 Defining Competitiveness Chapter 7.
Employability Skills Session 10 Developing your Career.
Information Systems. What are Information Systems? The largest growth in most economies is coming from 'information' industries. The success of such knowledge-based.
CS 110: Introduction to Computer Science Frequently asked questions about a CS major and CS career.
Professional IT Roles Investigate IT professional roles. Find out what each role involves, what the job entails. Identify what personal qualities are needed.
Eric Roberts Professor of Computer Science Stanford University Google Atlanta October 1, 2010 Converting Java into JavaScript.
Career Profile: Systems Analyst Jenn Sroka. Is a Career as a Systems Analyst right for you? Duties include: Planning, design, installation, and development.
Unit 1 – Improving Productivity
Mixed Numbers and Percents © Math As A Second Language All Rights Reserved next #7 Taking the Fear out of Math 275%
Faculty Development Workshop Best Practices in Graduate Supervision.
 We graphic designers create images and design solutions that have a high visual impact.  Graphic design, also known as communication design, is the.
Lesson 7 Learning About Careers. Objectives After studying this chapter you will be able to  list factors to consider when choosing a career.  describe.
What Is Pop Culture? Why Study It?. Quickwrite #1: What is “Pop Culture?” Choose a favorite or familiar piece of pop culture (a band, a musician, a film,
McGraw-Hill/Irwin © 2005 The McGraw-Hill Companies, Inc. All rights reserved. 7-1 Defining Competitiveness Chapter 7.
Creating Value through Human Resources
SOFTWARE DEVELOPER By Joey Rodriguez. Background  I have always been interested in computers and how they work. I think it would be very interesting.
19 Earnings and Discrimination. Differences in Earnings in the United States Today – The typical physician earns about $200,000 a year. – The typical.
Make a Difference! Discover a Career in Healthcare Management!
Why is software engineering worth studying?
Is Graduate School for You?
Investigating Your Career
Investigating Your Career
YOUR FUTURE AND INFORMATION TECHNOLOGY
Presentation transcript:

What Journalists Need to Know Eric Roberts Professor of Computer Science Knight Fellowship Program Stanford University January 6, 2010 Journalistopia.com © Danny Sanchez about Computing

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 Eric Roberts Professor of Computer Science Knight Fellowship Program Stanford University January 6, 2010 about the Practice of Computing

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 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. 1. 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. 2. 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. 3. Economic, social, and political factors are more important than technology in determining how computing evolves. 4.

Critical Observations about Software 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. 1. 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. 2. 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. 3. Economic, social, and political factors are more important than technology in determining how computing evolves. 4.

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.... Fred Brooks “No Silver Bullet” IEEE Computer, April 1987 — 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.

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.” — Fred Brooks, The Mythical Man Month

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 Maurice Wilkes, lecture on “The Design and Use of the EDSAC,” September 23, 1979 — “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, 1913-

The Inevitability of Bugs Christopher Strachey, Scientific American, 1966 — 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 lip- service 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. Department of Defense, The Eastport report on Computing in Support of Battle Management, December 1985 — Simply because of its inevitable large size, the software capable of performing the battle management task for strategic defense will contain errors. 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.

Critical Observations about Software 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. 1. 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. 2. 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. 3. Economic, social, and political factors are more important than technology in determining how computing evolves. 4.

The March of Progress 266 pages 274 pages 911 pages 1536 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. —Don Knuth, October 11, 2006 If I had had to learn C ++, I would have majored in music.

Critical Observations about Software 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. 1. 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. 2. 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. 3. Economic, social, and political factors are more important than technology in determining how computing evolves. 4.

Variations in Programmer Productivity In 1968, a study by Sackman, Erikson, and Grant 1 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 studies 2, 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 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 W. Curtis. Substantiating programmer variability. Proceedings of the IEEE, July 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 G. E. Bryan. Not all programmers are created equal. In Richard Thayer, Software Engineering Project Management (second edition), IEEE Computer Society, 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, — 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 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. 1. 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. 2. 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. 3. Economic, social, and political factors are more important than technology in determining how computing evolves. 4.

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 , , Network systems and data communications analysts Personal and home care aides Home health aides Computer software engineers, applications Veterinary technologists and technicians Personal financial advisors Makeup artists, theatrical and performance Medical assistants Veterinarians Substance abuse and behavioral disorder counselors Top 10 job growth categories ( ) Employment (thousands) Growth U.S. Department of Labor, Bureau of Labor Statistics, Employment Projections: , December 2007.Source: Google and Facebook are fighting hard to hire this year’s crop of computer science graduates, we’ve heard, and ground zero is Stanford. Most of the class of 2008 already have job offers even though graduation is months away. Last year, salaries of up to $70,000 were common for the best students. This year, Facebook is said to be offering $92,000, and Google has increased some offers to $95,000 to get their share of graduates. Students with a Master’s degree in Computer Science are being offered as much as $130,000 for associate product manager jobs at Google. 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 Science are high, sometimes exceeding the $100,000 mark. –In 2005, Money magazine rated software engineer as the number one job in America. –Employment in this area is vital for national competitiveness. At the same time, student interest in these disciplines has plummeted. The Computing Research Association (CRA) estimates that computing enrollments have fallen by almost 50 percent since their peak in This decline has been even more rapid among women and minority students, reducing diversity as the pool shrinks.

Degree Production vs. Job Openings 160, , , ,000 80,000 60,000 40,000 20,000 EngineeringPhysical SciencesBiological Sciences Computer Science Ph.D. Master’s Bachelor’s Projected job openings Adapted from a presentation by John Sargent, Senior Policy Analyst, Department of Commerce, at the CRA Computing Research Summit, February 23, 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 projections. See Sources:

Students Like Our Courses But Go Elsewhere Gateway Course for Computer ScienceGateway Course for Management Science & Engineering Computer ScienceManagement Science & Engineering student flow

There Is an Image Problem Dilbert “The Knack”

The Reality Is Also a Problem 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 —Don Knuth, October 11, 2006 Has anyone considered the possibility that it’s just not fun anymore?

The Code-Rush Syndrome

But the Reality Is Also a Problem 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 —Don Knuth, October 11, 2006 Has anyone considered the possibility that it’s just not fun anymore?

The Capital-Labor Divide CapitalLabor

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 ( !) and cinematophotes (machines that project visual images). -Paul Rajlich (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, Addison- Wesley, 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, 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, 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. 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. 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. (photo by Niall Kennedy) Paul Graham

Dick Gabriel’s Proposal for a Software MFA Dick Gabriel Software education today is embodied in Computer Science and Software Engineering programs, supplemented by informal mentoring on the job. I find this approach unsatisfactory. Software development is a performance exhibiting skills developed by an individual—often in groups of teams in order to achieve the scale of software required. In this way, software development is like putting on a play, which requires the skills and performances of a number of people working in tandem on stage and behind the scenes. Such skills can be developed in isolation through practice with other amateurs or even by putting on plays in public without any training at all. But how much faster could talent be developed in a educational program that recognized that writing software has enough of an arts-like performance component that the program was tailored to it? Another apt comparison can be found in the creative writing arts. It is entirely possible to become an extraordinary writer by one’s self, by simply writing and reading, and many excellent writers progress this way. A faster way to gain competence is through a Master of Fine Arts program, which is designed to rapidly increase one’s skills and to get one prepared to bring to bear critical thinking to the process of continuing improvement. Some believe that all aspects of software design and development are really engineering or scientific disciplines where the models of engineering and science apply, and I will not quarrel with them nor try to convince them otherwise.... This proposal is predicated on the belief that being a good software designer and developer requires talent, and that talent can be developed. We explicitly liken the practice of software to the practice of fine art. 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 perhaps a Hogwarts School for Software Wizardry. 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 perhaps a Hogwarts School for Software Wizardry.) SEMESTER AT SEA SEMESTER AT C++ 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.