Popular techs, tools and methods are not enemies. They compete for attention and trendiness, not in codebases, workplaces, or skillsets.

— — —

There’s a fake divide between OOP and FP, and a weird divide on several methods.

You can use functional ideas in an OOP language/stack!

I do it daily in Rails, and I got at least 50% to 80% of the FP boost in clarity, productivity, quality, less bugs…

But I do not follow the FP way “all the way” and I do not get the benefits of, say immutability, but I don’t get the hassle too ;)

Just like you can Agile + DDD + TDD + CQRS + ES + almost any stack.

These are not exclusive and each will bring some of its advantages to the table.

— — —

By the way, JS is OOP but prototype-based. It’s pretty much one-of-a-kind.

Ruby/Smalltalk/Objective C are message-passing OOP (I call it the Alan-Kay-OOP and I feel that’s the only correct one), almost all others are/feel/are used like inheritance-OOP (I call it the Stroustrup OOP or C++/Java OOP).

I feel that Java-OOP has problems and when you see the GoF book (design patterns: a catalogue of usual solutions). I feel like you actually have usual problems caused by your typing system and that it’s a “language smell” you should get rid of.

Incidentally, you can definitely use inheritance patterns with JS or Ruby, but that makes me sad because you lose the strengths they have that I love.

FP-fans are big on immutability: you set a variable, it doesn’t change. It’s not so hard once you get the idea, and it forces you to rename variables. No more things = category.things; things = things.select(&:foobar) But you can do things = category.foobar_compliant_things or cat_things = category.things; displayable_things = cat_things.select(&:foobar)

So the first time you force immutability on people it usually is super frustrating. But what I found I like is you tell them about the idea (awareness) then train them (education) then gradually add and fix it in your codebase… then you can either force the immutability (reflexes are OK but you don’t want to throw all code away just to change language) or be happy that you are already 80% of the way and continue working (while reaching 90%) :)