It's not the 0th element. It is the 1st element and has an offset of 0 from the beginning of the array.
Not saying it's better or worse, but that if you change the words you use to describe it, you may find it easier to use.
To my surprise, I just learned that ranges in Rust don't include the end number which felt incredibly stupid from a conceptual point of view (python too). But is syntactically useful when doing:
for x in 0..len(my_array) {
My preference would be that a range include the end number and the language provide more python-like iterators and list comprehensions. I am aware that there is a library that provides more python-like syntax, but that doesn't change the oddness of ranges in either language. I guess I just need to remember that the interval is open on one end. Which brings to mind the notion of using [0..n] or [0..n) in a language...