LPDAC – A Future Technology
Problem Statement:
Over the past many years, people have pioneered the process of making the world run better. For every new development, there is a lot of thought process involved with which humans get centered to only one specific problem and somewhere the mindset to innovate new gets compromised. In the past, people from different walks of life have come together to put their learning into the software, but today, the same people deter from using the advanced resources, computing power, experience and knowledge to solve the problems.
Time is money and in the business world, money matters the most. However, by sticking to the traditional approach of software design we are compromising on money and time. We need to evolve and to evolve at a rapid velocity, we need to think in a different direction
Technology has the potential to make society more inclusive. For instance, the software industry can be revolutionized by the inclusion of differently abled people. Just by eliminating the impedance factor, we can bring in a fresh perspective to the problem-solving industry.
In the world of advanced computing power, we are subpar in our methods to utilize the resources available. Thereby, we need to come up with a better and a more efficient approach.
Solution:
The approach to solve the problem at hand lies in the this quote.
“The irony of life is, Machines are learning to think like a human and Humans are thinking to learn like machines.” – Pankaj Gupta
LPDAC: Language Processed Design and Automated Coding
We just need an inspired solution interpreted from it that can be implemented effectively and the results will can be better than ever imagined, or even thought of.
The solution majorly contains 5 parts:
- Make Machines Learn Algorithms and convert them to productive code.
- Codes can be interchanged among different programming languages.
- Adapt code reviewing and learning techniques using Machines.
- Teach machine OOPS and OOAD for programming and designing patterns.
- Integration with ABAP or SQL based technologies can be best utilized.
Make Machines Learn Algorithms and convert them to productive code:
To start with the explanation, let’s consider an example where we have a user named “Pankaj” and a machine named “Mish”. Pankaj is a techie and has decided to develop a software. Now, he prepares “Mish” to learn the algorithms & pseudocode and convert it to productive code.
Recently he experimented the scenario as illustrated through conversation below:
Pankaj: Hi Mish!
Mish: Hi Pankaj, which code are you looking for today.
Pankaj: Mish you got me right, I am looking if you can print hello world on to a screen and show me the code.
Mish: Sure, Pankaj! Here you go….
Pankaj: Thank you Mish!
The code was:
#include <iostream> // line 1
using namespace std; // line 2
int main() // line 3
{ // line 4
cout << "Hello, World!"; //line 4.i
return 0; //line 4.ii
} //line 5
To our surprise the machine is taught with the knowledge base of a pseudocode of how to print a “hello world” which was:
1. Begin.
2. Print “Hello World”.
3. End.
Having learnt this program, “Mish” is now capable of printing any statement given to her. Now, all I have to do is to say, “Mish print me a statement ‘test successful’” and she shall do it for me. The benefit here is, Mish has learnt printing statements, which can be enhanced to tables, controls, views and other things and Mish will paint them on to the screen. The rendering is much easier than before.
Also, to speak it took me hardly a second to say “Print Hello world” to Mish and the output was ready within a second. The contemporary approach can easily take me up to 30 or more seconds. ‘Mish’ has increased productivity thirty-fold.
The machine interprets the code provided to it. It observes that most of the lines remain the same and the change required to adapt the program to different use-cases is a minute. For example in the sample code provided, line no. 1,2,3,4,4.ii and 5 will always be same for every case of printing. It’s only the line no. 4.i that is subject to change wherein, it requires only the text that needs to be printed.
In future, when she know the algorithm has “Begin” do print line no. 1,2,3,4,4.ii and for “End” line no. 5, The thing will become easier for future.
Similarly let’s take few other examples where my machine has been taught how to sort an array of elements.
The pseudocode taught to her is:
1. Begin
2. Input array of element
3. for j ← 1 to n-1
4. smallest ← j
5. for i ← j + 1 to n
6. if A[ i ] < A[ smallest ]
7. smallest ← i
8. Exchange A[ j ] ↔ A[ smallest ]
9. End.
One more time let’s see the conversation between Pankaj and Mish:
Pankaj: Hi Mish, Write a program to sort values 10,30,43,25,3,5,4,65,2,5,2,5.
Mish: Sure Pankaj, The code is:
#include<stdio.h> // line 1
int main() // line 2
{ // line 3
int i,j,n,loc,temp,min,a[30]; // line a
printf("Enter the number of elements:"); // line b
scanf("%d",&n); // line c
printf("\nEnter the elements\n"); // line d
for(i=0;i<n;i++) // line e
{ // line f
scanf("%d",&a[i]); // line i
} // line g
for(i=0;i<n-1;i++) // line 4
{ // line 5
min=a[i]; // line a
loc=i; // line b
for(j=i+1;j<n;j++) // line c
{ // line d
if(min>a[j]) // line i
{ // line ii
min=a[j]; // line 1
loc=j; // line 2
} // line iii
} // line e
temp=a[i]; // line f
a[i]=a[loc]; // line g
a[loc]=temp; // line h
} // line 6
printf("\nSorted list is as follows\n"); // line 7
for(i=0;i<n;i++) // line 8
{ // line 9
printf("%d ",a[i]); // line a
} // line 10
return 0; // line 11
} // line 12
Now my machine knows how to do a Sorting, in future my machine can learn how to sort records and then with time it can determine which algorithm to use based on the input data.
NLP to code:
The user query is passed through NLP API, my system can analyze the query, then the query is matched with the existing knowledge base scenarios. The code will be reproduced by making the necessary changes. For the printing scenarios, Mish will add print statement to the fixed piece of code and the fetch what needs to be printed from the spoken word, once this is done, the process can be automated to print statements.
Codes can be interchangeable to different programming languages.
Now if Mish is smart enough to produce the same algorithm converted to different programming language then it will be advantageous as this will make the coding pattern more generic and unified in approach. The programming languages need to be distinguished viz. functional based, object oriented and others. This is required as each programming language is designed for a specific purpose and the same logic can be implemented in different languages just by modifying the syntax. On training my machine extensively, it would have the ability to determine the purpose of each piece of statement. Thus, it can develop the code that is generic and adaptable to any programming languages.
Adapt Code reviewing and learning techniques using Machines:
Code quality is something which is directly proportional to the quality of a product and there are numerous of action and efforts that can be taken to achieve high quality code. From the experience, this idea deals can help to attain high quality of product and it will be more efficient. To explain it let’s consider two machines Mish1 and Mish2 both are having some experience or may be newly deployed for automated coding. Assume Mish1 has produced a piece of code then there are 3 possible cases:
1. Mish1 is more experienced than Mish2, in this case Mish 2 will review Mish1, if she has something which Mish1 can learn, then she will make the corresponding comment across the respective lines of code. At the same time Mish2 will learn from Mish1 on why such a code is produced.
2. Mish2 is more experienced then Mish1, in that case the Mish2 will put comments across the respective lines of code which per Mish2 can be improved, may be in terms of best practices, syntax, logic, indentation or some other things which she has learnt in her deployed period.
3. If both are of same experience, they will attempt to understand how the other machine computed the output.
In each of the above cases, it’s a win-win situation as the knowledge base and experience for both the machines will continuously grow and this will enhance their learning and will result in more productivity.
The show shall continue to be run by humans as they will be the sole master of the entire process. The code is reviewed and submitted by a developer. Additionally, Mish1 and Mish2 will learn from the human made changes by analyzing the code in the productive environment.
Now consider it is not two, it’s a network of Machines or a graph of Machines who review and learn from each other. This will bring an unseen level of maturity in the machines every day. Care must be taken that the humans shall always hold the power over the machines.
Teach Machine OOPS and OOAD for programming and designing patterns:
So far the mentioned ideas teach the machine to be efficient, but to be effective they need to learn OOPS/OOAD and Design patterns. This will allow them to tackle real-life scenarios and bring a new level of knowledge discovery. Whenever I ask Mish to write a piece of code, she will always first check if something is already there, if so it would be reused, if not it will extract the logic into a method and expose an API for future consumption. Mish here would be capable to do so if it learns the OOPS design. Teaching a machine, the design patterns can help reduce time. Having learnt the architectural patterns, Mish would be capable of reducing the dependency of human intervention.
Integration with SAP ABAP or SQL based technologies can be best utilized:
These approaches and ideologies are for SAP products. Most of the business applications at SAP are developed using ABAP. These lines of code being the backbone of SAP, can be best used as they are written like what we say general in English and understanding those words and making them to ABAP code can be much easier from LPDAC rather than any other language. Similar case is with SQL as the syntax is quite like the High-level languages (English). Integrating this idea (when converted to tool) can outrage the no of development.
This is not only the benefit of using this idea, there are many more:
- When we say, we encourage diversity, we need to also value the diversity including differently abled people who are more smart, more talented than us, but due to certain challenges are not as efficient. This tool can address the issues face by most of them and thus derive new directions to technologies.
- With continuous learning, the machine has the potential to arrive at a stage where it would be capable of solving unknown and unseen problems.
- In Universal Science, machine plays an important role in terms of calculation and precision, when this is integrated there, it can help in bringing out some new theories and discoveries as machines can go beyond current levels of their calculation power.
- With learning machines, learning to develop machines, they will can improve the SDLC to be more efficient and effective.
This new style of coding can take some time to be accepted by the developers working with traditional styles, but this will not suppress the human efforts as the show will continue to be run by them. This will create new opportunities in markets, new learning trends and will be open the industry to a more diversified group of people.
“Changing with time is essential, but moving at the pace of time will bring excellence.” -Pankaj
Reference blog: https://ideaforfuturetech.blogspot.com/ -Owned by me
People create more and more tools for precise purposes, but thinking about improving the development process deeper, is something that we don't do enough. Thank you for that.
I'm not sure whether your ideas are easy to be applied with Machine Learning. I'm an absolute beginner in that domain.
For making things simpler, couldn't we think about developing each pseudocode in three parts, one being the GUI for entering the parameters (list of elements to be sorted), one being the code snippet template, and another one to apply the parameters to the Template and to generate the code.
We could also use Google to search among the available pseudocodes, as we do today when looking for solutions.
Hi Sandra,
Thank you so much for sharing your view on the topic. You mentioned it very correct, that we use google to search pseudocode, what if machines can do this for you too and on the basis of pseudocodes, come up with proper codes?
This is currently more on ideology,for sure it is not easy to apply the machine learning in such scenario as training model will be a big challenge. But i see a possibility because when compilers can understand the code, they too can understand the purpose.
Going forward with time, the Knowledge base will get enlarge and there is a good possibility that the level of reproducing the code will be huge.
Also the mentioned approach is already there with many IDE. Even with SAP's own web IDE. This idea will be the next step to it.
I really appreciate your views. Thank you 🙂
Hello Pankaj,
thanks for the elaborate write-up.
My 2 cents:
JNN
Hi Jacques,
Your 2 cents are well accepted, even when i was writing this i had the same perceptions and concerns on generated codes that none can understand. So the final code review approval will always be done via human. The machines will do code review as what we have as peer code review today and make comments like layman, in normal english or may be technical. But the final review will be done by a human which will be again passed as input to machines in training model, so that they will learn the pattern. The difficulty comes when code review comments vary from human to human.
Automating the existing procedure for coding doesn't mean that the entire code will be done by Machines a human intervention still be needed, but to train machines and using expertise to manage their knowledge base.
I hope i am able to justify somewhat your points.
Thank you so much for your feedback.
Thanks Pankaj for the blog. A great idea. Last week i was thinking something on a similar line for example you have S4 HANA box and SAP Co-Pilot running. Now you don't have few FIORI apps assigned to your role, so this bot can raise a request on your behalf, this is an easy part hold on for the next thoughts.
Next i was thinking can this bot creates a FIORI application using the concept of CDS-> Odata-> FIORI Elements? For example i need a new app with a complex select with some annotations rule which i will give to the bot let it does CDS & Fiori elements on its own.
To me it looked feasible, only thing to be kept in mind is the Compliance stuff. But anyways with new technologies around infinite possibilities exist.
Thanks
Nabheet
Hi Nabheet
I am glad to see that you too believe in possibility and feasibility for the same.
The bot that you mentioned is actually evolving with those capabilities and will be seen in next few months. The concept is much needed in today's world!
The templates generation are also there, but yes if this bot can adjust and understand values, this will be an immense. The queries and view generation is more simpler, to train the machine/bot than actually making it learn coding patterns.
I think this is a need of time and we will see it soon.
Thank you so much Nabheet for sharing your inputs, may be it's not available today, but in coming years this will be a promising solution.