Is it easy to build useful programs for humans? Failure rates and dissatisfaction with the software projects (more than 50% still fails or challenged) show that it is not quite easy task. Can AI help to build more successful projects, compete and eventually replace human programmers?
From ideas to specifications
Human programmers face objective challenges in building software systems, which AI will face in the future:
- It is difficult to understand what people need.
- Customer’s ideas are shifting, once they start using the real system and experience all the consequences and effects for interacting with it in the context of their problems.
- Customer’s needs are changing constantly reflecting outside business and company trends, situation and problems.
There are 4 stages to build a software system:
- Understand unclear human needs and overcome communication barriers
- Translate these needs into specification or the system model
- Implement these specifications within constraints and required system qualities
- Verify that the system meets expectations.
Two first stages need strong AI with human like intelligence and comprehension, two last stages could be achieved with weaker AI. The key is translation of human needs into specifications that machine could understand. Stronger AI will need less defined specification and could handle ambiguous messages and human language, weaker AI will need more details, which at the extreme means writing a program as almost we do now.
As a part of the system specifications we should provide to AI expected input, output and required system qualities (performance, reliability, security, etc.). Even today some trends and approaches reduce gap in translation customer needs to computer specifications:
- Domain Specific Languages – expressing programming logic in language, better suited for specific domains and problems; domain experts can use this language and define the logic. Intentional Software could offer even more interesting approach in the near future.
- Automated Acceptance and Unit Tests – xUnit, Fit and similar frameworks allow to write specifications as tests in declarative or programmatic style.
- Test Driven Development, Behaviour Driven Development and Domain Driven Design provide approaches for evolving and programming a software system primarily from customer perspective as oppose to traditional views for building the system with distinct technological perspective, often disconnected from customer needs.
These approaches put more stress and effort to specify WHAT is expected from the system and less stress on HOW these result could be achieved. It is similar to declarative paradigm of programming (HTML, SQL), where a programmer specify what he expects and the underlying system comes up with optimal algorithms to satisfy this request.
Going forward application programmers and domain experts will focus on describing needs and specifications for the system and AI will increase contribution to implementation of these requests. As AI becomes stronger it will need less and less formalized description and could start comprehend human language directly.
Implementation and Delivery
Baron Munchhausen escaping from a swamp by pulling himself up by his own hair
AI could deliver a system in several ways depending on our level of trust:
- Transparent System – computer generates code and human software professionals review, modify, integrate and accept it. It is similar to vendor model to speed up the main development.
- Black Box – human provide specification, integrate and test the system without much understanding what AI has built inside.
- Key-turn System – we trust computer to specify, build and integrate the system without human involvement and verification.
The first option seems safer and easier, but it requires a computer to generate software code in a human-readable format, which adds complexity and double translation: customer -> computer -> programmer. The Black Box and Key-turn System options doesn’t require this complex translation and could be easier to implement.
Based on today approaches AI could build system in few ways:
- Brute force: genetic algorithms or swarm intelligence, where computer try to find the fittest solution evolving behavior of the system based on selections, mutations, recombinations or emergent behavior of individual agents, competing and cooperating with each other.
- Trained neural networks: interconnected groups of artificial neurons, imitating how our brains are working.
- Symbol processor: similar to the way how a human operates with knowledge based on classic theory of mind: semantic, logic, reasoning, abstractions, etc.
We have been already successfully using AI software solutions in many areas, e.g. manufacturing, finances, medicine, science, air traffic control. Computers even analyze volatile political and military situations and predict unpredictable. It is matter of time when these approaches will be applied to software development and computers will be able to program themselves.
- Complexity – computers could handle much more information then our individual brains, carry knowledge about all possible states of the system and effectively manipulate it.
- Conformity – computers could seamlessly conform to interfaces of the other system and support rules of interactions with brothers computers.
- Changeability – computers will have full intellectual control over the system code and can quickly understand what should be modified and effectively support change requests.
- Invisibility – our brains are specialized on particular processing of information influenced by our biological origin. Computer don’t have this problem and could naturally manipulate information without need to visualize and limit scope for better comprehension.
Can we assume now that a computer-programmer could be superior to a human-programmer and become a silver bullet?
Competing with human programmers
AI definitely will have some advantage over humans. The computer-programmer will show higher productivity, consistency, reliability and will not be affected by mood swings, personal problems or lack of recognition (unless computer intelligence will make twist in their evolution). However there are several human characteristics that will be difficult to beat.
Creativity and Innovation
Creativity is a mental process involving the generation of new ideas or concepts, or new associations between existing ideas or concepts. – Wikipedia
Gödel incompleteness theorem shows that a computer should go beyond rules and algorithms embedded by humans to become creative and innovative. It is still not clear if computer could go over initial set of rules, generate new ideas, extend and connect existing.
Adaptability and Learning
Humans have unique ability to adapt to changing environment and quickly learn new things. It doesn’t take much time to adjust thinking, learn new rules and concepts and start programming effectively. Human programmers can successfully shift to the new domains, still keeping their mastery, apply previous experience enhanced by new knowledge. Could computers become so flexible in emerging new domains, shift in knowledge, perspectives and needs?
Aesthetics and Usability
Human designers can naturally grasp and implement subtle aesthetic and usability needs enhancing user experience for dealing with the systems. This knowledge is ingrained in our psychology and it will be difficult to formalize it enough for computer to allow building easy-to-use and pleasant programs.
Problem solving and Diversity
Human rational mind combined with experience and intuition effectively deals with wicked problems, which involve uncertainty, trade-offs and multiple options. Our brain machine is specialized on solving this kind of problems and it will be challenge for computer to match these capabilities. AI could use brute force at some extent as with chess, but it has limits when number of variables and things to consider increases rapidly.
Diverse talents, broad range of views and different opinions often lead to surprisingly effective solutions, sometimes impossible to predict beforehand.
Generalization and Theorizing
Human ability to generalize, create abstractions and theories based on experience, experiments, many observations and individual cases are very valuable in the software development.
We can substantially reduce complexity of the system logic and even anticipate future needs by creating abstract models and solutions, which could be applied for wide range of different situations and encapsulate theories behind our knowledge and understanding of the problem domain.
Understanding and Shared Experience
Humans will understand other humans much better than computer unless computers tap into our minds and start reading our thoughts. However, it could be scary and still not clear if AI could filter productive thought from the non sense our brains produce.
Human build together shared experience – less and less information is required to understand each other and people become more effective as a team – at the end, ideas and their flow is the most important part in software development.
Seeing The Big Picture and Thirst for Knowledge and Achievements
Many programmers have diverse background, education and knowledge – far more than required to build programs. Many solutions require to go outside of the problem context and understand broader picture. Some solutions could emerge from different problem domains and unexpected areas of human knowledge.
Human strength is irrational curiosity, thirst for knowledge and irresistible drive for achievements, which move our progress forward, open new areas of knowledge and make impossible possible. Can computers inherit this drive and motivation?
Can even super intelligent and powerful computers replicate human strengths that make us so effective programmers? There are definitely some areas that human programmers will rule for a long time. Does it mean that we could relax? I doubt it – computers are taking over more and more human programmer responsibilities and soon they will affect our jobs and replace us in some programming areas. What should modern developer do to stay competitive with gaining strength and power computer AI? This is the topic of the next post.