Jornalista desde 1961, trabalhou nas redações do Jornal da Tarde, Veja, Folha de S. Paulo e TV Cultura.
Recebeu três vezes o Prêmio Esso e quatro vezes o Prêmio Abril de Jornalismo. Foi deputado estadual durante oito anos (pelo MDB-SP e depois pelo PMDB-SP) e secretário da Cultura (1988-1991) e da Educação (1991-1993) do Estado de São Paulo. É autor dos roteiros das minisséries documentais Brasil 500 Anos e Cinco dias que abalaram o Brasil, exibidas pelo canal GNT/Globosat.
Escreveu, entre outros, Transamazônica (Brasiliense, 1970, com Ricardo Gontijo e Alfredo Rizutti), A Ilha (Alfa-Ômega, 1975, reeditado pela Companhia das Letras em 2001), Olga (Alfa-Ômega, 1985, reeditado pela Companhia das Letras em 1993), Chatô, o rei do Brasil (Companhia das Letras, 1994), Corações sujos (Companhia das Letras, 2000), Cem quilos de ouro (Companhia das Letras, 2002), Na toca dos Leões (Planeta, 2004) e Montenegro (Planeta, 2006).
Tem livros traduzidos em dezenove países. Em 2001 Corações sujos recebeu o Prêmio Jabuti de Livro do Ano de Não-Ficção. Em 2004 Olga foi transformado em filme pelo diretor Jayme Monjardim, tendo sido visto por mais de cinco milhões de espectadores e indicado pra representar o país no Oscar de 2005. É membro do Conselho Político do jornal Brasil de Fato e do Conselho Superior da Telesur, TV pública latino-americana sediada em Caracas, Venezuela. É membro da Academia Marianense de Letras, onde ocupa a Cadeira nº 13, que teve como primeiro titular o presidente Tancredo Neves.