In fact it made things worse; it means you need to understand the m4 syntax, plus know what standard configurations it can pull in, plus know how those standard configurations work, plus you still need to know the original config language so you can fix the standard configurations to work properly.
I actually understand the .cf language better than the m4 layer on top of it. A big part of the problem is that the standard configurations available to m4 have lagged too far behind common situations, like "send from our domain, with no local mailboxes". Here's part of the file I saved from my last sendmail excursion... note that it still needs a .cf-syntax line.
dnl We want a nullclient configuration,
dnl except that we want /etc/aliases respected.
dnl So we selectively pull from nullclient.m4 and modify.
ifdef(`confFROM_HEADER',, `define(`confFROM_HEADER', `<$g>')')dnl
dnl Apparently the only way to force Sendmail to send outside this machine
dnl if the recipient address has any way to match the local machine.
R$* < @mydomain.com. > $* $#esmtp $@ mail.mydomain.com $: $1<@mydomain.com.>$2
I like that Allman suggested Postfix for new installs, though of course I think he's wrong about his preference for combining so many functions into one binary.