Wednesday, December 07, 2005

I ain't Good. But I got Guts.

My brother had a friend in high school named Art. Art was not an "A" student, wasn't popular, and in fact could be described as your average, invisible schoolkid. I don't really remember much else about him except I knew he had diabetes and a unending penchant for irreverance. He kept the words "wing nut" stickered on the back of his pickup - I'm not sure exactly what that meant, but it feared me enough never to try and pass him (not that I was ever able to catch him anyway).

The other notable thing about Art hit me when he graduated high school and I saw his senior caption in the yearbook. Now 99.9% of senior captions are hopes, dreams, and wishes of young and bright-eyed kids ready to take on the world (I labored long and hard over mine about whether to cleverly snub the cheerleaders or create poignant prose about how I hoped that someday Dungeons & Dragons would be REAL). Often, their inexperience with the evils of the world shows through and is simply refreshing (and even enviable) to read. But Art's was far simpler - far more to the point. In fact, although somewhat sad, it might be the most lucid senior caption I have ever seen. It simply read:

"I ain't good. But I got guts."

Argue the eloquence if you will, but Art was an honest kid. I'm always amazed how we humans can perpetually fool ourselves. For example, when someone who isn't good looking says as part some appropriate response (or compliment fishing endeavor), "Well, I'm not very good looking" and the people around them jump up and tell them "No! You're fine! You're cute!". Surely they are trying to make them feel better but good looks is a pretty tractable quantity. Surely no one will agree precisely but most men (and women) will agree that Jessica Simpson is good looking and Rosanne Barr is not (sorry Rosy). Regardless, we don't like to admit friends are nasty looking even if they are. Here's a hint, if someone close to you describes anything about you as "fine", watch out.

The more I've traveled through life the more I come to realize how ridiculously hard we fool ourselves. At the same moment, I think that we must. Its truly the only way to survive. However, I've had a long self-debate about where the line should be drawn. We can't fool ourselves about everything. Some things are simply too obvious or too important. If I am not good looking should I fool myself to think I am? Or should I accept that and try to improve it? If I am bad at math, should I beat myself attempting to improve it? Or forget it and move to hone my strengths?

Art at the tender age of 18 at least at some level seemingly knew his limitations and he knew his strengths. Its quite likely that I am reading far too hard into Art's simple words - but at this point, I don't care. I choose to fool myself that that is what he meant. His words helped me shape my own life and I think for the better. If I believe he was a naive 18 year old putting up an inside joke, my own beliefs come into question. And, as with most beliefs, they are sticky - once you believe something you want to keep believing it lest you face the fact you were wrong. (and the longer you believe it, the stickier it gets).

Surely we are all born with factors that will take us down our specific paths. Good looks are surely a blessing and a curse. The tend to help you in life effortlessly. However, this lack of effort can allow other attributes to atrophy. I have thought long and hard about what kind of attribute (in this context loosely defined as a trait or skill some people have and some people don't) I would choose above all others. Or rewording, which attribute I should most try to enhance given the belief that we all have a little of every one. Just like a well-dressed man is likely more attractive than a slob, we can enhance them all, at least a little.

After a long elimination period of scores of attributes I had a perpetual fight in my mind between two contenders: courage and persistence. Good looks was eliminated quickly. I've seen plenty of butt-fugly guys I'd rather be than many hot ones I've seen. Luck might have been in the running but I don't truly believe in it. Intelligence would be a strong contender but I had made an implicit goal early in life to improve that as much as I could (whatever that means). I sort of believe I've done and do what I can in that arena (then again, to complete a beautiful circle, maybe I'm too stupid to realize what potential still exists).

Clearly Art claimed courage. By courage I don't so much mean the ability to rush in to battle. I much more mean the ability to ask for what you want. To take life by the balls and make it yours. Whether thats a job, a date, or attention. People with courage (aka "guts") can go far (and as Art so simply put it, even if you're not "good"). Persistence is closely related but in my mind distinctly different. Gambler's are often experts at it. Play long enough and you will win (of course, this implies winning the battle, not the war). Persistence cannot be understated, but then again without courage your life paths are limited.

After much deliberation, I have decided that although both are undeniably imporant, neither courage or persistence was the answer. Studying those attributes however, led me to a another more basic attribute. One that was core to both and at the heart of what I needed to be better at. The attribute I ended up choosing to perfect was failure.

Laugh if you will, but I have done my best to become very good at understanding and accepting failure. It is not only the ultimate teacher, it is an inevitable companion for all of us. In nearly any non-trivial endeavor I attempted, I realized that success could be defined as simply the first non-failure. Surely I tried to avoid it - but fate will eventually end that game.

The key to being successful in the long run is to make failure irrelevant. This is clear to any man who has a friend that is "good with women". Rarely are they truly "good with ALL women" - they fail incessantly. However - they have courage to ask, persistence to ask a lot, and the uncanny ability to find rejection as irrelevant and expected.

Both courage and persistence rely on this. Obviously, if failure (or rejection) is meaningless to you, why wouldn't you have courage? What are you now afraid of? For persistence, the point is to continue until you succeed. The old saying "If you go a bar and get turned down 9 out of 10 times, thats a good night" rings true. Assumingly the time you didnt get turned down was nothing except your 10th try. Tackle failure and you will (eventually) win the game. Whatever that game may be.

Undoubtedly, I do, as you do, fool myself perpetually. In fact, dismissing failure as irrelevant might require fooling yourself quite often. I first resisted that idea but I don't any longer. We're humans, its what we do. I have chosen my battles however - I really do wish to know my weaknesses and my strengths. I do my best and learn from failure.

I don't know what became of Art's life after he graduated high school except that I was told he died of his illness at age 28. Art's simple statement taught me plenty - at least about confronting your limitations. I don't know if he was "good" or not. But by what I remember of his boisterous demeaner and the loud memories he left me, I definitely believe he had "guts".

Tuesday, December 06, 2005

The Squirt-Gun Offense

Kids! don't read this ... its dangerous advice

While attending a not-so-recent computer conference I stayed at a rather interesting hotel in San Francisco's tenderloin district. The hotel provided an adequate coffee and donut breakfast each morning. I came into the eating room one morning, grabbed a jelly-filled, a cup of coffee and had a seat. Across from me was a well-dressed man munching happily. Before we could start a conversation, the hotel manager walked up to him and stated "Sir.. these donuts are for guests only."

The man stood up with a smile and walked out leaving a half-eaten cruller on the table (possibly this being the biggest crime). The whole event struck me and I warily looked at the hotel manager to see if he was about to yell at me next (although I truly was a guest). The donut thief's nerve was pretty impressive. He wore a business suit and maybe stopped in at random hotels on his way to work every morning and munched free crullers. If he was ever caught he simply got up and left. Now say what you will but this guy truly was a thief. He was stealing. Granted, it wasn't a lot of monetary value he made off with but he was a thief nonetheless. The question as to why the hotel manager didn't call the police is unneeded. The offense simply wasn't that big of a deal. The police would have been overkill and probably cost the hotel more angst than simply booting the guy out.

The bottom line is .. this guy got away scot-free. He got half a cruller, a few slurps of coffee and was politely asked to leave. Welcome to planet earth - where small crimes are unpunishable. Or, more precisely, where retaliation for small crimes can be more expensive than the crime itself.

I decided to test my theory more. I happen to be a speaker at this conference but that afforded me little except access to the speaker ready room (which coincidentally included yet more donuts and coffee). Speakers did not get the privilege of entering the exhibit hall prior to its opening time. Getting in a few minutes early would not be bad since there are no crowds and the exhibitors are all too happy to talk (and give free schwag) to speakers.

The guards at the entryway must have been retired military too - their only insecurity seemed to lie in the fact that they weren't allowed their M16s at this gig. The donut-thief inspired me. What if I tried a forced entry? Would I go to jail? Would I get kicked out of the conference? Would ANYTHING happen besides someone stopping me and telling me I "wasn't supposed to be there"? No, nope, nuh uh, and not a chance.

I went for it. I looked confident and strolled in between the two para-military at the door. They glanced at my badge with strained necks so I picked up my pace. I got past them before they jumped me.

Guard-1 put his hand on my shoulder "Sir! you can't go in.. sorry.. no non-exhibitors in before 10"
(Guard 2 immediately assumed the "drunken dragon" stance from what appeared to be a style of wing-chin kung fu)
I confidently replied "um.. I.."
Guard-1 interrupted me "Oh wait, speakers have a meeting in here today don't they?"
I pretended to have a clue "Um.. yeah!"

Now here's Tyma's life rule #152. If someone believes something wrong - but you WANT them to believe that wrong thing -- say as little as possible. Your words can only screw things up. I knew this. I shut up. I kept walking.

