• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Difference from Pierre-Yves Saumont's book

 
Author
Posts: 28
9
  • Number of slices to send:
    Optional 'thank-you' note:
Thanks for having me!

In my introductory post, I was asked how my book compares to Pierre-Ives Saumont's "Functional Programming with Java", so I am trying to answer that now.

I think the main difference is already shown in its title/subtitle, highlighting the book's different approach to its topics.

The book approaches its topics primarily from the Java side and moves towards FP, not vice versa.
That means it builds upon the available tools in the JDK and shows how to use them to augment your code gradually, not replace it with functional techniques and concepts, so you can enjoy the best of both OO and FP.

Looking at functional programming concepts and techniques from an isolated point of view, everything is quite awesome.
Topics like persistent data structures, reactive programming, or state management with actors, are all great solutions.
So many things are way easier to do than before in imperative or OO code.

However, many Java devs, myself included, work with existing projects, code bases, and dependencies living in an imperative or OO world.
We usually can't switch to another paradigm for core features or change the whole architecture because it is supposed to be a "better" solution.
Even if we could, most of the time, you still shouldn't without a clear need to do so.

That's why I try to approach the functional topics from the point of view of a more "typical" Java developer wanting to improve their code with functional concepts and techniques.

My reasoning for doing so is simple.
Once, I read a book about FP in Java that intentionally ignored Streams and built its own equivalent.
That's actually a great way to learn the why and how of declarative data processing, and there is much to learn from such content.
But on the other hand, how often do you really implement such a feature in a "real" project yourself? It feels a little bit like a case of "not invented here" syndrome.

I'm guilty of that myself, don't get me wrong, but I believe that using the tools already available often triumphs over using a dependency or, even worse, implementing it yourself.
My point is that using non-JDK tools always adds responsibilities, long-term commitments, and requires a mental overhead that you might even unwillingly force onto others.

That's why the book introduces functional concepts, techniques, and the available tools in the JDK in detail, including ~50 figures.
This allows the reader to develop a "functional mindest" that's useful regardless of the chosen paradigm, even in a more OO/imperative-akin language like Java, opening up a new world without completely transforming your code base.
 
Marshal
Posts: 79422
377
  • Number of slices to send:
    Optional 'thank-you' note:
I shall split this thread so my replies will give me a change of winning

Ben Weidig wrote:Thanks for having me!

That's a pleasure and thank you for coming here to promote your book.

In my introductory post, I was asked how my book compares to Pierre-Ives Saumont's "Functional Programming with Java" . . .

Yes, I asked that question.

. . . approaches its topics primarily from the Java side and moves towards FP . . .

Yes, P‑YS starts from FP principles.

. . . So many things are way easier to do than before in imperative or OO code.

Agree that the declarative style which Streams and λs permit, once you have learnt it, makes programming easier.

. . . change the whole architecture because it is supposed to be a "better" solution. . . .

I am sure there is a name for that. Yes, “If it ain't broke, don't fix it.”

. . . built its own equivalent.
That's actually a great way to learn . . . how often do you really implement such a feature in a "real" project yourself? . . . .

Yes, it is good to learn the internals of library classes, even if you then tell your readers, “Nobody does this in real‑life programming.” Once a student/learner has built a hashtable. they will understand how they work for ever. . . . And never write such a class again!
 
reply
    Bookmark Topic Watch Topic
  • New Topic
vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |