Why program?

Why program? This I can not answer. Everybody has his reasons. Maybe your boss wants you to make something that little bit faster and more efficient. Maybe you have been given the source to a program that you often use, and it is up to you to update it. Maybe you are just doing this 'cos you think it might be a worthwhile hobby.
To me? I program because of the following reasons:

1. Programming is a useful tool
      Maybe you have used an application and were not so satisfied with it? Maybe you need an utility to perform some function and you searched every corner but found nothing? You complain, you grumble, you sigh, you shake your head. Have you ever think that maybe, you can make a program by yourself that perfectly meet your requirements? Sounds interesting, right?

So let's program!


2. Programming could make you money
    Look at Bill Gates if you don't think so. You might never get what he has gotten, might never achieve what he has achieved, but I don't doubt, that by programming you could go from nothing to riches. It is not bad to go from nothing to staggeringly wealthy, is it? Somewhere, somebody is getting rich. Want to join them?
So let's program!


3. You got a desire of control?
     A development board is a virgin, you don't want her to die as a virgin do you?
     So take her to where she belongs, give her with what she deserves, make her be what you want her to be, and let her do what you tell her to do. Isn't this seductive and tempting?
So let's program!


4. Programming makes you think
    Try linking two machines via their serial ports, and knocking up a simple little filing system whereby they can access each other's harddiscs. What kind of protocols will you use? How do you differentiate between “this is a control message, tell me what files are here” and “this is just a block of data”? You could use the &01 byte for control messages, and the &02 byte for data. But you cannot scan through for either of those, as they might appear within the data being sent. How do you handle that? Can you block you data, or do you send it as a stream? If you block your data, is the system able to handle other requests between blocks? For example, while one file is being transferred, can you wander the filesystem to look for the next file? Or set up a 'chat' between the machines. What would happen if you want to seperate the machines physically? You now need modems, and you now need error control. Will both ends be able to dial and receive, or will it work on a server/client model?
     Find out the answers of all these questions and you will find youself a genius! How would it be when facing a perfect program that written all by yourself? Trust me, nothing is more amazing than knowing that YOU DID IT.


5. It is art
    To many experienced programmers, coding is an art form. Whether it be writing perfect code, or optimising a program to benefit from the lesser known eccentricities of a particular operating system.

Even “dark code” is an artform. See the following two examples:

DEFPROCread_string(pointer%)
   LOCAL out$
   SYS "OS_IntOn" pointer% TO out$

= out$