Write once run anywhere, was Java's slogan in the nineties. And I still find the amount of abstraction JVM provides fascinating. At least since it became well defined memory model, you can write complex pieces of software and they behave remarkable identical on a lot of different platforms. I am aware that the API border to the operating system has always been the weakest link regarding practical portability. But I wouldn't call that misinformation.
This is bad design. Why excuse bad design? When I send a text message and it doesn't arrive, my messaging app lets me know. With Signal, this is a step backward.
has_my_thing(some_array) can be encapsulated too, using modules. For example, in elixir you have functions like List.to_string(some_list) and Map.values(some_map). This way, you get encapsulation and don't have to have a class.
Going forward, the pipe operator is going to be showing up in many new languages. I've used elixir a lot, and the pipe operator is a genius piece of syntactic sugar.