Here's another idea: what if we always created the default database at initdb time? For example, if I initdb as rhaas, maybe it should create an "rhaas" database for me, so that this works:
initdb pg_ctl start psql
I think a big part of the usability problem here comes from the fact that the default database for connections is based on the username, but the default databases that get created have fixed names (postgres, template1). So the default configuration is one where you can't connect. Why the heck do we do it that way?
I'd be curious to estimate how many users that have difficulties learning how all this works actually run a manual initdb prior to beginning their experimentation. I suspect the percentage is fairly low.
Doing away with "the default database for psql is one named after the user" seems like it would be more widely applicable. I for one tend to name things after what they do, or are used for, and thus have never benefited from this particular design decision.