Software or program, what is the difference?
Expanding Pradhyuman's answer. From Wikipedia:

Software Engineering can be divided into ten subdisciplines that correspond to distinct phases of the software development process. They are:


Software requirements: The elicitation, analysis, specification, and validation of requirements for software.
Software design: The process of defining the architecture, components, interfaces, and other characteristics of a system or component. It is also defined as the result of that process.
Software construction: The detailed creation of working, meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging.
Software testing: The dynamic verification of the behavior of a program on a finite set of test cases, suitably selected from the usually infinite executions domain, against the expected behavior.
Software maintenance: The totality of activities required to provide cost-effective support to software.
Software configuration management: The identification of the configuration of a system at distinct points in time for the purpose of systematically controlling changes to the configuration, and maintaining the integrity and traceability of the configuration throughout the system life cycle.
Software engineering management: The application of management activities—planning, coordinating, measuring, monitoring, controlling, and reporting—to ensure that the development and maintenance of software is systematic, disciplined, and quantified.
Software engineering process: The definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle process itself.
Software engineering tools and methods: The computer-based tools that are intended to assist the software life cycle processes, see Computer Aided Software Engineering, and the methods which impose structure on the software engineering activity with the goal of making the activity systematic and ultimately more likely to be successful.
Software quality: The degree to which a set of inherent characteristics fulfills requirements.


...

As you can see, programmers are mainly required for software construction and maintenance.

A software engineer should have strong knowledges of all the software development phases and should be a good programmer, too (actually most programmers employed in big companies are engineers :-).

Obviously for small software projects some phases may overlap (or may be ignored) and programmers may be involved directly in many of them. For large software projects (like an operating system) there can be hundreds (thousands) of software engineers and programmers involved.