As I filled my bags with polyester t-shirts I didn't need, squeezing toys with company logos on them, and the occasional usb-drive key fobs I thought more about this whole concept. Its real simple - break the rules with no consequences. Usually the crimes you commit are small - but the trick is that they can add up. The business man from above could probably eat free every day. Getting into places your not supposed to (like conference exhibit halls pre-opening) often have advantages - after all - they are keeping you out for a reason. All you need for this little plan is some confidence. Our business man wasn't embarrased or frightened when asked to leave - to him - it was simply the end of this opportunity. On to the next.

Now it sounds like I'm a proponent of this whole underhanded way of life. I do believe you should reach out and grab what you can in life lest it pass you by. But I hate it when I am the victim of these little trangressions a lot. There must be a way to punish these mini-evil-doers. After playing with this idea for a long time I've come up with a name for it -- the "Squirt-gun offense". Succinctly, this describes any offense that the logical retaliation would step "over the line" and thus you really can't do it. The idea is that if you can't retaliate like you like to, you can at least soak the perpetrator in water. For example:

1) Someone maliciously cuts you off in traffic in a personal way.
Correct response: Side-swipe them and give them the finger.
Why you can't do that: Your insurance goes up and you might injure your finger.
So what you usually do: Attempt to cut him off in return or get yelled at by your wife for trying and sit back in traffic as the loser.

2) Your business rival asks if your wife has quit her Jenny Craig program again.
Correct response: Comment that you used to sleep with his wife and you're glad that's over.
Why you can't do that: You've overstepped the line - he'll punch you. His insult was subtle - yours is an attack. It would make sense to retaliate with a subtle insult but that's hard to do once your mad from his comment. Your intent is to retaliate hard at this point. His subtle insult was really an attack to, but as a conversation opener and given with the right tone, it could be cloaked as concern.
So what you usually do: Smile and comment on your wife's successes.

3) Someone off the street has the nerve to crash your wedding reception and eat/drink.
Correct response: Have the groomsmen take him out back and beat the living snot out of him for trying to ruin someone's special day..
Why you can't do that: Groomsmen will get in trouble and they are your friends (presumably).
So what you usually do: Politely ask him to leave now that he's full and hope he doesn't make a scene.


Shooting someone with a squirt-gun is probably illegal (squirting with intent to dampen) but it's not likely you'll get busted for it. If you do it, you'll probably make the target mad - but there really isn't much they can do about without stepping over the invisible line themselves. If they whack you - its a whole new ball game. The judge is not going deem assault "ok if first squirted with water". A better plan by the hotel manager from our first story would have been to simply walk up to the business man and start pelting him with shots from a super soaker. What's the business guy going to do? Tell the cops they squirted him? Heck, he stole donuts - I think its even.

The paramilitary guys guarding the exhibitor hall looked downright uncomfortable not having a weapon of some sort in their hands. I doubt a greanie-meanie squirt cannon would have satisfied them completely, but it would have been a step in the right direction. They would have begged for offenders.

Honestly, I haven't found a solution to the problem of being the victim. I don't think there is one that works in every instance. Quick wit is a big helper in a lot of cases but doesn't do much if someone cuts you off in traffic.

However, at least now I have a name for the type of situation I'm describing. Anytime someone does something that makes me want to retailiate but circumstances prevent me from logically doing so, I should squirt them with water - they committed a "squirt gun offense". The more it happens to me, the more I try to learn from it.

I try my best to not be the victim, but if you get me, congratulations. And I hope you're wearing waterproof undies.

Mom, I think I'm a Cyborg

Keyboards are good. Mouses are dumb.

If I was an alien looking to slowdown the technological advancement of the human race, I would have implanted into their society the things we call the keyboard and the mouse. In fact, the only personal proof I have that this was not the case is if aliens were involved they would have updated the pain by now. Like making the "shift" key a foot pedal or something.

Assuming mailicious aliens weren't involved, this isn't good news. It means we were silly enough to have invented these things ourselves. And then we were silly enough to let them "catch on". And we're silly enough to not personally diverge to a more efficient invention just in case we might later still need to know how to use this one. We humans follow a frighteningly simple herd mentality, God forbid someone jumps off a cliff and yells "free USB fobs!" - we'd be goners.

Truth is however, that with the keyboard at least - we have adapted. Our brains and fingers have optimized this abomination enough to actually get decent output. Obviously, the optimal tool would be one that can output words (actually, getting rid of words and going right to thoughts would be way better, but that is as of yet - out of scope) as fast as we can think them.

Now you might actually have been thinking the opposite. That the mouse is the more precise tool of the two. Well not for me it isn't. For artists and graphic manipulators the mouse is all that and a bag of chips - but for text people like myself, you can keep your seedy mice.

