They're a bit of an over-used hammer and people go looking for matching nails wherever.
JSON is wildly imperfect, and lacks types and schema enforcement... but if I have a stream or file of it I can read it with my eyes. Protobufs are opaque blobs without the schema and a pile of code. And they use generated code which is on the whole rather annoying and of varying quality. The binary encoding of protobufs doesn't really give them much of an efficiency edge, either; in this day and age there are some very well tuned JSON etc parsers. And if you're looking for efficiency, there are other formats better than protobufs (or thrift) for that purpose.
At Google I saw it rammed into places where it really didn't belong. Embedded systems, even, causing months of delays while people struggled to get them to work acceptably on a microcontroller class machine. Dogma.
But at least there we had better tools inside Google to work with them than I've seen outside.
TLDR they're probably more good than harm, but I don't think they're a universal good and not the universal answer for how to send messages "between things"
I work in Rust and use binpack, flatbuffers, and json, or hand rolled binary layouts (often using the binary_layout crate), depending on the use case. I don't think there's a universal solution.
JSON is wildly imperfect, and lacks types and schema enforcement... but if I have a stream or file of it I can read it with my eyes. Protobufs are opaque blobs without the schema and a pile of code. And they use generated code which is on the whole rather annoying and of varying quality. The binary encoding of protobufs doesn't really give them much of an efficiency edge, either; in this day and age there are some very well tuned JSON etc parsers. And if you're looking for efficiency, there are other formats better than protobufs (or thrift) for that purpose.
At Google I saw it rammed into places where it really didn't belong. Embedded systems, even, causing months of delays while people struggled to get them to work acceptably on a microcontroller class machine. Dogma.
But at least there we had better tools inside Google to work with them than I've seen outside.
TLDR they're probably more good than harm, but I don't think they're a universal good and not the universal answer for how to send messages "between things"
I work in Rust and use binpack, flatbuffers, and json, or hand rolled binary layouts (often using the binary_layout crate), depending on the use case. I don't think there's a universal solution.