Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
Irreducible Complexity and Evolutionary Design

imageIn church last week we were talking about evolution when the term "Irreducible Complexity" came up.  For those who aren't familiar with the concept irreducible complexity is a term coined by Michael Behe to illustrate that complex system could not have evolved and therefore must have been created intelligently.  Behe defines irreducible complexity as:

A single system which is composed of several interacting parts that contribute to the basic function, and where the removal of any one of the parts causes the system to effectively cease functioning. (Darwin's Black Box p39 in the 2006 edition)

In his book Behe uses a mousetrap to illustrate an irreducible complex system. 

"If any one of the components of the mousetrap (the base, hammer, spring, catch, or holding bar) is removed, then the trap does not function. In other words, the simple little mousetrap has no ability to trap a mouse until several separate parts are all assembled. Because the mousetrap is necessarily composed of several parts, it is irreducibly complex." (Behe, 1996).

(This post does not seek to discuss the controversy of evolution vs. creationism vs. intelligent design)

How does this translate to software?  An irreducibly complex software is software that cannot be easily tested.  The "removal of any one of the parts causes the system to effectively cease functioning" really points to dependencies in software.  Do your tests rely on a database being there?  Do you get emails whenever some piece of code runs because as part of the method an email is sent?

Creationist Design

How often have you stepped into some code and have seen a method calling database, sending an email, doing some validation, and then returning some value.  Here's an example I pulled from Jimmy Bogard's post on separation of concerns:

   1: [DataObjectMethod(DataObjectMethodType.Select, false)]
   2: public static List<Customer> GetCustomers(int startRowIndex, int maximumRows)
   3: {
   4:     List<Customer> customers = null;
   5:     string key = "Customers_Customers_" + startRowIndex + "_" + maximumRows;
   6:  
   7:     if (HttpContext.Current.Cache[key] != null)
   8:     {
   9:         customers = (List<Customer>) HttpContext.Current.Cache[key];
  10:     }
  11:     else
  12:     {
  13:         customers =
  14:             (
  15:                 from
  16:                     c in DataGateway.Context.Customers
  17:                 orderby
  18:                     c.CustomerID descending
  19:                 select
  20:                     c
  21:             ).Skip(startRowIndex).Take(maximumRows).ToList();
  22:  
  23:         if ((customers != null) && (customers.Count > 0))
  24:             HttpContext.Current.Cache.Insert(key, customers, null, DateTime.Now.AddDays(1), TimeSpan.Zero);
  25:     }
  26:  
  27:     return customers;
  28: }

The code above will work however it's a bear to test, the code absolutely requires other items (database, HttpContext, ect) to be there in order to work.  I would venture to say that the person who wrote it did not build up the code through small iterations, but rather wrote it all in one fell swoop.

Evolutionary Design

In software, reducible complexity should be a goal.  A reducible complex system allows for pieces to be substituted for others so you can focus on one particular area.  Don't have a database in place, no problem, simply put a placeholder object in for all calls made to the database.  (Yes I'm alluding to mocking).  You can approach creating a reducibly complex system in two ways:

  • Create the system as a whole, then reduce it's complexity
  • Create the system incrementally

I prefer the former to the latter as I'm working on my TDD skillz.

Conclusion

While the analogies used here are not quite perfect, I do feel they illustrate the point adequately.  As a developer your goal shouldn't be to simply write code.  You should concern yourself with the lifetime of your application/code base.  Irreducibly complex systems, while working, can also have short life spans.  Think about the last time you've ever seen someone fix a broken mousetrap.  All the parts are too interconnected, the mousetrap is simply replaced.  If you're not careful your code may be viewed too difficult and time consuming to fix, and simply replaced.


Posted 09-02-2008 9:48 AM by Tim Barcz

[Advertisement]

Comments

Jason Bock wrote re: Irreducible Complexity and Evolutionary Design
on 09-02-2008 1:28 PM

You're right, there's is no "controversy of evolution vs. creationism vs. intelligent design" because creationism and intelligent design (one and the same, BTW) don't have any weight in scientific realms :).

Tim Barcz wrote re: Irreducible Complexity and Evolutionary Design
on 09-02-2008 1:38 PM

@Jason,

They actually are not one in the same...you may not see them as different but many people do.  

www.discovery.org/.../1329

Kyle wrote re: Irreducible Complexity and Evolutionary Design
on 09-02-2008 3:35 PM

Without this turning into a flame-war, cdesign proponentists do need a lot of work if they want to claim that intelligent design is not the same as creationism.

Having said that, I've thought of the exact analogy you made above and I think it's a pretty great one, actually. It's interesting how accidental complexity (another, somewhat loaded comp. sci. term) plays a part in both the evolutionary approach and the "do it all at once" approach. I find that accidental complexity tends to be higher in systems with the non-evolutionary approach, though sometimes the evolutionary approach done incorrectly can produce something ridiculously needlessly complex.