The problem with mice (which the nefarious aliens know all too well) is that its use removes your hand from the keyboard. To open a file in your favorite editor, chances are you grab the mouse, find the pointer with your eyes, move it to "file", click, move it down to "open" (hopefully not having to deal with any of those sub-menus that always seem to unpop off my screen as I'm moving down trying to get a lower entry) and once again click.

The alternative way to do this using just the keyboard (which I'm callously assuming is where your fingers already are) is to hold ALT, press F, let go of both, then hit O (thats as in "oh", not zero).

I have never written down all those operations before now and just looking at the two makes me feel stupid to have every used a mouse to open a file. The ALT-F method is no secret - why the heck don't we use it? ALT-F then O is even two different hands - it really is quite fast. My only explanation is that such keystrokes are cryptic and will require a bout or two of memorization whereas the peachy mouse-menu route hand-holds us right along the way. The mouse cursor gives us a constant bookmark of where our thought process is "I just clicked the file menu - now I'm moving to click open".

There is a nice book by Andy Clark called Natural Born Cyborgs. He makes an interesting observation that we all are already cyborgs (loosely defined as a fusion of humans and technology). His example is that if I am at your house, I may ask you "Do you know what the word poikilotherm means?". If you don't you would say "No, but we can look it up!". Upon consulting your house dictionary or your ubiquitous wifi connection, you can easily do that.

Now similarly, I might ask "Do you know what time it is?". And, at the very instant of me asking, you may not. However, the common response is to raise your wrist to your face and say "Yeah, its 4:30".

You liar. YOU did not know. Your watch knew but took credit for its perpetual temporal omniscience. I always know what time it is cuz dadburnit - I have a watch! In effect, we have extended our concept of self to include our watches - thus in Dr. Clark's claim we are cyborg. (Note that grammatically speaking, that sentence should end in "cyborgs", not "cyborg" - but if you ever watched Star Trek you'd know that cyborgs don't use contractions and often speak of themselves in a hive mentality - thus if we are them, no worries about speaking like them)

I may be creating a tenuous connection, but to me, the mouse seems like the dictionary and keyboard like the watch. That is, the keyboard is way more a part of me than the mouse is. I say this because I have painted myself into a very interesting computer-using corner.

My primary editor is a program called Emacs. It is as old as me. It was invented to provide editing capabilities on machines long before there were graphical windowing systems or meeces (some claim it was invented to scare small children, these however are bad people and ought to be ignored). Thus, everything (I mean everything) can be done with a precarious set of keystrokes. Without argument, these keystrokes are hard to learn - but once you do, your productivity goes up. Or more precisely, you are no longer slowed-down by the burden of learning the keystrokes while your real intent is to actually get work done. You go from an unproductive keystroke learning stage, hurdle the entire semi-productive mouse usage stage, and arrive in a land of control-key laden goodness.

To further my argument that keyboard=watch, here is my predicament. I sometimes get asked "What's the keystrokes to do XYZ in emacs?". After a moment of thought, I often find myself stunned that I do not know. I mean - I DO KNOW - I do XYZ all the time! I just can't tell you.

In effect, I have used these keystrokes so long and talked about them so little that the exact sequences have left my conscious mind. In other words, there are many keystrokes that my fingers know that I do not. At times, I have literally had to observe my own fingers to answer a question about how to do something.

To this end (again, I work 99% of the time in text, I fully understand my observations are irrelevant for more graphical professions) I have structured my desktop to be purely manipulatable by keyboard. I didn't do this consciously - it happened in stages and one day I noticed my mouse had dust on it. Using the mouse feels like using a pen in my left hand. I can do it, my output will inevitably be the same (albeit harder to read maybe) but I'm faster with the pen in my right hand.

I fully understand that if the aliens I mentioned in the first paragraph do exist, then I am a dangerous revolutionary in their eyes. I am thwarting their ingenious mouse device intended to often remove my hands from my productive keyboard. It is distressingly likely that some large death ray is pointed at the top of my head as we speak (and thanks to my body's recent affinity for dihydrotestosterone, this is much easier to target from space).

You never know though, it is possible they may be more subtle and simply try to slow me in other ways. I shall in the coming weeks keep a close eye for incoming packages that lack return addresses but contain USB footpedals that have the word "shift" on them. If such a thing arrives, I may heed the warning and go back to using my mouse. Until then, ALT-f x.

The Idea about Ideas

I have an idea - I am going to start dating Julia Roberts

You're probably laughing at me aren't you. The idea of dating Julia Roberts is pretty far fetched - at a minimum I'm not a movie star, I'm likely not her type, and my girlfriend is likely to present a significant impedance to the entire process. Not to mention Julia Roberts is (statistically speaking) probably involved in a relationship at this time.

When you think about it, you didn't laugh at me because trying to date Julia Roberts is a bad idea - it isn't. In fact, millions of men on earth will tell you it sounds like a very, very (very) good idea. You laughed at me because making that idea a reality is really hard. In fact, while it may not be impossible, it's close.

You've heard that ideas are a "dime a dozen" and you might even believe it. Despite this, you've also probably found your self in a position of having an idea you're sure is revolutionary. You probably can't help it (I know I can't). Truth be told there are very few ideas that are original. The problem is that we are animals that create ideas based upon the work of others whether we realize it or not.

After 1.5 years running, I still get on average 2 or 3 "thank you" emails a week for having the mailinator.com service running. If you don't know about it, it's a neat idea where email accounts are only created once the email arrives for them. The nice part about that is that if you need an email address for some service on the web that asks for your email (which you know they will spam if you give it) you can simply make up anything@mailinator.com and give them that. Later, you can then check that email box. After that, you never worry about that email address again while nefarious spammers put it on every list they own. Score one for the little guy. (Read the FAQ for more info and a good laugh).

The part that gets me is that every now and then one of those emails tell me "your mailinator idea is brilliant!" - (or something similar). It seems like a lot of people are happy about the service but a good chunk are stunned by "an idea so brilliantly simple, I should have thought of it.". Check here, here, and here for some quick googly results of "mailinator idea".

There are only two flaws in someone telling me "your mailinator idea is brilliant!". One is that, the basic idea of mailinator wasn't mine. It was Jack's. Jack is an aspiring ex-resident of Syracuse, NY, idea guy, my ex-roommate, and is currently conducting the well-known "how long can i go without cutting any hair on my body" experiment. I remember sitting across from him and a beer having the conversation:

Jack: Hi Bartender
Paul: Hi Bartender
...
*several beers later*
...
Jack: There should be a service that accepts email for any address
Paul: They already have those they call them stuff like "ya-hoo" and "H O T mail".
Jack: No, no, no.
Paul: yes.
Jack: No.
Paul: yep.
Jack: No - I mean with NO registration. Every conceivable account already exists.
Paul: That's a lot of accounts. And if there is no registration, how do you set your password?
Jack: No password.
Paul: So how do you prevent people from reading everyone else's email?
Jack: That's the brilliance - You don't!
Paul: Thinking of this is making me dumber. Please stop.
Jack: No! It's like any and every email box that any and every body can use!
Paul: That's it. Bartender - regardless what we order from here on out - just bring pepsi. We won't know.
Jack: You're not meant to "own" an email address. It's more like a disposable one.
Paul: Oh... huh. It becomes a cesspool people can use to redirect lots of spam to.
Jack: Yep.
Paul: Nice idea - but 1) No business model - very hard to charge for that. 2) It is going to cost a lot of servers and a lot bandwidth to handle all that spam. It's not necessarily a bad idea to give away a free service, but sort of silly if you're paying a lot to do it.
Jack: We can charge for ads.
Paul: If you're basing your whole business model on charging for web ads, you've already lost (unless of course, you're Google).
Jack: Oh yah.
Paul: Could try it though. Could setup some super draconian filtering to handle the onslaught.
Jack: (to someone else) Hi, I'm Jack. You smell good. Wanna go for a ride in my Le Car?
Paul: The bandwidth may not be as bad as we think if we refuse attachments.
Jack: wtf.. this is pepsi
Paul: If we're lucky the dam might hold.

It took me about 2 days to code up mailinator - I already had the servers and a graphic designer girlfriend. Turns out that it (surprisingly) worked fabulously.

This whole thing helped shape my idea about ideas. In long consideration I've sketched another of my life rules that there are actually only 4 types of new ideas (besides infeasible/bad ones) and the news is not good for those thinking they had a "brilliant" idea. The second flaw (from above) in the "your mailinator idea is brilliant" thing is that it wasn't all that brilliant - it might have simply been destined to happen. Here they are:

1) The "obviously next" idea

This is by far the most common type of idea. And surprisingly stuff like Einstein's theory of relativity fall in here. Basically said, the idea is merely an extension of existing knowledge. Someone is bound to think of this - overall if you've collected all relevant, existing knowledge in a (possibly highly technical) area - it's the obvious next step. It's obvious to think that if Einstein had not discovered the theory of relativity (that discovery surely moved forward based upon some of his own ideas) someone else would have. They say Poincare was hot on the trail. Clearly, Einstein, Poincare and every other scientist in that field were basing their work on the work of countless others before them. If nothing else they had an understanding of calculus, newton's laws, and a plethora of scientific fact invented by other folks that let them get to where they were.

Thinking a bit more modern (and a lot less theoretical), when the WWW appeared it provided a platform for millions of new workable, ideas. Someone out there said "Hey this is a new way to sell tires!" And they were right. But their idea wasn't the web and tire sales. It was really just "given the web" I can do "tire sales". This idea (along with scads of others) was destined to happen, tirerack.com or not. Given that tirerack is a profitable business, this was certainly a "good" idea.

(fyi: by no means am I comparing the complexity of the ideas of selling tires and the theory of relativity - I am merely pointing out that both ideas were in some senses logical steps from work done by other/previous people and would have eventually happened with or without the credited dreamers).

2) The "now we're ready" idea
I remember when the likes of Wolfenstein3D and Doom graced the computer gaming scene a good few years back. They were revolutionary. They changed the face of computer gaming forever. They were the first (popular) 3-dimensional games. The interesting part was the creators of those games invented almost none of the technology that went in to the game. All the 3d math had been around for a long time. Even 3d worlds existed on powerful computers.

What those guys did recognize however was that common PC computing power had finally reached a place where it could make 3d graphics work in real-time. That was not possible before. 3d graphics surely were - but running down a 3d hall in a speedy enough manner to think you actually were was not. You can probably extrapolate backwards and think of examples of things people probably thought of before the technology was ready (i.e., wooden swords, the external-combustion engine, the bark condom).

In a nutshell, this type of idea is waiting for technology or methodology to catch up but has probably been thought of by 100 people. Its the "I've got a great idea how to mine gold on pluto" -- now we just need to be able to get to pluto and hope there is gold there.

3) The "but it's not infeasible if" idea

