Have you ever heard of the butterfly effect? No, not that terrible movie with Ashton Kutcher. I’m talking about the metaphor that is often used to describe chaos theory. You know, the theory which says that any system of sufficient complexity is basically unpredictable. Even small changes in the inputs can result in major changes in the outputs. If enough variables are involved, then the system can easily become unpredictable.
The name “butterfly effect” comes from the idea that a butterfly could flap its wings in one part of the world, affecting a major weather event somewhere else through a series of complex interactions, all kicked off by a tiny change at the beginning. While this may sound like hyperbole, and it is, this kind of interaction is happening all the time. While systems like the stock market and the weather are two typical examples that are given to represent this phenomenon, human interactions and decisions are easily the most complex system that exists. And it is one that we are immersed in every day.
We can’t hope to predict the endless number of interactions that occur everyday in the world around us. We would never even try to, the idea alone sounds ludicrous. So why then are we so driven to try to predict them in aggregate? If you start to really think about everything that goes into an event occurring, or not occurring, you might find your head swimming. I mean, who could have predicted in the mid-80s that Microsoft would have succeeded and gotten to the point where it is now? How about the rise, fall, and then subsequent rise of Apple? How about the fall of 3dfx when Nvidia hit the scene? How about the rise of Ruby when Rails came along?
Sure there are pundits that make predictions, they just throw things at the wall until they stick. There are also people that notice an event or circumstance, and make a prediction based on that. If their prediction is true, then they will claim that they knew it was going to happen, and why it happened. In reality, the event was an infinitely long series of complex interactions, in which only a part of the outcome was determined by anything that they had knowledge of. (Unless of course they are psychic, in which case I need to get some stock tips)
For example, take Windows Phone 7. Tell me right now whether you think it will be a success or not. And why do you think that? Do you think it will succeed because of Microsoft’s market muscle and market penetration by will alone? Or do you think it will flop because it is too little too late? Or some other completely different reason? If your prediction becomes true, then as a human, you’ll likely point at your reasoning and assume you were correct. And you might have been partially correct, but there is very little way that you could have accurately predicted the outcome.
The whole point is that until an event has sufficient momentum, or a sufficiently large number of smaller events have occurred, it is next to impossible to predict what is going to happen. I used to spend a significant amount of time looking around and trying to figure out what the next big thing was. What is the next big web framework, what is the next big language, what is the next big tool that will change the world? I wanted to make sure that I was in on it. But thinking like that is a waste of time. You can’t possibly choose or know what that thing will be.
So what should I do? Well, for starters, stop paying attention to tools everyone tells you are cool, and find tools that make your life easier. You see, the best way to predict what will be big, is to ignore it and find tools that work. If a tool makes your life and your job easy, then other people out there will probably feel the same way. But you also have to remember that tools are optimized for a specific job, and if you aren’t doing that job, then the tool is most likely useless to you.
Did someone tell you that Clojure is the greatest thing ever and you must start using it? Did someone tell you that Node.js will change your life? Did someone say you were stupid if your source wasn’t in Git? Did someone tell you that Objective-C is the best language ever written? Did someone tell you F# was the next big language? All of these things may be true, or they might not. Who knows. What I do know is that they won’t all be true for you. In fact, if you’re using both Clojure and F#, then you’re doing it wrong.
So get out there, use the community as a barometer, listen to what others are finding genuinely useful and approach those tools with some healthy skepticism. If you find the tools a joy to use, then tell others about them, and you know what… you might just stumble into the next big thing.
Loved the article? Hated it? Didn’t even read it?
We’d love to hear from you.
No, nobody ever told me that Objective-C is the best language ever written. Quite the opposite, in fact!
I’m certainly familiar with the "tools everyone tells you are cool" sentiment.
To me, NHibernate has been a big letdown. The uber cool tool I expected to work well, turned out to be too clunky, intrusive, and just a downright PITA to work with. Lesson learned.
So… hear! hear!
@configurator I’m going to agree with you on that one.
@Milan Again, I love NHibernate compared to the alternatives… but I’ll just leave it at that. Ha!
Someone once told me Vb.Net was the most innovative and productive language in the world, I eventually left c# and now code in vb everyday, and agree with the sentiment. Yes it can encourage new programmers with bad practices (and only a few) we aren’t new programmers, and every decent programmer still knows that a casting is occurring even when you are not required to explicitly specify it 500 times a day, making the whole bad practice argument a null for decent coders, or, in vb, that would be a Nothing :)… And with the auto capitalization, I know I haven’t made a typo without waiting for a compile to check
In regards to the best language ever written, I’d have to go with Objective C. I mean, Smalltalk and C? Its the path of the light side.
Well said Justin ….
I’ve never used obj c but looked at it, now you guys are making me wanna take another look at it… But also keep on mind, every language is bottlenecked by the best available editor for it… My question is, is obj c bottlenecked by it’s editor and what is the best editor for it?
Until then, I am loving vb.net 🙂
Actually XCode is really good. I mean its no TextMate, but then again nothing is so probably not a fair comparison. In all seriousness ObjC is not a bad language. In some respects I prefer it to C#. It does take a bit to get used to though… and like any language its really all about the supporting framework.
Don’t be talking bad about node.js.
@Dave Blah blah blah… JavaScript on the server… Blah blah blah 🙂