Q:

Почему глобальные переменные это зло, а поля класса нет?

Я знаю про побочные эффекты. Меня интересует не почему глобальные переменные - это в принципе плохо, а почему постоянно говорят, что они зло, хотя про поля класса я такого не слышал никогда. 
Хотя, по сути, поля класса ведь ничем не отличаются? Это такие же глобальные переменные, только в пределах класса.

A:

Глобальные переменные в большинстве случаев нарушают инкапсуляцию. К
ним открыт неконтролируемый доступ отовсюду.
В большом проекте при обилии глобальных переменных возникает путаница в именах. Глобальную переменную же видно отовсюду, надо, чтобы отовсюду было понятно, зачем она.
Глобальные переменные в большинстве случаев нарушают принцип инверсии зависимостей (или делают возможным его нарушение).
Глобальные переменные ухудшают масштабируемость проекта.
Глобальные переменные ухудшают читаемость кода (в каком-то конкретно взятом месте непонятно, нужна ли какая-то конкретная глобальная переменная, или нет).
Глобальные переменные приводят к трудноуловимым ошибкам. Примеры: нежелательное изменение её значения в другом месте/другим потоком, ошибочное использование глобальной переменной для промежуточных вычислений из-за совпадения имен, возвращение функцией неправильного значения при тех же параметрах (оказывается, она зависима от глобальной переменной, а ее кто-то поменял).
Глобальные переменные создают большие сложности при использовании модульного тестирования.
Глобальные переменные увеличивают число прямых и косвенных связей в системе, делая её поведение труднопредсказуемым, а её саму - сложной для понимания и развития.

Поля - это такие же глобальные переменные, только в пределах класса.

А давайте одежду дома складывать прямо на пол в любом месте квартиры: ведь 30 кв. см ящика в комоде - это те же 30 кв. см поверхности, что и на полу, только в пределах ящика. И гаражи для машин не нужны, можно на улице ставить. Надеюсь, аналогия понятна.
Ключевая ошибка в утверждении автора заключается в том, что поля класса никаким образом не являются глобальными - они принадлежат объекту (экземпляру) класса, если они не статические. У одного объекта - одни значения, у другого - другие. А статические поля класса общие для всех экземпляров, и это чаще всего тоже не очень хорошо.

