Let's begin by defining a computer program. In its general definition, a computer program is a sequence of instructions that enable a computer to accomplish a particular task. No matter the programming language, all program instructions are ultimately translated to machine codes (often called opcodes) that correspond to certain basic electronic circuits in the microprocessor. These basic circuits consist of translation circuits, logic and math circuits (such as adders and Boolean functions), control and timing circuits.
The mechanism of operation of the microprocessor at the machine code level is not necessary for the vast majority of programming. The basic point is that a computer cannot do anything, not even start up, without programmed instructions. The Operating System (OS) is the first program loaded and runs continually on a computer; these system level programs are very technical, highly optimized and in part determine the capabilities of any other program that can run on the computer. Most people will not attempt to program their own operating system, but an OS such as Linux is highly customizable by those willing to try.
Once you have the basic OS loaded and running, the tasks you need the computer to perform will require the appropriate software (or programs). If you only use your computer for word processing, simple game playing, internet browsing or other common user tasks, there is a good chance you can buy or download the software you need. However, what do you do when you need your computer to do something all your store-bought software cannot do?
Customizing your computer to work best for you is probably the single most important reason for the general user to learn basic computer programming skills. After all, computers were developed for the purpose of increasing productivity and efficiency. So, if your computer cannot accomplish a task for you, or does not do so efficiently, writing your own programs may solve the problem.
At this point, I would like to emphasize that programs need not be long, technical, hard to write, or otherwise beyond the skills of the beginning programmer. With modern languages and programming tools, some rather sophisticated tools and utilities can be written in a few minutes. For example, a clipart browser takes less than ten minutes to write with MS Visual Basic.