The 7 Habits of Highly Dysfunctional Developers (1998)
ganssle.com
ganssle.com
A lot of these are bad things programmers do when there's a lot of pressure to get results quickly. I tend to think that keeping to standards, estimating realistically, keeping discipline etc are things that managers need to make a priority - if a manager just demands results and won't allocate time for proper construction methods, management gets these bad results and is responsible. 'Course the programmer in a good position can just quit but what someone actually does depends on their life position and thus cutting corners isn't necessarily their fault.
https://news.ycombinator.com/item?id=6965295
or ineffective people.
The real problem with global state is provenance, not the global state itself.
Global state has the property of being identifiable, debuggable, and inspectable.
Add provenance and you have a log from which you can see how your program executed and who did what.
Local state isn't necessarily problematic but local mutable state can make some things really hard to track down / reproduce. "Subtle" bugs are bad.
Things like modern games tend to are often developed with "local" data in the small being immutable and larger data being global (mutable is a coin-toss depending on how you're thinking about it).
The benefit of this over actual global variables is that I can create as many IoC containers as I want and they can have their own "global" state. It's great if the application inside of the IoC container is solving part of a problem that's embarrassingly parallel - rather than creating 8 processes you create 8 threads and one container for each.