I Pledge Allegiance....

by Jeremy Jones

As people who work in the IT industry, our jobs often require us to evaluate and use a variety of tools and technologies on a regular basis. I would guess that all of us have our favorites that we reach for when we're given a new task to perform. I use Linux as my desktop OS, vim for nearly all of my text editing needs, Python for my general purpose programming language (scripting and otherwise), and SQLite and MySQL for a database. When I am given a task to accomplish, I reach for the old faithful, well-worn tools in my toolbox. It's not just that I'm proficient with them and can get the job done fastest with them; I enjoy using them. Often, our choice of tools to use goes beyond reasons of comfort and productivity and can border on fanaticism. That's an inclination that I try to avoid. I'll outline some reasons why I avoid this mindset as I'm going along.

As we're trudging along, doing our normal job, evaluating some new tool or technology, we occasionally stumble across something new and different that catches our attention. It has obvious benefits over anything that we've used before. We quickly develop some affinity for this fresh, new piece of tech. Often, we even begin to promote or evangelize this new technology. Then we use it for quite some time, become more familiar with it, learn new features and even some warts, and the affinity remains. At that point, our attachment to it and comfort using it can become the reason we keep using it and we can lose sight of what drew us to it in the first place, which was that it helped us do our job better. When that happens, we can become so technology and tool exclusive in our thinking that we can pass over opportunities to learn and use new technologies.

I've probably come pretty close to being that way with the Python language and *NIX operating systems. I've passed over job opportunities at least partially because they didn't involve using Python and the OS wasn't some UNIX variant. To be fair, the language and the OS weren't the only considerations in those instances; perceived work environment and current job situation had quite a bit to do with it as well. Interestingly, in the position that I've been in for the past 4 or so months, I'm finding my time nearly equally split between FreeBSD and Windows, and Python and C#. And, honestly, I'm not minding the shift as badly as part of me feared.

I had a couple of realizations that keep me positive about this job shift and interested in trying and using other new technologies. My first realization was that doing the job is not about using a tool; it's about me. Yes, that sounds gratuitously self-centered and arrogant. But it's true. The tool is just an instrument in my hands. I get paid, not for the tool that I use, but for how I use it and what I can do with it. The first reason that I try to avoid the technology-exclusive mindset I mentioned above is that it can keep me from exploring areas of myself that I might not have discovered otherwise. Note, I said might. You can stay on top of your game using the same tools and techology, but it's easy to just cruise along and not give new thought to what you are doing or how you are doing it. At that point, you can become reliant on some tool and less so on yourself. My second realization is an extension of the first; with any tool or technology that we use, there are opportunities to come up with creative solutions. The hacker spirit within all of us has a drive to figure things out and creatively solve problems. Even with Windows and C#, I have to exercise that hacker within me every day. The second reason I try to avoid the technology-exclusive mindset mentioned above is that it can keep me from exploring alternative solutions that I might not have explored otherwise. This sounds really similar to the first reason. The difference is that the first deals more with who you are and the second deals more with what you do. Again, note that I said can.

So, what's the point of this post? First, it's to encourage diverse use of technology. There is no reason to be afraid to try new technology. So what if you actually like it and it finds its way to becoming a new favorite? Your old tool is just a tool, not a person. Next, I wanted to emphasize that your usage of technology is about you, not the technology. Your choice of which technology to use says more about you than it does the technology. You should feel good about the job you do regardless of the tool you do it with. Your accomplishment is yours. (Granted, the tool creator had something to do with it, but you were the effective means of accomplishing the task). The final point of this post is to encourage acceptance of diverse technologies in others. Yes, those Perl people are freaky (::grin::), but the hacker spirit within them is the same one that is in you. And it's that which we should be looking to embrace. So, while I have favorites, I don't want to "pledge allegiance" to any of them. I'll keep trying new tech, embrace what I like and discard what doesn't work as well. And I believe that I'll be better for it.


Tim O'Brien
2006-04-27 09:50:43
You have been assimilated by the borg, eh?

No seriously, I dig what you are saying, we fall into the trap of become single issue voters when it comes to technology selection, and it limits out own development. On another level it also does a disservice to the profession. Instead of technology workers being treated as expert generalists, we place each other into different "camps".

Regardless of whether you spend your days editing Python, C#, Java, or Ruby, you are dealing with the same issues the same ideas. There seems to be little room for generalists, and the ones that tend to popup are still barking about language specific issues.

I dig your universalist ideal.

Adam Kennedy
2006-04-28 03:58:50
I completely agree with you.

In fact, as part of "those Perl people" I think that there's a big part of this community, me included, who would consider themselves "CPAN people" rather than Perl people.

We're very open to new things (consider CPAN uberauthor Audrey Tang now being on the board to write the next version of Haskell) but we keep getting trapped by the economic and efficiency weight of the CPAN, which still growing at an accelerated rate and faster than at any time since it's creation.

Many of these guys are incredibly capable.

But it's not that we don't want to go, it's just that we don't want to leave. :)

Or that every time time people leave they get sucked back because CPAN has the biggest collection of lego.

And I think it's this willingness to be open that is a big reason the CPAN continues to be such a big drawcard.

Jeremy Jones
2006-04-28 05:37:27
Assimilated by the borg? Hee hee. Yeah, something like that. Honestly, there are things that I really enjoy in the .Net world that I don't get in Python and there are some things that I miss from Python. For example, I love the documentation help in .Net. You put your cursor in an object or class, hit F1, and you magically, you have access to really good documentation on that particular thing. I'm still a big fan of Python's dynamic typing, access to a really good interactive shell for the language (IPython), and Python's looping, generators, and comprehensions. But all in all, it's been a good thing.
Jeremy Jones
2006-04-28 05:42:34
Adam, I think all languages could learn a lesson from what the CPAN has accomplished. It'd be nice if we could share all that goodness among languages. I know Parrot was going to be a way to facilitate that. IIRC, all you were supposed to need was a compile-to-Parrot-bytecode for your language and you were all set. Maybe that'll still be the case when Perl 6 rolls around.
2006-04-28 12:10:22
Very nice post. I was kibitzing about this at work the other day, and what you have described was more or less my sentiments, but in a much more cohesive form :)
M. David Peterson
2006-04-29 12:02:44
Well said Jeremy :)

BTW... I know you obviously know are aware of IronPython. What's interesting to note is that I have recently discovered Python's 'wonderfullness' coming from the .NET side of the world via IronPython. From your post it seems that with a Python background looking in you are noticing some of the nice pieces of the .NET framework and supporting tool sets that peak your interest, and as such hacking at things in C# and what have you.

I've thrown a few links up to http://dev.extensibleforge.net/wiki/AgileProgramming%3Alinks in regards to Agile Programming on the .NET platform as a whole, most of which lead directly and explicitly back to Python. I have a bunch more to add to this as soon as I find a few extra moments.

If you, or anyone else that reads this know of some other interesting links on this topic, by all means, please add them to the list.

2006-04-29 16:49:58
Jeremy, that's still the case for Parrot. If your language has a way to load Parrot libraries and access the functions and variables there, you can use them as if they were native. I have test cases that demonstrate this.

(There are some issues related to cross-language inheritance and data types, but they're not impossible.)