JavaRush /Blogue Java /Random-PT /Pausa para café #131. O papel do Java no desenvolvimento ...

Pausa para café #131. O papel do Java no desenvolvimento de aplicativos web e móveis. Programação funcional - prós e contras

Publicado no grupo Random-PT

O papel do Java no desenvolvimento de aplicativos web e móveis

Fonte: DZone Java é uma das linguagens de programação mais utilizadas. É usado ativamente no desenvolvimento de aplicativos corporativos, web e móveis. Java tem aplicações nos principais setores de tecnologia, desde ciência de dados até AR/VR. Embora o desenvolvimento empresarial em Java seja o caso de uso mais popular para esta linguagem, os aplicativos web e móveis também são considerados uma das áreas onde Java é usado. Pausa para café #131.  O papel do Java no desenvolvimento de aplicativos web e móveis.  Programação funcional – prós e contras – 1Vamos dar uma olhada em por que o desenvolvimento Java se tornou tão popular na web e em dispositivos móveis nas últimas duas décadas. Uma das principais razões para usar Java para web e dispositivos móveis é que ela é uma linguagem de programação de alto desempenho. Ele garante que seus aplicativos possam ser executados rapidamente e sem erros de processamento. Existem também outros motivos:

1. Código aberto

Por ser uma linguagem de programação de código aberto, Java tem uma série de vantagens. Primeiro, reduz o custo do processo de desenvolvimento de aplicativos. Em segundo lugar, os desenvolvedores alteram facilmente o idioma e o atualizam com frequência, uma vez que é de código aberto. Além disso, Java possui uma sintaxe de fácil leitura que facilita o desenvolvimento de aplicativos para a web e dispositivos móveis. Finalmente, os desenvolvedores podem usar a base de código da linguagem existente e melhorá-la.

2. Plataforma cruzada

Outro benefício da programação em Java é que ela é uma linguagem multiplataforma. Os desenvolvedores podem escrever código no Windows e executá-lo no macOS e Linux. O princípio “escreva uma vez, execute em qualquer lugar” se aplica aqui. Isso torna mais fácil para os desenvolvedores trabalharem em sistemas diferentes e simplifica o processo de teste em máquinas diferentes. Por exemplo, os desenvolvedores podem testar se um programa será executado corretamente em diferentes tamanhos de tela e sistemas operacionais.

3. Compatível com dispositivos móveis

Java é uma tecnologia popular para aplicativos móveis. Os desenvolvedores de aplicativos Android usam principalmente a linguagem Java porque é fácil de implementar, possui recursos de segurança e recursos de plataforma cruzada. O Android requer uma linguagem poderosa para dimensionar um aplicativo, mas o Java oferece recursos de dimensionamento incríveis. Também simplifica o processo de teste de aplicativos Android. Tudo isso sugere que se trata de uma linguagem de programação confiável e dinâmica para a criação de aplicações móveis.

4. Ferramentas e bibliotecas

Uma das vantagens mais significativas do Java é sua compatibilidade com diversas ferramentas. Frameworks como Spring, Hibernate, Struts, Spark e outros simplificam bastante o processo de desenvolvimento. Todas essas ferramentas oferecem diversos recursos para a criação de aplicações interativas e dinâmicas. Bibliotecas como Apache Commons, Java Standard Libraries, Maven, Jackson, etc. permitem que os desenvolvedores adicionem funcionalidades sem escrever código do zero.

5. Comunidade ativa

Existem mais de 7,6 milhões de desenvolvedores Java no mundo. Eles atualizam constantemente a linguagem de programação e adicionam novos recursos a ela. Como o Java é atualizado a cada 6 meses, os desenvolvedores têm a oportunidade de aprender rapidamente e criar produtos melhores. Você também pode usar a comunidade Java para encontrar respostas para diversas perguntas.

A ascensão do Java no desenvolvimento de aplicativos da Web