This is the type of idea where mailinator fits in and of course, so do many others. Basically, a decent idea is thought up by many people (ala type #1) but is killed somewhere along the way as infeasible. That infeasibility can be monetary or technical (note that type #2 is really just a subset here "it's possible if we had the technology") or probably a big list of other things.

From an external perspective it looked like Hotmail was an idea to lose money. In fact, tons of web businesses are started giving away free services. It's a risky business but the hope is that they'll catch up some revenue somehow on the backend (God help us if it's web-ads). Effectively this type of idea is bucking accepted wisdom. It's the "They say this won't work" type idea but somehow does anyway. More often it's a case that these ideas fail but we don't hear much about those. It's the ones that succeed that make for good stories.

No idiot in his right mind would open up a service with no income and ask for millions of spam messages. The trick was finding some slight idea-modifiers that made it work. To this day I also get yelled at for having too draconian of policies on mailinator (the anti-abuse code kicks in a lot). The real answer there is that if that code didn't exist, neither would mailinator. That's what made it feasible contrary to common sense.

4) The "luminary" idea

This is the type of idea we all think of when we have one. We've got an idea that we're sure is revolutionary. That's pretty hard when there is 6 billion of us running around. Do the math - not much can be unique among us.

What's worse is that I can't think of a real good example of this. Surely these cannot be extensions of a type#2 or type#3 since those are by definition already thought up just waiting for something to happen. It must be an extension of a type #1. Any new idea must be based on what we know. How far someone is able to think ahead however is the distinction to making something luminary. Something not destined to be thought up by someone else for many years. If we can theorize that if Einstein had never existed it would have been 50 years (or 100 years or whatever you like) before someone else thought it up - we can probably classify it as luminary.

Speaking of having no examples - I'm still working on this list. I can't think of an idea that doesn't fit in categories 1-3 and consequently I can't think of a type#4 idea. Its just seems like it should be there. I am open to suggestions.

The point of this article is not to dissuade you from having good ideas. By my logic, there are always new, great ideas waiting to be thought up. Every time someone thinks of one, two more can be built from there. In fact, you don't even have to think them up first. You merely have to act on them first. Given how fast our technology advances, it's a good idea to perpetually reconsider infeasible ideas every now and then. You never know when an infeasible idea might become feasible.

Unfortunately, I think the idea of me dating Julia Roberts will forever remain infeasible. Even if technology advances to such a state that somehow allows it to happen I won't get very far. See, I have played WWII computer games with my girlfriend and I've seen that girl with a sniper rifle. She's a crackshot and stealthy as a ghost. Julia and I may get to dinner and possibly even a movie, but if she reaches over to give me so much as a nuzzle - I'll be taking an dirt-nap. And that won't be a good idea.

Kick-ass Software Developer looking for work

Yeah, well, ... keep looking.

You know that whole thing where your parents complain to you how tough they had it and how easy you have it? You know, its where they walked 5 miles to school in 10 feet of snow uphill (both ways - (in the summer)). I always hated that. In fact, I think everyone always hates that. I mean - what are they trying to accomplish? Am I supposed to drop to my knees and thank them? Am I supposed to apologize I rode a bus to school? (downhill, both ways).

What's worse is that I think at this point I becoming one of them. I do it! I can't help it! I swear I cover my mouth to stop the words when I hear that sort of thing brewing - but sometimes, it sneaks past. Its really hard to not do it if you're a computer person though. Computing technology has advanced so fast even 20 year old people can do this "Good old days syndrome stuff."

"LCD Panels? Are you kidding? In my day we didn't have displays! We'd bang on the computer case to tell it "1" and we'd do nothing for a zero! It took me a week once to not enter 100 consequitive zeros!"

Without trying to enter the condescending tone, let me calmly proclaim that programming computers is orders of magnitude easier today than was 10 years ago. And that was orders of magnitude easier than 10 years before that. I'd say "and so on" but we pretty much run out of decades looking back to the dawn of programming as an activity done by more than a handful of people on Earth.




It would be hard not to believe this - after all, humans generally strive to make their tech easier to use as it goes along. I remember reading that back in the 70's the guys that made the famous arcade game Asteroids had to design their own sound chip (BestBuy musta been outta SoundBlasters) just to get the bleeps and blips the game gives out. Today if you want your game to have sound, you look-up the API docs. I imagine it took those guys months if not years to develop the game. I venture to say that any programmer familiar with the graphics API of a system (i.e. directx, java, etc) could create Asteroids from scratch on a PC in 2 hours. Sounds easier to me.

I recently visited THIS web-page. Its a web-page for a program that gives you a macro language to interface with the game Everquest. Everquest is a dungeons & dragons game where your avatar runs around and (amongst other things) kills monsters. This program (called macroquest) lets you write macros/programs that control your character. Effectively, you write a computer program to play the game for you. This may seem silly but it gives a player the advantage of the precision of a computer instead of the sloppiness of a human for certain actions.

Regardless of how fun this may be, I was struck by this news bulletin on this page:

The Hunt [4.23.2004]
Like what you see? Hire me already. Damn this job hunting sucks. How does a kick-ass software developer not get hired after 6 months of job searching? - Lax


Lax is apparently the person who now owns the Macroquest project - and by doing so did prove he can write (or at least extend and maintain) a non-trivial application to completion. That isn't a unique feat but its not nothing either - all other things equal (note: I said, all other things equal), I'd hire a college grad in basket weaving over a non-college grad. Despite the drinking and fun, there is some level of perseverance required to finish a college degree. Thats a good trait.

Lax's statement got me thinking. How is it possible that a "kick-ass software developer" doesn't get hired after 6 months? In fact, why wasn't he snatched up right away? Of course there is the possibility that Lax thinks too much of himself. I don't know him so lets give him the benefit of the doubt. Let's say he's an excellent programmer. Hmm.. "excellent programmer" .. what does that mean? How about - if I give him a programming task, he can complete it with a high degree of quality in a reasonable amount of time (as compared to other programmer's). Woops... if he does it reasonably as compared to other programmers, that makes him average not excellent and definitely not "kick-ass". Ok then, if I give him a programming task, he can complete it beyond my expectations in both quality and punctuality. Is that it?

So what gives? Why is a kick-ass developer not working after 6 months? I'm glad you asked. I am by definition, an employer. I have a company and I personally (at times) hire and fire people. I can then answer this question from my viewpoint. This viewpoint is "small business owner" - a "large business owner" might have a different take.

We need to step back a second and give you a probably dreaded core answer. That core answer is "money". There is a simple rule in hiring:

Every employee must be actively involved (either directly or indirectly) in making the company money.

This may sound greedy, and it is, but its like saying hunger is greedy. I started my first company almost 10 years ago and the scariest event in all that time was realizing that I had an employee with a family. I hired him because I was plenty impressed with him and he lived up to every expectation.

The fact that he had a family (which sort "hit me" months after he was hired) was terrifying because it instantly transformed my start-up from a hope and a dream to something that supported 3 kids. Until then, it was all excitement and laughs. If we risked it all and the whole thing came crashing down, that woulda sucked but we would have gone had a few beers and wished everyone well. Now - if it came crashing down a Daddy had to go home and tell Johnny he lost his job. This is a whole different thing.

My company changed that day. I worked like heck before having that employee and I worked like hecker thereafter. I had never met those kids but in effect, I made them a promise - and I wasn't going to let them down.

When a company is small - every employee is a line-item in the accounting books. A person's salary isn't an afterthought, it could be measured in percentage of company revenue. If I hired someone for any other reason than I thought they'd make this little company the most money of any candidate available, I was failing.





If we didn't meet payroll (which came plenty close a few times) Daddy didn't get a paycheck. If Daddy didn't get a paycheck, Johnny couldn't bring an apple to school for Ms. Magillicutty, and Ms. Magillicutty (that vindictive bitch) might give him a D-. Johnny would end up serving 10 to 20 in Sing-sing for writing bad checks and my eternity would be spent smoking turds (the old english spelling is "terds") in hell.

So - the question wraps around to "Is a kick-ass programmer the best kind of programmer to hire to make the company the most money". The answer seems obviously yes, but it may not be. In a specific instance we learned (as do all consulting firms) that sending 3 rockstar programmers to a client ends up with the "too many cooks in the kitchen" syndrome.

Its actually far more productive to send one rockstar (who acts as a leader) and several competent followers. And given the project, do you really need "superstar" firepower?

Joel (from Joel on Software) claims his company FogCreek only hires superstars. Hopefully programmers in the 99.9% percentile. One interested poster writes:

Another funny part is that do you need that much intelligence to develop silly applications like bugtracking software.

(here is the whole THREAD)



Secondly, I've run into plenty of young programmers with major chips on their shoulders. Check out Steve's Resume (Jan 2005: Steve's resume is no longer on the web). I simply love the line:

"I have a rare (for a programmer) feel for design."

See that all you other programmers? You're just code monkeys -- STEVE gets design too. FYI, I have met Steve though only once. From that one meeting I unconciously compare all shoulder-chips to his.

I am a firm believer that the absolute best size for a programming team is 1. Communication (and arguing) costs go to zero. Certainly its not common to find projects that are small enough to fit for this size team, but its a beautiful thing when it can be done. That being said, it seems like you can take an egotistical "kick-ass" developer (if you label yourself as "kick-ass" you are by definition, not humble) and send them flying on a one-man project. You'd think their ego trip will stay in their cubicle, but I can say from experience it doesn't work. The code may get written (and even designed if we have Steve!) but they're a management nightmare.

Another point that sticks in my head for "kick-ass" developers is their religious zeal. I've been guilty myself. Code must pristine, to heck with deadlines. I've never met Lax but I've used his Macroquest many times.

When it was first released, its macro language was frail and awkward. It was exceedingly clumsy to create meaningful game-running programs. However, it was the best deal in town and people wrote hundreds if not thousands of programs for it.

Eventually though, the developers (I don't know if Lax was at the helm for all these events) decided to change the language. Get rid of that old clumsy language and make a new one. I'm sure this felt very good from a programmign standpoint - clean up that old code!

The only problem with that is that every user macro in the world is now broken. This was a dangerous product evolution that can lose you many users. In a commercial environment this could be suicide. What was worse was that the language was hardly better. (note, you could not simply stick with an older release since macroquest evolved with everquest - eventually unsupported old versions would assuredly break.)

After a year or so - (get this) they decided to change the language again! There's a reason you see a lot of bad code in the world - its because reading someone elses code is harder than writing it yourself from scratch. Its not necessarily bad code - it just feels good to start anew.

With their second language change all programs that had been converted from language 1 to language 2, now had to be converted to language 3! I'm sure it felt great to fix all those programming issues but this sort of who-cares attitude for your user's time is not something a company can withstand.

Lastly, I've addressed this before, but programming has evolved into a "good enough" activity. It is far more important to get a product to market before your competitor than to have pristine design or perfectly clean code. Arguments of maintenance nightmares are vacuous at worst and hearsay at best. This is of course highly dependent upon your application but there are real business models that spell out acceptable bug occurences (heck, the FAA has guidelines for acceptable airplane crash lossses - if it costs more than 2.5million US dollars per passenger to fix a possible crash scenario - it doesnt get fixed). As always, it costs the most to get rid of the last 1% of bugs (and you'll never get them all).

In fact, computer game companies have completely proved this theory. It is common practice to release semi-unfinished games and "patch" them later. Simple fact is that if your game is released December 26th (as opposed to the 24th) you'll lose 30% of your potential sales (free software of course doesn't care about sales so can release "when its done" - which is a great thing, then again its rather uncommon to hire people to work on free software which is the topic here).

If you're describing yourself as a an amazing programmer, you may be hurting your job chances right off. The problem with being an exceptional programmer is that programming is not that hard. Even mediocre programmers can get a lot done. Dare I say by far most programming jobs do not need a rockstar (then again, I'm not even sure we've well-defined what an exceptional programmer is - is it that you know many APIs? Is it that you design algorithms that always have an optimal running time? Is it that you always meet programming deadlines?)



In the end, you may not be that good. To a company, being "good" means making them money.

This probably sounds over-capitalist, but again, my job is to run a company; companies are about money. The ones that aren't are.. well, they aren't anymore. Forget being kick-ass, if you want to get a job, use interviews to tell prospective employers how you're bringing value to them - if you're great, that will show through by itself.




If you won't do it for yourself, then do it for Johnny. He's a good kid.

I've invented the greatest compression algorithm ever....

...and I'm keeping it a secret...

I have heard that in some places in the world, that "family" means something far stronger than it means in the U.S. A family is not only the people you happen to share blood with, its people you share money with too. We're not talking just mom and pop either, the whole extended family. If anyone in the family makes a fortune, the family has made a fortune. Everyone's money is everyone's money. Now mind you, I heard this from one asian friend - this is hearsay. But even if it isn't true, its not hard to imagine if it was (in fact, I think I have this arrangement with my girlfriend, I can extrapolate from there).

This is of course communism on a tiny scale. It is basically an anti-meritocracy - or at least its a society where personal merit gets you nothing. My friend also told me that because of this, no one is inclined to work very hard. That makes pretty obvious sense to me, if I want to save up for a new computer, but realize I need to save up enough for 15 computers. I may do it, but its probably discouraging to work extra hard so that lazy cousin Bob can sit on his ass all day and get a computer out of the deal.

No offense to anyone anywhere in the world, but I really like the fact that I can work really hard and generally, I can expect reward for that. On the other hand, it gives me almost equal (yet morbid) pleasure that lazy cousin Bob does nothing and has nothing. It seems like justice. Of course, life isn't precisely fair, but this formula "on average" works.







I've had a few discussions lately with people about open source software. I'm constantly reminded that open source software is NOT "free as in beer" (although some is) but its "free as in speech". Honestly, who am I to tell you to not write free (as in free) or open source (as in speech) software? If you didn't write it, some programmer somewhere might get paid to write it which might not be a bad thing given the state of our industry - but at the same time, its your saturday afternoon. Write away. I'm happy to use your free software.

Equivalently, no one should tell me not to try and sell software. Selling software is becoming harder since on certain sales tiers its difficult to compete with free competitors, but none-the-less, if I want to try, I should be able (and I am).

This far into this argument, I usually don't see much complaining. Zealots in either direction might argue that the other side is ruining the software industry, but generally, if you're not stepping on toes, its your business. Where this hits a head though is when one of the "sell software" guys tries to protect an idea - usually with a patent. Plenty of people believe that ideas (or algorithms in software) cannot (or should not) be patented. Others (usually those wanting to make some money) believe otherwise.

Let me come clean a moment, I have 2 patents on software techniques. They're not silly patents in my opinion, they are truly novel techniques I'm confident I invented. I could be wrong, but now that the patents are granted its up to you to prove that, not me. Since having them, I've learned a lot about patents - and most of it isn't good.




Let's say that today BigComputerCompanyA dead-on violated one of my patents. Keep in mind, a patent is a passive device. The government doesn't spring into action on my behalf and nail BigComputerCompanyA. Its up to ME to defend my patent. Which means a court battle. Which means money. Basically, little old me has to take BigComputerCompanyA to court. Good luck.

Now, if my patent is super-obviously being violated, I "might" be able to find a law firm willing to take on the case for part of the winnings. But it better be a darn clean case. If I can't convince some law firm of this, defending my patent becomes a battle between my money and BigComputerCompanyA's money as expressed in lawyers and time off work. Guess what, I probably can't compete with that.

Now, what if SmallComputerCompanyB violates my patent? My money has a better chance against their money. They don't have as much. Losing time off works to fight patents sucks for them too. The problem comes down to return-on-investment. If you're going to spend even 10000 dollars defending your patent - what do you hope to gain? Will you somehow make 10001 dollars if you win?





Lets flip the tables again. What about if I violate BigComputerCompanyA's patent? They have a lot of them you know. They patent everything. They patent stuff that has OBVIOUSLY been done by people WAY before them (click here for an example of such a patent that some people (those wacky funsters) believe is invalid - why such patents are granted I can't say - the obvious answer is that the patent office contains idiots, but the real answer is probably the same answer we always get in one form or another -- "money"). That doesn't matter though, it would take someone's money to prove that their patent is wrong (i.e. its been done before). Who's willing to step up? Even if you proved it, BigComputerCompanyA doesn't get reprimanded, they simply get their patent taken away. One of a thousand they made this year. Fact is, when you have a team of lawyers who gets a regular salary to file patents, you might as well file as many as you can. Stupid, silly ones included.

For BigComputerCompanyA, patents are simply cheap reasons to sue people. If anyone pisses them off, they look through their millions of patents and say "Aha! We patented air and SmallComputerCompanyB breathes. Sue them. Sure our real reason for disliking them is that their product is better than ours, but we can screw them by suing them over anything we can."

Sucks for us. Needless to say, the current patent system blows - unless you're a big company. We're led to believe patents are about inventors protecting their ideas. They're not. Patents are about money - and if you dont have it, oh well.

Now the title of this article is about my new compression algorithm. What does all this off-topic patent stuff have to do with it? A lot.

I have invented a compression algorithm. Honestly though, I've invented scads of compression algorithms. But I do have a new one that I've proven on paper has very nice characteristics. Compression algorithms are really important things. You could argue that companies around the world have saved millions (if not billions by now) because they were able to make data smaller. The ramifications are obvious. When you download a program to your phone, if its uncompressed it costs you 10cents to download, if its compressed its only 6cents. Multiply that savings by millions and millions of people, phones, computers, CDs and companies over many years.





Honestly, I don't know if my compression algorithm is far better than existing ones. I haven't got around to completing the code for it. I mean I WAS very excited about it - but I started thinking about the end-game. Let's say my algorithm is the best algorithm ever invented (humor me for a second - mm'kay?). Lets say it compressed better than ANY other algorithm out there for some type of important data. By compressing data better, you can argue I will be saving even more money for millions of people and companies around the world.

