1K подписчиков

Сегодня не большой пост выходного дня на моём канале. Есть целый набор типичных ошибок, которые совершают даже опытные программисты. Ошибка это ведь тоже своего рода философия, точнее отражение философии программиста. Одной из таких известных ошибок является ошибка на единицу. Ошибка может происходить и в одну и в другую сторону. Довольно часто мы видим сообщение, что индекс вышел за границу массива. При чём, когда начинаешь разбираться, то как раз выясняется, что ошибка произошла, чаще всего, именно на единицу.


Конечно, проблема с единицей не сводится к массивам. Проведите такой эксперимент. Возьмите язык, который вы знаете, на котором вы работали. И цикл for, в котором обычно указываются пределы изменения параметра цикла. И попробуйте точно сказать, какое значение будет у параметра цикла, когда цикл закончит свою работу. Вот не факт, что вы угадаете. Суть опять же не в том, сколько раз было выполнено тело цикла. Суть в том, какое значение будет у параметра цикла по выходу.

А возьмите, например, строку в языке Си. Там на конце должен стоять байт, равный нулю. Попробуйте написать сами основные функции работы со строками: копирование, конкатенация, вставка и т.п. и не сделайте сходу ошибку на единицу. И так можно приводить большое количество задач, где всё время приходится гадать: нужно n или n+1 (n-1).

Мне могут сказать: "Ну это же психология программиста. Зачем ему запоминать, если истину можно установить в течении минуты?". Причина ошибки как раз в этом. Ну иногда просто лень писать что-то для проверки, а написанный код программе, вроде бы работает правильно. Ну, а дальше, дальше "неожиданно" при определённом наборе входным параметров программа будет давать ошибочный результат.

Что это всё значит? В конце концов не смертельно, если в программе появляется ошибка. Потом она всё равно исправляется. Но это так для меня как "философа" от программирования. А для производителей программного обеспечения это всё время и деньги. Суть в том, что особенностью программирования является то, что человек, даже очень способный программист, не всегда может просчитать все варианты в собственном же алгоритме. А проверка фрагментов своего кода, которую он делает , часто не охватывает все варианты. Вот откуда тяга многих программистов, а чаще менеджеров от программирования, найти правильную методику организации "правильного" программирования и заставить разработчиков следовать этой методике. Но вот тут появляется искусственный интеллект и всё начинает рушиться. Да, никто (почти) этого ещё не замечает, но дайте только срок и все это увидят. Если вы меня спросите, как я к этому отношусь, то точного ответа я дать не могу. Уходит эпоха, целая эпоха программирования, которую я видел, в которой я участвовал и это очень печально. Но с другой стороны, и это удивительно, мы возвращаемся в эпоху до 1980-х годов, когда программистов было не много, когда они творили в своё удовольствие. Да писали программы и хорошие программы, но там было много творчества и очень мало насилия над этим творчеством. И по законам диалектики всё опять повторится. И это меня радует.

Вот такие не очень последовательные мысли у меня возникли сегодня, когда я вспомнил классическую "ошибку на единицу".

Сегодня не большой пост выходного дня на моём канале. Есть целый набор типичных ошибок, которые совершают даже опытные программисты.