
﻿ As someone who has spent his entire career trying to be invisible , standing in front of an audience is a cross between an out-of-body experience and a deer caught in the headlights , so please forgive me for violating one of the TED commandments by relying on words on paper , and I only hope I 'm not struck by lightning bolts before I 'm done . I 'd like to begin by talking about some of the ideas that motivated me to become a documentary photographer . I was a student in the '60s , a time of social upheaval and questioning , and on a personal level , an awakening sense of idealism . The war in Vietnam was raging , the Civil Rights Movement was under way , and pictures had a powerful influence on me . Our political and military leaders were telling us one thing , and photographers were telling us another . I believed the photographers , and so did millions of other Americans . Their images fueled resistance to the war and to racism . They not only recorded history , they helped change the course of history . Their pictures became part of our collective consciousness and , as consciousness evolved into a shared sense of conscience , change became not only possible , but inevitable . I saw that the free flow of information represented by journalism , specifically visual journalism , can bring into focus both the benefits and the cost of political policies . It can give credit to sound decision making , adding momentum to success . In the face of poor political judgment or political inaction , it becomes a kind of intervention , assessing the damage and asking us to reassess our behavior . It puts a human face on issues which from afar can appear abstract or ideological or monumental in their global impact . What happens at ground level , far from the halls of power , happens to ordinary citizens one by one . And I understood that documentary photography has the ability to interpret events from their point of view . It gives a voice to those who otherwise would not have a voice . And as a reaction , it stimulates public opinion and gives impetus to public debate , thereby preventing the interested parties from totally controlling the agenda , much as they would like to . Coming of age in those days made real the concept that the free flow of information is absolutely vital for a free and dynamic society to function properly . The press is certainly a business , and in order to survive it must be a successful business , but the right balance must be found between marketing considerations and journalistic responsibility . Society 's problems ca n't be solved until they 're identified . On a higher plane , the press is a service industry , and the service it provides is awareness . Every story does not have to sell something . There 's also a time to give . That was a tradition I wanted to follow . Seeing the war created such incredibly high stakes for everyone involved and that visual journalism could actually become a factor in conflict resolution , I wanted to be a photographer in order to be a war photographer . But I was driven by an inherent sense that a picture that revealed the true face of war would almost by definition be an anti-war photograph . I 'd like to take you on a visual journey through some of the events and issues I 've been involved in over the past 25 years . In 1981 , I went to Northern Ireland . 10 IRA prisoners were in the process of starving themselves to death in protest against conditions in jail . The reaction on the streets was violent confrontation . I saw that the front lines of contemporary wars are not on isolated battlefields , but right where people live . During the early '80s , I spent a lot of time in Central America , which was engulfed by civil wars that straddled the ideological divide of the Cold War . In Guatemala , the central government -- controlled by a oligarchy of European decent -- was waging a scorched earth campaign against an indigenous rebellion , and I saw an image that reflected the history of Latin America : conquest through a combination of the Bible and the sword . An anti-Sandinista guerrilla was mortally wounded as Commander Zero attacked a town in Southern Nicaragua . A destroyed tank belonging to Somoza 's national guard was left as a monument in a park in Managua , and was transformed by the energy and spirit of a child . At the same time , a civil war was taking place in El Salvador , and again , the civilian population was caught up in the conflict . I 've been covering the Palestinian-Israeli conflict since 1981. This is a moment from the beginning of the second intifada , in 2000 , when it was still stones and Molotovs against an army . In 2001 , the uprising escalated into an armed conflict , and one of the major incidents was the destruction of the Palestinian refugee camp in the West Bank town of Jenin . Without the political world to find common ground , the continual friction of tactic and counter-tactic only creates suspicion and hatred and vengeance , and perpetuates the cycle of violence . In the '90s , after the breakup of the Soviet Union , Yugoslavia fractured along ethnic fault lines , and civil war broke out between Bosnia , Croatia and Serbia . This is a scene of house-to-house fighting in Mostar , neighbor against neighbor . A bedroom , the place where people share intimacy , where life itself is conceived , became a battlefield . A mosque in northern Bosnia was destroyed by Serbian artillery and was used as a makeshift morgue . Dead Serbian soldiers were collected after a battle and used as barter for the return of prisoners or Bosnian soldiers killed in action . This was once a park . The Bosnian soldier who guided me told me that all of his friends were there now . At the same time in South Africa , after Nelson Mandela had been released from prison , the black population commenced the final phase of liberation from apartheid . One of the things I had to learn as a journalist was what to do with my anger . I had to use it , channel its energy , turn it into something that would clarify my vision , instead of clouding it . In Transkei , I witnessed a rite of passage into manhood , of the Xhosa tribe . Teenage boys lived in isolation , their bodies covered with white clay . After several weeks , they washed off the white and took on the full responsibilities of men . It was a very old ritual that seemed symbolic of the political struggle that was changing the face of South Africa . Children in Soweto playing on a trampoline . Elsewhere in Africa there was famine . In Somalia , the central government collapsed and clan warfare broke out . Farmers were driven off their land , and crops and livestock were destroyed or stolen . Starvation was being used as a weapon of mass destruction -- primitive but extremely effective . Hundreds of thousands of people were exterminated , slowly and painfully . The international community responded with massive humanitarian relief , and hundreds of thousands of more lives were saved . American troops were sent to protect the relief shipments , but they were eventually drawn into the conflict , and after the tragic battle in Mogadishu , they were withdrawn . In southern Sudan , another civil war saw similar use of starvation as a means of genocide . Again , international NGOs , united under the umbrella of the UN , staged a massive relief operation and thousands of lives were saved . I 'm a witness , and I want my testimony to be honest and uncensored . I also want it to be powerful and eloquent , and to do as much justice as possible to the experience of the people I 'm photographing . This man was in an NGO feeding center , being helped as much as he could be helped . He literally had nothing . He was a virtual skeleton , yet he could still summon the courage and the will to move . He had not given up , and if he did n't give up , how could anyone in the outside world ever dream of losing hope ? In 1994 , after three months of covering the South African election , I saw the inauguration of Nelson Mandela , and it was the most uplifting thing I 've ever seen . It exemplified the best that humanity has to offer . The next day I left for Rwanda , and it was like taking the express elevator to hell . This man had just been liberated from a Hutu death camp . He allowed me to photograph him for quite a long time , and he even turned his face toward the light , as if he wanted me to see him better . I think he knew what the scars on his face would say to the rest of the world . This time , maybe confused or discouraged by the military disaster in Somalia , the international community remained silent , and somewhere around 800,000 people were slaughtered by their own countrymen -- sometimes their own neighbors -- using farm implements as weapons . Perhaps because a lesson had been learned by the weak response to the war in Bosnia and the failure in Rwanda , when Serbia attacked Kosovo international action was taken much more decisively . NATO forces went in , and the Serbian army withdrew . Ethnic Albanians had been murdered , their farms destroyed and a huge number of people forcibly deported . They were received in refugee camps set up by NGOs in Albania and Macedonia . The imprint of a man who had been burned inside his own home . The image reminded me of a cave painting , and echoed how primitive we still are in so many ways . Between 1995 and '96 , I covered the first two wars in Chechnya from inside Grozny . This is a Chechen rebel on the front line against the Russian army . The Russians bombarded Grozny constantly for weeks , killing mainly the civilians who were still trapped inside . I found a boy from the local orphanage wandering around the front line . My work has evolved from being concerned mainly with war to a focus on critical social issues as well . After the fall of Ceausescu , I went to Romania and discovered a kind of gulag of children , where thousands of orphans were being kept in medieval conditions . Ceausescu had imposed a quota on the number of children to be produced by each family , thereby making women 's bodies an instrument of state economic policy . Children who could n't be supported by their families were raised in government orphanages . Children with birth defects were labeled incurables , and confined for life to inhuman conditions . As reports began to surface , again international aid went in . Going deeper into the legacy of the Eastern European regimes , I worked for several months on a story about the effects of industrial pollution , where there had been no regard for the environment or the health of either workers or the general population . An aluminum factory in Czechoslovakia was filled with carcinogenic smoke and dust , and four out of five workers came down with cancer . After the fall of Suharto in Indonesia , I began to explore conditions of poverty in a country that was on its way towards modernization . I spent a good deal of time with a man who lived with his family on a railway embankment and had lost an arm and a leg in a train accident . When the story was published , unsolicited donations poured in . A trust fund was established , and the family now lives in a house in the countryside and all their basic necessities are taken care of . It was a story that was n't trying to sell anything . Journalism had provided a channel for people 's natural sense of generosity , and the readers responded . I met a band of homeless children who 'd come to Jakarta from the countryside , and ended up living in a train station . By the age of 12 or 14 , they 'd become beggars and drug addicts . The rural poor had become the urban poor , and in the process they 'd become invisible . These heroin addicts in detox in Pakistan reminded me of figures in a play by Beckett : isolated , waiting in the dark , but drawn to the light . Agent Orange was a defoliant used during the Vietnam War to deny cover to the Vietcong and the North Vietnamese army . The active ingredient was dioxin , an extremely toxic chemical that was sprayed in vast quantities , and whose effects passed through the genes to the next generation . In 2000 , I began documenting global health issues , concentrating first on AIDS in Africa . I tried to tell the story through the work of caregivers . I thought it was important to emphasize that people were being helped , whether by international NGOs or by local grassroots organizations . So many children have been orphaned by the epidemic that grandmothers have taken the place of parents , and a lot of children had been born with HIV . A hospital in Zambia . I begun documenting the close connection between HIV/AIDS and tuberculosis . This is an MSF hospital in Cambodia . My pictures can play a supporting role to the work of NGOs by shedding light on the critical social problems they 're trying to deal with . I went to Congo with MSF , and contributed to a book and an exhibition that focused attention on a forgotten war in which millions of people have died , and exposure to disease without treatment is used as a weapon . A malnourished child being measured as part of the supplemental feeding program . In the fall of 2004 I went to Darfur . This time I was on an assignment for a magazine , but again worked closely with MSF . The international community still has n't found a way to create the pressure necessary to stop this genocide . An MSF hospital in a camp for displaced people . I 've been working on a long project on crime and punishment in America . This is a scene from New Orleans . A prisoner on a chain gang in Alabama was punished by being handcuffed to a post in the midday sun . This experience raised a lot of questions , among them questions about race and equality and for whom in our country opportunities and options are available . In the yard of a chain gang in Alabama . I did n't see either of the planes hit . When I glanced out my window , I saw the first tower burning , and I thought it might have been an accident . A few minutes later when I looked again and saw the second tower burning , I knew we were at war . In the midst of the wreckage at Ground Zero , I had a realization . I 'd been photographing in the Islamic world since 1981 -- not only in the Middle East , but also in Africa , Asia and Europe . At the time I was photographing in these different places , I thought I was covering separate stories . But on 9/11 history crystallized , and I understood I 'd actually been covering a single story for more than 20 years , and the attack on New York was its latest manifestation . The central commercial district of Kabul , Afghanistan at the end of the civil war , shortly before the city fell to the Taliban . Land mine victims being helped at the Red Cross rehab center being run by Alberto Cairo . A boy who lost a leg to a leftover mine . I 'd witnessed immense suffering in the Islamic world from political oppression , civil war , foreign invasions , poverty , famine . I understood that in its suffering , the Islamic world had been crying out . Why were n't we listening ? A Taliban fighter shot during a battle as the Northern Alliance entered the city of Kunduz . When war with Iraq was imminent , I realized the American troops would be very well covered , so I decided to cover the invasion from inside Baghdad . A marketplace was hit by a mortar shell that killed several members of a single family . A day after American forces entered Baghdad , a company of Marines began rounding up bank robbers and were cheered on by the crowds -- a hopeful moment that was short lived . For the first time in years , Shi'ites were allowed to make the pilgrimage to Karbala to observe Ashura , and I was amazed by the sheer number of people and how fervently they practiced their religion . A group of men march through the streets cutting themselves with knives . It was obvious that the Shi'ites were a force to be reckoned with , and we would do well to understand them and learn how to deal with them . Last year I spent several months documenting our wounded troops , from the battlefield in Iraq all the way home . This is a helicopter medic giving CPR to a soldier who had been shot in the head . Military medicine has become so efficient that the percentage of troops who survive after being wounded is much higher in this war than in any other war in our history . The signature weapon of the war is the IED , and the signature wound is severe leg damage . After enduring extreme pain and trauma , the wounded face a grueling physical and psychological struggle in rehab . The spirit they displayed was absolutely remarkable . I tried to imagine myself in their place , and I was totally humbled by their courage and determination in the face of such catastrophic loss . Good people had been put in a very bad situation for questionable results . One day in rehab someone , started talking about surfing and all these guys who 'd never surfed before said , " Hey , lets go . " And they went surfing . Photographers go to the extreme edges of human experience to show people what 's going on . Sometimes they put their lives on the line , because they believe your opinions and your influence matter . They aim their pictures at your best instincts , generosity , a sense of right and wrong , the ability and the willingness to identify with others , the refusal to accept the unacceptable . My TED wish : there 's a vital story that needs to be told , and I wish for TED to help me gain access to it and then to help me come up with innovative and exciting ways to use news photography in the digital era . Thank you very much . ( Applause ) 