This makes the most sense to me if you look at it backwards. Given that array access starts with zero, what do you call the access parameter? If you call it "offset" from the beginning of the array, then starting at zero makes sense. If you call it "index", or "element", then we have this confusion. The problem to me isn't the choice of the numbering scheme, it is the names and explanation around it.