Old-style Java &quot;double&quot; type declarations suck.  Stuff like this:<p><pre><code>  BigNastyGenericThing&lt;string,FooMonstrosityFactory&lt;Tuple&lt;int,string,double&gt;&gt;&gt; _nastyFoobarObject = new BigNastyGenericThing&lt;string,FooMonstrosityFactory&lt;Tuple&lt;int,string,double&gt;&gt;&gt;();
</code></pre>
That can die in a fire, for all kinds of reasons.  I&#x27;m a huge fan of C#&#x27;s var keyword inference sugar, because it cuts the amount of type annotations in half.  It also makes it a lot easier to mess around and iterate - there&#x27;s less irrelevant syntax trash that&#x27;s broken if you deliberately change the return type of a function or expression.<p>At least with a statically typed language, I can find all the things that I have to find if I break an interface - I have good tooling that uses the type system and can do semantic analysis and even track down when I&#x27;m hitting methods and properties through reflection.  On dynamically-typed code, I have to grep the whole source-base, and filter out all the false positives.<p>I blame Javascript.  If I could run C# in the browser and have real interfaces that understood the same assumptions instead of the hodge-podge of stringified data-binding and parsing...