Computer programming (often shortened to programming) is a process
that leads from an original formulation of a computing problem to executable
programs. It involves activities such as analysis, understanding, and
generically solving such problems resulting in an algorithm, verification of requirements
of the algorithm including its correctness and its resource consumption,
implementation (commonly referred to as coding) of the algorithm in a target programming language, testing, debugging, and maintaining the source code, implementation of the build system and management of
derived arte facts such as machine code of computer programs. The algorithm is often only
represented in human-parsable form and reasoned about using logic. Source code is written in one or more programming languages(such as C, C++, C#, Java, Python, Smalltalk, JavaScript, etc.). The purpose of programming
is to find a sequence of instructions that will automate performing a specific
task or solve a given problem. The process of programming thus 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 on-going 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 ofAdaCore 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
on-going 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.