Jason Bock wrote re: Irreducible Complexity and Evolutionary Design
on 09-02-2008 4:13 PM

Tim,

Please tell me you didn't quote the discovery.org site. Please tell me it ain't so!!

Doesn't matter if "many people" see them as different. They are the same. On the surface, they may look world apart but at their cores they're the same animal.

And I mostly agree with Kyle :)

IHateSpaghetti {code} wrote Blog Carnival #3
on 09-03-2008 1:00 PM

Visual Studio Extensibility/ DSL Tools How to open files from the Output window - by Pablo How do I obtain

DonD wrote re: Irreducible Complexity and Evolutionary Design
on 09-04-2008 5:01 AM

I don't know. The analogy seems to almost have it backward, since irreducible complexity in software would tend to come from lack of design (evolutionary or intelligent).

Unfortunately, this post will shade my reading of your others. Believing in creationism (and we can call it that after Dover) is very much like truly believing in astrology or healing crystals or flat earth. Heck, even saying the Force is real could be attributed to overactive general geekery.

Tim Barcz wrote re: Irreducible Complexity and Evolutionary Design
on 09-04-2008 7:10 AM

@DonD

I'm sorry to hear that this post will influence others I post.  I would like to point out that I never posted my beliefs.   This was entirely on purpose.  You're the one who made the leap about my belief being grounded in creationism.

Dan wrote re: Irreducible Complexity and Evolutionary Design
on 08-28-2011 8:47 AM

A mousetrap turns out to be reducibly complex.

Interestingly code that has evolved over time tends to be interconnected where code that has been carefully designed tends to be modular.

social bookmarking list wrote re: Irreducible Complexity and Evolutionary Design
on 01-17-2013 9:14 AM

VM9qWy Great post.Much thanks again. Cool.

generic cialis discount wrote re: Irreducible Complexity and Evolutionary Design
on 01-27-2013 5:58 AM

IqeDdG Thank you for your post. Really Cool.

loss weight pills wrote re: Irreducible Complexity and Evolutionary Design
on 02-01-2013 6:53 AM

l5W5bJ Very good blog.Thanks Again. Awesome.

buy viagra wrote re: Irreducible Complexity and Evolutionary Design
on 02-03-2013 1:56 PM

K9inLO Thanks a lot for the article post.Really looking forward to read more. Great.

buy cialis online wrote re: Irreducible Complexity and Evolutionary Design
on 02-24-2013 1:52 AM

dPIXL4 Thanks for sharing, this is a fantastic article.Much thanks again. Much obliged.

buy clomid no prescription wrote re: Irreducible Complexity and Evolutionary Design
on 03-01-2013 5:33 AM

q2mfM8 Thanks for sharing, this is a fantastic article.Really looking forward to read more. Really Cool.

buy discount viagra wrote re: Irreducible Complexity and Evolutionary Design
on 03-02-2013 10:56 PM

8XxbEx Wow, great article post. Keep writing.

bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 03-13-2013 10:13 PM

uKV2e9 Enjoyed every bit of your article. Awesome.

bookmaring service wrote re: Irreducible Complexity and Evolutionary Design
on 03-14-2013 4:21 AM

KEy6v3 Thanks for the blog post.Thanks Again. Really Cool.

Social bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 03-23-2013 10:24 AM

xddSJL Thanks so much for the blog.Really thank you! Great.

comedy channel wrote re: Irreducible Complexity and Evolutionary Design
on 04-06-2013 7:39 AM

Great, thanks for sharing this blog.Much thanks again. Awesome.

buy social bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 04-12-2013 10:16 PM

sn6d8h Im thankful for the post.Really looking forward to read more. Really Cool.

digital camera guide wrote re: Irreducible Complexity and Evolutionary Design
on 05-14-2013 12:50 PM

B93gBt I am so grateful for your article.Really thank you! Great.

best social bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 06-19-2013 1:50 PM

jSYIjV Awesome post.Thanks Again. Fantastic.

good social bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 06-20-2013 5:11 PM

dXkxED Great, thanks for sharing this blog article. Cool.

news and many more wrote re: Irreducible Complexity and Evolutionary Design
on 07-04-2013 12:32 PM

4wKeGm Thanks for sharing, this is a fantastic post. Want more.

cool news wrote re: Irreducible Complexity and Evolutionary Design
on 07-09-2013 2:59 PM

jhto87 I truly appreciate this post.Really looking forward to read more. Awesome.

super news wrote re: Irreducible Complexity and Evolutionary Design
on 07-13-2013 10:19 AM

lpUJOw I loved your article post.Much thanks again. Great.

