Как известно, существует две проблемы программирования:

  • Именование переменных
  • Инвалидация кэшей

По поводу именования переменных мне нечего сказать, каждый начинал с того, что писал программу называл первыми попавшимися словами переменные и через месяц уже не мог понять, что в ней происходит.

В этом плане сильно доставляют Handler, Service, Factory, Process, Task в конце классов. Сразу понятно, что экземпляр этого класса делает.

Но с кэшами все гораздо интереснее. В моей практики они творили такие чудеса:

  • показывали давно удаленные записи
  • чаще не показывали недавно добавленные
  • не давали закрывать баннер
  • иногда открывали его через час снова и снова и снова

Но самое интересное, что в современных процессорах пары буферов и кэша достаточно для того, чтобы у пользователя создалось впечатление что операции присваивания переставлены местами:

    a = 1;
    b = a + 1;
    assert(b == 2);

Достаточно a = 1 положить в буффер записи в кэш, чтобы assert в многопоточной программе не выполнился. Я вообще вру, такого безобразия нет, но простейшая реализация такое допускает.