Я согласен, Дэвид, global может часто означать разные вещи для разных людей на разных языках!
Лично я ненавижу глобальные, по-настоящему глобальные, то есть доступные всему, везде. Чем больше ограничение переменной области видимости, тем лучше.
Объем информации часто должен быть открыт для множества функций внутри модуля, это нормально, но при необходимости должно быть ограничено. Эти я бы определил глобальных модулей или локальных глобальных .
Переменные, которые совместно используются модулями через определенный интерфейс, и включены только при необходимости нормальны, но данные, передаваемые взад и вперед (или указатели на данные) из / в функции, являются лучшими.
Конечно, это все мое личное мнение на моем родном языке (C) и может не совпадать с мнением каждого!