In practice, I believe that the present text-based programming paradigm artificially restricts programming to a much simpler logical structure compared to those commonly accepted and used by EEs. For example, I used to say "structured programming" is essentially restricting your flow chart to what can be drawn in two dimensions with no crossing lines. That's not strictly true, but it is close. Since the late 1970s, I've remarked that software is the only engineering discipline that still depends on prose designs.
You appear to be thinking about a very limited subset of software where the essence is captured by the "two dimensional" control flow.
As Fred Brooks famously wrote: "Show me your [code] and conceal your [data structures], and I shall continue to be mystified. Show me your [data structures], and I won't usually need your [code]; it'll be obvious.''
Nowadays he probably would have updated that pithy formulation to include mention of your threading model as well as data structures.
If you start trying to visualize the dynamic behavior of complex synchronization-heavy multi-threaded programs or ones with significant non-trivial shared data structures, then I can assure you there'll be plenty of crossed lines!
The time when most programs could be described by flowcharts was probably 40 years ago. We've moved on a bit since then!