March 2007
Mon Tue Wed Thu Fri Sat Sun
« Feb   Apr »
 1234
567891011
12131415161718
19202122232425
262728293031  

Month March 2007

Peanut butter disproves evolution!

This guy appears to seriously believe that peanut butter disproves evolution! Yes that’s right folks, peanut butter is inert so that ‘obviously’ proves that evolution has been disproved.

Does he really believe this; or is he as stupid as he appears?

Google working on a new JavaScript engine (hopefully, maybe)

I’ve just got home from a very enjoyable few days at SPA 2007, where Dave Thomas was one of the keynote speakers. As anyone who has heard Dave speak will know, he has some strong views on the direction and utility of different languages (in particular UML, Java and Dynamic Programming Languages); and he is one of the founding members of the agile manifesto. So when I ended up sitting next to him at dinner one night I was excited to learn a bit more about his ideas and experience in managing large scale agile projects and the future of programming.

So this is what he thought: Next year Google will launch a JavaScript engine that will result in a massive ramp-up in performance – such that it is at least as fast as Java is today! Wow! And that Microsoft will then be forced to respond and follow suit. He thought that, initially, the engine would be designed as an application to run on the desktop, but as Dave Thomas pointed out, if JavaScript applications can run as fast as Java apps why not run it on the server too?

Obviously this would makes a lot of sense for Google – and fits well with Steve Yegge’s post about the next big language.

Nature doesn’t design upfront, nor should software engineers

Creationists (‘Intelligent Design’ proponents, whatever) argue that since life is too complex to have arisen by chance, there must be a God (or designer). They argue that the alternative to design is chance and that is just too improbable – it is like climbing an improbably tall, steep mountain in a single bound.

Mountain

Or put another way, creationists only see two options: pure, blind chance on the one hand; and God on the other. Of course this premiss is disingenuous, Darwin demonstrated a third option – evolution by natural selection which supplies a strongly directional mechanism that is anything but random. Or as Richard Dawkins puts it: natural selection provides a way to navigate the gentle slopes up mount improbable, without the need to invoke the God Hypothesis.

Natural Selection provides a feedback loop to allow incremental changes that ratchet change up the slopes of mount improbable via a series of iterations. With each iteration being evaluated (by the environment) and either selected for, in which case it proceeds to the next iteration, or against in which case the change fails to be passed on the the next generation.

The approach of incremental improvement, ratcheting up the slopes of mount improbable, not only provides a mechanism or process to scale the slopes but also reduces the overall complexity of the system, by partitioning the problem into independent steps.

For example take three six-sided dice. The complexity of this system (the total number of possible states) is 63 or 216, this is 36 times more complex than a single six-sided die (which has six possible states). Now consider dividing the system into three partitions i.e. dealing with each die independently of the other two; the complexity of this system is the complexity of the first, plus the second, plus the third, or 6+6+6=18. Thus by partitioning a system into independent subsystems the overall complexity of a system is significantly reduced.

Partitioned dice

Now it strikes me that there are parallels here with software engineering. Software products are complex systems and attempting to climb a software mount improbable in a single bound seems to be foolhardy. Why attempt to design the entire system, at the start of the project, since it foists additional, unnecessary, complexity onto your project; it is safer to break your project into independent partitions.However, we need to be careful to try and ensure that each iteration (e.g. sprint) is independent of other iterations, otherwise we haven’t reduced our complexity (although this can in practice be difficult). And we should also ensure that we learn what has worked, and what hasn’t, at the end of each iteration and role these lessons into the next cycle of work.

It’s too easy to fail to genuinely review and learn from each iteration since we don’t like criticism and we are normally unwilling to throw away a month’s work (or part thereof) and instead continue to march blindly ahead. And that is blind faith, hoping that things will change on their own rather than continuing to move towards solutions that work and away from those that don’t.

Follow

Get every new post delivered to your Inbox.

Join 1,236 other followers

%d bloggers like this: