Executando verificação de segurança...
Respondendo a "NÃO! No mundo real™️ o índice deve ser arbitrár..." dentro da publicação [Não disponível]
2

Acredito que pensar que o índice zero é unicamente resultado da preguiça é uma visão extremamente simplesta do contexto da criação das linguagens de programação. Deixe-me explicar minha visão.

Inicialmente, como o artigo original bem pontuou, restrições de memória e poder de processamento eram muito severos. Então utilizar por baixo dos panos uma conversão de índice 1 para o índice 0, que é o utilizado pelo processador para acessar memória, era um gasto desnecessário e muitas vezes implicava na performance do programa. Junto a isso devemos lembrar o que realmente é um array, em sua concepção.

O que é um array? Array é um pedaço continuo de memória. No quesito de como o array é guardado na memória é só isso. Contudo, não basta um array, precisamos acessar os elementos deles, o que é bem simples quando temos o tamanho de cada elemento. Depois, para acessar o elemento N, basta dar um offset de N*(tamanho) relativo ao array e obtemos o elemento desejado.

Exemplo:
Temos um array de 5 elementos de inteiros. Cada inteiro ocupa 4 bytes (usualmente). Agora queremos acessar o terceiro elemento, então usamos a notação array[2] . O que está acontecendo aqui é que você vai acessar a memória na posição array + 8 bytes. Por que? Pois o primeiro elemento está nos primeiros 4 bytes, o segundo nos próximos 4 e o terceiro nos próximos 4 bytes ( a partir do 8 ). Outra notação que pode ser utilizada em C, por exemplo é: *(array + 2*sizeof(int)) .

Note que o array não é um vetor, que pode ter seu tamanho ajustado dinamicamente, por mais que linguagens modernas chamem seus vetores de arrays. Mas inicialmente não era assim.

Assim, podemos ver que o índice zero começou por uma junção de funcionalidade e transparência. Mas isso ocorreu na década de 70 (lançamento da linguagem C), e agora, por que a muitas novas linguagens continuam com o mesmo índice?

Atualmente, pode-se argumentar que o argumento das restrições computacionais não se aplicam e o da transparência não é válido para linguagens de alto nível. Embora essa perpectiva possa se mostrar verdade em alguns casos, temos que observar outros motivos para manter o padrão.

Ao se criar uma nova linguagem de programação, muitas coisas são levadas em consideração. A principal dela é qual dor ela resolve?. C foi criada para providenciar uma linguagem mais alto nível do que assembly e que suportava grandes projetos, sem sacrificar performance. Rust resolve a dor de segurança de memória. JavaScript começou como uma linguagem para rodar em todos os computadores sem precisar de compilação específica para o dispositivo e que provia uma dinâmicidade aos websites. Podemos ver que cada uma resolve um problema diferente e, por conta disso, tem aspectos, funcionalidades, sintaxes e pretextos diferentes. Desse modo dá pra ver que vai muito planejamento um uma criação dessa. Existe até uma profissão para tal: Language Designer.

Um aspecto desse design é o que pode-se fazer para diminuir o atrito de programadores que vão utilizar tal tecnologia nova, para aumentar as chances de aderência. Utilizar ideias, conceitos e aspectos de outras linguagens que já se provaram dá uma segurança que a nova será future-proof e consistente. Então continuar com o uso do índice zero aproveita um conceito estabelecido de programação, lógica e memória já existente entre cientistas e engenheiros de software e é usualmente muito bem vindo pela comunidade de desenvolvimento.

Então, será mesmo preguiça o motivo do índice zero? Ou será que um conjunto de fatores que convergem para manter a tradição?

E agora? Índice zero ou um?
Isso depende. Como outros usuários também já comentaram aqui, vai de cada uso e objetivo da linguagem. Na minha opinião, se a linguagem é de alto nível e pretende fornecer uma nova visão para seus usuários, não tem problema. Mas deve ficar claro que existem motivos reais para se utilizar o índice zero e deve ser analisado se é o caso de o utilizar ou não.

Carregando publicação patrocinada...