
One thing the world needs , one thing this country desperately needs is a better way of conducting our political debates . We need to rediscover the lost art of democratic argument . ( Applause ) If you think about the arguments we have , most of the time it 's shouting matches on cable television , ideological food fights on the floor of Congress . I have a suggestion . Look at all the arguments we have these days over health care , over bonuses and bailouts on Wall Street , over the gap between rich and poor , over affirmative action and same-sex marriage . Lying just beneath the surface of those arguments , with passions raging on all sides , are big questions of moral philosophy , big questions of justice . But we too rarely articulate and defend and argue about those big moral questions in our politics . So what I would like to do today is have something of a discussion . First , let me take a famous philosopher who wrote about those questions of justice and morality , give you a very short lecture on Aristotle of ancient Athens , Aristotle 's theory of justice , and then have a discussion here to see whether Aristotle 's ideas actually inform the way we think and argue about questions today . So , are you ready for the lecture ? According to Aristotle justice means giving people what they deserve . That 's it ; that 's the lecture . ( Laughter ) Now , you may say , well , that 's obvious enough . The real questions begin when it comes to arguing about who deserves what and why . Take the example of flutes . Suppose we 're distributing flutes . Who should get the best ones ? Let 's see what people -- What would you say ? Who should get the best flute ? You can just call it out . ( Audience : Random . ) Michael Sandel : At random . You would do it by lottery . Or by the first person to rush into the hall to get them . Who else ? ( Audience : The best flute players . ) MS : The best flute players . ( Audience : The worst flute players . ) MS : The worst flute players . How many say the best flute players ? Why ? Actually , that was Aristotle 's answer too . ( Laughter ) But here 's a harder question . Why do you think , those of you who voted this way , that the best flutes should go to the best flute players ? Peter : The greatest benefit to all . MS : The greatest benefit to all . We 'll hear better music if the best flutes should go to the best flute players . That 's Peter ? ( Audience : Peter . ) MS : All right . Well , it 's a good reason . We 'll all be better off if good music is played rather than terrible music . But Peter , Aristotle does n't agree with you that that 's the reason . That 's all right . Aristotle had a different reason for saying the best flutes should go to the best flute players . He said , that 's what flutes are for -- to be played well . He says that to reason about just distribution of a thing , we have to reason about , and sometimes argue about , the purpose of the thing , or the social activity , in this case , musical performance . And the point , the essential nature , of musical performance is to produce excellent music . It 'll be a happy byproduct that we 'll all benefit . But when we think about justice , Aristotle says , what we really need to think about is the essential nature of the activity in question and the qualities that are worth honoring and admiring and recognizing . One of the reasons that the best flute players should get the best flutes is that musical performance is not only to make the rest of us happy , but to honor and recognize the excellence of the best musicians . Now , flutes may seem ... the distribution of flutes may seem a trivial case . Let 's take a contemporary example of the dispute about justice . It had to do with golf . Casey Martin -- a few years ago , Casey Martin -- did any of you hear about him ? He was a very good golfer , but he had a disability . he had a bad leg , a circulatory problem , that made it very painful for him to walk the course . In fact , it carried risk of injury . He asked the PGA , the Professional Golfers ' Association , for permission to use a golf cart in the PGA tournaments . They said , " No. Now that would give you an unfair advantage . " He sued , and his case went all the way to the Supreme Court , believe it or not , the case over the golf cart . Because the law says that the disabled must be accommodated , provided the accommodation does not change the essential nature of the activity . He says , " I 'm a great golfer . I want to compete . But I need a golf cart to get from one hole to the next . " Suppose you were on the Supreme Court . Suppose you were deciding the justice of this case . How many here would say that Casey Martin does have a right to use a golf cart ? And how many say , no , he does n't ? All right , let 's take a poll , show of hands . How many would rule in favor of Casey Martin ? And how many would not ? How many would say he does n't ? All right , we have a good division of opinion here . Someone who would not grant Casey Martin the right to a golf cart , what would be your reason ? Raise your hand , and we 'll try to get you a microphone . What would be your reason ? ( Audience : It 'd be an unfair advantage . ) MS : It would be an unfair advantage if he gets to ride in a golf cart . All right , those of you , I imagine most of you who would not give him the golf cart worry about an unfair advantage . What about those of you who say he should be given a golf cart ? How would you answer the objection ? Yes , all right . Audience : The cart 's not part of the game . MS : What 's your name ? ( Audience : Charlie . ) MS : Charlie says -- We 'll get Charlie a microphone in case someone wants to reply . Tell us , Charlie , why would you say he should be able to use a golf cart ? Charlie : The cart 's not part of the game . MS : But what about walking from hole to hole ? Charlie : It does n't matter ; it 's not part of the game . MS : Walking the course is not part of the game of golf ? Charlie : Not in my book , it is n't . MS : All right . Stay there , Charlie . ( Laughter ) Who has an answer for Charlie ? All right , who has an answer for Charlie ? What would you say ? Audience : The endurance element is a very important part of the game , walking all those holes . MS : Walking all those holes ? That 's part of the game of golf ? ( Audience : Absolutely . ) MS : What 's your name ? ( Audience : Warren . ) MS : Warren . Charlie , what do you say to Warren ? Charley : I 'll stick to my original thesis . ( Laughter ) MS : Warren , are you a golfer ? Warren : I am not a golfer . Charley : And I am . ( MS : Okay . ) ( Laughter ) ( Applause ) You know , it 's interesting . In the case , in the lower court , they brought in golfing greats to testify on this very issue . Is walking the course essential to the game ? And they brought in Jack Nicklaus and Arnold Palmer . And what do you suppose they all said ? Yes . They agreed with Warren . They said , yes , walking the course is strenuous physical exercise . The fatigue factor is an important part of golf . And so it would change the fundamental nature of the game to give him the golf cart . Now , notice , something interesting -- Well , I should tell you about the Supreme Court first . The Supreme Court decided . What do you suppose they said ? They said yes , that Casey Martin must be provided a golf cart . Seven to two , they ruled . What was interesting about their ruling and about the discussion we 've just had is that the discussion about the right , the justice , of the matter depended on figuring out what is the essential nature of golf . And the Supreme Court justices wrestled with that question . And Justice Stevens , writing for the majority , said he had read all about the history of golf , and the essential point of the game is to get very small ball from one place into a hole in as few strokes as possible , and that walking was not essential , but incidental . Now , there were two dissenters , one of whom was Justice Scalia . He would n't have granted the cart , and he had a very interesting dissent . It 's interesting because he rejected the Aristotelian premise underlying the majority 's opinion . He said it 's not possible to determine the essential nature of a game like golf . Here 's how he put it . " To say that something is essential is ordinarily to say that it is necessary to the achievement of a certain object . But since it is the very nature of a game to have no object except amusement , ( Laughter ) that is , what distinguishes games from productive activity , ( Laughter ) it is quite impossible to say that any of a game 's arbitrary rules is essential . " So there you have Justice Scalia taking on the Aristotelian premise of the majority 's opinion . Justice Scalia 's opinion is questionable for two reasons . First , no real sports fan would talk that way . ( Laughter ) If we had thought that the rules of the sports we care about are merely arbitrary , rather than designed to call forth the virtues and the excellences that we think are worthy of admiring , we would n't care about the outcome of the game . It 's also objectionable on a second ground . On the face of it , it seemed to be -- this debate about the golf cart -- an argument about fairness , what 's an unfair advantage . But if fairness were the only thing at stake , there would have been an easy and obvious solution . What would it be ? ( Audience : Let everyone use the cart . ) Let everyone ride in a golf cart if they want to . Then the fairness objection goes away . But letting everyone ride in a cart would have been , I suspect , more anathema to the golfing greats and to the PGA , even than making an exception for Casey Martin . Why ? Because what was at stake in the dispute over the golf cart was not only the essential nature of golf , but , relatedly , the question , what abilities are worthy of honor and recognition as athletic talents ? Let me put the point as delicately as possible : Golfers are a little sensitive about the athletic status of their game . ( Laughter ) After all , there 's no running or jumping , and the ball stands still . ( Laughter ) So if golfing is the kind of game that can be played while riding around in a golf cart , it would be hard to confer on the golfing greats the status that we confer , the honor and recognition that goes to truly great athletes . That illustrates that with golf , as with flutes , it 's hard to decide the question of what justice requires , without grappling with the question " What is the essential nature of the activity in question , and what qualities , what excellences connected with that activity , are worthy of honor and recognition ? " Let 's take a final example that 's prominent in contemporary political debate : same-sex marriage . There are those who favor state recognition only of traditional marriage between one man and one woman , and there are those who favor state recognition of same-sex marriage . How many here favor the first policy : the state should recognize traditional marriage only ? And how many favor the second , same-sex marriage ? Now , put it this way , what ways of thinking about justice and morality underlie the arguments we have over marriage ? The opponents of same-sex marriage say that the purpose of marriage , fundamentally , is procreation , and that 's what 's worthy of honoring and recognizing and encouraging . And the defenders of same-sex marriage say no , procreation is not the only purpose of marriage . What about a lifelong , mutual , loving commitment ? That 's really what marriage is about . So with flutes , with golf carts , and even with a fiercely contested question like same-sex marriage , Aristotle has a point . Very hard to argue about justice without first arguing about the purpose of social institutions and about what qualities are worthy of honor and recognition . So let 's step back from these cases and see how they shed light on the way we might improve , elevate , the terms of political discourse in the United States , and for that matter , around the world . There is a tendency to think that if we engage too directly with moral questions in politics , that 's a recipe for disagreement , and for that matter , a recipe for intolerance and coercion . So better to shy away from , to ignore , the moral and the religious convictions that people bring to civic life . It seems to me that our discussion reflects the opposite , that a better way to mutual respect is to engage directly with the moral convictions citizens bring to public life , rather than to require that people leave their deepest moral convictions outside politics before they enter . That , it seems to me , is a way to begin to restore the art of democratic argument . Thank you very much . ( Applause ) Thank you . ( Applause ) Thank you . ( Applause ) Thank you very much . Thanks . Thank you . Chris . Thanks , Chris . Chris Anderson : From flutes to golf courses to same-sex marriage . That was a genius link . Now look , you 're a pioneer of open education . Your lecture series was one of the first to do it big . What 's your vision for the next phase of this ? MS : Well , I think that it is possible . In the classroom , we have arguments on some of the most fiercely held moral convictions that students have about big public questions . And I think we can do that in public life more generally . And so my real dream would be to take the public television series that we 've created of the course -- it 's available now , online , free for everyone anywhere in the world -- and to see whether we can partner with institutions , at universities in China , in India , in Africa , around the world , to try to promote civic education and also a richer kind of democratic debate . CA : So you picture , at some point , live , in real time , you could have this kind of conversation , inviting questions , but with people from China and India joining in ? MS : Right . We did a little bit of it here with 1,500 people in Long Beach , and we do it in a classroom at Harvard with about 1,000 students . Would n't it be interesting to take this way of thinking and arguing , engaging seriously with big moral questions , exploring cultural differences and connect through a live video hookup , students in Beijing and Mumbai and in Cambridge , Massachusetts and create a global classroom . That 's what I would love to do . ( Applause ) CA : So , I would imagine that there are a lot of people who would love to join you in that endeavor . Michael Sandel . Thank you so much . ( MS : Thanks so much . ) 