Почему в программировании считаем с 0.
Tags: javascript, coding, middleit
Published: 2022-01-18 10:00:29

Сегодня утром я подсчитывал количество дней, до выхода наших курсов по дизайну с даты который мы начали  в моем календаре. *"0, 1, 2, 3..."* - пробормотал я себе под нос. Хорошо, что я сказал это вслух, иначе я бы не понял своей ошибки. Какой блять* 0,1,2,3 *:) О боги.  Вот что для вас значит тратить часы на решение задач JavaScript грёбанные массивы!

Я рассмеялся, но это заставило меня задуматься, почему большинство языков программирования вообще считают с нуля. Я знал раньше и полностью забыл.

Так что присоединяйтесь ко мне, пока я изучаю некоторые компьютерные науки.

Прежде всего, давайте проясним - мы фактически не отсчитываем с нуля, мы индексируем с нуля. Когда я искал как бы корректировать свой ответ  на просторах интернета, я наткнулся в   [stackexchange ](https://superuser.com/questions/578292/why-do-computers-count-from-zero)  на ответ уважаемого mowwwalker давайте почитаем что он пишет:


> «Уоу, уоу, никто не считает с нуля, мы индексируем с нуля. Ни один> не говорит "нулевой" элемент. Мы говорим "первый" элемент при > индексе 0. Думайте об индексе как о том, насколько элемент смещен > от первой позиции. Итак, первый элемент находится в > первой позиции, поэтому он вообще не смещен, поэтому его индекс равен 0.> Второй элемент находится на один элемент перед ним, поэтому он смещен на 1 > элемент и находится в индексе 1» - "mowwwalker 5 апр. '13 в 14:32"

Спасибо тебе mowwwalker:) 

Я предоставляю это комментарии как корректировки мое точки зрения, но мы не поэтому считаем с нуля.  
Ещё когда учился в универе мне посоветовали почитать статью про индексы от Дейкстра  мои  преподователи, тогда я не обратил должного внимания на это. Сегодня ж ради ознакомления и интрига взяла вверх пошел читать и так он написал  [небольшую статью](https://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF)   по этой теме в августе 1982 года. Он начал с рассмотрения четырех различных способов обозначения натуральных чисел        

*2, 3, ..., 12. *

*1) 2 ≤ i < 13*
*2) 1 < i ≤ 12*
*3) 2 ≤ i ≤ 12*
*4) 1 < i < 13*

В своей статье Дейкстра исключает пункты 3) и 4), поскольку они лишены преимуществ 1) и 2). То есть в 1) и 2) длина подпоследовательности равна разнице между границами (в этих случаях 11), и если бы у вас было две смежные подпоследовательности, верхняя граница одной была бы равна нижней границе другой. .

Например, в соседних подпоследовательностях  *1 < i ≤ 13 и 13 < i ≤ 23* верхняя граница первой равна нижней границе второй (13).

Хорошо, но что лучше, 1) или 2)? Джикстра указывает, что 2) исключает нижнюю границу в своих обозначениях. Это неудобно, поскольку если вы начали подпоследовательность с 0, например 0,1,2, тогда вы заставили бы нотацию использовать неестественные числа, например:* -1 < i ...*
Как говорит Дейкстра, это «некрасиво», поэтому мы воспользуемся первым методом.
Если мы идем по первому методу, то как обозначить элементы «индексом» или, как мне кажется, как говорит mowwwalker, насколько каждый элемент смещен от первой позиции.  [Ответ Дейкстры прост](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/54a7d177-5772-4c01-83b3-c524188203c2/screenshot_23.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20211110%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20211110T062450Z&X-Amz-Expires=86400&X-Amz-Signature=d49cab1aecfc9fd56a622c364683eebbf808dca5cb4894b01f44a67449db3153&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22screenshot_23.png%22)  .
 
Влияние Дейкстры и, я полагаю, других гигантов информатики теперь объясняет, почему большинство языков программирования начинаются с нуля.

Мое любопытство удовлетворено, я возвращаюсь к JavaScript с массивом:)  так хочется кофе с печеньем:(

Всех обнял.


> 
**Как всегда, я открыт для любых ваших предложений**