The goal of programming is to find a sequence of instructions that will automate performing a specific task or solving a specific problem. The process of programming requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms, formal logic, and programming languages.
Common tasks in programming include testing, debugging, and maintaining the source code, implementation of the build system, and management of created results such as the source code. These are normally considered to be part of the programming process. However, the term “software development” is normally used for this larger process with the term “programming”, “implementation”, or “coding” reserved for the actual writing of the source code. Software engineering combines engineering techniques with software development.