Mein Programmierstil ist die Datenstrukturorientierte Programmierung. Dabei fokussiert man alle Planung auf die Datenstruktur im Speicher und baut die Algorithmen außen herum.
Viele Konzepte beschäftigen sich mit der Konsistenz der Datenstrukturen, und da ist Datenverdopplung und die folgende Desynchronisation (was bei Kombination von Multithreading und Datenverdopplung praktisch unvermeidlich ist) eine der zentralen Sachen, die unbedingt zu vermeiden sind.
Um also Datenverdopplung zu vermeiden, sollten sich alle Algorithmen auf die Originalstruktur beziehen, und das geht nur, wenn diese vom ganzen Programm aus verfügbar ist.
Man muss sich sowieso immer Gedanken um alle Zusammenhänge machen, um keine Programmierfehler zu machen, so dass es kein kognitiver Mehraufwand ist, alles auf eine zentrale Datenstruktur zu beziehen.
Die vielgelobte objektorientierte Programmierung fällt dabei natürlich flach. Sie verhindert konzeptuell, sich über die Zusammenhänge Gedanken zu machen und ist meines Erachtens eine schmutzige Herangehensweise unfähiger Programmierer, um ihre mangelnde Vorstellungskraft zu vertuschen und die Schuld auf "mangelnde Erforschung" des eigenen Programms schieben zu können.
Objektorientierte Programmierung erschwert natürlich auch das Lesen des Codes, weil man eben nicht weiß (und es oft nicht klar überlegt ist) aus welchem Gedankenmodell die Aufgaben der einzelnen Objekte definiert sind.