buy viagra online cheap wrote re: Irreducible Complexity and Evolutionary Design
on 07-24-2013 8:59 AM

Appreciate you sharing, great article post.Thanks Again. Fantastic.

cialis wrote re: Irreducible Complexity and Evolutionary Design
on 07-25-2013 11:19 AM

I really liked your article.Thanks Again. Keep writing.

best news on earth wrote re: Irreducible Complexity and Evolutionary Design
on 07-26-2013 3:42 AM

t6HQVn Major thanks for the blog. Cool.

cheap social bookmarks wrote re: Irreducible Complexity and Evolutionary Design
on 07-28-2013 8:40 AM

whj4di Thank you for your post.Much thanks again. Cool.

best news wrote re: Irreducible Complexity and Evolutionary Design
on 08-02-2013 11:43 AM

KHxyOD Fantastic article post.Really looking forward to read more. Awesome.

great link buildng wrote re: Irreducible Complexity and Evolutionary Design
on 08-19-2013 7:51 AM

q5zQgA Very neat blog post.Thanks Again. Will read on...

great link buildng wrote re: Irreducible Complexity and Evolutionary Design
on 08-19-2013 7:49 PM

jfPwfJ Very informative blog article.Really thank you! Great.

great link buildng wrote re: Irreducible Complexity and Evolutionary Design
on 08-21-2013 3:42 PM

o47Jpp Great, thanks for sharing this post.Really thank you! Really Great.

buy viagra online cheap wrote re: Irreducible Complexity and Evolutionary Design
on 09-01-2013 9:22 PM

Fantastic blog.Really thank you! Awesome.

best link building wrote re: Irreducible Complexity and Evolutionary Design
on 09-04-2013 3:21 AM

XoGa4Y Appreciate you sharing, great article post.Thanks Again. Keep writing.

the best seo service wrote re: Irreducible Complexity and Evolutionary Design
on 09-06-2013 12:45 PM

W3siiW Great, thanks for sharing this blog article.Thanks Again. Really Great.

website wrote re: Irreducible Complexity and Evolutionary Design
on 09-08-2013 5:59 AM

Hey, thanks for the blog article.Thanks Again. Will read on...

only for 5 dollars wrote re: Irreducible Complexity and Evolutionary Design
on 09-12-2013 8:50 PM

qECzHv A big thank you for your article. Will read on...

cheap link building wrote re: Irreducible Complexity and Evolutionary Design
on 09-24-2013 12:52 PM

LOMUsl Thanks-a-mundo for the blog.Really thank you! Fantastic.

cheap seo work wrote re: Irreducible Complexity and Evolutionary Design
on 09-28-2013 10:40 PM

Qc2jdP Thanks-a-mundo for the blog.Really looking forward to read more. Want more.

awesome linkbuilding site wrote re: Irreducible Complexity and Evolutionary Design
on 09-30-2013 5:47 PM

54Iac1 Thanks so much for the blog.

check out these guys! wrote re: Irreducible Complexity and Evolutionary Design
on 10-16-2013 10:56 AM

MKYlTD Im thankful for the blog post.Thanks Again. Great.

smashing top seo wrote re: Irreducible Complexity and Evolutionary Design
on 10-25-2013 11:23 AM

kZZ0m0 Thank you ever so for you blog.Thanks Again. Really Great.

link building wrote re: Irreducible Complexity and Evolutionary Design
on 11-01-2013 5:37 AM

1CtU2f Thanks a lot for the blog.Thanks Again. Want more.

stunning seo guys wrote re: Irreducible Complexity and Evolutionary Design
on 01-20-2014 10:18 AM

LbwoJG Really informative blog post.Really looking forward to read more. Cool.

matt wrote re: Irreducible Complexity and Evolutionary Design
on 03-04-2014 9:59 PM
john wrote re: Irreducible Complexity and Evolutionary Design
on 03-06-2014 11:38 AM
matt wrote re: Irreducible Complexity and Evolutionary Design
on 03-08-2014 7:25 PM
check it out wrote re: Irreducible Complexity and Evolutionary Design
on 03-25-2014 5:51 PM

ixRhzF Looking forward to reading more. Great blog article.Really looking forward to read more. Really Cool.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Subscribe
Google Reader or Homepage

del.icio.us CodeBetter.com Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl CodeBetter.com Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of Devlicio.us
Red-Gate Tools For SQL and .NET

NDepend

SlickEdit
 
SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
LiteAccounting.Com
DevExpress
Fixx
NHibernate Profiler
Unfuddle
Balsamiq Mockups
Scrumy
JetBrains - ReSharper
Umbraco
NServiceBus
RavenDb
Web Sequence Diagrams
Ducksboard<-- NEW Friend!

 



Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers

 

Community Server (Commercial Edition)