Programmers require at least some information before they can begin a project, whether this comes in the form of design documents or through direct contact with the people who need the software is obviously debatable.
I for one am in the agile camp, where people and interactions are favoured over process and documents. However, I am also pragmatic, which means if you do not have access to the business or product owners, then you must of course work to some design. But I will always favour having personal interaction over documents.
From the agile perspective (depending on your flavour) the documents, will be in some form of story cards which represent individual pieces of functionality to be developed and when that functionality is considered "done". The specific details of what is developed however comes from interacting and communicating with the business, and will be in most cases formed through 'evolutionary' design.
Whilst it is true that documents can be updated, and yes sometimes this even happens, I find that most times that this is not the case. You also run into versioning nightmares, developers working to the incorrect document, or QA testing the incorrect version. It is a simple fact that, in a fast moving business situation, as soon as you write it down it becomes out of date.
Most of the issues are unknown at the time of design and are discovered through the actual process of development, so it therefore makes sense to put more time and effort in the development phase than spending it during a design phase where assumptions can and will be incorrect. You can NOT design for something you don't know! The sooner you get in and 'discover' these unknowns, the sooner you can evolve your design to meet the new requirements.