Whenever I recall programming in Java though, I remember highly verbose, boilerplate-ridden codebases, and bits of code that are little more than abstractions for bits of code underneath them (with unit tests alongside them that test bit of code A calls functions B and C, which of course has no value whatsoever).
Nowadays I do Javascript, much better. Today I frowned upon a colleague who is used to Objective-C who proposed writing documentation. Pfff.
So developers with limited experience encounter some big "enterprise" Java code base and recoil in horror. Instead of making the deduction that enterprise Java is terrible, they jump all the way to compile time types being horrible.
While Scala/Haskell/F#/etc are great at concision, they aren't that common in traditional SW industrial applications.
IME, I've tried to make super concise modern C#, and it simply isn't concise compared to Haskell or even Python. YMMV, of course.
2. C# supports dynamic typing as well as static.
3. C# and F# are the easiest to mix and match within one solution.
Are you talking about automatic types? Because that's the only thing that resembles dynamic typing I ever found in C#. And it misses about all the reflection available in most dynamic types languages, thus, even if it's somehow possible to not define types, it's useless.
[1] http://msdn.microsoft.com/en-us/library/dd264736.aspx
[2] http://msdn.microsoft.com/en-us/library/system.type.aspx
ExampleClass ec = new ExampleClass();
//ec.exampleMethod1(10, 4); // compiler error
dynamic dynamic_ec = new ExampleClass();
dynamic_ec.exampleMethod1(10, 4); // runtime errorAs for scala, it's not quite as functional or well typed inferred as the others... interested in what the LOC savings would be.
Realistically though what's being compared is Ruby/Python vs. Java. It's much more than just the language it's the culture, java is just plain bureaucratic, a lot of routine paperwork for not a lot of functionality.