All too often I feel that the art of software engineering is grossly misunderstood. It is one of only a handful of professions that is very difficult, for people who don't do it, to grasp. If you've never worked in software development, you probably feel that the concept of making software is somewhat obscure. How, after all, does one make something like Facebook, or World of Warcraft, or even Microsoft Windows? Is there some lonely super-genius sitting in a basement somewhere writing 0's and 1's, coming up with extremely complicated mathematical formulas that somehow translate into software? No, not really.
Programmers are Wizards
Really. Do you know what a wizard does? A wizard speaks words and causes things to be. A wizard can make things appear, disappear, or change form, out of thin air. A wizard understands the deeper workings of the mysterious forces in the universe, and can easily bend them to his will. That is exactly what programmers do, in the digital world.
Code is merely an expression of instructions. It's a grammar that, much like human language, can describe ideas. If the physical world had a language, similar to ones used to write software, then the concept could be paralleled as follows:
A cup is a cylinder that is 5 inches tall and 3 inches in diameter. It is made of glass, and the top of it is not closed off. I can fill it or empty it. If I drop it, it will break.
Make a new Cup.
Water is made of two parts hydrogen and one part oxygen. When it's room temperature it can flow, when it's cold it solidifies, and when it's very hot it evaporates. I can make it in varying quantities.
Make 5 liquid ounces of new Water. Fill the Cup with the Water.
Programming is Expressive and Creative
It really can be likened to playing an instrument, or painting, or writing. You can accomplish a particular goal a million different ways with code. How you do it, is what matters. In my professional experience, the three most important factors (metaphorical for your convenience) are as follows:
Is it easy to understand?
When we all get together we all get together and enjoy eating together at the restaurant all of us.
When we all get together we enjoy eating at the restaurant.
Both convey the exact same idea, and will accomplish the same level of communication. But one is ridiculously difficult to understand. The same holds true with code.
Is it efficient?
One of my favorite foods is peanut butter. One of my favorite foods is jelly. One of my favorite foods is bread. One of my favorite foods are bananas.
Some of my favorite foods are peanut butter, jelly, bread, and bananas.
Again, this is a simple exercise in optimization. If you think of this process as a series of tasks, one is very tedious while the other takes the appropriate shortcuts to accomplish listing off foods as efficiently as possible.
Is it consistent?
Peter paul,, and Mary WERE sitting i n the Kitchen. They had TEA.
Peter, Paul, And, Mary, Were Sitting, In The Kitchen. They Had Tea.
The "bad" example is clearly unfortunate. But why is the second one better? Because however it was written, it was written the same way across the board. That means I can expect to see the same organizational ideas represented anywhere in the text.
To do all of these things well is what the craft is about. It's the difference between scribbling on a napkin and painting a Rembrandt. To be able to solve problems elegantly takes very creative thinking, and a deep understanding of how to tie ideas together in a way that makes them smart and cohesive.
Programming is a lot of things, and it definitely isn't for everyone. Most people will never understand it, and that includes some of the people that try to do it. But if there's one thing I can tell you for certain, it is anything but boring. In fact, if you're a software engineer, and you find yourself bored, it really just means that you haven't been working on anything exciting. After all, I don't know many wizards that would enjoy using their magic to make the numbers at the DMV change.