www.flickr.com
|
Everything fell apart today. The controller on my motherboard that handles the SATA hard drive data just browned out. I hate losing electronics to a poorly implemented cooling system, but I have no one to blame but myself. Oh, and Microsoft, and the motherboard manufacturer. But that's not what really bothered me today. What bothers me is that for the better part of a decade I have been consistently correct about the winners and losers in the technology world with regards to standards, languages, services, etc. And more importantly I have spent sufficient time to become highly adept at finding solutions to rather abstract problems using limited or esoteric resources.
So what am I complaining about? Well, now that I could handle almost any job involving computers, I find that I only want to work on what I find interesting and not what a paying employer or contract client would offer me. Mainly because there are more businesses out there that will lose even if they are doing everything right, than there is businesses who will win. A business who is in the lead, who has the most momentum or market share, or owns control of a well-accepted standard. Guess who needs a hitman to come in and catch them up? Not the winners.
You're a software developer? Then you *hate* guys like me. I'm the guy who comes in and makes you look stupid, lazy, or both. There's really no way around it. If I'm brought in to your project, it's because you think the same as everyone else. You have a degree? Then you think the same conventional thoughts, the same conventional way, with the only distinguishing factor being your years of experience of thinking like everyone else.
The phrase 'thinking outside of the box' is overused and not understood well by most people. It is a way of understanding the constraints of a system without self-limiting rules. This is difficult for most people because it's not the conventional use of imagination. The type of imagination needed to perform my particular set of skills is rooted in analogous thinking.
"We can't solve problems by using the same kind of thinking we used when we created them." --A. Einstein
Einstein was famous for thinking in analogies. 'Thought experiments' he called them. He solved one of the most important riddles in history when his resume wouldn't have predicted it. Because his constraint was observable reality, Einstein's analogies did not risk erroneous self-limitation. Computers are a different beast entirely. Programmers try to label everything axiomatically with the intention of self-limiting their perceived constraints. The real floodgates of knowledge will come when people adjust their perception to match reality just like Einstein proved is possible. With software your constraints often are the physical limits of the hardware, the operating system, and your choice of programming language with it's associated compiler. Time constraints further limit you to using third-party code libraries or templates. You have an idea, a vision with maybe a flow-chart and a few layer diagrams with cute little pictures of people and computers with little lightning bolts and arrows. Your analogies convert data into symbols. My analogies convert logic into solutions. I start by only being limited by the physical limits of the hardware, just like Einstein. Everything else can be safely ignored given unlimited time. From there everything else is a compromise between reinventing the wheel and being constrained by other people's logic. Easy, right?