Communication via a natural language requires two fundamental skills, producing text and understanding it. This article introduces the field of computational approaches to the former-natural language generation (NLG) showing some of the theoretical and practical problems that linguists, computer scientists, and psychologists have encountered when trying to explain how language works in machines or in their minds. The corresponding task of NLG spans a wide spectrum: ranging from planning some action to executing it. Providing architectures in which all of these decisions can be made to coexist, while still allowing the production of natural sounding texts within a reasonable amount of time, is one of the major challenges of NLG. Another challenge is ascertaining just what the decisions involved in NLG are. This article overviews the cognitive, social and linguistic dimensions of NLG and finally opens issues and problems related to the field.