Desde a sua criação em 1995 pela Sun Microsystems, a linguagem Java tornou-se uma das prioridades na indústria de programação. Hoje, empresas de todo o mundo utilizam esta linguagem de programação para criar aplicações web. Google, Netflix, Spotify e Pinterest são apenas algumas empresas que usam Java em sua pilha de tecnologia. Especialistas estimam que mais de 60% das empresas que trabalham com TI usam Java de uma forma ou de outra. Além disso, continua a ser uma linguagem de programação popular devido à sua adoção em outras áreas do desenvolvimento web, nomeadamente computação em nuvem, redes sociais, desenvolvimento empresarial, AR, VR e muito mais. É uma linguagem de programação excelente e poderosa para uso em empresas que agora precisam de uma arquitetura baseada em nuvem. Quando combinado com JavaScript, Java permite criar aplicativos web de alto desempenho que podem ser executados em qualquer plataforma.

A ascensão do Java em casos de uso modernos

Além do desenvolvimento web e do desenvolvimento móvel, Java deixou sua marca no mundo tecnológico moderno. Hoje, Java é uma linguagem de programação extremamente útil para aplicações científicas. Oferece um ambiente seguro, rápido e portátil para computação científica. MATLAB é uma das bibliotecas mais populares para aplicações científicas baseadas em Java.
  • Java também é útil no desenvolvimento front-end e back-end de aplicações científicas. Você pode usar Struts e Java Server Pages para desenvolvimento front-end e Java Core para desenvolvimento back-end de aplicativos científicos.

  • Java também é útil para análise de dados. Ele permite que os desenvolvedores criem soluções de análise de dados usando várias bibliotecas e ferramentas. Hoje, Java encontrou aplicação no segmento de Internet das Coisas. É uma tecnologia chave em sistemas embarcados, como cartões inteligentes e sensores. Portanto, as empresas utilizam essa linguagem de programação na indústria de automação residencial. Além disso, é usado ativamente no desenvolvimento de tecnologias de dispositivos de streaming e Smart TV.

  • A plataforma de big data Hadoop é escrita em Java. Por ser uma linguagem de código aberto e orientada a objetos, é a base para aplicações de Big Data. Linguagens de programação como Scala podem ser facilmente executadas na Java Virtual Machine e facilitar a análise de big data.

  • Os jogos são uma indústria emergente e de rápido crescimento na qual o Java é amplamente utilizado para vários aplicativos de jogos. Por exemplo, oferece suporte para jMonkeyEngine, o maior mecanismo de desenvolvimento de jogos 3D de código aberto. Além disso, a Dalvik Virtual Machine (DVM) é suportada principalmente por Java e é usada para criar jogos interativos para Android.

Programação funcional - prós e contras

Fonte: Dev.to Apesar do meu ceticismo tradicional em relação a tecnologias desconhecidas, reconheço os benefícios da programação funcional. Abaixo está uma lista aproximada das vantagens que descrevem este paradigma de programação. Pausa para café #131.  O papel do Java no desenvolvimento de aplicativos web e móveis.  Programação funcional – prós e contras – 2

Simultaneidade Segura

A abordagem funcional incentiva a simultaneidade segura, ou seja, a capacidade de executar trabalhos em threads separados sem causar conflitos de thread ou colisões de modificação. A razão é que, diferentemente da abordagem de objeto, você não está compartilhando um objeto cujo estado possa ser alterado durante o processamento. Existem entradas e saídas, e a entrada não muda por sua causa. Em Java, mesmo se você usar objetos “thread-safe”, você não pode garantir que eles terão os mesmos valores quando seu método for chamado. No exemplo abaixo, podemos ver que um loop que processa um elemento por vez pode ser facilmente processado em paralelo usando uma função lambda dentro de um thread.
for( String item : items ) {
   process(item);
}
E agora fica:
items.parallelStream().forEach( item -> process(item) );

E/S rápida

