At its core all software consists of two things: instructions and data. Instructions tell the computer what to do. Since these instructions are typically followed by a computer (as opposed to a robot), they usually can’t affect change in the physical environment. Instead, they operate on data (a symbolic representation of information); acquiring it, analysing it, copying it, modifying it, storing it, transmitting it and presenting it to humans.
Unlike humans, who can usually interpret vague or sloppy instructions, computers need to be given extremely precise instructions and will do exactly what you say, not what you mean.
While this may sound like a nuisance, in exchange for being provided with very precise instructions computers will follow your instructions extremely fast for a very long time without complaining, taking breaks, eating, getting sick or wanting to be paid. If you can come up with a set of instructions that a computer can follow to perform a task you need done, it is nearly always cheaper, faster and more reliable to have your task done by a computer than a human. That said, as you will discover, coming up with the right set of instructions can often be tricky, especially for complex problems.
The instructions are generally provided in advance by humans, commonly referred to as programmers (AKA developers or coders). Programmers write down these instructions in plain (i.e. unformatted) text using a language designed specifically for programming computers. There are many such languages, each of which have their pros and cons.
Just like natural languages (e.g. English, Chinese, Arabic, etc.), the popularity of programming languages follows a power law distribution: most software is written in a few of the most popular languages and the others find only narrow adoption. However, instead of mastering just one or two popular languages, understanding how various concepts are expressed across several different languages will make you a much better programmer.
Now read about the principle of abstraction.