At the end of the day they are both great and they both suck depending on context. I use 0 based when programming and 1 based pretty much everywhere else.
And in both cases I always run into an issue where I think, "This would be so much easier if we just started at [the other index]".
I use 0 based when programming in some languages, and 1 based in others. Everywhere else I use 1 based.
When I'm programming in 1-based languages, I'm almost always happy with that choice, because they're almost always languages designed for solving problems in a domain that were standardized on 1-based counting before Charles Babbage was born.
When I'm programming in 0-based languages, I'm sometimes very happy with that. Those times are when I'm working in C or C++ . When I'm using other languages, I don't care much maybe 1/3 of the time. And the majority of the time I still wish it were 1-based, because I'm using that language to solve problems in a domain that had standardized on 1-based counting before Charles Babbage was born.
And in both cases I always run into an issue where I think, "This would be so much easier if we just started at [the other index]".