Chris's profileThe Beavis CentralPhotosBlogLists Tools Help
Photo 1 of 1

The Beavis Central

A Division of Never Eat Dog, Inc.
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...

 
A History of Western Philosophy
John Adams
The Age of American Unreason (Vintage)
The Audacity of Hope: Thoughts on Reclaiming the American Dream
When the Little Things Count . . . and They Always Count: 601 Essential Things That Everyone In Business Needs to Know
Custody Chaos, Personal Peace: Sharing Custody with an Ex Who is Driving You Crazy
Weighing the Soul
Beyond Numeracy
The Tales of Beedle the Bard, Standard Edition
IT And the East: How China And India Are Altering the Future of Technology And Innovation (Gartner)
The Innocent Man
Shadow : Five Presidents and the Legacy of Watergate
The Drunkard's Walk: How Randomness Rules Our Lives
The Autobiography of Benjamin Franklin: Second Edition (Yale Nota Bene)
The Innovator's Dilemma: When New Technologies Cause Great Firms to Fail (Management of Innovation and Change Series)
What We Say Goes: Conversations on U.S. Power in a Changing World (American Empire Project)
Father's First Steps: 25 Things Every New Dad Should Know
How to Talk So People Listen: Connecting in Today's Workplace
Losing It: And Gaining My Life Back One Pound at a Time
The Language Instinct: How the Mind Creates Language (P.S.)
Outliers: The Story of Success
The Canterbury Tales: (original-spelling edition) (Penguin Classics) (Old_english Edition)
Windows via C/C++ (Pro - Developer)
Making Things Happen: Mastering Project Management (Theory in Practice (O'Reilly))
The Man Who Knew Too Much: Alan Turing and the Invention of the Computer (Great Discoveries)
Made to Stick: Why Some Ideas Survive and Others Die
Talking Right: How Conservatives Turned Liberalism into a Tax-Raising, Latte-Drinking, Sushi-Eating, Volvo-Driving, New York Tim
Advanced Windows Debugging (Addison-Wesley Microsoft Technology Series)
The World Is Flat 3.0: A Brief History of the Twenty-first Century
The Federalist Papers
Hard Facts, Dangerous Half-Truths And Total Nonsense: Profiting From Evidence-Based Management
Presenting to Win: The Art of Telling Your Story
Hoodwinked: How Intellectual Hucksters Have Hijacked American Culture
Quidditch Through the Ages
Fantastic Beasts and Where to Find Them
Harry Potter and the Deathly Hallows
Harry Potter and the Half-Blood Prince
Harry Potter and the Order of the Phoenix
Harry Potter and the Goblet of Fire (True Bloomsbury UK First Edition with Errors)
Harry Potter and the Chamber of Secrets (Book 2)
Harry Potter and the Chamber of Secrets
Harry Potter and the Philosopher's Stone
Into the Minds of Babes: How Screen Time Affects Children from Birth to Age Five
Welcome to JesusLand!  (Formerly the United States of America): Shocking Tales of Depravity, Sex, and Sin Uncovered by God's Fav
How to Solve It: A New Aspect of Mathematical Method (Princeton Science Library)
Within Reason: Rationality and Human Behavior
The Halo Effect: ... and the Eight Other Business Delusions That Deceive Managers
Reversing: Secrets of Reverse Engineering
Mommy, Why is There a Server in the House?
The Paradox of Choice: Why More Is Less
What Got You Here Won't Get You There: How Successful People Become Even More Successful
The Assault on Reason
I Am America (And So Can You!)
5 Steps To Professional Presence: How to Project Confidence, Competence, and Credibility at Work
Life's a Campaign: What Politics Has Taught Me About Friendship, Rivalry, Reputation, and Success
Parenting Beyond Belief: On Raising Ethical, Caring Kids Without Religion
Liaisons of Life: From Hornworts to Hippos--How the Unassuming Microbe has Driven Evolution
The Math Instinct: Why You're a Mathematical Genius (Along with Lobsters, Birds, Cats, and Dogs)
Yours, Mine, and Ours: How Families Change When Remarried Parents Have a Child Together
Code Complete: A Practical Handbook of Software Construction
The Big Moo: Stop Trying to Be Perfect and Start Being Remarkable
God Is Not Great: How Religion Poisons Everything
Innumeracy: Mathematical Illiteracy and Its Consequences
Rush Limbaugh is a Big Fat Idiot
The Female Brain
Richard Dawkins: How a Scientist Changed the Way We Think: Reflections by Scientists, Writers, and Philosophers
Loving Someone Else's Child
The Making of the Atomic Bomb
A Distant Mirror:  The Calamitous 14th Century
John Von Neumann: The Scientific Genius Who Pioneered the Modern Computer, Game Theory, Nuclear Deterrence, and Much More
Tuxedo Park : A Wall Street Tycoon and the Secret Palace of Science That Changed the Course of World War II
Genius: The Life and Science of Richard Feynman
Stepfamilies: Love, Marriage and Parenting in the First Decade
Writing Secure Code for Windows Vista (Pro - Step By Step Developer)
Rootkits: Subverting the Windows Kernel (Addison-Wesley Software Security Series)
Harry Potter and the Deathly Hallows (Book 7)
25 Ways to Win with People: How to Make Others Feel Like a Million Bucks
Applications = Code + Markup - A Guide to the Microsoft Windows Presentation Foundation
Cryptonomicon
Customs & Etiquette of India
Darwin's Dangerous Idea - Evolution and the Meanings of Life
Debugging Microsoft .NET 2.0 Applications
Deception Point
Essential COM
Freethinkers - A History of American Secularism
How to Win Friends and Influence People
Letter to a Christian Nation
Made to Break - Technology and Obsolescence in America
Marley & Me
Microsoft Windows Internals
On Bullshit
Programming Applications for Microsoft Windows - Fourth Edition
Socrates in Love
State of Denial
The Flight of the Creative Class
The Global Etiquette Guide to Asia
The God Delusion
The Humane Interface - New Directions for Designing Interactive Systems
The Old New Thing
The Republican War on Science
The Security Development Lifecycle
The Tipping Point
The Truth about Muhammed
The Way We Eat - Why our Food Choices Matter
The Wealth of Networks - How Social Production Transforms Markets and Freedom
Things that Make Us Smart
Through our Enemies' Eyes - Osama bin Laden, Radical Islam, and the Future of America
Unweaving the Rainbow
A Brief History of Time - From the Big Bang to Black Holes
A Devil's Chaplain
About Face 2.0
All Marketers are Liars
American Theocracy
Animal Liberation
Assembly Language for Intel-Based Computers
Blink - The Power of Thinking Without Thinking
Breaking the Spell - Religion as a Natural Phenomenon
Collapse - How Societies Choose to Fail or Succeed
Corporate Confidential
Data Structures, Algorithms & Software Principles in C
Deep Simplicity
Developer to Designer
Dominion
Drawing the Line
Emotional Design
Execution - The Discipline of Getting Things Done
Fantastic Voyage
Freakonomics
Full House
Genetic Programming
Gig
Good to Great
Graphics Programming with GDI+
Guns, Germs, and Steel
Harry Potter and the Chamber of Secrets
Harry Potter and the Goblet of Fire
Harry Potter and the Half Blood Prince
Harry Potter and the Prisoner of Azkaban
Harry Potter and the Sorcerer's Stone
How the Mind Works
How to Be Your Dog's Best Friend
ME++ - The Cyborg Self and the Networked City
Naked Conversations
Nobodies to Somebodies - How 100 Great Careers Got Their Start
On Intelligence
One Long Argument
Our Inner Ape
Programming Windows Presentation Foundation
Programming Windows with C# (Core Reference)
Revenge of the Sith
River Out of Eden - A Darwinian View of Life
Secrets to Winning at Office Politics
State of War
Team of Rivals
The 21 Irrefutable Laws of Leadership
The Ancestor's Tale
The Art of Computer Programming, Volume 1 - Fundamental Algorithms
The Battle for the Soul of Capitalism
The Blank Slate - The Modern Denial of Human Nature
The Bottomless Well
The Cluetrain Manifesto
The Demon-Haunted World - Science as a Candle in the Dark
The Elegant Universe
The End of Faith
The Extended Phenotype
The Fiefdom Syndrome
The Great Gatsby
The Inmates are Running the Asylum
The Origin of Species
The Singularity is Near
The Truth (With Jokes)
The Wisdom of Crowds
Tower of Babel - The Evidence Against the New Creationism
Why People Believe Weird Things