Programação Funcional para Desenvolvedores Java

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Livros /Programação Funcional para Desenvolvedores Java

Programação Funcional para Desenvolvedores Java

Vinícius Thiengo
(3789) (5)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloTest-Driven Development: Teste e Design no Mundo Real
CategoriaEngenharia de Software
Autor(es)Mauricio Aniche
EditoraCasa do Código
Edição1
Ano2012
Páginas194
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido
Capa do livro "Programação Funcional para Desenvolvedores Java"
Título
Programação Funcional para Desenvolvedores Java
Categoria
Programador
Autor(es)
Dean Wampler
Editora
Novatec
Ano
2012
Edição
1ª
Páginas
112

Tudo bem?

Terminada a leitura do livro "Programação Funcional para Desenvolvedores Java" de Dean Wampler, profissional especialista em linguagens JVM, programação funcional (PF), programação orientada a objetos (POO) e diretor da Think Big Analytics, empresa especializada em trabalhos com Big data.

Dean escreveu este livro para aqueles que já utilizam alguma linguagem no paradigma orientado a objetos e querem evoluir aprendendo também técnicas de programação funcional, técnicas que permitem ao desenvolvedor continuar com a orientação a objetos, porém acrescentando aos poucos as vantagens da functional programming.

O livro é pequeno, são 112 páginas em: um prefácio, seis capítulos e um glossário. O glossário é o maior deles.

Importante: Se quer começar o livro com o objetivo de obter o máximo dele, então, logo após o prefácio, vá direto ao glossário, leia atentamente o significado de cada termo. O que não ficar claro busque mais na Internet.

Mas o glossário deveria ser uma parte opcional. É sério isso?

Sim, deveria. Mas devido a brevidade do livro e também ao autor assumir que o leitor tem uma carga boa em programação, muitos termos, como "transparência referencial" serão abordados como termos triviais.

Logo, independente de sua experiência, se investiu na compra deste livro: antes do capítulo um vá ao glossário.

Os capítulos de destaque são o um e o dois, onde mesmo havendo código Java, os termos e funcionalidades estudados são para qualquer desenvolvedor POO que quer obter mais de seus códigos utilizando programação funcional.

"...utilizando programação funcional", mas ambos são paradigmas, não seria ou um, ou o outro?

Na teoria sim, mas até mesmo no livro Dean aconselha que se seu objetivo é se tornar um desenvolvedor primeiramente funcional, que você inicie aos poucos, utilizando algumas características deste paradigma em POO até conseguir a migração total.

Isso com o autor assumindo que você estará, ao menos no estudo do paradigma funcional, utilizando uma linguagem objeto-funcional, como o Kotlin, que tem suporte a POO e a PF.

Antes de prosseguir, não esqueça de se inscrever na 📩 lista de e-mails do Blog para receber, em primeira mão, todos os conteúdos de desenvolvimento.

Capítulo 1

Nesse capítulo tem conteúdo suficiente sobre o histórico da programação funcional. Que este paradigma tem por objetivo trazer as características das funções e variáveis da matemática para o modo de programar, características como:

  • Variáveis imutáveis;
  • Funções puras, sem efeitos colaterais.

Algo importante deste primeiro capítulo é que o autor enfatiza o porquê de o paradigma funcional estar ganhando tanta força depois de décadas de sua existência: concorrência (multithreading) em trabalhos com dados massivos, Big Data.

Vale ressaltar que até hoje a concorrência em linguagens que priorizam a orientação a objetos, permitindo a fácil mudança de estados dos objetos, não é algo trivial e 100% seguro.

Eu como desenvolvedor POO concordo com o autor sobre os ganhos do paradigma funcional sobre a orientação a objetos em termos de consistência quando se falando de concorrência, pois a programação funcional pura não permite o uso de variáveis mutáveis (nem mesmo contador de loop) e funções com efeitos colaterais, ou seja, o que entra na função é local e sempre há um valor de retorno, nada de uso de null.

Um ponto interessante do primeiro capítulo é quando o autor cita a necessidade de um rápido desenvolvimento de software hoje em dia, algo que segundo ele o paradigma funcional tem melhores resultados quando comparado a orientação a objetos.

