Programming
 a computer is the act of building up a large number of instructions for
 a machine to follow based on ‘primitive’ operations and underlying 
libraries. These instructions or ‘algorithms’ are always computed 
rigorously, which is occasionally not what we intended. Thus ‘bugs’ may 
interfere with the user’s objectives, but they will not harm the machine
 itself (although they can occasionally damage peripherals). The machine
 is simply following the steps that it was told in a deterministic 
manner. 
Underneath,
 the computer manipulates ‘data’, which itself has to fit to a 
predefined format. Data stored in a computer is a symbolic placeholder 
for things that exist in the real world. It doesn’t really exist, but it
 can be used to track and analyse the world around us.
As
 such software can be viewed as a ‘system’, whose set of instructions is
 ‘formal’. We can’t just create any arbitrary collection of bits and 
expect it to run, the computer will reject the code or data if it isn’t 
structured properly. 
Mathematics,
 in its simplest sense, is the study of ‘abstract’ formal systems. 
Mathematicians create sets of ‘primitives’ that act on abstract 
mathematical ‘objects’. Collectively, the primitives are used to express
 relationships between the objects that are rigorous, often these can be
 combined together to form ‘theorems’ and algorithms. That is, for any 
mathematics to be valid, it must conform to strict formal rules. 
Mathematical objects exist only in the abstract sense, although they are
 often used symbolically to relate back to real things in this world. 
Doing so allows us to explain or predict the way things are working 
around us. There are many domains that attempt to model the real world 
by applying mathematics including statistics, physics, economics and 
most other sciences.
Both
 mathematics and computer languages are primarily about formal systems. 
They both allow us to build up the underlying primitives into larger 
components such as theorems or libraries. They both exist away from the 
real world, and their utility comes from mapping them back. The 
underlying most expressive formal system for computers is the Turing 
Machine. Within this context we often create other more specific systems
 like programming languages or applications. Turing Machines also exist 
within mathematics, however they are not the most expressive formal 
system that is known. There are larger formal systems that encompass 
Turing Machines. As such we can see that the formal systems within 
computers are a subset of those within mathematics.
An
 interesting difference is that mathematics is completely abstract. It 
can be written down in a serialized fashion, but it is not otherwise 
tangible. Software however runs on physical machines, that are derived 
from the mechanization started by the industrial revolution. Internally 
software might be abstract, but externally the computers on which it 
runs are subject to real world issues like electricity, temperature and 
moisture. In this way software manages to bridge the gap between our 
abstract thoughts and the real world around us. Software also often 
interfaces directly with users who are creating new input or trying to 
analyse what is already known.
Given
 the relationship, software is a form of applied mathematics. Its formal
 systems share all of the abstract qualities of mathematical formal 
systems, and the underlying data is essentially various mathematical 
objects. Building up software on a computer is similar to building up 
theorems or algorithms within a branch of mathematics. Both mathematics 
and computers have issues when getting mapped back to reality, since 
they are at best ‘approximations’ to the world around them.
Software
 development has been underway for at least five decades, and as such 
has built up a large base of existing code, knowledge and libraries. The
 many partial sub-systems of software, like operating systems or domain 
specific languages can help to hide its underlying mathematical nature, 
particularly when crafting graphical user interfaces, but ultimately a 
strong understanding of mathematics helps considerably in understanding 
and structuring new parts for systems. There are some aspects of 
programming that are non-mathematical, such as styling an interface or 
the content of an image, but for the rest of software development having
 a good sense of mathematics and logic aid in being able to craft 
elegant, correct and consistent instructions.
Since software is an applied branch of mathematics, it is clear that not all code is intrinsically mathematics, but realistically what isn’t lies only within the intersection between the machine and the user. That is, whatever irrational or illogical adaptations are needed to make the system more usable for people, is non-mathematical. The rest of the system however, if well-written (and possibly elegant) is a formal system like the many that are known in other branches of mathematics.
 
No comments:
Post a Comment
Thanks for the Feedback!