The first step involves identifying the problem: Just what is it the program is supposed to do? It can be something relatively simple, such as converting a set of data to a different kind (e.g., converting a bitmap from one file format to another), or something quite involved and complex (e.g., connecting different computers around the world, making them talk to each other, understand each other, i.e., creating the Internet).

The second step usually is the how-to phase. It involves analyzing the problem, breaking it down to smaller chunks, each of which may produce new problems that need to be solved. Because of that, this step may be recursive. This second step may take anywhere from several minutes to many years, depending on the complexity of the problem and the urgency to find a solution. This is also the most invisible step of programming, one that can happen at the oddest of times, not just while you are sitting at your computer, but while you are taking a shower, attending a party, watching TV, even while asleep (relaxed mind always helps).

The next step involves finding out if the problem or a part of the problem has already been solved by someone else, and if so deciding whether that solution is sufficient (in which case your work is done), or can be adapted to the problem at hand, or perhaps needs to be be redone from scratch.

The next step is the most visible (to the public), namely coding, i.e., writing the code for the program. If done too early in the process, it may involve a lot of trial and error. But if done after all the previous steps have been fully completed, coding can be like automatic writing, appearing almost effortless.

The final two steps involve testing and debugging. Unfortunately, these are often skipped, especially when there is corporate pressure to release the software early and start making money quickly, and more money by releasing upgrades which may or may not include debugging of the previous version.

All of the above steps can be done by the same person called programmer, or they can be done by a group of persons, some of whom may be better at certain steps than others. The best software is generally produced when a single individual is capable of going through all the steps, but not all programmers have that ability.

Programming is more than a mere idea. It is a way of life. Technically, it is the creation of software. However, such a task is meant to be more than just mundane diversion. It is a supreme challenge through which peace and order are maintained.

Often becoming an ongoing circle of coding and debugging one ultimately finds, in programming, the ability to explore new worlds of possibilities for generating error messages. One can quickly understand why programming is, under normal circumstances, analogous to hitting one's head on a brick wall.

However, this concept of programming does more than generate massive concussion and obnoxious headache for those involved. It is a key in making the best out of life. Ideally, it is an outlet for creativity in the design of software, but, more than that, it is a process of finding ultimate solutions to insurmountable problems. This is why programmers should be respected throughout society, and why geeks should not be spat upon by those who do not wish to understand. People should love programmers and treat them with kindness as they go about solving the problems of the universe.

Programming is the powerful, but poorly understood force that is used to control a realm of infinite possibility. This universe is plagued by an epidemic of bad software. However, a glimmer of hope stands out in this universe... it is the concept of open source. Programmers now have unprecedented tools at their disposal at virtually no cost in a powerful operating system, known as Linux.

1. The art of debugging a blank sheet of
paper (or, in these days of on-line editing, the art of debugging
an empty file). "Bloody instructions which, being taught, return
to plague their inventor" ("Macbeth", Act 1, Scene 7) 2. A
pastime similar to banging one's head against a wall, but with
fewer opportunities for reward. 3. The most fun you can have with
your clothes on. 4. The least fun you can have with your clothes
off.