But... once I get it working - what do I do with it?

I can go ahead and create a program out of it. If its good, it will likely be copied by many other programmers. What's worse is that I'll probably be spending a lot of time tweaking and cleaning the algorithm. Other programmers can steal the algorithm and focus on sales. In fact, a bigger company (maybe even BigComputerCompanyA) might make a competing product and throw millions of advertising dollars behind it.

In other words, if I create a product based around this algorithm, I have to compete when selling it. Sounds like good old fair capitalism except all these other guys brought to the table was a pretty GUI and marketing. I theoretically invented something mankind hasn't seen before (we're still humoring me, remember?).

WTF? If I patent a new type of ladder, I don't have compete. If I invented a new kind of combustion engine, I wouldnt have to compete. I INVENTED IT! I thought the patent gives ME the right to sell it ALONE - at least for awhile. If drug companies couldn't patent their drugs, their millions of research dollars would be for naught. If that happened, they'd stop researching. I wouldn't wanna be the guy with the first case of a new strain of antibiotic-resistant bacteria in that world.

If the algorithm really was this good - the competitors (i.e. algorithm thieves) would be on the market fast.

What about if I find those lawyers who will help me sue in case of infringement? Yeah, if it is a clean cut case I might find someone willing to not charge me to sue them for 20% of all suit proceeds. Rock on! Now I only have a 20% tax when someone steals my stuff.

Even then, the problem isn't solved.