A programação funcional oferece suporte a uma abordagem diferente do multithreading. Isso significa que não temos mais threads separados aguardando respostas de E/S, como chamadas de banco de dados. Ou seja, maximizamos o uso de CPU e largura de banda. Para aplicações de alto desempenho esta é uma clara vantagem. Isto é implementado com a ideia de que uma chamada de função pode retornar um Future, que não é o resultado real da chamada, mas sim uma promessa de retornar o resultado em algum momento no futuro. Em algum momento no futuro, é obtido um valor de retorno que executa a função. Isso significa que os threads do processador não aguardam a conclusão das chamadas REST ou do banco de dados e podem fazer outra coisa.

Brevidade de expressão

Os desenvolvedores de software desejam ser capazes de expressar ideias complexas com elegância. A programação funcional permite que você faça isso de forma concisa. Por exemplo, construções comuns, como loops for, podem ser substituídas por threads, que abstraem as operações for comuns para as quais os loops são usados. Não há dúvida de que a adição de funções e threads Lambda ao Java expandiu a capacidade de expressar ideias que antes eram impossíveis.

Por que não se tornar funcional?

Apenas para reiterar o que foi dito acima: há muitos benefícios na codificação funcional, então este artigo não está tentando generalizar tudo em um caso e dizer que você definitivamente deveria fazer programação funcional ou vice-versa. Esta decisão deve ser tomada com uma compreensão clara das razões da transição e dos potenciais problemas.

É sempre difícil entender intuitivamente

Ao escrever código, você está tentando se comunicar com o computador? Se a comunicação com um computador é tão importante para você, por que não escrever em código de máquina? Claro, isso é muito difícil, então as linguagens de computador foram inventadas para facilitar. Eles também permitem que os programadores criem expressões que outros programadores possam entender. À medida que o software se torna maior e mais complexo, precisamos de estratégias para gerenciar a complexidade. Conseguimos isso por meio de abstrações e ocultação de informações. A classe que você usa em Java para enviar email é bastante complexa, mas a interface dessa classe é simples. Esconde a implementação detalhada, revelando-nos apenas o lado externo do controle. Recursos de linguagem, como chaves e colchetes, nos informam estruturas como instruções condicionais e loops. Só agora movemos loops, ou melhor, recursão, e condições para funções:
for( String item : items ) {
    System.out.println(item);
}
Acontece que:
items.foreach( item -> System.out.println(item) );
A abordagem streaming e lambda são definitivamente mais curtas. Você pode expressar a mesma funcionalidade com menos código. O problema é que agora estamos escondendo o comportamento real dentro dos métodos que precisamos conhecer. Loops em Java usam palavras-chave. Por outro lado, as funções lambda podem implementar várias formas de recursão, e apenas o nome aqui indica o que ela faz. Por exemplo:
boo.fooble( item -> System.out.println(item) );
Você não pode mais apenas ler o código para entender a estrutura. Isso torna difícil acompanhar o fluxo de execução. Outra característica é o encadeamento de funções, onde o resultado de uma função é a entrada da próxima sem atribuir uma variável intermediária.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Isso pode fazer sentido para o autor deste código porque ele parece ter escrito todas as funções e sabe o que elas fazem. No entanto, para quem é novo no código, isso não diz muito sobre os parâmetros, processos ou valores de retorno de cada função. Mas se você escrever a mesma coisa em algo que atribui tipos, você obterá:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Esta pode não ser uma analogia perfeita, já que parâmetros e funções anônimas não são a mesma coisa, mas a questão aqui é que é difícil ler uma frase longa com resultados e parâmetros desconhecidos sem uma compreensão mais profunda do que as funções descritas abaixo fazem. E assim é possível que a programação funcional seja altamente expressiva em segmentos de código surpreendentemente curtos, mas incompreensível para pessoas novas no software. O objetivo das classes e interfaces é ocultar dados, criar trechos de código reutilizáveis ​​que não exijam que o desenvolvedor entenda ou talvez até mesmo observe a implementação. Eles existem para que os desenvolvedores possam trabalhar em sistemas grandes e complexos sem dores de cabeça. Esta é uma maneira conveniente de organizar o código associado a entidades específicas. No entanto, tenho pouca compreensão de como a programação funcional ajuda a estruturar projetos grandes e complexos. Provavelmente existem razões subjetivas para isso.

