Configure a view to display nodes that match a term value of the container node
The request to show sibling nodes through Taxonomy is one of the most common Views requests. 

You case seems to be the simplest one, you can use the Has taxonomy term ID Contextual filter. 


Create your Views listing Events
Add the Has taxonomy term ID Contextual filter and configure it: 

When the filter value is NOT available
Provide default value
Taxonomy term ID from URL
Load default filter from node page, that's good for related taxonomy blocks
Filter to items that share any term
When the filter value IS available or a default is provided
Specify validation criteria
Taxonomy term ID
[your vocabulary]
Single ID
Place your Block Display on Programs nodes and configure Block settings for the contextual filter.