Computer programming (often shortened to
programming,
scripting, or
coding) is the process of
designing, writing,
testing,
debugging, and maintaining the
source code of
computer programs. This source code is written in one or more
programming languages (such as
C++,
C#,
Java,
Python,
Smalltalk, etc.). The purpose of programming is to create a set of instructions that computers use to perform specific operations or to exhibit desired behaviors. The process of writing source code often requires expertise in many different subjects, including knowledge of the application domain, specialized
algorithms and
formal logic.
Within
software engineering, programming (the
implementation) is regarded as one phase in a
software development process.
There is an ongoing debate on the extent to which the writing of programs is an
art form, a
craft, or an
engineering discipline. In general, good programming is considered to be the measured application of all three, with the goal of producing an efficient and evolvable software solution (the criteria for "efficient" and "evolvable" vary considerably). The discipline differs from many other technical professions in that
programmers, in general, do not need to be licensed or pass any standardized (or governmentally regulated) certification tests in order to call themselves "programmers" or even "software engineers. " Because the discipline covers many areas, which may or may not include critical applications, it is debatable whether licensing is required for the profession as a whole. In most cases, the discipline is self-governed by the entities which require the programming, and sometimes very strict environments are defined (e.g.
United States Air Force use of
AdaCore and security clearance). However, representing oneself as a "Professional Software Engineer" without a license from an accredited institution is
illegal in many parts of the world.
Another ongoing debate is the extent to which the
programming language used in writing
computer programs affects the form that the final program takes. This debate is analogous to that surrounding the
Sapir–Whorf hypothesis in
linguistics and
cognitive science, which postulates that a particular spoken language's nature influences the habitual thought of its speakers. Different language patterns yield different patterns of
thought. This idea challenges the possibility of representing the world perfectly with language, because it acknowledges that the mechanisms of any language condition the thoughts of its speaker community.