
So , indeed , I have spent my life looking into the lives of presidents who are no longer alive . Waking up with Abraham Lincoln in the morning , thinking of Franklin Roosevelt when I went to bed at night . But when I try and think about what I 've learned about the meaning in life , my mind keeps wandering back to a seminar that I took when I was a graduate student at Harvard with the great psychologist Erik Erikson . He taught us that the richest and fullest lives attempt to achieve an inner balance between three realms : work , love and play . And that to pursue one realm to the disregard of the other , is to open oneself to ultimate sadness in older age . Whereas to pursue all three with equal dedication , is to make possible a life filled , not only with achievement , but with serenity . So since I tell stories , let me look back on the lives of two of the presidents I 've studied to illustrate this point -- Abraham Lincoln and Lyndon Johnson . As for that first sphere of work , I think what Abraham Lincoln 's life suggests is that fierce ambition is a good thing . He had a huge ambition . But it was n't simply for office or power or celebrity or fame -- what it was for was to accomplish something worthy enough in life so that he could make the world a little better place for his having lived in it . Even as a child , it seemed , Lincoln dreamed heroic dreams . He somehow had to escape that hard-scrabble farm from which he was born . No schooling was possible for him , except a few weeks here , a few weeks there . But he read books in every spare moment he could find . It was said when he got a copy of the King James Bible or " Aesop 's Fables , " he was so excited he could n't sleep . He could n't eat . The great poet Emily Dickinson once said , " There is no frigate like a book to take us lands away . " How true for Lincoln . Though he never would travel to Europe , he went with Shakespeare 's kings to merry England , he went with Lord Byron 's poetry to Spain and Portugal . Literature allowed him to transcend his surroundings . But there were so many losses in his early life that he was haunted by death . His mother died when he was only nine years old . His only sister , Sarah , in childbirth a few years later . And his first love , Ann Rutledge , at the age of 22. Moreover , when his mother lay dying she did not hold out for him the hope that they would meet in an afterworld . She simply said to him , " Abraham , I 'm going away from you now , and I shall never return . " As a result he became obsessed with the thought that when we die our life is swept away , dust to dust . But only as he grew older did he develop a certain consolation from an ancient Greek notion -- but followed by other cultures as well -- that if you could accomplish something worthy in your life , you could live on in the memory of others . Your honor and your reputation would outlive your earthly existence . And that worthy ambition became his lodestar . It carried him through the one significant depression that he suffered when he was in his early 30s . Three things had combined to lay him low . He had broken his engagement with Mary Todd , not certain he was ready to marry her , but knowing how devastating it was to her that he did that . His one intimate friend , Joshua Speed , was leaving Illinois to go back to Kentucky because Speed 's father had died . And his political career in the state legislature was on a downward slide . He was so depressed that friends worried he was suicidal . They took all knives and razors and scissors from his room . And his great friend Speed went to his side and said , " Lincoln , you must rally or you will die . " He said that , " I would just as soon die right now , but I 've not yet done anything to make any human being remember that I have lived . " So fuelled by that ambition , he returned to the state legislature . He eventually won a seat in Congress . He then ran twice for the Senate , lost twice . " Everyone is broken by life , " Ernest Hemingway once said , " but some people are stronger in the broken places . " So then he surprised the nation with an upset victory for the presidency over three far more experienced , far more educated , far more celebrated rivals . And then when he won the general election , he stunned the nation even more by appointing each of these three rivals into his Cabinet . It was an unprecedented act at the time because everybody thought , " He 'll look like a figurehead compared to these people . " They said , " Why are you doing this , Lincoln ? " And he said , " Look , these are the strongest and most able men in the country . The country is in peril . I need them by my side . " But perhaps my old friend , Lyndon Johnson might have put it in less noble fashion , " Better to have your enemies inside the tent pissing out , than outside the tent pissing in . " ( Laughter ) But it soon became clear that Abraham Lincoln would emerge as the undisputed captain of this unruly team . For each of them soon came to understand that he possessed an unparalleled array of emotional strengths and political skills that proved far more important than the thinness of his external résumé . For one thing , he possessed an uncanny ability to empathize with and to think about other peoples ' point of view . He repaired injured feelings that might have escalated into permanent hostility . He shared credit with ease , assumed responsibility for the failure of his subordinates , constantly acknowledged his errors and learned from his mistakes . These are the qualities we should be looking for in our candidates in 2008. ( Applause ) He refused to be provoked by petty grievances . He never submitted to jealousy or brooded over perceived slights . And he expressed his unshakeable convictions in everyday language , in metaphors , in stories . And with a beauty of language , almost as if the Shakespeare and the poetry he had so loved as a child had worked their way into his very soul . In 1863 , when the Emancipation Proclamation was signed , he brought his old friend , Joshua Speed , back to the White House . And remembered that conversation of decades before , when he was so sad . And he , pointing to the Proclamation said , " I believe in this measure my fondest hopes will be realized . " But as he was about to put his signature on the Proclamation his own hand was numb and shaking because he had shaken a thousand hands that morning at a New Year 's reception . So he put the pen down . He said , " If ever my soul were in an act , it is in this act . But if I sign with a shaking hand , posterity will say , 'He hesitated . ' " So he waited until he could take up the pen and sign with a bold and clear hand . But even in his wildest dreams , Lincoln could never have imagined how far his reputation would reach . I was so thrilled to find an interview with the great Russian writer , Leo Tolstoy , in a New York newspaper in the early 1900s . And in it , Tolstoy told of a trip that he 'd recently made to a very remote area of the Caucasus , where there were only wild barbarians , who had never left this part of Russia . Knowing that Tolstoy was in their midst , they asked him to tell stories of the great men of history . So he said , " I told them about Napoleon and Alexander the Great and Frederick the Great and Julius Caesar , and they loved it . But before I finished , the chief of the barbarians stood up and said , " But wait , you have n't told us about the greatest ruler of them all . We want to hear about that man who spoke with a voice of thunder , who laughed like the sunrise , who came from that place called America , which is so far from here , that if a young man should travel there , he would be an old man when he arrived . Tell us of that man . Tell us of Abraham Lincoln . ' " He was stunned . He told them everything he could about Lincoln . And then in the interview he said , " What made Lincoln so great ? Not as great a general as Napoleon , not as great a statesman as Frederick the Great . " But his greatness consisted , and historians would roundly agree , in the integrity of his character and the moral fiber of his being . So in the end that powerful ambition that had carried Lincoln through his bleak childhood had been realized . That ambition that had allowed him to laboriously educate himself by himself , to go through that string of political failures and the darkest days of the war . His story would be told . So as for that second sphere , not of work , but of love -- encompassing family , friends and colleagues -- it , too , takes work and commitment . The Lyndon Johnson that I saw in the last years of his life , when I helped him on his memoirs , was a man who had spent so many years in the pursuit of work , power and individual success , that he had absolutely no psychic or emotional resources left to get him through the days once the Presidency was gone . My relationship with him began on a rather curious level . I was selected as a White House Fellow when I was 24 years old . We had a big dance at the White House . President Johnson did dance with me that night . Not that peculiar -- there were only three women out of the 16 White House Fellows . But he did whisper in my ear that he wanted me to work directly for him in the White House . But it was not to be that simple . For in the months leading up to my selection , like many young people , I 'd been active in the anti-Vietnam War movement , and had written an article against Lyndon Johnson , which unfortunately came out in The New Republic two days after the dance in the White House . ( Laugher ) And the theme of the article was how to remove Lyndon Johnson from power . ( Laughter ) So I was certain he would kick me out of the program . But instead , surprisingly , he said , " Oh , bring her down here for a year , and if I ca n't win her over , no one can . " So I did end up working for him in the White House . Eventually accompanied him to his ranch to help him on those memoirs , never fully understanding why he 'd chosen me to spend so many hours with . I like to believe it was because I was a good listener . He was a great story teller . Fabulous , colorful , anecdotal stories . There was a problem with these stories , however , which I later discovered , which is that half of them were n't true . But they were great , nonetheless . ( Laughter ) So I think that part of his attraction for me was that I loved listening to his tall tales . But I also worried that part of it was that I was then a young woman . And he had had somewhat of a minor league womanizing reputation . So I constantly chatted to him about boyfriends , even when I did n't have any at all . Everything was working perfectly , until one day he said he wanted to discuss our relationship . Sounded very ominous when he took me nearby to the lake , conveniently called Lake Lyndon Baines Johnson . And there was wine and cheese and a red-checked tablecloth -- all the romantic trappings . And he started out , " Doris , more than any other woman I have ever known ... " And my heart sank . And then he said , " You remind me of my mother . " ( Laughter ) It was pretty embarrassing , given what was going on in my mind . But I must say , the older I 've gotten , the more I realize what an incredible privilege it was to have spent so many hours with this aging lion of a man . A victor in a thousand contests , three great civil rights laws , Medicare , aid to education . And yet , roundly defeated in the end by the war in Vietnam . And because he was so sad and so vulnerable , he opened up to me in ways he never would have had I know him at the height of his power -- sharing his fears , his sorrows and his worries . And I 'd like to believe that the privilege fired within me the drive to understand the inner person behind the public figure , that I 've tried to bring to each of my books since then . But it also brought home to me the lessons which Erik Erikson had tried to instill in all of us , about the importance of finding balance in life . For on the surface , Lyndon Johnson should have had everything in the world to feel good about in those last years , in the sense that he had been elected to the Presidency . He had all the money he needed to pursue any leisure activity he wanted . He owned a spacious ranch in the countryside , a penthouse in the city . Sailboats , speedboats . He had servants to answer any whim , and he had a family who loved him deeply . And yet , years of concentration solely on work and individual success meant that in his retirement he could find no solace in family , in recreation , in sports or in hobbies . It was almost as if the hole in his heart was so large that even the love of a family , without work , could not fill it . As his spirits sagged , his body deteriorated until , I believe , he slowly brought about his own death . In those last years , he said he was so sad watching the American people look toward a new President and forgetting him . He spoke with immense sadness in his voice , saying maybe he should have spent more time with his children , and their children in turn . But it was too late . Despite all that power , all that wealth , he was alone when he finally died -- his ultimate terror realized . So as for that third sphere of play , which he never had learned to enjoy , I 've learned over the years that even this sphere requires a commitment of time and energy . Enough so that a hobby , a sport , a love of music , or art , or literature , or any form of recreation , can provide true pleasure , relaxation and replenishment . So deep , for instance , was Abraham Lincoln 's love of Shakespeare , that he made time to spend more than a hundred nights in the theatre , even during those dark days of the war . He said , when the lights went down and a Shakespeare play came on , for a few precious hours he could imagine himself back in Prince Hal 's time . But an even more important form of relaxation for him , that Lyndon Johnson never could enjoy , was a love of , somehow , humor . And feeling out what hilarious parts of life can produce as side light to the sadness . He once said that he laughed so he did not cry . That a good story for him was better than a drop of whiskey . His storytelling powers had first been recognized when he was on the circuit in Illinois . The lawyers and the judges would travel from one county courthouse to the other , and when anyone was knowing Lincoln was in town , they would come from miles around to listen to him tell stories . He would stand with his back against a fire and entertain the crowd for hours with his winding tales . And all these stories became part of his memory bank , so he could call on them whenever he needed to . And they 're not quite what you might expect from our marble monument . One of his favorite stories , for example , had to do with the revolutionary war hero , Ethan Allen . And as Lincoln told the story , Mr. Allen went to Britain after the war . And the British people were still upset about losing the revolution , so they decided to embarrass him a little bit by putting a huge picture of General Washington in the only outhouse , where he 'd have to encounter it . They figured he 'd be upset about the indignity of George Washington being in an outhouse . But he came out of the outhouse not upset at all . And so they said , " Well , did you see George Washington in there ? " " Oh , yes , " he said , " perfectly appropriate place for him . " " What do you mean ? " they said . " Well , " he said , " there 's nothing to make an Englishman shit faster than the sight of General George Washington . " ( Laughter ) ( Applause ) So you can imagine , if you are in the middle of a tense cabinet meeting -- and he had hundreds of these stories -- you would have to relax . So between his nightly treks to the theatre , his story telling , and his extraordinary sense of humor and his love of quoting Shakespeare and poetry , he found that form of play which carried him through his days. In my own life , I shall always be grateful for having found a form of play in my irrational love of baseball . Which allows me from the beginning of spring training to the end of the fall to have something to occupy my mind and heart other than my work . It all began when I was only six years old , and my father taught me that mysterious art of keeping score while listening to baseball games . So that when he went to work in New York during the day , I could record for him the history of that afternoon 's Brooklyn Dodgers game . Now , when you 're only six years old , and your father comes home every single night and listens to you -- as I now realize that I , in excruciating detail , recounted every single play of every inning of the game that had just taken place that afternoon . But he made me feel I was telling him a fabulous story . It makes you think there 's something magic about history to keep your father 's attention . In fact , I 'm convinced I learned the narrative art from those nightly sessions with my father . Because at first , I 'd be so excited I would blurt out , " The Dodgers won ! " or , " The Dodgers lost ! " Which took much of the drama of this two-hour-telling away . ( Laughter ) So I finally learned you had to tell a story from beginning to middle to end . I must say , so fervent was my love of the old Brooklyn Dodgers in those days , that I had to confess in my first confession two sins that related to baseball . The first occurred because the Dodgers ' catcher , Roy Campanella , came to my hometown of Rockville Centre , Long Island , just as I was in preparation for my first Holy Communion . And I was so excited -- first person I 'd ever see outside of Ebbets Field . But it so happened he was speaking in a Protestant Church . When you are brought up as a Catholic , you think that if you ever set foot in a Protestant Church , you 'll be struck dead at the threshold . So I went to my father in tears , " What are we going to do ? " He said , " Do n't worry . He 's speaking in a parish hall . We 're sitting in folding chairs . He 's talking about sportsmanship . It 's not a sin . " But as I left that night , I was certain that somehow I 'd traded the life of my everlasting soul for this one night with Roy Campanella . ( Laughter ) And there were no indulgences around that I could buy . So I had this sin on my soul when I went to my first confession . I told the priest right away . He said , " No problem . It was n't a religious service . " But then , unfortunately , he said , " And what else , my child ? " And then came my second sin . I tried to sandwich it in between talking too much in church , wishing harm to others , being mean to my sisters . And he said , " To whom did you wish harm ? " And I had to say that I wished that various New York Yankees players would break arms , legs and ankles -- ( Laughter ) -- so that the Brooklyn Dodgers could win their first World Series . He said , " How often do you make these horrible wishes ? " And I had to say , every night when I said my prayers . ( Laughter ) So he said , " Look , I 'll tell you something . I love the Brooklyn Dodgers , as you do , but I promise you some day they will win fairly and squarely . You do not need to wish harm on others to make it happen . " " Oh yes , " I said . But luckily , my first confession -- to a baseball-loving priest ! ( Laughter ) Well , though my father died of a sudden heart attack when I was still in my 20s , before I had gotten married and had my three sons , I have passed his memory -- as well as his love of baseball -- on to my boys . Though when the Dodgers abandoned us to come to L. A. , I lost faith in baseball until I moved to Boston and became an irrational Red Socks fan . And I must say , even now , when I sit with my sons with our season tickets , I can sometimes close my eyes against the sun and imagine myself , a young girl once more , in the presence of my father , watching the players of my youth on the grassy fields below . Jackie Robinson , Roy Campanella , Pee Wee Reese , and Duke Snider . I must say there is magic in these moments . When I open my eyes and I see my sons in the place where my father once sat , I feel an invisible loyalty and love linking my sons to the grandfather whose face they never had a chance to see , but whose heart and soul they have come to know through all the stories I have told . Which is why in the end , I shall always be grateful for this curious love of history , allowing me to spend a lifetime looking back into the past . Allowing me to learn from these large figures about the struggle for meaning for life . Allowing me to believe that the private people we have loved and lost in our families , and the public figures we have respected in our history , just as Abraham Lincoln wanted to believe , really can live on , so long as we pledge to tell and to retell the stories of their lives . Thank you for letting me be that storyteller today . ( Applause ) Thank you . 