in reply to Idea vs realization
in thread passing arguments

GUI programming is the first example. Web applications also benefit, because they're a subset of the Model-View-Control architecture. Signal-based programs and multi-threaded programs also benefit from keeping the data isolated from the logic. So does any code that needs to be reentrant -- scripts written for mod_perl, for instance.

Think of it this way: your function signatures are your program's internal communication protocol. So how good is your program's protocol? Is it structured and well-organized, or is it more like the transcript of half a dozen random bar conversations?