My favorite part:
Q: C# started as an object-oriented, imparitive programming language, and has gained more functional programming concepts. Will this continue and where would you draw the line?
A: "We're proving over the time that there isn't a line. No functional programming language is purely immutable because you have to produce output at some point. It's a question of how immutable you are. Functional languages tend to favor immutability heavily, whereas object-oriented languages tend to favor statefull and imperitive. We're all exploring the intersection between those."
"The projects I've worked on recently, Roslyn and TypeScript, a lot of the techniques we used inside the compiler, for example, are functional programming techniques and a lot of immutable data structures."
"Just because in this world of cmoputing that you have now you have mutable state, and you have multi-threading. You can have one or the other, but never do both. That would be a recipe for pain. If you want mutability, you have to be really careful with having threads modify your state. But if you're immutable, you can share with zero cost. You can had off a reference that's never changing. So you can have many threads *reading* the same data. That's always safe and is a liberating way to think about the problem. That's why I find immutability to be very attractive as programming tool."