четверг, 18 марта 2010 г.

i = i + 1

В одном из провинциальных городов Советского Союза жил мальчик. Учился он в обыкновенной средней школе, в восьмом классе, и, поскольку был обыкновенным мальчиком, то получал четверки и пятерки по многим предметам. Пожалуй чуть больше других ему нравилась алгебра. Чувствовалась в преобразовании уравнений какая-то неясная, но захватывающая строгость, чеканная красота. За строками абстрактных формул смутно угадывались великие законы реального мира.
Но однажды случайно этот мальчик оказался на уроке… Тогда это называли "программирование", потому что школьного предмета "информатика" еще не придумали. Так вот, оказался мальчик на уроке программирования.
- Допустим, у нас есть переменная "i", понятно? – начала учительница.
- Конечно понятно, я же алгебру знаю, что такое переменные слыхал, - ответил мальчик.
- Допустим, мы хотим присвоить этой переменной значение "1".
- Логично, на то она и переменная, чтобы принимать какое-нибудь значение.
- Для этого мы напишем в программе оператор "i = 1", понятно?
- Ну чего ж тут непонятного ? "i = 1", нормальное такое уравнение, проще не бывает, все и ежу понятно, - проворчал мальчик.
- Хорошо, а теперь представь, что у переменной i уже есть какое-то значение, а тебе нужно увеличить это значение на единицу. Какой оператор для этого надо написать? – продолжила урок учительница.
- Ээээ… Какое у нее значение? – замялся мальчик.
- Не важно. Любое, какое есть, но его надо обязательно увеличить на единицу.
Мальчик минуту усиленно думал, но ничего внятного в голову не приходило.
- Можно написать оператор "i = i + 1", - подсказала учительница.

Сперва мальчик опять впал в состояние ступора. Неправильное это уравнение! Никак не может быть, чтобы переменная i была равна i + 1, не бывает такого, i равна сама себе, а если прибавить единицу, то это уже не равно i. Эти мысли сердито крутились в голове, вытесняя все остальное. Но внезапно сквозь круг непонимания что-то прорвалось. Вспыхнуло какое-то озарение: две части уравнения "i = i + 1" находятся в разных временах! В правой части i + 1 – это прошлое, то что было ДО выполнения оператора. А в левой части i – это будущее, которое наступит ПОСЛЕ его выполнения. И та будущая i действительно станет равна прошлой i, увеличенной на единицу.
Все уравнения, которые мальчик раньше видел на уроках алгебры, были статичны. Они просто констатировали некие законы мира – a + b = b + a всегда равно, хоть вчера, хоть завтра. А операторы присваивания в программе – они меняют состояние памяти компьютера, меняют его внутренний мир. С выполнением каждого оператора получается что-то новое, чего не было раньше. И это новое целиком зависит от того, что написал программист.

Потом мальчика часто спрашивали:
- Ну почему ты занимаешься только компьютерами? Что такого интересного в этих непонятных железяках?
- В каждом компьютере внутри скрыт довольно сложный мир, - отвечал он, - а я – Властелин мира.