Computer programming is the art of organizing instructions. To practice this art, a programmer arranges and tidies code while fixing whatever’s broken. At its start, every program is essentially broken — it doesn’t function properly — in fact it doesn’t do anything at all because there aren’t any instructions yet. So the programmer adds instruction after instruction until the program behaves as expected.
Because a program is a giant list of instructions, the code itself must be organized in an easy-to-understand way. A programmer can get lost in a mishmash of jumbled code and never find a way out. To deal with this inherent complexity, many different styles, languages, libraries, and frameworks exist. Each programmer must find his or her preferred way of organizing instructions, discovering a method that makes the most sense.
What drives a programmer is the need to repair something that doesn’t work correctly. Whether it’s hours or days, the programmer researches and experiments until a particular problem is resolved. As the programmer grows in experience, a catalog of techniques and solutions accumulate but that doesn’t mean programming gets easier. A programmer simply gravitates toward harder projects and the challenge continues.
Plus, programs are never really complete. Aspects of functionality can be overlooked, tiny mistakes can accumulate over time, larger mistakes can remain hidden until revealed by obscure conditions, or the platform on which the program runs can change and cause errors. And thus programming remains an art whose output only approximates something concrete. What appears as a window is in reality tiny dots dancing across a screen.