meine 2 cent:
(Vorsicht, frauenkompatible Erklärung)
Warum der Mensch meist besser optimiert als ein Compiler:
Nehmen wir mal an, ein Programmablauf entspräche einer Schachpartie ->
die Register sind die "Felder", und die Daten sind die "Spielfiguren".
(Natürlich gibt es in diesem Szenario nur einen Spieler, und zwar den
Programmierer)
Ein Algorithmus nimmt dann quasi eine Startaufstellung und verändert
diese unter Einhaltung der Regeln (hier Befehlssatz des
Mikrocontrollers) bis das Ziel erreicht ist (das Ergebnis / die Ausgabe
des Algorithmus)
Da der Mensch in der Lage ist zu abstrahieren und Muster zu erkennen,
fällt es ihm einfach, einen optimalen Algorithmus zu erstellen und "neue
Wege" zu gehen (so er Hirnschmalz, Kreativität und etwas Erfahrung
mitbringt).
Der Compiler hingegen kann sich nur an die Optimierungsregeln halten,
die seine Programmierer ihm mitgegeben haben.
Und noch was: der Mensch verfügt oftmals über Hintergrundwissen (z.B.
die Eingabe betreffend: Wertebereiche, Änderungsverhalten etc.), das er
auf Assemblerebene ausnutzen kann, aber einem Hochsprachencompiler meist
nicht (oder nur schwer) "mitgeben" kann.
P.S.:
Sorry für die Magenkrämpfe, die jetzt einige Mitprogrammierer plagen
werden, aber mir gefiel diese Abstraktion ;-)