Aug 5th, 2008 | Concepts
My wife worries about me. She worries when I’m staring at the monitor with the strange text for hours – sometimes desperately, sometimes in excitement. She worries when I skip movies, ignore parties and talk with my computer. She worries why I’m so excited about such boring activity as programming even outside my work. She shouldn’t worry – there are few good reasons to love programming. I want to take an opportunity to share these reasons with all non-programming spouses over the world.
Definition: Programming – writing a program that tells computer what to do.
1. Command and Control
If you tell a computer what to do, it will do exactly this.
It is quite different from what we see in our everyday life. You cannot simply expect your spouse, kids and mother in-law to do what you ask them to do. There are many nuances why they will not exactly follow your orders. There are many interesting theories about the human psychology explaining why we are so complicated. Even my small dog sometimes doesn’t listen to me and mark my carpet.
Computers are different. They will do what you ask. This is not that I’m seeking for domination and somebody to submit to my will. No, I just love the fact that something understand straight logic and behave predictably. So, I can focus on what to tell a computer without worrying if it has mood to listen, weird “feelings” or think that I am nuts or a lier. Programming for computers requires rational mind and logic without strings attached. This is the first reason to love programming.
2. Creativity and Complexity
Before telling a computer what to do, you should know what to do.
Some programs are simple – for example, you could write the program that prints on monitor “Hello, My Dear Spouse” or adds numbers. You shouldn’t graduate from an university to write this kind of programs. In real life tasks are more complicated. And here we have a problem – a programmer should know exactly what and how a computer should do. Unfortunately, there is no magic – a computer won’t do anything without instructions. And this is a dark side of the total control over computers.
Knowing what a computer should do is a tricky part – there are many things you should take in considerations for non-trivial problems. As a non-technological example, lets imagine that caring parents (customers) asked you to write a program for kids “The Kid in the School”, which provides detailed instructions what kids should do in the school. Lets assume they will exactly follow your instructions (we are talking about imaginary situation). As any program, your program will contain sequence of commands, conditional logic and responses on external events. You could provide instructions like this:
- Find a classroom and sit down to your desk
- Write down and remember everything what a teacher tells you
- At 1 pm go and buy lunch. Eat it.
You could think about more complicated events
- If your teacher and a friend talk with you in the same time – listen to the teacher only
- If somebody offers you a cigar, refuse and tell about harm from smoking.
Your program should take care about thousands of different situations. In addition your customers (kid’s parents) could have opposite views about appropriate behavior and responses. Also, it is possible that your program is required to work in different environments (daycare, junior, middle and high schools, colleges). And still, as a professional programmer you have to provide clear, concise and unambiguous instructions. In the same time, you’ll have angry parents calling about flaws in your program and misbehaving kids, schools principals calling about crashed schools and managers demanding addition of many new features to the program so desperately needed by millions of zealous users.
The programmer should be cool, smart, creative and have a good mind control over the complex, wicked and growing program. It is the second reason to love programming.
3. People and Problems
Before you know what to do, you should understand people and their problems
To tell the truth, programmers cannot deal only with perfectly reasonable and predictable machines all the time. Computers and programs, that power them, solve real life problems. That means that we have to work with people (often irrational), understand their expectations and problems. As I mentioned before, it is not easy. Often customers don’t know what they want or cannot express it clearly. Often, they think that they know how to build a program, but often they are not in reality. Often their business and needs change after the start of the project. The worst thing is that people start truly realizing what the need only after the program is done. They might find that program doesn’t solve their real problems, it is not convenient or doesn’t work as expected.
Sometimes, it could be similar to building the program “The Kid in the School” based on requests from people who don’t have kids in the school. They have rose blurry picture what they need, which is far from reality and miss these tiny evil details.
A good programmer could read between lines and understand unspoken words. He or she could guide the customer in technological jungles, help each other on slippery curves of this journey and discover solutions together. Interaction with people, solving problems and translation of people ideas into the computer language is the third reason to love programming.
Executive summary for spouses
As you can see, a true programmer should have cool brains, creative mind and a strong heart. He should understand people needs, solve tough problems and clearly expess in the program what these brainless, but logical computers should do.
So, next time when you see a thoughtful programmer behind his desk, you should know he creates worlds of logic and reason for computers from vague world of people ideas. And he has good reasons to enjoy it.