| In many cases what differentiates a programmer who is better at dealing with inherent complexity than another has a lot to do with the ability to apply the right patterns, tools, or strategies under the right circumstances. This ability is largely influenced by having been exposed to similar problems in the past and having applied various strategies to solve those problems. One reason why a lot of programmers struggle is because our current educational systems do not expose students to computational thinking at an early age. They've simply not have had enough exposure to that kind of thinking. Even though computational thinking draws on computer science as a formal discipline the insights are applicable to various other domains and virtually everyone will benefit if they're able to apply the same kind of thinking to other problems in their personal and professional lives. Without having to solve any problems specific to computer science people can still acquire the ability to effectively apply computational thinking by solving other problems in their lives because the inherent complexities of those other problems are going to have some similarities to the inherent complexities in designing software systems. Now some people may already have highly developed computational thinking abilities without ever having touched a computer because intuitively they've understood how to solve analogous problems in a different domain. Such people may be far better at dealing with inherent complexity than some or most professional programmers but they could never apply those abilities in this domain due to the barrier to entry posed by the incidental complexity associated with the tools and languages. A friend of mine, a physicist, is an example of the above. Her approach to dealing with complex problems is already far better than many developers I know, but she wouldn't be a good programmer simply because she doesn't understand the tools. However, if she were to invest significant time to understand the tools then she'd be a better developer than most. Not only that, if she had familiarity with the tools then her already developed computational thinking skills would mature much further. If she were to have access to tools that allowed her to apply her ability to deal with complexity without getting in her way then that would be the ideal outcome. What I'm trying to say is that we are a very long way away from minimizing the incidental complexities introduced by our tools and languages. EDIT: Sal Khan gave a relevant Ted talk on the limitations of our educational systems: https://www.youtube.com/watch?v=-MTRxRO5SRA He mentions that if you were to ask a literate individual in a past society with a 10 percent literacy rate what would be the maximum possible literacy rate they would've said something like 20 percent (80 percent of the population is incapable of overcoming the inherent complexity associated with gaining literacy). But our educational systems have progressed far enough to achieve a 99 percent literacy rate, which would've been impossible for someone in a society with 10 percent literacy to even consider as a possibility. Our estimates of where the boundary between incidental and inherent complexity lies is generally going to be strongly biased. |
I doubt however, that there is much to gain from simplifying the languages, and especially not by going the graphical programming route - it's a chimera occluding the actual problems.
Graphic programming could be used as learning tool, just like a set of training wheels, but just as them it would eventually become a hindrance as both make simple problems simple and everything else much more complex or virtually impossible.
The tools and languages can be improved of course but I do not think there will be any ground breaking improvements, just like there probably will not be any ground breaking simplifications in mathematics, or the process of learning it.
As an side note, I personally wonder why not more work have been done in incorporating first class support for entity-relation and/or graphs in languages - which is probably useful when modeling actual real world problems. But as it is still possible to build using generic language constructs, no one seems to care.
Or maybe the problem is that the educational system is so bad that too many are actually struggling to not topple over with their bicycle even after some years in university.