Para impressionar outras pessoas com suas habilidades

Alguns desenvolvedores de software são tão inseguros em suas habilidades que tentam impressionar escrevendo códigos desnecessariamente complexos. Como desenvolvedor sênior, não admiro particularmente outros desenvolvedores de software que tentam escrever códigos inteligentes. É claro que isso não se aplica apenas à programação funcional; a mesma coisa pode acontecer em qualquer estilo de codificação. Mas tenho notado uma certa vaidade intelectual entre os proponentes da programação funcional. A questão é que os desenvolvedores de software não trabalham no vácuo. Esse código “inteligente” precisará ser mantido e, se for difícil de entender, será difícil de ler e alterar, e difícil de depurar. Ao gerenciar equipes, temos pessoas em todos os níveis, então a coisa mais inteligente a fazer é escrever o código de uma forma que todos os envolvidos possam entender. É por isso que temos nomes de variáveis ​​longos e claros, por isso limitamos o comprimento dos métodos. O código “inteligente” levará mais tempo, por isso não é muito inteligente escrevê-lo. Acredito que a programação funcional usa os mesmos argumentos sobre expressões concisas e poderosas que Perl usou há muitos anos. Os defensores do Perl orgulhavam-se da sua expressividade, da forma como conseguiam escrever programas muito poderosos em apenas algumas linhas de código. Era verdade. O problema era que eles eram difíceis de entender. Talvez a programação funcional tenha caído na mesma armadilha.

Porque é uma nova moda

Sempre há uma nova tecnologia ou paradigma “quente”. Novas tecnologias, linguagens e abordagens surgem constantemente. Devemos nos desafiar constantemente e aprender coisas novas. Ser um desenvolvedor de software significa avançar na tecnologia. Mas, como desenvolvedores de software, devemos avaliar por nós mesmos quais tecnologias precisamos para criar um produto. Aprender uma nova tecnologia popular só porque é popular não é um uso inteligente do tempo. Isso não significa que você não deva aprender programação funcional, mas sim que você deve avaliar os prós e os contras desse paradigma para o aplicativo que está escrevendo.

Porque este é o único caminho verdadeiro

Muitas vezes, já vi desenvolvedores promoverem esta ou aquela abordagem como a única correta. Mas, como me disse um amigo, trabalhos diferentes exigem ferramentas diferentes. Por exemplo, eu pessoalmente uso Python e PyTorch para inteligência artificial, embora existam muitas outras ferramentas e tecnologias, cada uma com suas próprias vantagens e desvantagens. Existem boas razões para considerar a programação funcional como uma opção para serviços que necessitam de escalabilidade significativa. Isso se deve à segurança de simultaneidade oferecida por essa abordagem. Mas você também deve estar ciente dos custos e riscos potenciais. Há alguns anos tive uma experiência semelhante com injeção de dependência e o Spring foi considerado o melhor para o trabalho. Quando perguntei aos apoiadores do Spring quais benefícios ele traz, eles não me deram respostas claras. Estou vendo algo semelhante agora com alguns puristas da programação funcional que parecem estar envolvidos em algum tipo de campanha religiosa, em vez de uma avaliação imparcial da tecnologia. A propósito, a injeção de dependência foi uma ótima ideia e agora posso identificar claramente os seus benefícios. Da mesma forma, acho que minhas preocupações sobre programação funcional têm a ver com a forma como ela é usada, e não se é uma abordagem útil e válida.

Conclusão

O objetivo deste artigo não é fornecer uma resposta clara à questão de saber se você deve fazer programação funcional. A questão é como você avalia qualquer nova tecnologia ou abordagem. O principal: não deixe seu ego bloquear sua avaliação objetiva. O desenvolvimento de software não é prova de sua capacidade intelectual ou de suas qualidades pessoais. Trata-se de criar valor no mundo real. Se a programação funcional ajudar você, use-a.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION