Well, to be honest, i'd go with this definition:
A programming language is a language,
that allows programming a machine.
This is the only thing, that all programming languages have in common.
Some are compiled, some interpreted, some follow formal syntax rules, some don't (for example rail ... no chance to put that into EBNF or whatever), some are human readable, some aren't (brainfuck) ... i do agree, that currently they are all moreless formal, but that's due to technical problems ... there is no other reason why all programming languages are formal, except the fact, that understanding real human language is currently too difficult (note: i'm not saying that no language would be formal, if processing human language was feasible to sufficient extents) ...