Thursday, June 30, 2005

The team

Last time, I talked about getting rid of the irreplaceable team members. In this edition, I want to talk about what makes a successful software development team. Naturally, it is the people. Software development is not engineering; it is invention. A successful software team will have much more in common with a team of genetic engineers than a team of hardware engineers. You might hire a mediocre line worker, but would you hire a mediocre genetic scientist? One who had few publications? As a software company, your success, like that of the bioengineering startup, depends on the calibur of your people. To be successful, you have to have two things: 1) Top quality individuals 2) A great training program. Without both of these you are confined to mediocrity - at best.

BTW, take a look at software craftmanship. It has some real benefits and completely debunks the myth of software engineering. The main question I have is what about larger systems, can this scale?

Wednesday, June 29, 2005

Irreplacable

In my opinion, people who are irreplaceable should be the first to go. There are many different types of team players. Some people are the workers, the go getters who do anything and everything to make the team successful. Others are the mediators, some are planners, some are thinkers, and some just provide "glue". But the most dangerous of all is the irreplaceable member. You know the type, the only one that knows every system; the one who sits like a mystic in the corner, looking down on you with infinite wisdom. This person feeds on others' admiration; they want to be irreplaceable, to be told how great they are. This person will destroy your team and your organization.

If someone wants to be irreplaceable, they can be. Others usually give work to someone who requests it all; people, by their nature, are lazy. Eventually, the only person who knows anything and can get anything done is the irreplaceable one. When that person leaves, the shock is devastating. You can fool yourself into thinking they'll never leave, but one day it will happen. One day, "He who is Irreplaceable" will walk away and leave your team stranded and helpless.

Instead, the irreplaceable one's energies should be spend on education and teaching. The irreplaceable one must become a mentor, not a savior. Even at the expense of the project, the mentor should focus on his or her part and teaching others how to do thier jobs to the best of their abilities.

If you have someone that is irreplaceable talk to them about the problem. Let them know that they are pulling everyone else and are therefore hindering other's development. If changes don't occur, let them go. It will be better for your team in the long run.

Tuesday, June 28, 2005

Gardening

Weekend before last, I went out to plant a pumpkin patch in my backyard. Oddly enough it taught me more about the nature of God than it did on gardening. Why? Because my 1 and 4 year old came out to help me.

Actually, I asked them to come help me. I love my kids and I want them to have fun and learn. What better way to learn and have fun than by planting pumpkin seeds? However, I also knew that my odds of having a successful pumpkin patch are greatly diminished by allowing the kids to help. I didn't know the details, but I knew that before I was done each of the kids would both help plant and help destroy in their own special way. Naturally, I could have stopped them. For one, I could have made them stay inside with their mother. Two, I could have forced them to only watch. Three, I could have let them only help in very small ways. I chose option four, give them the seeds and help them as much as they would allow. I want my kids to be independent. I don't want them to sit on the sidelines and watch. I want them to feel confident in their abilities and also know that it is fine to make a mistake. The only way to gain that, in my opinion, is to let them be independant and praise them for thier efforts.

I think, in many ways, God is like this. He's constantly trying to plant his garden; we, as his children, create havoc. He knows that we'll create havoc; and his greater intelligence will allow him to know details that we could never guess. However, he lets us do it so that we'll be independent and sure of ourselves. Why does God let bad things happen? For the same reason that some of my pumpkins can't be saved; because that is what must happen. I'm not sure one can put it in words; it's a philosophy, a feeling, and an experience.

Secondly, I think my knowledge of the kids going to destroy the garden is similar to God's knowledge of upcoming events. Even with my limited knowledge, I knew that the kids would dig up seeds. I can also predict the future: my daughter will be happy on her birthday, my son will get into trouble on his. My brother-in-law will yell at his daughter or son at my daughter's party for something that (s)he is doing wrong. I'm fairly confident that all of these will come to pass, and I have limited intelligence. God, with his far greater intelligence, can predict a much greater level of detail. However, I don't believe our paths are "pre-determined". I don't think God knows everything we are going to do. He may have been honestly surprised when Cain killed Able. I didn't know how my son would destroy the garden, and honestly he could have surprised me and not dug up the seeds with his toy shovel. We could have even surprised God by not engulfing ourselves in sin such that he had to destroy humanity with the flood. But we didn't. He is wise and greater than us in everyway, but I think we've tried to deify him above even what he ever wanted.