Nessa parte ele também fala de uma outra área afetada, de forma negativa, pela necessidade de cada vez mais "entregar logo" o software: a modelagem de sistemas (UML e cia). Algo que já falei sobre em Como Criar Protótipos Android.

Capítulo 2

Aqui os códigos Java já se iniciam, mas não pule este capítulo caso você não seja um dev Java, pois há aqui algumas das principais explicações do livro.

De maneira direta e simples o autor lhe mostra o que são:

  • Funções como valores de primeira classe;
  • Funções de ordem mais alta;
  • Lambda;
  • Closures;
  • Função pura.

Mesmo já tendo lido inúmeras explicações e entendendo alguns termos na base da "martelada", seguramente lhe informo que as definições colocadas pelo autor para os termos citados anteriormente foram as mais completas que encontrei, incluindo a facilidade de entendimento.

Para aqueles que são programadores Java e querem continuar nesta linguagem, porém arriscando já um modelo funcional de codificar, tem exercícios desafiantes de sobra para vocês a partir deste capítulo.

Aqui o autor também se sai bem na explicação da importância das variáveis não multáveis para um código com maior reusabilidade e menos efeitos colaterais.

O ponto fraco deste capítulo ficou com as abordagens sobre: "tipos de dados algébricos e abstratos"; e "programação declarativa vs programação imperativa".

A primeira poderia seguramente ser removida do livro, pois ou a tradução não ficou muito boa ou ela realmente exige conhecimentos extra programação, algo que acaba não acrescentando em nada na proposta do livro.

A segunda, "declarativa vs imperativa", faltou um exemplo mais concreto, apesar do glossário ajudar em muito no entendimento deste trecho.

Capítulo 3

Neste capítulo, com excessão da excelente explicação sobre a principal estrutura de dados em programação funcional, lista encadeada, juntamente com a explicação das funções combinatórias: filter, map e fold.

Com excessão destes o restante do capítulo é para desenvolvedores Java, desenvolvedores que dominam com maestria parametrização de tipos nesta linguagem, ou seja, tipos genéricos.

Aqui também há vários exercícios para os programadores Java.

Um trecho do terceiro capítulo que seguramente poderia ir para o último, "Capítulo 6 - Para onde ir daqui", é o trecho sobre estruturas persistentes, principalmente porque o autor foi simples na explicação deixando com o leitor o possível "continuar estudando isto ao final do livro".

Capítulo 4

O quarto capítulo também é de foco em desenvolvedores Java, pois há a apresentação, não exaustiva, de uma biblioteca que permite a aplicação de alguns modelos de concorrência segura nesta linguagem que ainda não tem suporte completo a programação funcional.

Capítulo 5

No quinto capítulo o autor recapitula os ganhos obtidos quando utilizando algumas características do paradigma funcional na orientação a objetos.

Concordo com os ganhos sobre isolamento de código, fraco acoplamento, e sobre reusabilidade.

Mas descordo e também percebi que ele "desconversou sobre" a melhoria na leitura de código, até porque a representação do mundo real, domínios de problema, via paradigma orientado a objetos é bem mais concisa.

A programação funcional prioriza o trabalho em estruturas como listas e mapas, a modelagem e uso de classes é apenas em última instância.

Quando neste capítulo o autor fala sobre "correspondência de padrões" e sobre "tipo bom" ele meio que se perde e passa ao leitor que na verdade, ao menos nestes pontos, são explicações emocionais, de um evangelizador da programação funcional.

Algo dito neste capítulo que eu mesmo já falei sobre em vídeos e artigos do Blog é que: "somente devemos buscar a otimização do código quando problemas de desempenho aparecem."

Ok, mas por que o autor informa isso?

Devido ao receio dos programadores de POO em utilizar recursão, algo muito forte no paradigma funcional.

Grande parte das linguagens orientadas a objetos tendem a não garantir uma otimização do algoritmo recursivo, indicando então um alto consumo de recursos.

Mesmo sabendo disso, a recomendação é que o desenvolvedor use recursão e deixe que um analisador de gargalos apresente o "ponto do problema" quando ele aparecer.

