You'll get better at your craft as you take the time to learn your tools, what they're good for and what they arent.
I think what is often taken for granted and omitted in these conversations is what real world scenarios certain techiques shine
Here are some places where functional programming concepts are put to good use:
A nice use of Monads to model async queries
Throw in a Maybe Monad or an Exception Monad and you could get robust error handling in there too.
Benefits of and a series on immutabability in C#
BTW System.String is immutable and that alone removes so many headaches compared to dealing with LPCTSTR or even CString
The ability to clearly describe and implement certain kinds of computations. (The Monads sample counts toward this)
Take a look around and experiment a bit with languages. You dont have to use them but you can be surprised what they can bring to the table.