Budu asi trochu slovíčkařit, ale jedna část je IMO silně zavádějící.
Vidím to poněkud jinak. Program může obsahovat v zásadě čtyři skupiny informací:
CO se má stát. (Nutné, proto tu ten program je).
JAK se to má stát. (V ideálním světě si to překladač nějak odvodí z deklarace, ale v tom reálném se mu musí pomáhat).
PROČ se to má stát. (Zasazení kusu kódu do kontextu, aby se v tom programátor lépe orientoval).
A PROČ SE TO DĚLÁ ZROVNA TAKHLE. (Vysvětlení konkrétního rozhodnutí pro danou implementaci).
První dvě skupiny jsou "mezi počítačem a člověkem" a zde je myslím obecně přijímáno, že formální jazyk je ideální prostředek, protože je úsporný a jednoznačný. Zbylé dvě skupiny informací jsou jednak volitelné (program bez nich funguje dobře) a jednak slouží pouze pro referenci, když programátor potřebuje. V ostatních případech je to šum, který pouze odvádí pozornost a kdyby se i nakrásně povedlo formalizovat komentář, stroji by to nepomohlo (informace pro něj není určena) a lidem by to překáželo, protože TLDR, že ano.
Jinými slovy, programovací jazyk výborně slouží účelu, ke kterému je navržen a komentář slouží dobře ostatním účelům. To není známka nedokonalosti formálních jazyků. V obecném slova smyslu jistě platí, že formalizovaná komunikace mezi lidmi není efektivní, ale v rámci naší původní debaty to myslím nehraje roli.
Ty druhé dvě skupiny nejsou až tak volitelné jako spíš
naprosto kritické. Psát kód, kterému rozumí stroj, umí každý blbec. Proto se drtivá většina toho, co dělá profesionála profesionálem točí kolem té druhé půlky. Pojmenování, ustálené obraty, návrhové vzory, dokumentace, ... Všechno se to dělá proto, že software se primárně nepíše pro stroj ale pro lidi.
Program bez bodů 3 a 4 sice zatím funguje, ale je to časovaná bomba, která dříve či později bouchne. A až se tak stane tak za sebou nechává pochroumané trosky firem co na ten program spoléhaly a vyhořelé duše ubožáků, co ten binec museli udržovat a flíkovat.