This journal, or collection of notes, is about a documenting concepts and ideas to create a Computer Programmer AI (CPAI).
What is refered by a CPAI is an application that is capable of producing software code to solve specific problems.
The idea of is based on modern software architectures and AI modern technics to create an application that can deduce or guess an algorithm based on a provided Set of Pairs "Input-Expected Output" (SPIEO) and a Collection of Programming Instruction (CPI).
If an algorithm is found that solves the SPIEO using the CPI, it will be memorized as a new Programming Instruction (PI) in the CPI.
The SPIEO are provided in the form of a validation function or a validation program.
It would be as if a unit test function is provided to a software developer for him to code the logic that will pass all the assertion in the test.
This means the CPAI will need to be teached through SPIEO for it to discover new algorithm that will enriched its CPI.
To resume, the objectives would not be to create an AI that would develop application by understanding the meaning of a given instruction such as "create a program/function that do this" but it would rather be to create some sort of super software developer assistant.
The developper/architect can access the collection of algorithm produced by the CPAI like he would by using a library (like boost for example) but if no function matches what the developper/architect needs, he can create a SPIEO for the CPAI to generate the required behavior function.
The advantages of the CPAI would ideally be:
- for the developer/architect to focus on high level behavior instead of implementation
- to improve software quality by using function that would always be tested (Test Driven Developement)
- to reduce development time by focus on developping only test units (SPIEO) for new functions instead of having to develop the function + the testing function(s)
- to create more efficient code (time and size) that a human would
- to create a centralized bank of utilities functions without having to multiply third party libraries
- to create more complex function faster than a human would
The idea to produce a program such as the CPAI, is to start small (small CPI and simple SPEIO) from an initial concept (that will be described in another note) and adapt the architecture and the concept iteratively based on the progress and challenges met.
Please feel free to provide ideas and inputs that would make this challenge a success.