Java for Everything (2014)
Reading this is frustrating because I agree with a lot of what the author is saying (that using dynamic languages can speed up initial development but incur future technical debt), but I think that Java has a huge number of issues that prevent it from being a language I&#x27;d want to use for a lot of tasks. Here are some examples, although since I haven&#x27;t written Java in a while I could be inaccurate on some of them:<p>- the use of the Object type (surprisingly common)<p>- No first-class functions or function types. New Java has lambdas but I&#x27;m not sure if it has function types or the ability to pass a class or instance method as a first-class value<p>- No higher-order types (e.g. The type of a map function, let alone an fmap function, can&#x27;t be written)<p>- Need for frequent casting is both inelegant and a big source of errors<p>- Classes are giant, heavyweight and deeply stateful, and tend to have deeply nested hierarchies<p>- Class-scoped variable names (E.g. That don&#x27;t require explicit &#x27;this&#x27;) are confusing, and for example don&#x27;t make it clear whether a variable being referenced is a class variable, instance variable or local variable. Creating inner classes complicates things further, and inherited variables and methods are also opaque<p>- creation of new types is a pain which promotes overuse of primitives (ints&#x2F;strings&#x2F;bools) over more expressive and safe types<p>- polymorphism via interfaces isn&#x27;t particularly expressive, for example AFAIK you can&#x27;t make a function which takes two arguments of the same type unless you specify that type precisely<p>- null pointers are rampant, and even considered idiomatic, for example during initialization<p>- imperative style is forced on the user in a very strong way; for example no literals for array lists, maps etc, standard library overwhelmingly provides mutable data structures.<p>I could go on, but suffice it to say that the author&#x27;s claim that the main complaint against Java is its verbosity is a red herring.<p>It&#x27;s also a bit disappointing to see him dismiss languages like Scala (and presumably languages like Ocaml and Haskell, which he doesn&#x27;t even mention) due to being &quot;complex&quot;, which suggests to me that he hasn&#x27;t fully grasped his own lesson that putting the time and effort into a safer, more expressive and more strongly typed language is worth the initial trade off in productivity. Although the author claims that once their code compiles it usually runs without errors, this has definitely not been my experience. Indeed my biggest argument against Java is that due to its imperative nature and inexpressive type system, it&#x27;s not <i>that</i> much safer than many dynamic languages, which makes it really hard for me to justify using it.