Capítulo 6

Para fechar o autor dá algumas dicas de leitura complementar e também de linguagens de programação para que o leitor já inicie a prática da programação funcional, linguagens somente de PF, como o Haskell, como também linguagens de POO e PF, como Scala - Kotlin é minha principal indicação a você.

Para mim todos os livros têm de ter um último capítulo indicando ao leitor para onde prosseguir, até porque nenhuma obra é a fonte única e completa sobre qualquer assunto.

Ponto negativo

  • A tradução, em poucos trechos, ficou bem confusa. Os textos não faziam link em significado - a leitura do glossário lhe ajudará em muito nesses trechos.

Pontos de destaque

  • O capítulo um foi muito bem construído em torno do histórico da programação funcional e o porquê dela;
  • O capítulo dois tem as melhores definições para algumas das características mais importantes da programação funcional;
  • As abordagens sobre funções combinatórias foram excelentes: curtas e sem margem para dúvidas;
  • As dicas do último capítulo, principalmente as de leitura, vieram como uma luva, pois dicas assim não são comuns em livros de TI, não com um capítulo dedicado somente a elas.

Conclusão

Se você já tem um conhecimento sobre programação orientada a objetos e quer ampliar sua caixa de ferramentas de desenvolvedor, o livro "Programação Funcional para Desenvolvedores Java" será sim um bom investimento.

Mas note que ele é a introdução da introdução em programação funcional para desenvolvedores [Java], por isso também as poucas páginas, 112.

Se quiser ter uma leitura ainda mais eficiente, indicada, por exemplo, àqueles que já utilizam uma linguagem com suporte também a programação funcional, como o Kotlin, leia, em sequência: prefácio, glossário, capítulo um, capítulo dois, capítulo três e capítulo seis.

Então é isso, não deixe de dar as suas dicas de leitura sobre programação funcional e de informar o que achou da resenha acima. 

Não esqueça de se inscrever na 📩 lista de e-mails do Blog para receber, em primeira mão, todos os conteúdos exclusivos.

Abraço.

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Refatoração Para PadrõesRefatoração Para PadrõesLivros
Scrum - A Arte de Fazer o Trabalho na Metade do TempoScrum - A Arte de Fazer o Trabalho na Metade do TempoLivros
Kotlin Android, Entendendo e Primeiro ProjetoKotlin Android, Entendendo e Primeiro ProjetoAndroid
15 Aplicativos Para Ser Mais Produtivo, Ler Mais e Aprender Novos Idiomas15 Aplicativos Para Ser Mais Produtivo, Ler Mais e Aprender Novos IdiomasEmpreendedorismo

Compartilhar

Comentários Facebook

Comentários Blog (5)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
31/07/2018
Onde ficamos? OO ou Funcional ou ambas?
Seria dizer que "cada caso é um caso"?
Responder
Vinícius Thiengo (0) (0)
01/08/2018
Elisaudo, tudo bem?

Neste caso realmente acredito que não haja o "cada caso é um caso". Qualquer software é passível de ser desenvolvido com qualquer paradigma.

O que posso confirmar é que cada vez mais é comum utilizar características de programação funcional (funções Lambda, por exemplo) dentro do paradigma Orientado a Objetos. Mas nada obrigatório, são apenas coisas que estão acontecendo naturalmente.

O paradigma OO tende a continuar no domínio em termos de desenvolvimento de software.

Abraço.
Responder
18/06/2018
Sou super fã !
Parabéns pelo trabalho!
Responder
Mauro Santos (1) (0)
24/05/2018
Obrigado pelo artigo! Opiniões diretas e profissionais. Muito relevante para aqueles que buscam adquirir boas fontes de aprimoramento.
Responder
Ricardo (1) (0)
23/05/2018
Muito obrigado, por sempre rechear de bom conteúdo o meu feedback do site Vinícius Thiengo.
Devoro o conteúdo que sempre tem postado para aprender cada vez mais o desenvolvimento da programação, sempre com muitas dicas valiosas.
Parabéns pelo trabalho.
Responder