I don't agree that natural language is more information dense than most programming languages, there's a bunch of shared context, work, and assumptions that must be understood before effective use of both, but natural language is typically pretty loose and relies heavily on context for real meaning, which is still subjective. Conversely, PLs have no subjectivity once executed/compiled. Natural language is very verbose when trying to express the concepts of a PL with the same specificity, just look at how long entry-level tutorials for writing hello world in any PL are. Or try explaining all the details of even a basic function call in C to a CS101 class. You need to say a lot of words to describe the same exact thing.
PLs benefit from being targeted at a specific domain dramatically that NL just can't.