A project manager is responsible of a project. His objective is that the project team works effectively and efficiently together and delivers the expected project results the work gets done.
But this high level definition might cover very different realities, depending on corporate culture, methodology and individual project particularities. For example:
- according to PMI, the PM is in general someone from the performing organization (i.e. IT or subcontractor) and has a very strong leadership role.
- according to PRINCE2, the PM should in general be from the "business" (e.g. customer), and should manage the project in close cooperation with team leads (and especially the team lead from the performing organizations such as IT or subcontractor).
- between these settings there are a lot of variants, being understood that in smaller projects, the PM very often cumulates several roles (e.g. PM and architect, or PM and lead developer).
A program is something much larger and much longer than a project. Programs are usually performed to reach some long-term strategic objectives, or to launch a new product family.
The formal definition depends again on the methodology:
- PMI sees a program as a set of "projects that conducted under the umbrella of a program would allow advantages that could not be achieved by running them independently". Typical example is because the projects are highly interdependent and need cross project coordination by a program manager.
- MSP (the Prince2 equivalent for programs, also initiated by UK gov) state that a program is defined by the need to achieve some long term objectives.
Both agrees that a program is composed of several projects, and may also encompass some related non-project activities.
The project managers report to the program manager. But the detailed duties of a program manager depend again on the context. It may or may not imply product ownership. He most often directs the project managers; but there are settings where a program manager has only a coordination role.
From the three terms, this is certainly the less formalized.
I understand this term as the manager in charge of the development process and the developers inside and organization, and across all the projects in which his developers may be engaged.
But for large programs, it could be a horizontal role managing the development resources of a large program.
I could imagine that in some context this term to designate a team lead / chief developer /senior software engineer in charge of the software development deliverables of a project, in order to acknowledge their importance. But personally, I never encountered the term in this context.