I think sometimes we view God as a floating entity that knows all, is everywhere, and can do anything. His only emotion is love and he shares that with everyone, both sinners and saints. I feel this view is fundamentally flawed. We are made in God's image. I think God is more like the Greek gods than our sanitized version. We know from the Bible that God feels jealousy and anger. God takes revenge. God is not merciful, God is just. Those of you who expect God to be a loving, happy-go-nothing entity need to wake up and smell the Frankensense. Our view of God is twisted by our 21st Century "morals" and the teachings of Jesus who was the Son of God (not God himself).

Well, this post is getting long and I want to wrap it up before I lose all the readers. I'll post more about this in future blogs. However, as you do your day to day activities, think how it reflects what God would do with a much larger problem. I think you'll find that you are made in his image more than you realize.

Friday, June 24, 2005

Holiday World

My family and my brother-in-law's family leave tomorrow for Holiday World. Typically, we opt for Disney World, but this year we thought we'd try a closer, and cheaper option. Holiday world looks like it has a ton of rides for smaller children. That will be great for my two year old. In addition, they also have a water park.

I'm both looking forward to the vacation and dreading it. I love getting away from work. Since I work from the house, there is not the distinction between work-life and home-life as someone who works from an office. However, I'm dreading it because we'll be camping there with my brother-in-law's family.

If you'd ever seen two families spend 7 hours driving in a Dodge SUV followed by two days in a small camper followed by another 7 hours driving back you would understand my dread. I'm sure we won't talk for at least a week after we get back. Of course, that doesn't really bother me because I prefer to be alone anyway.

One thing that I am looking forward to is free soft drinks. Yeah, you read that right, free soft drinks. In Disney World you'll pay $2.00 a bottle for soft drinks, but Holiday World gives them away for free. Wow, that's gonna be nice.

Well, I'll write again on Tuesday when I get back and let you know how the trip went. Until then, take care!

Thursday, June 23, 2005

Frustration

First, an aside. As I look at my blog, I have Google Ads for Save the Marriage and Find Singles in Your Area...kinda ironic to me. Anyway...

I have a policy of not posting about things that go on where I work. I will stretch, but not break, that policy in this post.

Today, I feel the beginnings of frustration. Not at my company, or anyone within it; instead I feel frustration about what I am doing. I feel my current role in the company is as a firefighter, perhaps a stop gap. I am someone they bring in to fix problems quickly. Spend a day on this, spend a week here, get this to run, now help out here, etc... While that can be fun for a short period of time, I much prefer the longer term project that I can work on from the beginning. I think the reason is because I prefer the design phase of the project. With my current projects, I have been brought in to either work on code that has already been designed or create code that doesn't need designing because it is just proof of concept.

Don't get me wrong, that type of coding has its advantages. One is that there are large periods where you are waiting on jobs to run, etc... So, I get some time to work on educational materials, read periodicals, or just think. I definitely enjoy that freedom, but I miss the architecture. I miss starting from an empty pallete and creating what I hope is a masterpiece. Note that I don't miss the release phase, that's a royal pain in the rear :-)

I'm beginning to feel I'm in the wrong place. I love my team, my bosses are great, but I fear the time to move on is near. The questions are mounting: how do I find a project that hasn't already begun? How do I get involved with it? Should I stay where I am and hope for the best? What will be best for my career? Do I even have a career? I have serious problems with that last one. I try my hardest to rock the boat in a positive manner. I feel, from talking to people, that is a serious faux pas for career movement. However, I don't want to change too much. I feel that I try to make a positive impact and sometimes being loud is the only way to accomplish that. Over time I'll probably learn more tactful methods, then perhaps I should start over at a new company and work my way up. Hmm...methinks I am rambling...

Back on subject, I'm not sure how long I can bear frustration; the bad part is I get frustrated quite easily :-) I'm pretty sure I can hold out for a year. My wife is done with nursing school then. That gives us the perfect opportunity to make a change. The important thing to do now is prepare for that change. What do I want to do next? What can I do to better ready myself for that? There are many questions and few answers...right now I'd love to just have a new project to call my own - no code attached :-)

