If you look around the news about the future of programming, it is for sure that you meet the names of functional programmig languages: ML, F#, Haskell, Scala, Erlang, Scheme, Lisp or others. Functional programming provides you a cleaner view what your program should do and what it actually does. It also speeds up the development process.
How does it achieve this? Instead of creating and changing variables throughout the execution of a program, the programmer creates only, well, mostly, values that do not change. And, functions have a central role: they can be arguments to functions and even results of a function application. In staticly typed languages, such as Standard ML, every value has a type, and one can compose functions and values only if their types match. This provides safety: well-typed programs do not go wrong, i.e. do not crash, provided that the run-time system works correctly.
These features allow the programmer to reason about the code she writes, lending more credibility to the program.
My company offers consulting in Standard ML on the first place, but open to solve problems in other languages.