I never managed to jump onto the Protobuf hypewagon, and this detailed criticism of them will be good ammunition in future considerations, though it's predicated a bit unsubtly in type theory and uses Haskellisms to describe things. (Perhaps Haskell is a Holy Grail language for type systems?)
I prefer JSON for my APIs instead. If you can't deal with the lack of typing, I am sorry but you don't get to interfere with a no-nonsense good-enough format just to get some fancy Java-like features and binary parsing added.
* * *
It would be interesting to have a similar analysis performed on Telegram's TL which seems to be its own can of worms, made in a typical Durov NIH-syndrome fashion. Unfortunately I lack the experience to do that, for in the alternative case I'd love to, what with my growing hatred of Tg as of recent.
* * *
Related to the first article, someone within the HN comment thread mentioned that Protobuf was originally written by Jeff Dean and Sanjay Ghemawat, which reminded me of this excellent NYT profile of their duo.
* * *
Still related to the first article, this partial debunking by Kenton Varga who's somewhat of a big name in this space is worth reading.
* * *
Reading through the 2018 comment thread of the same article, I came across this nugget:
The utter awkwardness of Protobuf-generated code is particularly problematic. I've had pretty good results with the TypeScript code generator, but the Go generator is just egregiously bad.
While I do admit that there are valid use cases for code generation, I've thus far tended away from it rather than towards it;1 perhaps codegen itself is incompatible with human programmers working on the same codebase and there's reason to hurry along the monkeys-at-keyboards out of it? I can't say that's the conclusion I want to come to but it's a valid one.
1 It is not because I vainly believe that programming is secure from automation, for it is most certainly not; rather because it doesn't mesh with, and even goes against, my personal philosophy that code is a work of craftsmanship and represents the qualities of its author. I don't have a use case for generated code within my own projects, and the code generated would be out of place in the context of mine. This is a privileged position to take since my projects are comparatively tiny to where, e.g., Protobufs get used.