A real computer is a very complicated object, containing a CPU, memory, input and output devices, etc. If we tried to make statements about what a particular computer can compute, those statements might not prove applicable to other machines, and might depend solely on artifacts of design of that particular machine. As computer scientists, we try to determine the abstract principles behind the design of computers, and then construct abstract models based on those principles. If we do our task well, statements about what these abstract models can and cannot compute will transfer back to the real machines they are based on. A formal language is a set of strings, and can represent a computational problem.
Natural language is a very complicated thing.
We would like to design computer languages so that they are flexible and easily translated to machine language. A formal language can be described in many different ways that ultimately prove to be identical. There are two fundamental ways that mathematicians and computer scientists have developed to describe language. A language generator is a set of rules that, when followed, generate all and only the strings in the language. An example is a grammar.