You can patent something internationally, but the protection you get is pretty minimal. If someone across the world releases a competing product using my algorithm, its nearly impossible to chase them. The internet will allow them to distribute their application everywhere, even my backyard. They may be willing to sell it for a fraction of my product cost or they may even give it away - there is probably nothing I can do to stop someone in say Russia or Hungary or wherever from doing this (I cant even get the dweebs in Nigeria to stop sending me email -- dudes! I'm ONTO your SCAM.. I'm NOT helping you TRANSFER Funds!! There ARE NO FUNDS! (except mine I suspect) humph..).

Now if you're a "free speech" zealot, your argument may be something like "tough shit - algorithms dont belong to anyone - you SHOULDN'T profit from it - it belongs to everyone." Well, thats an opinion. Sure, "free as in speech" means you can say what you like, but you're allowed to copyright it too.

My only problem with that is that I'm a busy guy (not necessarily productive as I'd like to be, but I am busy). Perfecting and coding the algorithm is going to take a lot of time. I need to push something else in my life aside to get it done. Its already a risk that when I'm done, I might find out it has some major flaw and doesn't work anyway.



Basically, I can work a few months on it - OR - do nothing. Either way, I make out the same as lazy cousin Bob. I get nothing.

You can argue that I should give away this algorithm for the benefit of humanity. But remember, But if I do, I'm not necessarily giving it to humanity - I'm probably giving it to someone else to profit from.

Not to mention I'm working on other stuff that just might help humanity too and maybe even make me a few bucks. I already give away Mailinator and many thousands of people seem happy about that (although its not exactly a humanity improving invention).

This article isn't about a compression algorithm. The ramifications here are widespread. A million scientists out there are busy and are working on the project they feel will get them the most benefit. Maybe thats fame, money, or respect in their community.




I've talked to enough academics to know that idea stealing is rampant. Or at least "rampantly accused". Patents are incredibly great tools to protect ideas for the rich. They don't seem to work out quite as well for the not-rich. My compression algorithm might be the best one ever invented (ya never know). It might save thousands of people and companies millions of dollars .. but until something changes, its going to stay "my little secret".

The internet is full of Idiots

and one of them might just be you.


I have no idea why I went for a Ph.D. in Computer Engineering. I think at first I thought I'd go into academia. Become a professor, teach, do research. But academia cured me of academia. Its about low pay and politics over corner offices (ok, plenty of things are about that.. but lets move on).





Here's the trick though. Lets say you have a computer question and you have two people to ask. You've just met both these people so you really don't know much about them. You find out however, that one of the two people has a Ph.D. in computers. Now you ask your question and you get different answers. Who do you believe?

Does the person's Ph.D. affect your decision? Chances are, it affects your decision based on your respect for education. People who have graduate degrees may even see it as a matter of respect to believe the Ph.D. People who dropped out of college will argue in resentment that the Ph.D. is irrelevant and the other person may have "real world" experience.

In truth, my question was unfair. A computer degree covers certain topics and nowhere during my coursework did we cover real-world things like Windows explorer. I have a good a chance as anyone as answering such a question (I can argue I do have real world experience too), but my Ph.D. IS irrelevant in that regard.

So my argument here is about credentials. I am currently writing two books, I have no idea when they'll be done. But someday, they'll be for sale on Amazon.com.

I'll also make a wild prediction. The first reviews from readers on amazon about my books will be excellent reviews. How can I predict this? Well, for one, I know I'm working hard to make quality books - I am doing my homework and researching the topics well. Two, hopefully people that buy them and read them fast enough to post early will be educated enough to understand and maybe forgive any mistakes I make.



But, the most compelling reason I have is that those first reviews will be written by ME.


Seems underhanded doesn't it? Reviewing my own book? In fact, I intend to use an alias. In fact, I created an alias a year ago and have been reviewing books on Amazon on-and-off that whole time. I review books I've read and even books I haven't. I don't care much about the review, I want my fake-person to have credentials. He'll have a history of book reviews.

There was a story on CNN (here is a link) recently about this. Evil, underhanded authors reviewed their OWN books on amazon. Where could you find a more biased review than by the author himself!!?

I'll tell you, from people that wrote competing books. They wrote biased reviews too, only that the book stunk. In fact, an author probably actually believes his book is good - so at least he's not lying. A competitor says the book sucks regardless.

There may be no place in the world where an absolutely unqualified opinion can mean so much as that first book review. Any idiot, having read the book or not, who has a 80 or 800 IQ, can post a review. There seems to be an inequity here. That book review board can make or break a book. An actually good book can be destroyed by having a bad review on that first page.



Personally, when I read a book, I look at the author's credentials first (I never read the amazon reviews anymore). I don't have specific requirements, I dont look for Ph.D. or whatever, I just want to know why they are qualified to write this book (oh, btw, I don't read fiction for the most part, but plenty of non-fiction).

Internet message boards are full of people with uneducated opinions. I'm sure there are plenty of educated opinions too, but its impossible to tell which is which (if I'm looking to be educated). Given thats its really easy to post an uneducated opinion and that it takes years to be educated in many subjects, assuming most posts are off-the-cuff opinions is safer.

Mind you, I am in no way saying you don't have a right to your opinion. You do. But I have no obligation to have to hear it (or read it). Equally, I have my opinion and you have no obligation to read it either (but for some reason, you are).





I recently read "A Short History of Everything" by Bill Bryson. I was pretty skeptical because this was a science book discussing tens of different fields of science. Bryson isn't a scientist at all, how could he write such a book? The beauty of it was his attitude that he isn't proclaiming anything. He sat back and said "This physicist says this.. and that one says that". It may have been more useful than reading a book by one of the actual physicists.

In the end, Bryson did serious research for the book. He found out what many people thought about many topics. He proclaimed to be expert in none and inquisitor of all.

Anyway, I know when my books will be done and I know when they'll hit amazon. I encourage you -- buy my books! You'll love them and I promise, the reviews will be glowing because any idiot will be allowed to review them. And the first idiot is going to be me.

Why Open Source Software exists

What kind of idiot does a whole crapload of work and then GIVES it away for FREE? Hello? McFly?



I recently moved back to linux as my desktop operating system. It made me wonder why I got software that took thousands of man-hours to create, for free.

Ya know, "open source" is a a terrible name, because 99.9% of the time I say "open source" software, I mean FREE software. I really rarely care if I have the source code, I'm looking for a piece of software that will do the job. If I find a open-source-free piece of software that "almost" does the job, too bad, not interested. Chances are that modifying some monolithic piece of software to do something my way is anti-productive.





For example, I have a server that came with redhat 9 on it. Redhat 9 includes apache (which I need). However, Redhat 9's apache does not include encryption (i.e. SSL) support. So, I had to get the apache source and perform a compilation that has probably been done a billion times - I recompiled apache with SSL support. Lets say I wanted to change that source (hey! its open source!). Basically, I've condemned myself to either never upgrading apache (upgrades have security fixes in them among other things) or re-applying my code changes to the new versions as they come out.

I'm sure there are people unlike me that have benefitted from apache being open source, but I'm quite confident the whole idea is overrated. The idea that I had to compile apache with SSL support for Redhat 9 is ludicrous. I'm sure that EXACT act has happened millions of time. God forbid I have something slightly off in my configuration too and the happy compile crashes with some bizarre error.





We can step back a second -- why do we HAVE open source? What kind of idiot does a whole crapload of work and then GIVES it away for FREE? Hello? McFly?

First off, its someone who isn't hungry. Laugh if you will, but if you didn't have that shiny bimmer in garage (or the nintendo dad bought you) you might think a tad more entrepreneurial. You never see hammers at the store for free, why do we see free software? A hammer at one point or another took someone to design it, build it, and get it to the general public - that costs time and money. Granted, hammers have materials that cost money, so let me restate - you never see hammers at the store priced for what they cost to make. Why would someone give away software at cost (given that software is just downloadable bits, there are no materials .. i.e. cost = free)? Even mechanics charge for labor. Why the heck does open source exist? To make the world a better place? May be.

I'm pretty sure that fame is one reason. The typical open source developer doesnt own a company or even have a good idea how to start one when they start an open source project (that often changes later if the project is a success). This is probably not because they are lazy or dumb or any fault of their own, its probably because they are 18. Generally, you're not 18 and the CEO of a billion dollar company - and if you are its rare you have enough time to run that company, think capitalist on one hand, altruistic on another, and code an open source project in the mean time (not to mention high school). If you're 18, you probably believe that the same number of people listen to you as the number of people that listen to such a CEO, but think outside the box a second - it might not be true.

CEOs are used to being known. 18 year olds aren't. But in comes the internet - all of a sudden you have a free, ubiquitous, worldwide way to distribute anything you like -- including hammers. In order to actually sell your hammers, you'd have to have a company, a tax id number, and maybe even employees. Instead of all that headache, you show your hammer to your buddy Fred who says "cool hammer!". You show your hammer to your Aunt Edna who says "Neato hammer!". You start giving away your hammers for cost on the internet and you start getting emails of appreciative nail pounders. Message boards pop up around how great YOUR hammers are! Next thing you know you're mentioned on tons of blogs about having wonderous hammers! You are SUPER JOE HAMMER GUY!

