В том, что по-хорошему всегда нужно знать, что под ними лежит. Иначе они протекут.
Хорошая привычка перед борьбой с багами рефакторить код.
Todo:
- Убрать over-использование таблиц в скриптах, там где можно обойтись массивами, индексация сильно дешевле (Если в языке есть несколько коллекций, надо знать особенности каждой (и показать незнающим :) ).
- Если есть возможность использования абстракции с целью уменьшить число вероятных ошибок, ей нельзя пренебрегать. (спрятать циклы с переменными в локальные функции и заменить на перебор через foreach).
- Поменьше переменных состояния. Лучше пересчитать что-то в функции лишний раз без сохранения значения, чем напороться на баг, когда кто-то в другом файле захочет напрямую записать в поле, которое задумывалось, чтобы сохранить значение подсчитанного выражения для использования в соседней функции. В скриптах – сильно лучше, одна выборка из хеш-таблицы (а обращение к переменной по имени там тоже выборка) может быть медленнее перерассчета длинного арифметического выражения.