The Love Pyramid

In my previous post, I pontificated over the definition of love. In this post, I'd like to build a love pyramid. At the top of the pyramid are those for whom you have the least amount of "Love". At the bottom of the pyramid are those for whom you have the most love.

1. Strangers - When we donate to charities, we are showing love for strangers. God commands us to love even our enemies. However, if asked to loan a stranger $100, most of us would say no.
2. Aquaintances - Typically, we have more love for aquaintances than for strangers. This is why news channels work so hard to make a connection between the subjects of their stories and the average news watcher. It pushes the love meter up a notch :-)
3. Friends - Most people have many "friends". These are not close friends, but people who you would feel comfortable talking to at a party. You usually know whether or not they are married, their wives names, kids names, etc... Most people would be taken aback by a friend looking for money, but many would loan it to them anyway.
4. Flirtations - A flirtation is a member of the opposite (hopefully) sex that you think has attractive qualities. Typically, this person is more important to you than your casual friends.
5. Confidant - A close friend that you trust. At this level you are willing to donate time and money when the friend needs it.
6. Girl/Boy friend - Often closer than your confidants. Your girl/boy friend is one you are evaluating for a potential move down the pyramid. This relationship is the beginning of the path to true Love.
7. Infatuation - After a certain point, the girl/boy friend becomes an infatuation. The infatuation demands a large amount of time and resources for both parties.
8. Parental - The parental relationship is often complicated, but is one of the strongest bonds, if it is made. The parent does not have to be biological or legal, but could be an older mentor.
9. Familial - A familial bond is the closest human relationship other than the soul mate. Typically, this is the first level where you would sacrifice yourself for the other. It is most often between a brother/sister (though not necessarily biological) or between a parent and thier child.
10. Soul mate - The soul mate relationship, when made, is stronger than even the familial relationship. At this point, you are living for the other person. This is not servatude towards the other, but a healthy interactive relationship where one is dedicated to helping the other.
11. Supernatural - The supernatural Love is between God and you. Like the soul mate, the supernatural relationship is one that must be of total dedication. Unlike the soul mate Love, the supernatural love must be one of unconditional surrender. Where "Do it if you love me" doesn't hold water in the soul mate relationship, it is paramount to the supernatural one.

Each of these stages of Love is dynamic. People may enter or leave any of these stages at any time (except Supernatural, it is static). Obviously, some levels may be unfilled - a person may not have yet found their soul mate, or they may not have any familial relationships.

Over time, we will delve deeper into each of these and find out signs and symptoms of each one.

Wednesday, June 22, 2005

Love - a definition

It's been a hobby of mine for the longest time to try and define love. When is someone in love? It is most certainly not when you think a guy or gal is "hot". Nor is it when you get butterflies in your stomach or you feel like you can't breathe when you are around that special someone - that is just hormones. It's not when you can't get them out of your head and you think your heart will just explode when they are near. All of that is transitive, it is temporary and ethereal.

I believe that love is something that never fades away. Love is something etched into your soul - it is an action, a way of being. I was probably subconciously affected by my religion, but I believe that love is something that Christ showed the Church. I don't remember reading about butterflies in his stomach or about him having trouble breathing. Instead, he loved the Church through edification and rebuke. Finally, he loved the Church through death.

For me, Love is a commitment. Love says that no matter where you are, when you are, and who you are with, you will give your life for them at a moments notice. It is not conditional. Jesus didn't give his life only when his church loved him. In fact, Jesus gave his life precisiouly because his people hated him. Love is unconditional, unending, and uncompromising. Take this test. How many people, right now, would you give your life for? Even if they hated you? Even if they tried to kill you? If you would still give your life for them, you Love them.

As I'm sure you know, there are different forms of Love. The type I describe above is the strongest, deepest form of love. It is usually reserved for your children and your soul mate(s). I don't believe a child will ever feel for his/her parent what the parent feels for the child. I have had the priveledge of Loving two people in my life. I will always Love them because Love is timeless. I knew them both in High School and they both helped me through a very difficult phase of my life. One, I married, the other I will always remember and be thankful for. To both of you, I Love You.

I hope you enjoyed my definition of Love. At the very least, I hope it made you question your own. Leave me some comments and let me know what you think.

Be the Worst

Over at Red Squirrel Reflections Dave is spouting some really good advice. He is discussing the increasingly popular notion that software development is a craft. As such, a software craftsman goes through three stages: Apprentice, Journeyman, and Master. An apprentice is someone who has been practicing software development for less than 5 years. A Journeyman, like myself, has begun practicing on his own, developing and honing new techniques, and is beginning to educate others. A Master is someone who is well respected in the field and who educates a broad group of Journeymen through publications, speeches, and the like.

One of the more interesting recommendations that Dave suggests is Be The Worst. I think this is a must for apprentices. Unfortunately, I don't believe I ever had the opportunity to be the worst, and was typically helping others. However, I look forward to the time in the future, when even as a journeyman, I can be the worst.

Dave's got some really good ideas; unfortunately, I think much of what he says will be useless. Why? Well, it is not because it isn't good or well written, both the subject matter and his writing are excellent. Instead, I think it is because of the target audience. Dave is targeting the very people who have not yet started their journey; the very people that probably WON'T read his future book or his blog. Furthermore, very few Universities talk about software as a craft, instead focusing on the mathematical, computer science aspect. I hate to break it to those universities, but pure CS jobs are becoming more and more scarce and it is NOT true that a good CS student is a good SD student.

Software development is a craft. However, to propagate that and to highlight its importance it needs to be delivered to hiring managers and senior programmers in the industry. These are the people who will stress its importance to Universities which will acknowledge its importance to students. Until that happens, I fear Dave's useful insights will go unheard.

Tuesday, June 21, 2005

So, where's Minnie?

I just took this quiz to determine what Disney character I am. I found it over at Wind Scraps.

Here are my results:
You scored as Goofy. Your alter ego is Goofy! You are fun and great to be around, and you are always willing to help others. You arn't worried about embarrassing yourself, so you are one who is more willing to try new things.


Now, if only I could find Minnie...

Registry

Yes, I'm coming out of the closet. I like the idea of a registry. I think Linux could benefit from a registry. I'm sick of .stupid files. I don't want to remember the location of httpd.conf or any other configuration file. I want applications to handle that and I just want to go to the registry to look it up. I want a nice, single, application that handles all of my configuration needs. I also want each registry variable commented so I know why it exists and what the valid values are. I want one stop shopping that reduces the cognitive complexity. Oh, and I don't want it to be shared. I should have my own registry and anyone else on the machine should have their own. I want the spirit of .stupid files with the simplicity of the registry. Now - make it so.

Monday, June 20, 2005

Versioning pt 3

Now that we have looked at why versioning happens and how we can better version our interfaces, we need to look at our distribution methods.

First, if possible, the installation mechanism should prevent non-backwards compatible interfaces from being installed. How can that happen? That's a different post :-)

Second, the interfaces should have a wrapper layer around them to allow for easier client versioning. In some cases, it could be possible to turn on the new functionality with nothing but a change to the registry. For instance, there could be a registry value describing which version of the code to use. By flipping the switch to version two, you can have the client upgraded without problem. Or if they choose not to upgrade, just install the lib and leave the switch at one. In some cases, a wrapper can insulate the client against hard coded lengths. In CORBA, it is common to use fixed length strings to gain performance. However, it is inconvienent if their lengths ever need to change. Therefore, a wrapper can be provided to transform a var length string to the proper fixed length string.

Finally, the easiest way to version is by using service oriented software. Instead of having to install on the client's site, a service can be updated as one sees fit.

Now we've looked at some ways to help the distribution of versioned objects. Join us again tomorrow: same bat time, same bat channel!

Sunday, June 19, 2005

Sunday

Warning: this post, unlike most of my others, has Christian content. Ignore at your own risk
Today is Sunday, so I felt like I should post something religious. I'm really not sure what I should post. I'm not a big fan of the Bible Verse of the Day type things because it is hard for me to understand the bigger picture. I think, on future Sunday's, I'll post about Old Testament history and maybe some other "big picture" topics.

