This is the reason why most will use one of the other two. Assembly language is the oldest form of non-machine language. It is a symbolic representation of machine language. It typically uses a one to one correspondence between the two. Another program called an assembler will translate it into machine language. Since assembly language uses easy to recognize codes, it makes it a lot easier for people to understand. When it comes to the program and how it relates to the computer processing and memory usage, the program will typically be stored in non-volatile memory until it is requested.
Upon request it will then be loaded into random access memory (RAM). Once it is loaded into the RAM it then can be accessed by the central processing unit (CPU). It will then execute instructions until terminated. Termination can either be by user or it can be due to software or hardware error. High-level languages will typically contain commonly used English words and phrases, thus removing a lot of the symbols and structure that is required at a lower level programming. There are several advantages to high-level languages vs machine or assembly.
Typically if a program is written on one computer it can easily be modified to work on another computer. Also a single instruction written in a high level language will typically translate into several instructions in machine language. Now a disadvantage is that these high level programming languages are typically less powerful and less efficient than assembly languages. They also need to be translated into machine language before their instructions can be understood and carried out. Now there is several different high level programming languages out there.
Why are there so many? I think there are so many for a few different reasons. One reason is to take advantage of hardware improvements that have been made over the years. Another is just to make it simpler for programmers. The easier that a language is to learn the better the opportunity is to attract talent. When developing a program, you need to first have a problem to solve. There is a cycle that is referred to as the program development cycle. This cycle has been developed as it is a model that can be repeated across the board to maximize success.
The cycle has 7 basic steps. These steps are Define the problem Outline the solution Develop the outline into an algorithm Then test the algorithm Code the algorithm Run the program on the computer Document and maintain the program Now when coming up with the design for your program, you will need to have on hand some people to give input. Having the customer on hand to provide some of that input would be advantageous. Software Engineers, as well as testing engineers will need to be giving input as well as the project manager.