You could have made money - but how? How about begging? It worked pretty well on mom.



People love these hammers, they would obviously pay for them. Some have even offered to donate for your hammers! In comes paypal.. notice paypal logos on those open source sites? "Donate to the hammer foundation". Aha! A no-cost, no-overhead, no-funny-tax-forms way to get some money. Not much - but who cares - you're famous. (what a great way to get paid and not have to deal with those pesky IRS people too!)


If you're lucky, other people come and ask to help make your hammers better. Thats right, they ASK to be your underling. They hope to share your fame. Sweet - call mom -- you got FOLLOWERS! No, no, call them "disciples".. chics love guys with disciples.



The disciples help with the hammers and you keep working on them. The emails of appreciative hammer users keep you going. If your hammers are really really great, you get lots of disciples. In your spare time, you scoff at Sears - did you know Sears SELLS hammers? What FOOL would BUY a hammer when you give them away? If you had money, you'd buy an ad saying "Hey dumb heads - I am GIVING hammers away! Why are you going to Sears!?". But you don't have money. Instead, you keep seeing Sears ads fooling the masses into buying hammers!

Could there be some enterprise level sales tier that buys tens of thousands of hammers from Sears each day that you don't even have a clue exists? Nah.

Dummies.. Sears doesn't get it. Hammers were meant to be FREE! That company is doomed.

Sometimes, the disciples get loud. Maybe because they are just loud folks, or maybe because there gets to be a lot of them. You better fight to keep control you know - these are YOUR hammers. People have egos, its a fact of life. Sometimes those disciples start disagreeing with your vision.




They think hammers should be blue, you think thats silly. Sometimes those disciples leave you and go start making their own hammers. They post nasty things about you and your hammers and tell you to go to hell. (see the XFree project - this thread captures some of the spirit). You retract your team - you must protect my precious!

If you're at this point, you're obviously making something people want. And if there is something that has enough demand to it, you'll get competition. That's competition besides the traitor disciples (infidels!).

Competition you say? You mean you have to compete to give away something? What kind of silly world do we live in where people compete to give away stuff (besides drugs and web browsers of course). You'd better get lawyers. Those scumbags who are trying to steal your market of people that don't pay you are up to something funny! What if they STEAL (click here) the free, open-source code you gave away for free and give it away free themselves!? Damn them!

The Judas disciples can smoke a turd in hammer hell for all you care. You also realize that this hammer project is taking a lot of time. Users are calling for support and features. Sure would be nice if you could pull back on your shifts at Mickey D's to devote more time to the hammers. Maybe you can make more money off the hammers? They sure are popular!

Idea! First off, start traveling the country giving speeches about your hammers. You're famous you know. People will go to conferences to see you speak on the nuances of handle design. Second, sell support. You already gave away the farm by giving free hammers, can't go back on that now. We'll sell support - thats it! Microsoft does it - why cant you!? What else.. hmm.. T-shirts? How about selling the documentation? And consulting! You can get consulting gigs showing people how to use your hammers.

You've helped the economy you know. You took something that cost companies millions before and made it far cheaper (or free). The CEO's thank you. You might have hurt a few little mom-n-pop hammer makers, but thats the breaks. Evil cretins -- CHARGING for hammers indeed.

Eventually though, you might get a better offer. Be it from a wife, a new child, or a great new job. There won't be any more time to work on hammers. And since hammers only paid so much, you'll probably have to move on. Others may take over your hammers, they may not. Big companies that relied heavily on your hammers might be in trouble now, they may have to take over your hammers themselves because of their dependence.




It was a good run, you'll always be known as Super Joe Hammer.

If from all this you somehow think I hate open-source, man are you wrong. I love open source! What part of free software is there not to love? Many say that its more robust than commercial software. Plenty of open source is quite bug-free that I've seen (apache, linux, etc.). Then again, some seems to get abandon in pre-finished stages. Bottom line (as always) - I use what works.

Maybe open source does work. I would love it though if there was a clear distinction in the naming protocol. Currently, there are such things as free open-source, for-pay open-source, free closed-source, and pay closed-source. If I am messing around with one my servers to setup a free blog (like this one) I'm probably inclined to use something free - open-sourcedness being irrelevant. Thanks hammer guy.

So why DID joe hammer give away hammers? He had a product that could obviously be sold yet he chose to give it away. The answer is that either he didnt know how to sell it - or he is a wonderful altruist. It would seem that if someone was a true altruist, they may help starving people in the world somewhere before worrying about those poor corporations who can barely afford the software they need.


By the way, I just checked, Sears is still doing just fine.

Computer Science vs. Computer Practice

So you're an accomplished computer scientist are ya? We'll see about that.

The difference between Computer Science and Computer Practice


What is a magician but a practicing theorist? -- Obi-Wan Kenobi

As we all know, there are a lot of ranty articles running around the net about US IT jobs going overseas. Of course its a valid concern and a lot of the posts are based heavily in frustration (which can sometimes undermine facts). One point I see raised again and again is the statement that programmers overseas produce "crap code" or "have no idea how to design quality code". Or, the old fall back "don't understand true computer science principles!"

Bummer.

