I'm a C# developer, but I also know Java, JavaScript, XSLT, a little of C and Perl, e some other that I may have forgotten. Still, the paradigm I'm most familiar to is OOP. 

I have always thought that OOP was the natural evolution of procedural programming, but I wondered if OOP is that perfect. After reading some articles on the web and some questions here, I found that many people don't agree with this, and some say even  that OOP is a bad option.

While developing, I really appreciate using lambdas, LINQ, anonymous types and really enjoy JavaScript with its prototyping and dynamic nature.

But still, I can't think of any scenario where OOP is not an option, or where other paradigms fits better. The only thing I can think of is that sometimes programming with OOP is really boring and slow, like having to declare a class, import some other classes and declaring a method, specifying its parameters, return type and name just to show "Hello, World!" on the console screen. But still, for real-life programs, it seems like something that compensates its cost.

In what scenarios does other paradigms fits better than OOP? What are its advantages over OOP and were does OOP makes things worse instead of helping? Especially, what are the advantages and in what scenarios do excel procedural and functional programming?