There cannot be greater truth in what Pascal wrote.
Unfortunately, the environment that created the problem out of ignorance cannot be expected to discover the solution out of random chance. The schools that crank out programmers and created the current problem do not know how to correct the error.
Perhaps the greatest failure of software development is the failure of the software developer to learn something important before learning software development. (I know that sounds cyclical.) Therefore, the aspiring software developer must leave software development and learn something else first.
Before learning to code, the aspiring software coder should learn the "patterns and practices" of physics, engineering, chemistry, medicine, business, finance, economics, banking, international distribution, manufacturing... something! These are hard subjects. They are among some of the hardest. But when the coding apprentice begins the long application-development journey -- already armed with a profession, there exists knowledge on which to develop.
These disciplines are more than areas of study. They are cognitive patterns. Learn chemistry and one must learn to think like a chemist. Learn engineering and one must learn to think like an engineer. Learn business and one must learn to think like a captain of industry. Project designers, architects, and coders will not succeed -- fully succeed -- in projects unless they understand the environment in which the problem exists; what the buzz-centric call "the problem domain."
Engineers who program do so like engineers. They work within engineering solution patterns that have existed for millennia. Physicists who program do so like physicists. They solve problems with well-understood patterns and definable criteria. Financial managers who program do so like financial managers. And so on.
In other words, real professionals solve problems in real and known patterns that have been used to solve problems for very long times. They do not suffer from the "crash-and-burn" school of programming. While their understanding of the internals of some framework may be lacking (compared to the 13-year-old hacker), their solutions will stand and their problems will be solved.
If the programming major learned a defensible and workable "pattern and practice" for coding, their major would change to engineering or math or physics or economics. After completion of the "core" curriculum, the professional may elect to return to the computer "sciences." (... no more science than is stamp collecting...)
"Computer Science" colleges crank out human assembly lines from which garbage or gemstones may emerge. Give the human assembly line a precise set of rules and the Computer Science major will properly produce. Give the human assembly line little or no direction and don't be surprised if the Computer Science major produces little or no discernable pattern and nothing usable.
Q: From whence comes the precise instructions for the human assembly line?
A: Project designers and architects who were already professionals in their fields before they began leading the development project.
Software coders and experts are constantly amazed at the "next thing" in software. It always seems to take them by surprise. Functions. Objects. Relations. Interfaces. Contracts. Frameworks. (and on and on) But these things were in use, known, and well understood in other professions long before they migrated over to the lesser "science." They were not surprises to the mathematician or the physicist.
Coding and development will eventually become secondary skills. In the present day, the arrogant teenagers among us (no matter what age) have business cowed into believing that it cannot do without them. This, too, will pass. And those professionals in their own "problem domain" will begin to solve their own problems.
This was the genesis of the present computer age: when the small researcher and small businessman began coding on the IBM and its clones (or the TRS-80) and solving their own problems -- however clumsily. The industry was ignited. The pyre burns low, but that is not because our demi-deities of coding superiority have rescued business and industry. It is because they haven't.
Business and industry, using their own knowledge of their own problems, will assimilate the knowledge of the application developer and begin to solve their own problems -- again.
And the patterns and practices that are lacking in today's programmer will exist as the patterns and practices that were learned by the solution architect in business, engineering, medical, accounting, banking, or chemistry class.