Как вы, возможно, заметили, эта публикация на Medium теперь имеет новое название «Неопределенное поведение» — термин компьютерного программирования, который, я думаю, описывает суть того, чего я пытаюсь достичь с помощью этого блога.

Языки программирования имеют подробные спецификации, описывающие, как компилятор должен интерпретировать код. Неопределенное поведение означает, что поведение программы при встрече с определенной конструкцией языка программирования не указано. Например, в C++, если у вас есть код, подобный следующему:

интервал х;

печать (х);

это неопределенное поведение, потому что вы не указали, какой «x» должен быть установлен. Когда эта программа запущена, значение «x», скорее всего, будет любым числом, оказавшимся в ячейке памяти, выделенной для переменных «x», которые легко могут меняться каждый раз при запуске программы. Таким образом, это может привести к ошибкам, которые очень трудно диагностировать (поскольку программа иногда может работать правильно, а иногда неправильно), поэтому очень важно избегать написания программ, вызывающих неопределенное поведение.

Какое это имеет отношение к этому блогу? Ну, этот блог о ученом-компьютерщике, который привык думать о вещах с точки зрения информатики, пытаясь действовать в «реальном мире» людей. Поскольку у людей нет эквивалента «языковой спецификации», точно описывающей, что они будут делать при любом наборе инструкций, почти все человеческое поведение «неопределенно» в этом смысле. И это вызывает аналогичные проблемы — иногда кажется, что что-то работает правильно в один раз, и не работает в следующий раз, даже если нет особой причины, по которой это должно происходить.