Languages Are Not Parallel-Capable
Up until this point, I have emphasized the failings of programming languages from two perspectives:
- Physical limitations of human brain to use programming languages
- Limitations of programming languages
But as we inch towards using multi-processor/multi-core systems, we need to accept how inadequate programming languages are for expressing parallel solutions. On top of all of the limitations of single-threaded programming described, programming languages have no intrinsic way of describing parallel activities. Yeah, we have added parallelism band-aids, like locks and mutexes and synchronization and so on, but they only exist because language cannot precisely express parallel activities.
I don’t mean just programming languages; I include all human languages in this statement. If you look at the long history of human story-telling, there has never been an example of parallel activities being expressed concurrently. Instead, the story-teller must use the technique made so famous in the Lord of the Rings (J.R.R. Tolkien); we get a chapter or two about the adventures of Frodo and Sam as they make their way to Mordor, then a couple of chapters about the simultaneous adventures of Merry and Pippin, then a few chapters of the concurrent struggles of Aragorn, Gimli, and Legolas as they try to rescue Merry and Pippin. Finally the storyline brings them all back together and the timeline of the narrative is once again synchronized.
It should be of no surprise that languages are not parallel-capable; our logical minds (cerebral cortex) are not parallel-capable. Our brains are exquisitely parallel, with multiple processors managing our vision and our hearing and our respiration and our heartbeat all without supervision from our logical mind. But there was no evolutionary advantage to being able to focus our attention on more than one threat or prey at a time. Even if we were able to track multiple tigers chasing us, it wouldn’t give us the ability to outrun any of the tigers. Even if we could watch 2 or 3 rabbits running from us, it wouldn’t allow us to aim two bows at the same time (shortage of resources (hands)). But being able to single-mindedly focus on making a snare allowed us to catch several rabbits.
No Programming Equivalent of Split-Screen TV
Think about it – in the past 6,000 years or so, we have never been able to use language to express parallel activities the way that a split-screen TV can. We have had some brilliant and talented people who have told stories that contained parallel activities but they never found a way of describing concurrent activities simultaneously; they always had to use interrupted sequential descriptions. Even if they’d found a way, it is doubtful that their readers would have been able to understand it.
If we want to see reductions in parallel programming development times, we need to find the programming equivalent of split-screen TV to precisely describe the concurrent activities of the parallel program. I am not suggesting that split-screen TV is the answer; most of us would probably just watch multiple sports events. But the the model of the split-screen TV, of multiple independent sequences of tasks, is a valuable one, a model that cannot be duplicated using languages, either human or programming.
We need a new way of developing parallel programs, one that uses a model that can inherently represent parallel activity, as well as makes maximum use of the strengths of the human brain and minimizes it’s limitations.
Using traditional language/programming languages to represent parallel activities is doomed to failure. If you disagree, go argue with the story tellers from the past 6,000 years.