Programação Funcional para Desenvolvedores Java
(3886) (5)
CategoriasAndroid, Design, Protótipo
AutorVinÃcius Thiengo
VÃdeo aulas186
Tempo15 horas
ExercÃciosSim
CertificadoSim
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição1ª
Ano2023
Páginas416
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.
Comentários Facebook