Well, there is a bit more to it than what has been said here. Any instruction or data on a digital computing device is expressed in binary. The command structure of a processor uses instructions coded in binary at the hardware level along with certain flag registers and the processor's clock to execute these instructions. It is not extremely difficult to code in machine language, just extremely tedious, boring and inefficient. But the very first computers were programmed this way by hand, often using, yes, Virginia, toggle switches and a "Set Line Button".
The next generation of computer language harnessed the power of the computer to get us out of the by hand mess, which had created a lot of bugs, glitches and random features. It was a miracle called an assembler. It took short, two or three letter pneumonic codes that represented the machine language instructions and re-wrote the actual machine language file that was represented. What a boon! Now the computer spoke at least pidgeon English.
So, now we have third generation languages like C, C++ and Pascal. And fourth like ... oh, well now you get it. Assembly languages are as low as you need to go effectively just allowing the assembler to control the actual constructs of machine language. And that is what all the rest arrange to do for you too, after some level of manipulations and groomings, is create that machine language file or que it up in RAM to run. Hope this puts the explanation in more meaningful terms!