The Code Less Traveled: Thinking Different In A Uniform World

July 18, 2007

I always liked the "Think Different" ad campaign from Apple, not that it necessarily was successful as an ad concept, but it really pointed out how looking at things differently from others lead to making a difference in the world.

If you want to look like everyone else, solve problems the way others do, use the same tools and technologies everyone around you is using just to fit in, then by all means do so. In fact you may very well be more successful. But in the end you are simply a cog in a machine, supplying work for pay, interchangeable with everyone else.

Being an original isn't always much fun. Creating something different can get you laughed at or ignored. Sometimes you have to push hard to be heard, to explain your solution to people for whom the word "new" is a curse word. In the early days of computing everything was new and nothing set in stone and imagination and invention was the status quo. Of course there were people who thought change was bad and current technology was good enough even then.

With the 50 years of software behind us there are many more opportunities for resistance to change; platforms, methodologies, languages, tools and product lines that people are afraid or unwilling to consider alternatives to. Yet every day invention happens and new opportunities appear that demand change and make the comfortable status quo less so. The more things change the more resistance builds up. It's not easy being on the side of change.

Even though we cannot all be Tim Berners-Lee and invent the web, we can still make a difference by looking for, thinking, saying and being agents of change.

Look Different

If all you do is your job and ignore everything going on around you, then your chances of making a difference is nil. In software change happens every day. Of course it impossible to keep up with everything but the excuse that it's too hard is not an answer.

When I started programming for money in the early 80's the only programming community you had was your coworkers and possibly a user group. The only sources of information were magazines, catalogs and friends. Today you can learn about anything and everything. Between blogs, rss feeds, social sites it's possible to know what's going on, find new things to learn, and discover what others think. Today we live in an information rich world. Look around, you might find a new technology or solution or process that you might have never thought of on your own.

In my first job at General Dynamics I read and memorized the entire IBM PC product catalog along with all the configuration options. I wound up being called by all the IBM sales reps we had whenever they needed to configure something, as they knew I could do it faster than they could. It helped me a lot when I needed something from them that wasn't normally available. By doing something I wasn't expected to do I gained something others didn't have; access to internal IBM folks and information.

Think Different

Today the challenges of writing software are actually harder than ever. Applications today rarely exist in a vacuum; there are always connections to other applications, systems and even people. Gone is the day when you wrote something that ran on a user's computer and only interacted with the user and the hard drive. Scalability, distribution, fault-tolerance, adaptability and connectivity are complicated factors that make software today harder to write than ever.

Tried-and-true works well in building roads but in this business what worked yesterday may not work as well today. Figuring out how best to build something is a constantly changing challenge. Being comfortable with a language or methodology or algorithm isn't a necessarily good reason to keep doing it the same way. Fear of learning or moving to an unfamiliar tool or system is not a good reason to avoid doing something new.

On the other hand changing technologies or languages capriciously can be bad too; just because it's new doesn't mean it's better. That where you have to think about change, see what others think and do, and try it. Thinking differently about things doesn't mean you have to change, the point is to understand why it might be better and then make a good decision. Refusing to even look at change simply because it is new or different isn't good enough today.

I remember a couple jobs ago writing an application with Ajax as it made the most sense for the requirements (an interactive employee directory). This was also during the great virus war where working in Java was an exercise in futility; building much of the application in Javascript meant I could actually get work done. Little feature requests crept in every day as the entire application was built very interactively and not having to recompile meant it was easy to work on.

Of course I underwent complete hell as the (highly conservative) architecture board (of which I was a member) accused me of buying technology without a support contract, potentially destroying the network and undermining the authority of the board. In the end they finally understood it was just Javascript, HTTP and free. Thinking different can be painful sometimes! Today Ajax is used routinely at the company.

Act Different

Looking and thinking different by themselves might not enough, you have to affect something or someone. If you want to be an agent of change it can't just be out of the blue. A programmer known to be head down stick to the rules is unlikely to suddenly come up with something new and if they did, no one would listen. You have to be consistent, almost constant in your devotion to new ideas, technologies and methodologies. You also have to be respected by your peers as having a clue, or no one will listen either. Productive programmers who are willing to listen, to teach and to help are more likely to influence the work environment.

I would never have been able to introduce changes such as Subversion and Ajax if I didn't already have a known willingness to ask questions, to point out problems, and also get things done. It helps if you are open to dialog and learn how to be tactful as well. No one listens to people who act different just to be irritating or dominant (unless they are the boss!) Introducing or promoting new ideas can be politically sensitive.

Sometimes to be an agent of change you have to change your employer. If people won't listen, if the status quo is perfectly fine, if the world is moving quickly away from your skillset and you can't do anything about it, leave. If you are a young programmer it's even more important to find a place to work where new technologies, ideas and methodologies are accepted. Working in an environment where acting different is actually the norm exposes you to dealing with change.

I've been in this boat so many times I'm getting seasick. You might have a hard time finding a job where change is expected; most companies are conservative by nature, and sometimes they have no choice. What is terrible for your career is staying in one place for years and years and never learning anything new or even being encouraged to look outside the cubicle you live in. You aren't furniture, don't act like it.

Be Different

When you are willing to be different by looking around, thinking about things and acting like change is a good thing, you get to do things you might have never been able to do otherwise. In my career I have been able to work on amazing things, meet interesting people and been witness to bits of computer history most people only read about. If I lived in the Bay Area I am sure I would have migrated to even more opportunities; instead my home in Dallas/Fort Worth is more like a black hole in comparison, mostly large conservative companies. It hasn't always been easy here creating and finding something different.

If you want to make a living but not a difference you certainly can. For me I have preferred to seek real challenges, to embrace change as a constant, and always to be on the side of new and improved. The downside is sometimes being stuck in the wrong job or company, or even without a job. In the end I want to look at my career and be thankful I made a difference somewhere and got to work on really cool stuff.

The one constant in this industry is that change never goes away. I'd rather go away from programming than ever admit that everything is just good enough.