Software engineering is a set of principles and patterns for SDLC. SDLC stands for system development life cycle.
SDLC consists of stages from the time requirements being gathered (for the problem) all the way to submitting the end-result and maintaining it for customer(s) (Solution).
Software engineering deals with problem and provides solution in a systematic way.

What are the differences between programmers and software engineers?
In general both programmers and software engineers are professionals who work in software industry. Both are considered as specialists in field of software development. However it is important to be able to differentiate the differences in their field because it is crucial.
Nowadays these two fields cross paths so often, it might be due to the lack of consideration from the companies and recruiters who advertise a job which is not very well defined in specification and skillset needed. To clarify where these paths cross lets list the responsibilities expected from each individual field in form of a real world role:
A software engineer designs, develops, tests, and maintains software applications. They analyze user needs, design algorithms, write code, and collaborate with teams to create functional and efficient software solutions.
A programmer writes, tests, and maintains code for software applications. They follow specifications provided by software engineers, troubleshoot issues, and collaborate to ensure the proper functioning of programs.