Chris's profileThe Beavis CentralPhotosBlogLists Tools Help

Blog


    7/11/2005

    New Blog

    I have started a new blog at http://blogs.msdn.com/cjacks. This blog will become my personal blog, while there I will be posting my technology-related thoughts. As you can see, this blog hasn't been getting as much attention lately...
    6/15/2005

    Software as an Organism

    Can we correctly describe software as an organism?

    I believe that we can make a compelling argument to do exactly that. To achieve this, I first intend to run through analogies that will describe some of the correlations between software and biological life, which may help to explain why we would want to endeavor on such an exercise in the first place. If we can agree on this, then we can explore some more compelling arguments to use this terminology, which I hope will lead us to some conclusions that will forward the way we think about, design, and build software.

    When you run software, you experience to the phenotype generated by the software code. Therefore, to use biological terms, the source code is analogous to DNA, and the executing binary is analogous to the physical manifestation of that DNA after it develops in the environment where that DNA happens to be situated (typically an egg cell of some size and shape).

    Of course, this may be a flawed analogy. DNA, after all, is more of a recipe than a blueprint. Source code may be more of a blueprint than a recipe. For example, there is no DNA dictating exactly how to build an eye, which we could remove, insert into an egg cell, and grow only that eye. Rather, the DNA tells the original egg cell to divide in such a way that there is a slight difference between the two resulting cells – chemically, at least. In these two new cells, the slight differences trigger the reading of slightly different DNA strands from this cookbook, producing two cells each that are, again, slightly differentiated. This process continues until a single cell has been chemically prepared enough to be the precursor to an eye, which enables the reading of the DNA that specifies the design of that eye. In effect, you have a recipe for creating the chemical environment necessary to generate an eye and read additional components of the DNA that direct any variations in eye design that the chemical variation is designed to support.

    We generally conceive of software, on the other hand, as much more of a blueprint. A menu item exists because software code specifically dictates that the computer should draw a menu item there, with the following attributes. However, this way of thinking about it may be too simplistic. How many times have you had one computer operation work repeatedly, but suddenly, on one occasion, this operation no longer works? Maybe the computer does not draw that menu item for some reason. (We can seldom explain that reason without a healthy dose of knowledge and a lot of time with a debugger.) The phenotype of that software has now changed because of changes in the electronic (as opposed to chemical) environment surrounding that software! At commercial software companies, we see this all of the time with bug fixes. We fix one piece of software, which may fix one problem but alters the electronic environment for all other software. Suddenly, this other software (which depended on a particular electronic environment – which it may or may not be aware of) stops working and begins to exhibit a different phenotype despite no change whatsoever in the underlying source code.

    Of course, this is not nearly enough to consider software itself an organism. Rather, most could probably agree that we can define life as something that is able to perpetuate itself. DNA is the basis of all known life precisely because it is so efficiently and accurately able to replicate itself. To some extent, we can see some software that is able to replicate itself – think of a computer virus. The problem with computer viruses is that they are very efficient at replicating themselves. However, you do not typically think of a program such as Microsoft Word replicating itself wildly. If we dig a bit deeper, however, we can see a better comparison. DNA, in and of itself, really is not that terribly useful. As soon as you introduce enzymes which are able to read that DNA and duplicate it, then you have a powerful self-replication system. (You further need the ability to read the DNA, create RNA, and generate proteins if you want that DNA to exhibit a phenotype. Otherwise, life as we know it would be nothing more advanced than a huge number of strands of DNA floating around in the primordial ooze.) These enzymes are an agent. Another example of an agent providing the means of replication is with an actual (not computer) virus. Many times, they are nothing more than a simple strand of DNA, optimized for entering host cells and utilizing their resources to replicate. They cannot replicate without a host cell. Most software, similarly, does not replicate itself. However, you can use a host (such as a CD burning facility, or a web site) to generate copies of the source code, and thereby spawn additional instances of that phenotype.

    So, at its root, both DNA and source code are a code (one digital with 2 permutations, the other with 4 permutations) that can be read in a certain environment to exhibit a phenotype, and furthermore can be replicated to perpetuate their own lives over time. To me, that means that we have a kind of non-biological organism. Conceiving of software in this way allows us to open our minds to many of the things that we have discovered in the biological realm, which we can potentially leverage to improve our analogous software. Most interesting to me is the concept of evolution.

    6/6/2005

    Designing for the 20%

    Most software is designed to satisfy the needs, as best it can, for 80% of its targeted users. If those users happen to be consumers, then in general that 80% figure will mostly include people with limited knowledge of how computers work.

    You can see how this works today. Take a look at MSN Spaces itself. Specifically, take a look at the themes that are provided by default. You have the ability to select from a list of pre-designed themes. This list is large enough to satisfy most of the common wants. But then consider the true power user. I am not talking about the developer, who could create their own web site for posting photos and blog entries, customized to their hearts content (but may choose not to, because there are more efficient uses for their time). Rather, there is an audience of people who may not understand all of the finer details of CSS styles, javascript, and other web goodies, but who nonetheless are sophisticated enough to understand what the capabilities of the web are, and would like to do some customization. What is being done to satisfy those users? Unfortunately, they are left unserved. They can either do everything on their own, or they can accept a default.

    I am reminded of this because of a recent experience with Hotmail. A user pointed out that they wanted to customize how thier name appeared in the From line of email that they sent. They couldn't figure out how to change this. What Hotmail created is a leaky abstraction. In reality, this is just an SMTP header that must abide by certain standards-based rules. The 80% user isn't interested in this detail of implementation, they would just like a name to appear so it looks like other email that they send and receive instead of just having an email address. Hotmail just pops their name (collected earlier) into this header, and most users are fine. If you want to customize the contents of this header, then you have to customize the name and understand the correlation. The 20% user will likely eventually find this. But this 20% user tried to eliminate this auto-filled name altogether, and it turns out that just removing the name from the Hotmail configuration does NOT remove the name. The business logic, apparently, is to fill the header from the Hotmail name, and if nothing is found there then just take the Passport name and use it.

    Now, the 20% user would have no idea how this is implemented, and should not have to be concerned with how many and what sorts of data stores are sitting on a remote server somewhere. In fact, most would probably expect only one. So, the real task is to understand where the abstraction is leaky, and enable these 20% users to achieve what they want, without making them go all of the way to being a developer or else just settling for what the 80% want even when they are more sophisticated.

    This, to me, is a huge challenge for UI design. Much energy is focussed on the 80%, for obvious reasons. If more resources are applied, they go here. But 20% of everyone is an extremely large number, and I think it's very important to accomodate this important group of people. Not only to satisfy a very large number of people, but also to challenge the abstractions that are created to hopefully make them even better in the long run.

    It's hard work, and often neglected. I think that's unfortunate. The audience for software is not polar (consumer or developer). We should be seeking to serve all audiences, and not make the audience conform to our expectations even if that makes the job easier. For a v1 application, such as MSN Spaces, it makes sense that not everything has been developed yet. However, Hotmail has been around for a while. It should be eaiser for that 20% to achieve their goals.

    5/18/2005

    Animal Testing

    While we make it a point to only purchase products that were not tested on animals (cruelty free products), I don't think I have ever heard the underlying concepts verbalized quite as effectively as this:

    "...using an endangered species to help an overpopulated species become more overpopulated doesn't make rational sense." - Chimpanzee and Human Communication Institute http://www.cwu.edu/~cwuchci/faq.html

    If you are interested in high quality, well-packaged, cruelty-free cleaning products, consider Method (http://www.methodhome.com/). We have had a lot of success with them.

     

    5/11/2005

    Adam Smith is Boring

    I don't know about anyone else, but I think you need to be older in order to truly appreciate classic literature. One of the things I have made it a habit of doing is to go back and re-read all of the books we were forced to read in high school and college, only this time it is for fun and not for some course. For the most part, my experience has been tremendously rewarding.

    With one problem.

    Adam Smith.

    Adam Smith is just tedious and boring. Yes, I know it is supposed to be the foundation of modern economic theory (although some say he was more of a copy-cat than an innovator), which is why I insisted on the unabridged version. Perhaps that was a mistake.

    Or is it that economics is boring, and that Adam Smith is no worse than the rest? Nah. I think it's him.

    5/6/2005

    The Darth Side

    I came across this blog randomly, although it has been /.'ed and publicized in many other places I am sure. However, the quality of the humor (particularly many of the comments) is exquisite. I highly recommend this diversion to any who are interested in the Star Wars universe.

    http://darthside.blogspot.com/

    4/8/2005

    MSN Messenger 7.0 Released

    We rather quietly released MSN Messenger 7.0 yesterday. Stop by http://messenger.msn.com and check it out. I think there are lots of fun new features in this release.

    1/6/2005

    Talking about Microsoft Windows AntiSpyware

    The new Microsoft Windows AntiSpyware beta is available now. Check it out!

    Quote

    Microsoft Windows AntiSpyware $Beta$ Home
    1/4/2005

    Talking about Aspect and Subject Oriented programming: Why Microsoft can Blow-Off with C#?

    This is an extremely hillarious blog entry comparing the success of a computer language to the presense (or absense) of a beard by the creator...

    Quote

    Aspect and Subject Oriented programming: Why Microsoft can Blow-Off with C#?
    12/30/2004

    My new space!

    Welcome to my new space! I am wondering just how much I will end up using this space - I have so many other projects going on, and I haven't even gotten around to cleaning up my personal home page and it has been months! I guess we will have to wait and see...