Short history of high level programming languages
Low level programming
Digital computing started with simple logical circuits of wired relays. Thus the programming was done by wiring. Later the simple logical circuits were connected by using digital bus systems and addresses for every operator (register, memory cell). To control such complex unit, a machine language of simple commands was invented. The commands were fetched from a memory, containing a program being made in the language of the machine. Today we call such machine CPU. There exist many types with their own machine languages. They use transistors instead of relays. Thousands of transistors can be injected in one small silicon crystal. Therefore a CPU with a multiple of speed and functionality of the first computers can be realized so small, that a laptop or smartphone has the same computer power as or more than one of the first mainframes, which had the volume of a detached house or larger. Current CPU have still their machine language, every CPU family it’s own.
To simplify the programming there were invented assembly languages. These are 1:1 translations of the machine language commands to easier readable shortcuts with some extensions (macros). The programs that translate an assembly language to a machine language are called assemblers.
High level programming languages
A high level language is more adapted to human language and logic. It is translated to assembly language with programs being called compilers. There have been developed many different such high level languages because the creators followed different targets. So languages were made for easy learning programming terms and procedures and others to simplify the solution of complex tasks with different development approaches. Many of those categories are under permanent development to give the fans of every language growing abilities. From the view of today, therefore all still living high level programming languages become more and more similarly, so that one could say: The world could be easier, if we had only one programming language, which needs no other one to solve all problems being solvable by programming. I guess, that will never be reached, but there are languages with the potential, that can be used to lead them closer and closer to that target.
Perhaps you have already used different languages to solve different problems in one project, because you used a language that was perfect to solve one partial problem but was less or not suitable to solve another partial problem.
But there are also languages which you can use exclusively for a whole project, even if it has no tools for some problems, yet, because you can extend the language easily — only by using this language itself but not limited to this opportunity.
An example of such languages is Object Pascal. It compiles itself. That means, the compilers, IDE and helping tools are written in the same language and are Open-source. The compiler can compile a future version of itself. Many abilities are not coded in the compiler but added as extensions (units, packages). Everybody can use this concept to extend the language or IDE by adding features to the compiler or by writing extensions (units, packages). Nevertheless, if one misses something, that he cannot add in Object Pascal, he can include assembly language by using the built in or an external assembler. Object Pascal is more system independent than Java and perhaps other languages with the same claim. That means, you can compile the same application source code for a lot of operating systems and CPU families completely without changing the source code (example). Alternatively, if you want a solution for one system only, you can use interfaces and API functions of the chosen system. You can use the same tools include compiler and IDE to build GUI apps, console apps, libraries (DLL, shared objects) or web apps (feedback form written in Object Pascal).
Object Pascal is frequently used at schools because it has still the same easy to handle rules, syntax and verbosity as early (Turbo) Pascal versions as a subset of the fully featured language.
Because I have not used other languages so much, may be you know another one that also could be a general base for future needs.
Remark to insiders: My article considers only programming languages after the definition of the Wikipedia article “Programming language". My view on the history also excludes the time before the beginning of the use of current hardware concepts. It is an abstract of the logical sequence of the development more than a time related view.
Some reasons, why Object Pascal is not only a good example for this article