The Future of Programming: Can Computers Understand Plain English?
The automation of programming through the use of plain English has been a dream of computer scientists for decades. This concept, often referred to as 'automatic programming,' or more recently, 'declarative' programming, has been around for approximately 50 years. Despite the monumental efforts, progress has been slow, with significant challenges persisting. However, with advancements in Artificial Intelligence (AI) and Natural Language Processing (NLP), the possibility of achieving this goal may not be as far-fetched as once thought.
Challenges in Achieving Automatic Programming
One of the primary challenges is the inherent ambiguity in natural languages such as English. Languages are prone to interpretation and can lead to misunderstandings. For instance, if you were to write a specification for tying shoelaces in plain English, the instructions would need to be extremely precise so that someone with no prior experience could follow them accurately. Although this might seem simple in practice, the complexity increases exponentially with more complex requirements.
Developers often spend a considerable amount of time ensuring that the requirements are accurately captured and that all stakeholders agree on the functionality. This phase is often as time-consuming as, or even more so than, the actual coding and unit testing phases. As a result, the integration and acceptance testing phases become essential to map the requirements back to the functionality. Once these phases are complete, the focus shifts to coding, which, contrary to popular belief, is the relatively easy task.
Thinking Like Humans: An AI's Perspective
For AI systems to understand and translate plain English into procedural code, they need to emulate human thought processes. This involves not only comprehending the text but also visualizing the system in action. Developers must build a mental image of how the system will operate in the real world, and this requires common experiences and knowledge. For instance, an AI system would need to understand navigation, sensors, controls, and other real-world concepts to accurately interpret and execute human instructions.
The challenge is compounded by the fact that different people can interpret the same text in different ways. Two individuals reading the same paragraph may have entirely different visualizations of the system. Therefore, AI systems would need to be adept at understanding and reconciling these divergent perspectives. This ability to think and envisage in a similar manner to humans is a significant hurdle, even for systems that share our language and general knowledge.
Past Efforts and Future Prospects
Efforts towards automatic programming and declarative input generating procedural output peaked around 40 years ago. The primary objective was to prove that a given procedural program met a set of declarative requirements. However, as with many ambitious AI projects, these efforts eventually reached a plateau and did not achieve the desired results.
As of now, AI systems are still far from achieving the level of understanding and interpretation required for automatic programming with plain English. Research and development are focused on improving NLP and AI-to-human discourse production. Common sensors and a shared understanding of experiences are key factors in achieving this goal. Even with our current language and knowledge, it is still a significant challenge for AI systems to build systems with the same level of complexity and functionality as a human developer.
Future advancements in AI and NLP, coupled with a better understanding of human cognitive processes, may bring us closer to realizing the dream of automatic programming. However, it is a journey that will likely extend well into the future.