Programming is neither math nor building
January 24, 2015
Programming is not math, contrary to common belief. Neither software development is the same as bridge- or building-building.
Why do people forget that software, which runs on the hardware, is the instructions for the hardware?
Programming is the same as translating. We as software developers perform translation every day. We translate from the language of customer to language of specifications. Then we translate from the language of specifications to the language of high-level programming language of our choice. Then the runtime of the programming language or its compiler translates automatically to the language of the OS we use. OS we use talks to hardware in language it understands. However, relations between OS and hardware are tangled.
Ultimate programmer is a God. His ultimate program is DNA. Although, if he actually used Big Bang to create universe, then it becomes his ultimate program. DNA encodes the program to create proteins which will interpret DNA further and will create other proteins which will finally construct you. This level of programming is the same as writing the software for a microscopic bootloader which will unpack itself to a compiler which will build installer for a final software. How the hell do you intend on “debugging” such software? How do you even hope to read it and understand?
Well, I diverged.
Anyway, we should not forget that we do not build something static. We write, and we write instructions, what common does it have with the building? We should take inspiration from the literature, not from engineering.
Math is infinitely far away from the programming. We need some general things like boolean logic from it at level of programming. It somewhat closer to software development in general, because at level of software development we should take in account the actual hardware we are using and it’s constraints. Thus, we need things like computability, encoding, algorithms and such — all of it because our hardware, our ultimate executor of our commands, is imprefect and has limited speed and memory.
Also, there is social aspect in software development, which absolutely requires conversation skills, high level of ethics, astuteness and problem-solving skills in general, which have nothing in common with math.
Forget about math. And we do not perform building here, as our work is not something static. We write here and what we write is translations. Multi-lingual professional interpreters are more fit to our work than CS or Math academics. Just bear with it.