Today, I want to discuss a topic that I struggle with: Worship Isn't For You. I definitely agree with the statement, "We worship for the benefit of God"; however, like many other things, knowing the principle and applying it are two different things, the first being much easier for me than the last. What's unfortunate is that the The Parable of the Pounds says that we are expected to apply the things we know. Anyway, I'm not a churchgoer, I don't really like institutionalized religion; however, getting a small "church" together in your home is not really done these days; though I wish it were.

So, with that in mind, how can I worship for the benefit of God? What's funny is that most of the new testament is dedicated to solving individual problems, not the problems of the church. In my view, we can worship God individually, though I'm not as sure it is as pleasing as a group worship. We can pray, sing, and talk to God on an individual basis and show love towards him that way. So, the next time you are in the car or in the store or anywhere else by yourself, consider telling God what is going on in your life and telling him you love him. Remember, worhsip is not for you.

Do you struggle with institutionalized religion? Do you wonder about the nature of God? Let me know what you would like to see more of!

To God: In case you are surfing by: I am.
To Daddy: It's Father's Day! I will always love and miss you!

My Top 5...uh 6

In this post, I thought I would lighten up a bit and give my top 5 6 sexiest females. This is primarily to debunk the myth perpetrated by Maxim that they are the only people who can create a Top 100 List. Ok, so mine's only a top 5 6, but who knows, maybe I'll expand it over time.

Note: This has been updated to 6 due to an anonymous comment. I had completely forgotten about Danica.

6. Rachael Ray - Funny, cute, and can cook - what more could you possibly want?
5. Natalie Portman - How can you argue against Star Wars Royalty? Besides, she has a degree in Psychology from Harvard. Smart is Sexy!
4. Anna Kournikova - She's probably not a math major, but Blonde + Athletic + Buxom = Sexy!
3. Danica McKellar - Winnie from the Wonder Years. She's hot and she was a math major.
2. Britney Spears - She's slutty, sexy, and pregnant: my Arkansas heart flutters! Now if only she were barefoot...
1. Eva Longoria - Yep, Maxim had this one right. Eva Longoria definitely tops the list. Besides, I'm secretly a Desperate Housewives junkie.


Hope you enjoyed. If you disagree, leave me a comment. If you want to see more, leave me a comment. If you have no opinion, leave me a comment. If you are here, leave me a comment. If you aren't here then you aren't reading this.

Types of blogs

So far, I have identified two primary blog types. The first is the traditional, commentary blog. This blog is usually filled with links and commentaries on those links. Joel on Software is an excellent example of this type of blog.

The second type of blog is the diary blog. In this blog, the author shares personal information about himself or herself, perhaps as a therapeutic to the author and/or to the reader. You can hop over to Amber's Ramblings to see an example of this type of blog.

I think the successful blog has to have elements of both. First, your readers need to get to know you and feel intimate with you. They must have trust in you and respect you so that they will be a receptive audience for your comments. Second, most web savvy blog readers will want more than just fluff. It doesn't have to be in-depth political commentary, a simple link to a favorite recipe site and information about it will do just fine.

So, if you are just starting up a blog, try to tell us a little about yourself and give us some web nuggets we wouldn't get elsewhere. That'll keep us coming back for more.

Saturday, June 18, 2005

VH1 is stupid

Wow, I just turned on my TV and my wife had apparently been watching VH1. I saw a somewhat attractive blonde-haired girl that looked like she hadn't eaten in the last three days walk by a pretzel stand. I thought to myself, "This ought to be good, she's going to order a pretzel then go throw it up offscreen." I never got that far. She went up to the rotund man making the pretzels and ordered a salt, pepperoni, and jalepeno pretzel. Only, she pronounced it "ja-lap-eno" instead of "hal-a-peeno". OMG. VH1 is for stupid people. I think I'm going to record this episode of...wait a minute, let me hit the info button...Top 20 Countdown, just so I can remember how stupid people are. Sheesh!

Change Management & Our Founding Fathers

I'm beginning to believe that our founding fathers did not understand Change Management. I was recently pining on the depravation of our government when I decided to try and think of a better system. I wanted a system that would be impervious to greed and corruption. A system that would represent the best and brightest, not just the best looking or the one with the deepest pocketbooks and most connections. As I listed out the criteria, I realized that it matched up exactly with our Constitution. The Founding Fathers had it right from the beginning. However, we have perverted their intentions. I'll try to give a few examples.

First, let's examine our electoral college. The electoral college was not just meant to protect small states from being picked on by larger states. Instead, it was the realization of the insight that people don't have time to be educated on everything. Instead, the electoral college members were elected, by the people, to study the candidates, their positions, their character, and make the best decision. The electoral college was not supposed to be a rubber stamp of the popular election - instead it was supposed to be the first step in a much larger process.

Second, let's examine how senators are elected. In the original Constitution, senators are supposed to be elected by the states, to represent the states. Typically, the congress of the states would choose their representative. Note that the senator is NOT a representative of the people, but the State (capital S), the institituion. Unfortunately, that distinction got lost somewhere around the 17th Amendment. BTW, here's an interesting site dedicated to repealing the 17th Amendment. GO FOR IT!

I think one of the major issues with our founding fathers is that they didn't understand change management. They assumed that those who followed them would be rational people and would make rational decisions. Their assumption was wrong. I think we need to force a limit on the number of laws that can be passed; and every law must be brought in front of the congress in an individual vote once every 5 years. That should slow change down. Furthermore, all constitutional amendments must come up for a state approval vote every 10 years. We have got to stop being reactionary.

Of course it is too late for all of this, we have to make due with what we have and work on making small changes. So lets start with this meme: Repeal the 17th!

Friday, June 17, 2005

Versioning pt 2

Hmm, I just found this pdf file by Steve Vinosky of CORBA fame.

He details the problems of versioning in both the distributed object world as well as the messaging world. What's the difference? Well, when you think distributed object you typically think CORBA and COM. Basically, there is an object that has an interface and you call that interface to get work performed. The interface is fixed and is known at compile time. With a messaging system, like XML-RPC, you pass messages around that are flexible. When the system recieves the message, it parses it out and determines what to do with it.

Personally, I'm a fan of the messaging world. I think that objects are not meant for distributed computing. However, I also like the benefits of CORBA. I think, by using the any type, you can achieve a messaging system with CORBA. This will allow you to have a good level of typing mixed with the ability to version.

For instance, let's say you are creating a service to cook eggs. The distributed object looks something like:

enum EggType { ET_FRIED, ET_SCRAMBLED, ET_POACHED };

interface EggCooker
{
void cook_eggs( in EggType type );
};

The message type would look more like:

enum EggType { ET_FRIED, ET_SCRAMBLED, ET_POACHED };

interface EggCooker
{
void cook_eggs( in any message );
};

For version 1, message would be of type EggType. An exception would be thrown otherwise. However, in version two we want to add a boolean flag to determine whether to use EggBeaters or not.

For the distributed objects version, we have to do one of three things. First, we could make a completely separate interface and have it call the other interface internally. Second, we could add a new function to the interface...something like cook_eggs_ex. Third, we could make a non-backwards compatible change to cook_eggs to add the boolean flag. Most of the time, we opt for the third choice and our clients are the ones getting heartburn. However, it is worth noting that both the first and second choices are backwards compatible.

For the message based version, we simply create a struct that holds the important information.

struct eggs_parm_v2
{
EggType type;
bool useEggBeaters;
};

Now, the new clients wishing to use egg beaters can upgrade to version 2 and pass in a eggs_parm_v2 as the parameter instead of passing in just the EggType. However, version 1 users are satisfied b/c nothing need change, our internal processing function can switch on the type of the any and be completely backwards compatible.

In most cases, it is really a matter of style. I think the new interface way is a bit overboard, but adding a new function and using the any type are both good choices.

To me, the main thing is a concious effort by programmers to make thier works backwards compatible. It is not any harder than writing code that breaks compatibility and it makes our users so much happier. There are no silver bullets.

About.com

About.com has to be the most annoying site on the net. Google always seems to place one of thier pages at the top of my search results. It usually has a nice title, so I click on it only to be frustrated when I realize I've been suckered again.

