There are programming languages that are considered low level and ones that are viewed as high. Neither of them are necessarily better or worse. It’s not like in video games, where a higher level would be considered better.
High level programming language
There are several aspects to a language. One such thing is how productive it is. A language that is easy to write and requires very little code to accomplish a lot, is what ultimately a high level language is supposed to be. The higher the level, the more productive and close to the natural language it is. An ultimate high level language would be something that builds a whole app using a single line of code.
Sounds great, but what’s the catch? The problem lies in the fact, that it does so much for you. If you create an app using a single line of code, there’s very little you can do, to change something. The higher the level of a language is, the less flexible and performant it ends up being. Since it deals with a lot of problems automatically, it ends up doing unnecessary things and prevents you from doing stuff yourself the right way. It’s almost like driving an automatic car. Yes, you don’t have to use the stick, but you do end up spending a lot more fuel due to that.
Low level programming language
On the other side, there’s a language which requires you to write a lot of code to accomplish something extremely simple. Instead of making a whole app using a single line of code, you end up writing hundreds of lines just to create a button. An ultimate low level language would be assembly. You would have to write pages of processor level instructions just to accomplish the simplest task.
A low level language is the opposite of a high level one. It’s extremely unproductive and requires you to do a lot of work for very little results. It does however have a good side. Since you have to do more to accomplish something simple, you also have more options. You’re capable of writing a lot more performant software using a low level language and you’re a lot less limited. Similarly to the previous car example, using such a language is like driving a manual. Yes, you have to put some extra effort, but you do end up saving resources.
An analogy to demonstrate the difference
Let’s say you wanted to ask a friend to make you a sandwich. He only knows how to make a ham sandwich. A high level language approach would be to just ask him to make a sandwich, which would result in the only sandwich he knows. But what if you wanted to make a sandwich with a dark slice of bread with some cabbage instead? A low level approach would be for you to explain every step on how to make the sandwich you want. It would be more complicated but the result would be exactly what you wanted.
High level languages
Low level languages
Something to remember
A lot of low level languages have various libraries and tools which allow you to achieve the productivity similar to that of a high level language. And at the same time, sometimes code you write on a high level language may be a lot more performant because all the things under the hood were written nicely using a low level language.