As a non-software developer, the type of programing languages looks like this to me, from simple to complex:
- 1. Machine level, where one puts numbers into a machine's memory, then the machine interpret those numbers as instructions or data. Nobody does this any more.
- 2. Assembly level, where one can write text mnemonics to be translated one to one into machine level, by a helping program called assembler. Mnemonics are easier to use than putting numbers in a memory.
- 3. Higher level programming languages, where one can use certain English words as keywords of the given programming language. The keywords are broken down into mnemonics by a compiler interpreted, depending the language.
At this point I'm tempting to split point 3. into
- 3.a. Procedural programming
- 3.b. Object oriented programming
- 3.c. Functional programming (I have never tried this yet)
However, from the perspective of a non software-dev, I do not care at all about programming languages, or programming paradigms, or other things like that. I only care about solving the problem I need to solve, but with the help of a computer. I'll put this as
- 5. Natural language description of how to solve the given problem
To give an example, it's very easy to use level 5, the natural language, and write something like:
Water-meter logger program:
- place a webcam to watch the water-meter under the sink
- at every minute take a snapshot of the water-meter
- use image recognition to identify the numbers captured in each photo
- turn the OCR digits into a number
- attach the timestamp to the reading and log that in a file
In natural language (level 5) it looks trivial, but to convert this into a program (level 3), it's not trivial, in the sense that translating from level 5 to 3 will need a lot of tedious work of handling all the details, and then it will need a lot of programming skills to implement, test and debug it all for a reliable level 3 program. When something is tedious or repetitive, it also means it can be handled in an automated way, by a computer.
There is a need for a level 4 that right now is missing, something to help with the automated translation between the natural language (level 5) and the programming level (level 3).
For now, instead of a level 4 language, we have armies of software devs, but it looks like all this translation from level 5 to 3 should be possible to be done in an automated way, just like the other automated translations between higher and lower levels of detail.
From what I see, there is a current attempt to skip a level 4 "language" entirely by using machine learning. The pitfall about this is ML produces fuzzy results, they need piles of data and in the end they can still mistake too often.
- Are there any other attempts for a language in between the natural language (level 5) and the programming language (level 3)?
- If not, what to use, or how to solve the translation from natural language once and for all (without externalizing the task to somebody else)?