Давно уже заметил у Илья Ермакова и некоторых других необычную манеру именования переменных. Сейчас обратил на это внимание вновь, просматривая коды из раздела wiki на сайте. На мой взгляд, слишком короткие имена переменных ухудшают читабельность кода. В чём причина такого подхода?
Чтобы не быть голословным, вот пример даже не самой плохой в этом смысле функции:
## Код:
```
PROCEDURE (rd: StdReader) SetPos (t: INTEGER);
      VAR p1, p2: Page;
   BEGIN
      ASSERT((t >= 0), 20);
      p2 := rd.base.first;
      WHILE (p2 # NIL) & (p2.t[p2.n-1] < t) DO
         p1 := p2; p2 := p2.next
      END;
      (* Post:
         (p1 = NIL) OR (p1.t[last] < t),
         (p2 = NIL) OR (t <= p2.t[last]),
         (p1 # NIL) OR (p2 # NIL)
         ==>
         Post:
         (p1 = NIL) & (p2 # NIL) & (t <= p2.t[last])
         OR (p1 # NIL) & (p2 # NIL) & (p1.t[last] < t) & (t <= p2.t[last])
         OR (p1 # NIL) & (p2 = NIL) & (p1.t[last] < t)
      *)
      IF p1 = NIL THEN
         rd.page := p2;
         rd.n := LookAtPage(p2, t);
      ELSIF p2 # NIL THEN
         IF t >= p2.t[p2.n-1] THEN
            rd.page := p2;
            rd.n := LookAtPage(p2, t)
         ELSE
            rd.page := p1;
            rd.n := pageSize-1
         END
      ELSE
         rd.page := p1;
         rd.n := pageSize
      END;
      ExtractIt(rd)
   END SetPos;
```

Почему бы не писать таким образом, чтобы названия переменных отражали их смысл? Тем более для примеров\учебных пособий. Для и для работы очень полезно. Вот, например, та же функция ( имена могли быть поняты неверно, просто чтобы сравнить два варианта ):
## Код:
```
PROCEDURE (reader: StdReader) SetPosition (time: INTEGER);
      VAR page1, page2: Page;
   BEGIN
      ASSERT((time >= 0), 20);
      page2 := reader.base.first;
      WHILE (page2 # NIL) & (page2.time[page2.num-1] < time) DO
         page1 := page2; 
                        page2 := page2.next
      END;
      (* Post:
         (page1 = NIL) OR (page1.time[last] < time),
         (page2 = NIL) OR (time <= page2.time[last]),
         (page1 # NIL) OR (page2 # NIL)
         ==>
         Post:
         (page1 = NIL) & (page2 # NIL) & (time <= page2.time[last])
         OR (page1 # NIL) & (page2 # NIL) & (page1.time[last] < time) & (time <= page2.time[last])
         OR (page1 # NIL) & (page2 = NIL) & (page1.time[last] < time)
      *)
      IF page1 = NIL THEN
         reader.page := p2;
         reader.num := LookAtPage(page2, time);
      ELSIF page2 # NIL THEN
         IF time >= page2.time[page2.num-1] THEN
            reader.page := page2;
            reader.num := LookAtPage(page2, time)
         ELSE
            reader.page := page1;
            reader.num := pageSize-1
         END
      ELSE
         reader.page := page1;
         reader.num := pageSize
      END;
      ExtractIt(reader)
   END SetPosition;
```
