
The value of nothing : out of nothing comes something . That was an essay I wrote when I was 11 years old and I got a B+ . ( Laughter ) What I 'm going to talk about : nothing out of something , and how we create . And I 'm gonna try and do that within the 18-minute time span that we were told to stay within , and to follow the TED commandments : that is , actually , something that creates a near-death experience , but near-death is good for creativity . ( Laughter ) OK . So , I also want to explain , because Dave Eggers said he was going to heckle me if I said anything that was a lie , or not true to universal creativity . And I 've done it this way for half the audience , who is scientific . When I say we , I do n't mean you , necessarily ; I mean me , and my right brain , my left brain , and the one that 's in between that is the censor and tells me what I 'm saying is wrong . And I 'm going do that also by looking at what I think is part of my creative process , which includes a number of things that happened , actually -- the nothing started even earlier than the moment in which I 'm creating something new . And that includes nature , and nurture , and what I refer to as nightmares . Now in the nature area , we look at whether or not we are innately equipped with something , perhaps in our brains , some abnormal chromosome that causes this muse-like effect . And some people would say that we 're born with it in some other means , and others , like my mother , would say that I get my material from past lives . Some people would also say that creativity may be a function of some other neurological quirk -- van Gogh syndrome -- that you have a little bit of , you know , psychosis , or depression . I do have to say , somebody -- I read recently that van Gogh was n't really necessarily psychotic , that he might have had temporal lobe seizures , and that might have caused his spurt of creativity , and I do n't -- I suppose it does something in some part of your brain . And I will mention that I actually developed temporal lobe seizures a number of years ago , but it was during the time I was writing my last book , and some people say that book is quite different . I think that part of it also begins with a sense of identity crisis : you know , who am I , why am I this particular person , why am I not black like everybody else ? And sometimes you 're equipped with skills , but they may not be the kind of skills that enable creativity . I used to draw . I thought I would be an artist . And I had a miniature poodle . And it was n't bad , but it was n't really creative . Because all I could really do was represent in a very one-on-one way . And I have a sense that I probably copied this from a book . And then I also was n't really shining in a certain area that I wanted to be , and you know , you look at those scores , and it was n't bad , but it was not certainly predictive that I would one day make my living out of the artful arrangement of words . Also , one of the principles of creativity is to have a little childhood trauma . And I had the usual kind that I think a lot of people had , and that is that , you know , I had expectations placed on me . That figure right there , by the way , figure right there was a toy given to me when I was but nine years old , and it was to help me become a doctor from a very early age . I have some ones that were long lasting : from the age of five to 15 , this was supposed to be my side occupation , and it led to a sense of failure . But actually there was something quite real in my life that happened when I was about 14. And it was discovered that my brother , in 1967 , and then my father , six months later , had brain tumors . And my mother believed that something had gone wrong , and she was gonna find out what it was . And she was gonna fix it . My father was a Baptist minister , and he believed in miracles , and that God 's will would take care of that . But of course , they ended up dying , six months apart . And after that , my mother believed that it was fate , or curses -- she went looking through all the reasons in the universe why this would have happened . Everything except randomness . She did not believe in randomness . There was a reason for everything . And one of the reasons , she thought , was that her mother , who had died when she was very young , was angry at her . And so I had this notion of death all around me because my mother also believed that I would be next , and she would be next And when you are faced with the prospect of death very soon , you begin to think very much about everything . You become very creative , in a survival sense . And this , then , led to my big questions . And they 're the same ones that I have today . And they are : Why do things happen , and how do things happen ? And the one my mother asked : How do I make things happen ? It 's a wonderful way to look at these questions , when you write a story . Because after all , in that framework , between page one and 300 , you have to answer this question of why things happen , how things happen , in what order they happen . What are the influences ? How do I , as the narrator , as the writer , also influence that ? And it 's also one that I think many of our scientists have been asking . It 's a kind of cosmology , and I have to develop a cosmology of my own universe , as the creator of that universe . And you see , there 's a lot of back and forth in trying to make that happen , trying to figure it out -- years and years , oftentimes . So when I look at creativity , I also think that it is this sense or this inability to repress my looking at associations in practically anything in life . And I got a lot of them during what 's been going on throughout this conference , almost everything that 's been going on . And so I 'm going to use , as the metaphor , this association : quantum mechanics , which I really do n't understand , but I 'm still gonna use it as the process for explaining how it is the metaphor . So in quantum mechanics , of course , you have dark energy and dark matter . And it 's the same thing in looking at these questions of how things happen . There 's a lot of unknown , and you often do n't know what it is except by its absence . But when you make those associations , you want them to come together in a kind of synergy in the story , and what you 're finding is what matters . The meaning . And that 's what I look for in my work , a personal meaning . There is also the uncertainty principle , which is part of quantum mechanics , as I understand it . ( Laughter ) And this happens constantly in the writing . And there 's the terrible and dreaded observer effect , in which you 're looking for something , and you know , things are happening simultaneously , and you 're looking at it in a different way , and you 're trying to really look for the about-ness . Or what is this story about . And if you try too hard , then you will only write the about . You wo n't discover anything . And what you were supposed to find , what you hoped to find , in some serendipitous way , is no longer there . Now , I do n't want to ignore the other side of what happens in our universe , like many of our scientists have . And so I am going to just throw in string theory here , and just say that creative people are multi-dimensional , and there are eleven levels , I think , of anxiety . ( Laughter ) And they all operate at the same time . There is also a big question of ambiguity . And I would link that to something called the cosmological constant . And you do n't know what is operating , but something is operating there . And ambiguity , to me , is very uncomfortable in my life , and I have it . Moral ambiguity . It is constantly there . And just as an example , this is one that recently came to me . It was something I read in an editorial by a woman who was talking about the war in Iraq . And she said , " Save a man from drowning , you are responsible to him for life . " A very famous Chinese saying , she said . And that means because we went into Iraq , we should stay there until things were solved . You know , maybe even 100 years . So there was another one that I came across , and it 's " saving fish from drowning . " And it 's what Buddhist fishermen say , because they 're not supposed to kill anything . And they also have to make a living , and people need to be fed . So their way of rationalizing that is they are saving the fish from drowning , and unfortunately in the process the fish die . Now what 's encapsulated in both these drowning metaphors -- actually , one of them is my mother 's interpretation , and it is a famous Chinese saying because she said it to me : " Save a man from drowning , you are responsible to him for life . " And it was a warning -- do n't get involved in other people 's business , or you 're going to get stuck . OK . I think if somebody really was drowning , she 'd save them . But both of these sayings , saving a fish from drowning , or saving a man from drowning , to me they had to do with intentions . And all of us in life , when we see a situation , we have a response . And then we have intentions . There 's an ambiguity of what that should be that we should do , and then we do something . And the results of that may not match what our intentions had been . Maybe things go wrong . And so , after that , what are our responsibilities ? What are we supposed to do ? Do we stay in for life , or do we do something else and justify and say , well , my intentions were good , and therefore I cannot be held responsible for all of it ? That is the ambiguity in my life that really disturbed me , and led me to write a book called Saving Fish From Drowning . I saw examples of that , once I identified this question . It was all over the place . I got these hints everywhere . And then , in a way , I knew that they had always been there . And then writing , that 's what happens . I get these hints , these clues , and I realize that they 've been obvious , and yet they have not been . And what I need , in effect , is a focus . And when I have the question , it is a focus . And all these things that seem to be flotsam and jetsam in life actually go through that question , and what happens is those particular things become relevant . And it seems like it 's happening all the time . You think there 's a sort of coincidence going on , a serendipity , in which you 're getting all this help from the universe . And it may also be explained that now you have a focus . And you are noticing it more often . But you apply this . You begin to look at things having to do with your tensions . Your brother , who 's fallen in trouble , do you take care of him ? Why or why not ? It may be something that is perhaps more serious -- as I said , human rights in Burma . I was thinking that I should n't go because somebody said if I did , it would show that I approved of the military regime there . And then after a while , I had to ask myself , " Why do we take on knowledge , why do we take on assumptions that other people have given us ? " And it was the same thing that I felt when I was growing up , and was hearing these rules of moral conduct from my father , who was a Baptist minister . So I decided that I would go to Burma for my own intentions , and still did n't know that if I went there , what the result of that would be if I wrote a book -- and I just would have to face that later , when the time came . We are all concerned with things that we see in the world that we are aware of . We come to this point and say , what do I as an individual do ? Not all of us can go to Africa , or work at hospitals , so what do we do if we have this moral response , this feeling ? Also , I think one of the biggest things we are all looking at , and we talked about today , is genocide . This leads to this question , when I look at all these things that are morally ambiguous and uncomfortable , and I consider what my intentions should be , I realize it goes back to this identity question that I had when I was a child -- and why am I here , and what is the meaning of my life , and what is my place in the universe ? It seems so obvious , and yet it is not . We all hate moral ambiguity in some sense , and yet it is also absolutely necessary . In writing a story , it is the place where I begin . Sometimes I get help from the universe , it seems . My mother would say it was the ghost of my grandmother from the very first book , because it seemed I knew things I was not supposed to know . Instead of writing that the grandmother died accidentally , from an overdose of opium while having too much of a good time , I actually put down in the story that the woman killed herself , and that actually was the way it happened . And my mother decided that that information must have come from my grandmother . There are also things , quite uncanny , which bring me information that will help me in the writing of the book . In this case , I was writing a story that included some kind of detail , period of history , a certain location . And I needed to find something historically that would match that . And I took down this book , and I -- first page that I flipped it to was exactly the setting , and the time period . And the kind of character I needed was the Taiping rebellion , happening in the area near Guilin , outside of that , and a character who thought he was the son of God . You wonder , are these things random chance ? Well , what is random ? What is chance ? What is luck ? What are things that you get from the universe that you ca n't really explain ? And that goes into the story too . These are the things I constantly think about from day to day . Especially when good things happen , and in particular , when bad things happen . But I do think there 's a kind of serendipity , and I do want to know what those elements are , so I can thank them , and also try to find them in my life . Because , again , I think that when I am aware of them , more of them happen . Another chance encounter is when I went to a place -- I just was with some friends , and we drove randomly to a different place , and we ended up in this non-tourist location , a beautiful village , pristine . And we walked three valleys beyond , and the third valley , there was something quite mysterious and ominous , a discomfort I felt . And then I knew that had to be setting of my book . And in writing one of the scenes , it happened in that third valley . For some reason I wrote about cairns -- stacks of rocks -- that a man was building . And I did n't know exactly why I had it , but it was so vivid . I got stuck , and a friend , when she asked if I would go for a walk with her dogs , that I said , sure . And about 45 minutes later , walking along the beach , I came across this . And it was a man , a Chinese man , and he was stacking these things , not with glue , not with anything . And I asked him how is it possible to do this ? And he said , well , I guess with everything in life , there 's a place of balance . And this was exactly the meaning of my story at that point . I had so many examples -- I have so many instances like this when I 'm writing a story , and I cannot explain it . Is it because I had the filter that I have such a strong coincidence in writing about these things ? Or is it a kind of serendipity that we cannot explain , like the cosmological constant ? A big thing that I also think about is accidents . And as I said , my mother did not believe in randomness . What is the nature of accidents ? And how are we going to assign what the responsibility and the causes are , outside of a court of law ? I was able to see that in a firsthand way , when I went to beautiful Dong village , in Guizhou , the poorest province of China . And I saw this beautiful place . I knew I wanted to come back . And I had a chance to do that when National Geographic asked me if I wanted to write anything about China . And I said yes , about this village of Singing people , Singing minority . And they agreed , and between the time I saw this place and the next time I went , there was a terrible accident . A man , an old man , fell asleep , and his quilt dropped in a pan of fire that kept him warm . 60 homes were destroyed , and 40 were damaged . Responsibility was assigned to the family . The man 's sons were banished to live three kilometers away , in a cow shed . And of course , as Westerners , we say , " Well , it was an accident . That 's not fair . It 's the son , not the father . " And when I go on a story , I have to let go of those kinds of beliefs . It takes a while , but I have to let go of them and just go there , and be there . And so I was there on three occasions , different seasons . And I began to sense something different about the history and what had happened before , and the nature of life in a very poor village , and what you find as your joys , and your rituals , your traditions , your links with other families . And I saw how this had a kind of justice in its responsibility . I was able to find out also about the ceremony that they were using , a ceremony they had n't used in about 29 years . And it was to send some men -- a Feng Shui master sent men down to the underworld on ghost horses . Now you , as Westerners , and I , as Westerners , would say well , that 's superstition . But after being there for a while , and seeing the amazing things that happened , you begin to wonder whose beliefs are those that are in operation in the world , determining how things happen . So I remained with them , and the more I wrote that story , the more I got in to those beliefs , and I think that 's important for me -- to take on the beliefs , because that is where the story is real , and that is where I 'm gonna find the answers to how I feel about certain questions that I have in life . Years go by , of course , and the writing , it does n't happen instantly , as I 'm trying to convey it to you here at TED . The book comes and it goes . When it arrives , it is no longer my book . It is in the hands of readers , and they interpret it differently . But I go back to this question of , how do I create something out of nothing ? And how do I create my own life ? And I think it is by questioning , and saying to myself that there are no absolute truths . I believe in specifics , the specifics of story , and the past , the specifics of that past , and what is happening in the story at that point . I also believe that in thinking about things , my thinking about luck , and fate , and coincidences and accidents , God 's will , and the synchrony of mysterious forces , I will come to some notion of what that is , how we create . I have to think of my role . Where I am in the universe , and did somebody intend for me to be that way , or is it just something I came up with ? And I also can find that by imagining fully , and becoming what is imagined , and yet is in that real world , the fictional world . And that is how I find particles of truth , not the absolute truth , or the whole truth . And they have to be in all possibilities , including those I never considered before . So there are never complete answers . Or rather , if there is an answer , it is to remind myself that there is uncertainty in everything , and that is good . Because then I will discover something new . And if there is a partial answer , a more complete answer from me , it is to simply imagine . And to imagine is to put myself in that story , until there was only -- there is a transparency between me and the story I am creating . And that 's how I 've discovered that if I feel what is in the story -- in one story -- then I come the closest , I think , to knowing what compassion is , to feeling that compassion . Because for everything , in that question of how things happen , it has to do with the feeling . I have to become the story in order to understand a lot of that . We 've come to the end of the talk , and I will reveal what is in the bag , and it is the muse , and it is the things that transform in our lives , that are wonderful and stay with us . There she is . Thank you very much ! ( Applause ) 