Partly by force, hmm.. actually, completely by force, I'm still a professional graduate student at Syracuse University. I don't live there, but I travel there every few weeks. I meet with members of my Ph.D committee whom, as you can imagine, are an interesting bunch of smart professors. They see my dissertation (that I've worked on for several years now), read it for the first time, and pull some obscure embedded issue out of the depths of the idea. I'll never stop being amazed at their ability to do that. Its like someone else telling you your 10 year old kid has a 3rd arm - I never noticed that before!




Then again, that's their job. They are scientists - they can wrap their head around new, complex concepts very quickly and immediately assess the problem from many angles. Despite their brilliance, some of them still don't use email. That's kind of the running joke isn't it? The brilliant computer scientist that doesn't use email - or hardly uses computers for that matter. The fact that this is a joke is a clear misunderstanding of the line between computer science and computer practice.

A lot of programmers seem to credit themselves pretty quickly with understanding computer science. Surely some do. In some respects its like the guy who has skiied all his life and then at middle-age takes a skiing lesson. He does it to join a friend or just for fun. Often enough he learns plenty. If nothing else, he learns other people's viewpoints on things he figured out for himself. In fact, hopefully a ski instructor is teaching from a source that has combined knowledge from the world's best skiers over many years. Chances are you don't figure out something on your own the same way that pooled knowledge from hundreds of people before you figured out. You're bound to pick something up.

The real truth is that knowing a lot about computer science isn't seriously required for much today's programming needs. Personally, I couldn't sleep if I knew an O(n^2) algorithm sat where a clean O(nlogn) would fit - but thats my now inborn nature. Making a webpage simply doesn't require much knowledge about complexity theory, algorithms, or data structures. Now, before you go posting at the bottom of this article that this is poop - I think you're forgetting something. Surely there are implementations that would benefit from running the best algorithms and the best quality code, but by far most of those applications will run just fine with "good enough" implementations too. That's the rub really.




Don Knuth (a pre-eminent computer scientist/mathematician for those newbs) made a famous quote something to the effect of "I have proven that this program is correct, but I haven't tested it". Sort of a funny joke to prove something is correct but not be sure it will actually work. If you've actually ever done any program proving (probably in some computer science cirriculum), you know it can be a tedious mathematical exercise. The only case I know of where commercial software was actually proven correct was in the fly-by-wire Boeing 757 aircraft (this is from memory, if anyone needs to correct me please do so). That is, they didn't just write the code and test it a bit to see if it works - they mathematically proved that the software would work as prescribed. Sounds good to me since I'm on a 757 often enough.

There's a pretty interesting dividing line between science and practice. Scientists prove, practitioners test. With all the hoopla in our industry about "test-first" its pretty plainly a practical world. Testing is fine, but its empirical and can miss details. Its rare that you can test all possible input in an application. Maybe we all should be more like computer scientists. Maybe we can abandon this "test-first" mentality and adopt a "prove-last" one. I'd rather have proven software than tested software. You can still test if you like (as Knuth mentions). Then again, for a practical world its obvious that despite the fact that empirical testing of software is almost never perfect, clearly its "good enough".

Hopefully at this point, we can stop calling things like servlets and web-services "computer science". I wear both hats, some days I'm a groveling academic student and other days I'm a practicioner providing solutions for a client. The most distinct element between science and practice comes when I write academic versus business prose. As my professor says about my dissertation, "you must be able to defend every sentence". I've learned quickly (although sometimes I still make mistakes when I context switch) about what and what-not to say in an academic paper. Here's some examples:


* Never say anything is "optimal" unless you have concrete proofs. We're not talking about amazing facts here, we're talking about obvious stuff like "the shortest possible method is an empty method". And darn it, your thingie better be optimal.

* Assume your reader is an accomplished computer scientist, but if you use a word that isn't normal english, it better have a definition first. Again, I'm not talking about "non-polynomial running time", I'm talking about "parameter list".

* Empirical evidence is cute. But you better have a lot to make any claims off it. Even then, you can only say what you have is of worth "in practice". Unit tests won't get you anywhere with professors.

* For any algorithm that has any value in it - you best know whats going to happen if that value were replaced by infinity.




Me: So the class has several methods and the algorithm examines each one.
Professor: How long does that take? (he means algorithmically, not wall time)
Me: Its linear - runs in O(n)
Professor: What if the class had BILLIONS AND BILLIONS of methods!??? HMM?
Me: Uh.. it can't. Java wouldn't support that. I think you can only have like 256 methods or 32767 or something.
Professor: And what if it had an unbounded INFINITE number of methods? What would happen THEN? hmm?
Me: It wouldn't because even if every Java programmer started typing in methods in some grand coordinated method-creation effort and every computer ran some method-creating program to help make more, we'd still never get an infinite number of methods. Not to mention no compiler or VM would accept such a class. Is this relevant?
Professor: And what if each of those methods had an INFIINTE number of instructions and ran for an INFINITE amount of time? How long would your little algorithm take THEN!?
Me: hrf.. um.. its linear.. runs in O(n). Which I suppose if everything was INFINITE - it would be a really, really long fricken time. But you and me and your dog too would be DEAD by then and we wouldn't CARE anymore and my damn tombstone would say "DIED WAITING FOR PHD DEFENSE" and yours would be like "DR. BOB PAINGIVER - I SUCKED". Besides, most of the classes in question have only like 3 methods or so.
Professor: oh.


Unlike things like biochemisty, computers (and hence some computer science) is actually fun to learn. Few people become accomplished biochemists in their spare time. But plenty of folks gain useful computer skills just by toying around. Its a pretty thin definition to say that programmers with no formal computer science can't make good computer programs. Of course they can. Languages like Java and C# have built-in sandboxes to protect us from ourselves. Good algorithms are buried away in collections libraries. How many programmers really know how much faster a binary tree is over a hashtable for searching? Does it really matter in commercial computer software? You might say yes, but the truth is most software in existence today is written far from algorithmically optimally. In other words, its "good enough". That may stink, but its also the truth. It also may NOT stink - whats the return on investment pristine computer science in business applications?

The joke of the computer scientist not using email is not very interesting to an actual computer scientist. Its like asking a petroleum engineer if he knows how to drive an oil truck. Most programmers today are practitioners because thats what businesses pay for. If overseas programmers "suck" - don't worry, they'll get better. And it probably won't mean anyone learns a whole lot more about "computer science".
Printer Friendly Page

Losing Your Religion

Ever meet someone who screams at you that windows completely stinks and linux is the only operating system anyone should ever use? I did.

I get a kick out of driving around and spotting how many Chevy pickups I can find with the stickers on the cab where Calvin (from Calvin and Hobbes comics) is peeing on a Ford logo. Needless to say, you find a similar number of Ford pickups with Calvin peeing on Chevy logo - apparently, Calvin is an unbiased, no-nonsense pee-er and simply pees on whatever is put before him. Go Calvin.

In the few times I have spoken to owners of such vehicles, their views were generally vehemently true to their sticker. That is, if Calvin was peeing on a Ford logo, the owner was a devout Chevy owner - “Always owned Chevy, always WILL own Chevy.” What I’ve always failed to figure out is where the loyalty came from. Even the corporations themselves don’t seem to poopoo each other as much as these zealots do. At least not using an explicit urinary metaphor.

If I ask a sticker-owner why one is better than another, I always get passionate but mostly vacuous answers. “Ford’s are WAY better than Chevy’s.” or “Chevy’s are made like crap!” or from the other side “Fords suck! Didn’t you see Calvin peeing on them?!” Obviously, someone is wrong here. I'm no truck expert, but both companies seem to sell enough trucks to stay in business. Neither could be that far behind the other, and I imagine that like most product competition - if one gets ahead of the other, it isn't long before the trailing product to copy the features of the leader putting them in line again.

Certainly, Ford lovers hang with Ford lovers and Chevy lovers hang with Chevy lovers. I can’t say for sure if that’s because they were a Ford lover and sought out other Ford lovers or, they made a friend who converted them. Regardless, there is some truck-religion here that appears to have a dubious basis at best.

All this zealotry reminded me of a class I taught last December for a company in Ohio (Ford country! by the way). The students were quite adept and we didn’t waste any time getting to the material. One student however seemed to be having a few issues with his lab computer. Apparently, he was a linux zealot (this is just a guess, but read on)

He had no business being in my class really since he pretty much knew everything we covering and if he didn’t know it, he picked it up fast enough that I couldn’t tell. In other words, he seemed to be the kind of guy you like to have working for you. At one point however, he threw up his hands and exclaimed “how does ANYONE get anything done in this operating system!” (I think he was being rhetorical).

The statement struck me for a second. The lab computers were windows based - no one had any say in that, the training department of this company apparently just proclaimed it. From his statement I assumed (and later verified) that his desktop computer was linux. I guess I’m proud of myself for not giving him a snappy answer. Like “I dunno, try asking one of the billion people that use it everyday - want me to get my mom on the phone?”.

His statement was truly na├»ve and obviously based on his linux zealotry, not fact. First off, obviously he wasn’t truly lamenting that he couldn’t figure out something about windows, he was truly saying “This doesn’t work the way I want!” Funny thing was, we were doing Java, certainly he should have been able to adapt. Whatever editor he uses in linux (turned out to be emacs) is likely available in windows. Cygwin (www.cygwin.com) would give him a identical shell if the ms-dos box didn’t satisfy the minimal requirements we needed it for. If he liked Eclipse (www.eclipse.org) or Ant (http://jakarta.apache.org) all that runs seamlessly on windows too.

On top of that he only had to plunk on this machine for a few days. I wonder if one of those Chevy guys would throw such a fuss if forced to drive a Ford rental for just a few days. This guy was obviously bright, but his unfounded religious view was disappointing. It certainly precluded my interest in asking his opinion about computing matters. It would be like asking an insurance salesman about his competitors - the answer will biased and the facts concealed or enhanced as he saw fit.

I really don’t get this whole computing-religion thing. Personally, I have 2 windows boxes, 2 linux boxes, and 1 VMWare’d (http://www.vmware.com) linux running on one of my windows boxes as needed. If you count my girlfriend’s design machines I have 2 macs too (designers are an entirely different religious sect, they somehow still believe that even though the exact same apps exist for PC and Mac, they “really” only work on macs).

I have all those boxes (I think) because I love to tinker and I especially like to have the right tool for the job. This website is running on linux and this article was typed in Microsoft Word. I don’t see room for religion in the computing world. I can’t see a good reason to not simply use the “best” solution. Mind you, the “best” solution is situational. Feel free to tell me how wonderful linux is, but my Mom is going to use Windows no matter what you say. When I setup a scad of little servers, I’d probably choose Linux first because I can set them up fast. It would probably be my second choice too based on price (i.e. free).

I’m sure Microsoft’s IIS server is wonderful and probably terribly easy to configure (I have no idea), but I know how to setup Apache. I know plenty of its idiosynchrasies and its nasty little text-based config files. Generally, for servers I use linux, for desktop I use Windows. I develop in Emacs regardless of the O/S I’m using. I solve problems. I use the best tools that I know how to use to solve those problems. Price, existing knowledge, features are all factors in that decision. Religion isn’t. The guy in my class back in Ohio knows his stuff, but after his display he's no longer the type of person I'd want working for me. There are a lot of talented folks out there who base decisions based on their knowledge, not their passion.

If you’re forcing a solution on your customers (or users) than I guess that’s your prerogative. Computers don’t care, they crunch numbers. Go ahead and hate Microsoft if it turns you on. My friend Christian Gross (www.devspace.com) is famous (to me anyway) for advocating that humans have an underdog mentality. We always root for the underdog, until they become more successful than we “think” they should be.

In other words, feel free to hate Microsoft, but if they tumble you’re just going to start hating someone else.

I’m sure there are physical differences between Ford and Chevy trucks that make one better than the other for certain applications. If I was in the market for a truck, I’d guarantee you I’d figure out what those were. Regardless, I wouldn’t really worry about what Calvin decided to pee on today.

Technology is technology and problems are problems. I have hired religious developers before and its an unfortunate trait. It basically becomes a “management challenge”. I want to solve my customer’s problems and I want to make recommendations that aren't based on mindless zealotry, but instead are based on what will work best for them. Imagine that.