Taverna /dev/All

Reflexão sobre o estilo moderno de programar em Java

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!

2 Curtidas

É um belo tópico este, hein?

Na minha opinião esta “Javofobia” tem uma única origem: o mercado de venda de treinamentos e livros para desenvolvedores. Na prática não vejo Java como uma linguagem tão verbosa quanto dizem, pelo contrário.

Se tenho uma crítica ao Java é a ausência de uma sintaxe apropriada para lidar com collections, tal como Groovy com seus “[]” e “[:]”. E na boa? É minha única grande falta na linguagem. Pessoal se esquece de algumas coisas: a primeira delas é que Java não é uma linguagem dinâmica. Sendo assim exigir aquela “produtividade” das linguagens dinâmicas é no mínimo injusta.

E numa boa? Esta produtividade das linguagens dinâmicas como Groovy no dia a dia é pouquíssimo usada. Você vê ela sendo aplicada com orgulho em um ponto ou outro no sistema, mas não raro entra outra questão aí: em uma equipe que não conhece os recursos (não raro) acabamos com um problema ao invés de uma solução.

Algo que vejo ocorrer em outras linguagens é o sucesso de algum framework isolando a linguagem. As pessoas costumam programar em Grails ao invés de Groovy e em Ruby on Rails ao invés do Ruby. É algo muito similar a este amontoado de anotações aí.

Normalmente envolve o conhecimento apenas na parte aplicável do ecossistema (o framework) e não na linguagem.

Belo tópico!

3 Curtidas

Concordo com o comentário do Kico e acrescento que acho a sintaxe do Java ótima para manutenções a longo prazo, entender código ruim é difícil mas tentar entender código mal escrito em linguagens com pouca declaração pode ser ainda mais sofrível.

Já trabalhei com C/C++, PHP, Javascript raiz, ColdFusion, Asp e atualmente estou estudando Kotlin, minha preferência sempre se mantem no Java principalmente pela “verbosidade” do tamanho certo.

Já quanto as collections, também achava essa deficiência, mas no Java 8 muita coisa que sentia falta foi suprida, pra mim só o tratamento com Strings poderia ser melhor.

Ótimo tópico mesmo!

2 Curtidas

E com relação ao trecho:

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

Esse é o ponto mais interessante para mim. Quanto ódio e saliva já não foram gastos em nome da promessa de eficiência de determinadas bibliotecas/frameworks/linguagens, como se o programador fosse um mero digitador de código, e logo, quanto menos digitar melhor. Na prática, dizem por aí que gastamos 90% do tempo entendendo o que precisa ser feito e como fazê-lo, e apenas 10% produzindo código. Quem nunca passou um dia inteiro debugando um problema seríssimo para no fim do dia corrigir o bug comitando 1 linha. Acho que o autor da resposta foi muito feliz nessa constatação…

3 Curtidas

@odon.rafael Concordo com você e o autor, eu vejo que essa coisa de que linguagem é melhor do que a outra por causa de sintaxe pura besteira. E com relação de gastamos 90% do tempo entendendo um problema, vejo também que é gasto muito tempo tentando entender o problema de um framework para resolvemos muitas vezes problemas simples.

1 Curtida

itexto