Thursday, February 02, 2006

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".

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 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 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, 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".