Directory of Programs
I would say that programs should either be:


A contact subtype.
A custom entity (defined by an extension).
Not stored in Civi, but in the CMS (assuming Drupal or Backdrop) - and use Entity Reference to connect it to Civi.


Memberships/Volunteers seem like we're stretching the paradigm a little thin.