Tag Archives: Software Design

A practical method for understanding intelligent design in two weeks

ECM sent me this awesome post from Uncommon Descent. The post explains how someone who doesn’t want to read about intelligent design can learn what intelligent design by doing. That’s right – you can learn about intelligent design by practicing intelligent design.


Of course a good example of design would be engineering in all its specialties. Unfortunately almost all fields of engineering are inaccessible to laymen for many reasons. But the good news is that there is a field that is theorically and practically available (at least at a basic level) to almost all people (or at least to scientific-minded people as most ID deniers are): computer science. Our suggested patent-pending method to become IDer is based on computer programming. Developing programs gives ID refuters a lot of advantages to learn ID.

(1) Computer programming is an activity where, differently from literature, philosophy, journalism and so on, a severe control overarches all the design cycle. In programming errors matter, also the minor ones are never condoned. This is good discipline for the student, to be always forced to correct his errors. If you write a book filled with errors, no worry, it will be published the same. If you write a program with one error nothing works. This is the difference between storytelling and programming. Usually there are at least two kinds of control or filter: at compilation time and at run-time. Any program works only if it passes the two filters.

[…](2) Computer programs don’t arise by unguided evolution. They entail CSI and only intelligence can create CSI. Whether software were generable by mean of randomness and machines, software houses wouldn’t need to pay legions of expensive programmers. When you are programming you see directly your intelligence at work. Eventually other programmers can help you but no other unintelligent thing can do the job for you.

(3) To develop programs is a good exercise to learn CSI, IC, nested functional hierarchies, sub-functions, structures, dependences among parts, meta-information, libraries, etc.

Intelligent design is nothing more than sequencing a large number of parts into a chain that has function. That’s it – that’s all it is. God is a software engineer. And if you’re interested in seeing some of the published research done by ID theorists, check out this list of their publications in scientific, peer-reviewed research journals. (H/T Truthbomb Apologetics)

There is only one problem with the post at UD, though. They recomment Perl and PHP for the exercise. Perl and PHP are crappy languages for any program longer than 100 lines that needs to be maintained longer than 2 months, or maintained by another developer who did not write it. The readability and maintainability of Perl and PHP are atrocious. Stick with languages like Java, Smalltalk or C#.

Other arguments for a Creator and Designer

To learn more about arguments for a Creator and Designer, check out some of my favorites below, taken from the big list of arguments and counter-arguments:


How do we know that some parts of DNA really are non-functional?

ECM sent me this post from Uncommon Descent about DNA and software design.

Perhaps I should begin by explaining explaining how software is made. The customer gives you a list of use case, which are descriptions of things that you expect the finished software to do. This list of expected system behaviors is called the “functional requirements”. There are also “non-functional requirements” that the user will not see, such as how easily the components of the system can be maintained or tested.

Now consider the post by William Dembski. He writes:

One of the main arguments to support evolution appeals to shared non-functional structures between organisms. Since design entails design for function, shared non-functional structures would suggest common ancestry in the absence of common design. But how can we tell whether something is truly non-functional?

Then he cites an e-mail sent to him by a software engineer, who explains how a lot of code is included to address exception handling and non-functional concerns.

As a programmer, sometimes I spend a lot of time designing error-detection and/or error-correction algorithms (especially for dealing with user input). Some of these functions may never, ever be used in a real-life situation. There are also various subroutines and functions that provide either exotic or minor capabilities that, likewise, maybe be used very seldom if at all. But they are there for a reason. Good programming practice requires considerable extra design and implementation of features that may only rarely, if ever, be used.

If someone were to cut out and eliminate these sections of code, repairing what’s left so that the program still functions, the program may work perfectly well for just about all situations. But there are some situations that, without the snipped code, would create havoc if the program tried to call on a function that was no longer there or that was replaced by some different function that tried to take its place. (Ask yourself what percent of the functionality of your spreadsheet or word processor program you use, and then ask if you would even notice if some of the lesser-known functionality were removed.)

I think biological life is like that. It seems to me that if some DNA code can be successfully removed with no apparent effects, one possibility is that the removed portion is rarely used, or the impact of it not being there has effects that are masked or otherwise hidden.

Perhaps redundancy is what was removed, meaning the organism will now not be quite as robust in all situations as before. I can give a kidney to someone else and suffer no ill effect whatsoever… until my remaining kidney fails and cannot be helped by the redundant one that I gave up (which situation may never, ever really occur due to my general good health).

P.S. Being able to snip something with no apparent ill effect may in fact provide support for ID by showing that the system was so well engineered that it could automatically adjust to a certain degree, and in most cases completely (apparently). It would be interesting to see some ID research into some of the evo cases that are being used to support the various flavors of junk DNA, to see what REALLY happens long term with the new variety now missing something snipped.

Sometimes, I forget that most of the world is trying to assess where biological systems are designed without knowing what engineers know about how the process of engineering.

Consider the example of implementing caching in order to reduce the frequency of network and database calls. Making a call to a remote system over a network can be very slow if there is lot of traffic congestion. The same thing applies to reading from a database or the file system. Engineers have invented a solution to this problem called “caching”. This basically means keeping the data you use the most often, or the most recently, in memory. It helps you to avoid looking up the same data over and over.

Notice that caching doesn’t do anything for the functional requirements. Instead, engineers are writing a whole bunch of code to address a non-functional requirement: performance. That caching code still has to be designed, written and tested, but the user will never see it produce any external behavior. In fact, the user will not be aware of the caching module at all!