O digest do Quora me trouxe essa pergunta com uma interessante resposta https://www.quora.com/What-is-the-most-difficult-concept-to-grasp-in-Java-How-did-you-finally-understand-it
Vou transcrever aqui caso a resposta deixe de ser a mais votada:
Pergunta: What is the most difficult concept to grasp in Java? How did you finally understand it?
Resposta:
That this is not Java:
@AllArgsConstructor
@Component
@Transactional
@Secured
@ToString
public class PersonService {}
Java look like this:
public static void main(String[] args) {
HttpServer server = new HttpServer(8080);
PersonManager personManager = new PersonManager();
server.addServlet(new MyServlet(personManager), "/persons/*");
server.start();
}
See? Nobody died from writing a few lines of boilerplate code. But the difference is that Java way is usually unambiguous for everyone, even those who aren’t familiar with Java language, while “modern Java way” requires you to know the details of the used container. This concept is very hard to grasp these days since writing code that is readable is shamed if more or less same code can be generated automatically. But stick to this approach and many of your problems will go away, cause you’ll quickly notice that you no longer spend time each day reading about some new annotation you’ve come across in your project, but instead write some business code, finish early and go have a life. Let’s be honest - no projects missed deadlines because devs had to write getters by hand. And the real problems stay unfixed while everyone is trying to make source code as compact as binary one.
As últimas duas frases me comoveram mais, e traduziram um pouco do sentimento que tenho em relação a muito do que virou a programação Java hoje em dia, apesar da minha profunda admiração por Orientação por Objetos, Padrões e toda a cultura induzida pela linguagem.
Adiciono ao ponto levantado pela resposta dizendo tambem que, talvez, a Javafobia esteja muito associada a uma forçosa cultura de níveis de indireção, pregando uma obrigação por baixo acoplamento, quase nunca colhendo os frutos prometidos e na prática pagando um preço bem alto pelo obscurantismo introduzido no código.
Vocês também percebem sintomas parecidos em outras linguagens? Ou mesmo sintomas contrários?
Comentem!