Hey Google, listen up! I want a way to customize Google so that I can tell it never to show sites from about.com (or any other site I choose). I want to be able to rate sites like I do telivision shows with Tivo. By the way, if you don't have a Tivo, get one. They are the greatest invention known to mankind. Everyone who has one will tell you they don't know how they lived without it.

Yesterday (and Prime Obsession)

Yesterday night I went to Memphis with my wife and daughter. My 2 year old son wasn't feeling that well so he stayed with my wife's mom. We went to The Melting Pot. If you've never eaten there you really should. It is a fondue restraunt, and an extremely good (though expensive!) one. My daughter really loves it, this was her second time to go. She loves to cook the food herself, and she especially loves the chocolate fondue.

Both before and after we went shopping for my son's upcoming birthday. I don't know that we found anything worth buying. The whole world of toys has pretty much gone down the drain, especially for two year olds. I just wanted a cuddly Blue doll for him to carry around. Instead you have to buy one that is as hard as a rock because it contains a huge battery box so that Blue can Talk! I don't want Blue to talk. My two year old won't care that Blue can talk. However, if my two year old decides to throw a fit and hit me in the head with Blue, then I want it to be soft. Moreover, what kid wants to sleep with a battery box sticking him in the chest, it needs to be SOFT. Toy companies just don't get it. They think that by adding the most whiz bang features ever, parents will just love it. Well, I for one don't.

Anyway, after a futile search for toys, we stopped off at Barnes and Noble and I picked up a copy of Prime Obsession. It is the story of Bernhard Riemann and his Zeta function. I've only read the first few chapters, but it looks to be very good. I'll let you know how it turns out.

AdSense pt 2

Well, the AdSense is up; let me know what you think of it.

Now, I'm trying to find an IE plugin that recommends sites to you based on your browsing history. If one doesn't exist I'm going to write one. I wonder what the best implementation would be...any ideas?

Thursday, June 16, 2005

AdSense and Sensibility

Wow, some Google AdSense layouts look really bad (especially coming from a site on how to make them look better). I've recently considered adding AdSense to my blog and have been trying to find sites with AdSense that look good. I finally found a blog that looked good with AdSense; however, it is one of the few.

There is also the concern that if you make your AdSense look good then people think you are trying to trick them. It is funny that people hate advertisements so much that if they click on one they feel dirty. I can't say I disagree too much :-)

I'd love to hear from people who use Google's AdSense program, as well as readers who like or dislike sites with the ads on them. Does anyone make money with these things? I'm not too interested in making money with the blog, but why not give it a go? Can't hurt right?

Why cost of living should never lower your salary

I recently renegotiated my salary with my current employer. I had a job offer in a different part of the country. I don't know what it is about negotiations that makes me go stupid, but in this case it cost me a lot of money. The first thing my current boss did was look up the difference in cost of living between my new location and my old. It was quite a bit more expensive to live in the new location. However, if I had been thinking straight, I would have told him: THAT DOESN'T MATTER.

The reason cost of living doesn't matter is retirement. If you are saving 5% of your salary in one location, I assume that you'll also save 5% of your salary in your new location. However, that 5% will be greater in the location with the higher cost of living and higher salary. Due to compound interest, when you are ready to retire, you will have significantly more money if you had worked in a high cost of living area than you had if you worked in a lower cost of living area.

Let's assume that you take a job in a lower cost of living for $75,000 a year. Let's also assume that your company matches 0%, the overall compounding rate is 10%, and you deposit 5% of your salary once every year. If you retire in 30 years, you will have $617,000. If you make $87,000 and everything else remains the same, you will have $715,000. That's almost $100,000 difference (and it will be even more over a longer period and with a good company match)! And whose to say you can't retire to a lower cost of living area where that $715,000 is worth even more!

Cost of living is a haze that we have been living in for too long. It's time to burn off the fog and see it for what it really is.

Wednesday, June 15, 2005

Programmatic vs User Level Separation

While listening to a recent podcast, the speaker was comparing Linux to Windows. He made the statement that Linux has had a problem because its windowing system was not as well separated from the command line interface as MicroSoft Windows. My mouth dropped. When is separation not separation? Programmatically, Linux's windowing systems are much more separated from the command line than MS's Windows is from the command line. However, from a user perspective, the Linux windowing system usually requires much more interaction with the command line than does Windows, especially in the realm of installations.

So, listen up, programmatic separation is NOT THE SAME as user level separation. Sometimes we geeks just don't get it.

Versioning

Why is versioning of shared objects so difficult? By shared objects I'm including DLLs, .sos, COM/DCOM/CORBA Objects, and Web Services. Should it be difficult? If so, what parts? What are the issues that can arise? Why are new shared objects released? These questions are the ones we'll examine in this blog entry.

First, let's start at the beginning. Why are new shared objects released? Lets try to enumerate:
  • Bug fixes - These are changes that should change an improperly behaving object into a properly behaving object while not modifying any otherwise functioning behavior.
  • New method - All old behavior is retained. New behavior is also added through new messages.
  • Modification of functionality - The old functionality is now (or perhaps always has been) inappropriate. Therefore, new functionality must be introduced to replace it. This could exist due to legal issues or contractual issues. However, no interfaces change.
  • Modification of interface - For this to occur, all messages still exist, but one or more messages require different information. This could also occur for legal or contractural reasons. For instance, a field previously provided by a data provider may no longer be available or the length of a field may have changed.
  • Removal of functionality - Sometimes it is necessary to remove functionality that has been deprecated or that is no longer appropriate.

Some of these reasons should not require the clients to change at all. Some may force the clients to change. Finally, some changes may not require a client to change, but may mysteriously fail if they don't. In the above enumeration, a bug fix and a new method should not require old clients to change. However, sometimes clients depend on certain bugs and removing them may not be as easy as you would hope. Modification of interface and removal of functionality may fall into the second category: requiring the client to change. If a client uses one of the modified or removed messages, then the client should fail to run, period; otherwise, the client should continue to run as if nothing has changed. However, modification of interface may not require a change if the interface is sufficiently generic. Modification of functionality is the most dangerous of the modifications. With it, clients may unexpectedly fail for no good reason. Furthermore, it is difficult to know which clients may be affected and which ones won't.

To me, it should be difficult to release changes that adversely affect the client. Interface changes that are not backwards compatible should not be released - instead new methods should be added. What is the difference? Clients will have to be modified either way; with a new method then the old clients are still runnable. Furthermore, subtle changes that cause clients to mysteriously fail should be avoided AT ALL COSTS.

Next time, we'll look at some solutions to these problems and try to go outside the box to find the best way to release shared objects.

My first post

Hi, I'm a software developer starting up my blog. I hope to post here about lots of things: software development, financial matters, books, maybe even politics!

I'm a Myers-Briggs type of INTP. If you haven't looked into Myers-Briggs you really should. It is an interesting way to view people and it really provides quite a bit of insight. For me, the I means that I prefer the world of ideas more than the world of people. The N means that I'm intuitive -- preferring my gut instinct over my sensory input. The T means that I prefer logic to emotion and the P means that I prefer chaos to order. Go find out your Myers-Briggs type at Humanetrics. Once you know your type, go learn more about it and other types at TypeLogic.

My family and I love Disney World. My daughter is only 4 (5 in August!) and she's gone 5 times already! Her favorite park is Animal Kingdom though mine is The Magic Kingdom. I hope to post a lot on this blog about our adventures in Disney World and our upcoming trip to Holiday World.

By the way, you can see pictures of my family at my website.

I write software for a living. I primarily write C++ and perl code. I happen to think I'm pretty good at it, but I know I've a lot to learn as well. Writing code is different things to different people. To me, it is an art form, a science, and even an adventure. There are times when you love every minute and there are times when you wish you never had to look at a computer again. All in all, I think it is a good career and I'm glad I went into it.

I have my Ph.D. from Clemson University and my Bachelor's from Harding University. I enjoyed both schools, though Harding was really too structured for me (remember, I'm a P on the Myers-Briggs test!). Clemson was a great school with an excellent faculty and a beautiful campus. My advisor there was Brian A. Malloy. He was the best advisor anyone could hope for and I owe him a huge debt of gratitude for being so great to me.

Well, thanks for reading a little about me. I hope to see you here again next time!