"The more people do, the more society develops, the more problems arise."

The title of this post is an excerpt (from an excerpt) of a quote by Masanobu Fukuoka (posted by Tom Hodgkinson on The Idler blog). Masanobu Fukuoka was a soil scientist who turned his back on the perceived wisdom of modern agricultural practices to develop a technique of "natural farming" that more closely mimics nature.

This approach appeals to me. As a developer it is a core skill to innovate and find solutions to problems. Often these are solutions built on top of other solutions. By taking a step back and viewing the developments from a broader perspective the solution may be to cut away "innovations" rather than adding to them.

Running Shoe Technology Goes Full Circle

I have recently become the owner of a pair of Vibram FiveFingers shoes. These are basically a thin covering for the soles of my feet allowing me to walk and run "barefoot" (the actual soles of my feet are far too soft to be practical).

I came across FiveFingers in the comments for this article about how the invention of cushioned shoes has changed the way humans walk and run. Sports shoes have lead to many humans walking and running in a fashion that differs from the way the foot evolved to be used. As a result many runners (tired of injuries associated with landing on the heel of the foot) are using "barefoot" training methods to keep their bodies healthy.

Here's a rough illustration of how barefoot running has come back around:

  • Humans evolved to walk on their hind legs, their feet acting a a shock absorber along with the ankles an knees
  • Shoes similar to huarache sandals arrive allowing the wearer to withstand uncomfortable surfaces
  • Fashion and innovation combine leading the majority of the developed world to wear shoes with some sort of heal
  • Around 1972 modern athletic shoes are invented, coinciding with the growth of sports sciences
  • Today more people than ever suffer from sport and posture related injuries which need corrective orthopedic treatments. Shoes like the MBT are invented to "correct" the foot and allow us to walk "naturally"

It seems that many of the claims that are made for the benefits of orthopedic insoles and MBT shoes are mirrored by simply wearing no shoes at all.

How about software and programming?

One example of the over-engineering that goes on in software development industry might be: templateing engines creeping into PHP.

PHP started life as a way to customise static web pages (e.g. adding today's date or simple hit counters), it then evolved into a way to manage page layouts and behaviour, effectively an interactive templating language. Further evolution has lead to PHP becoming a full blown Object Oriented Language, and with this development have come various frameworks that improve code reuse and working practices.

Then came an innovation that (in my eyes) went too far, templating languages were introduced to make them manageability of page layout and data representation easier. This meant more code to interpret them and therefore further load on the system running it.

One of PHP's core appeals is its ability to mesh directly with HTML, a language truly intertwined with the web; templating seemed an unnecessary step away from that.

For some applications abstraction layers may be a step too far especially when it is an abstraction based on an abstraction.

In a broader sense this could apply to software in the form of feature creep.

I'm not saying that innovation is a bad thing, far from it. But, it may make sense to look at the whole process and in some cases whittle it back down to provide the best solution.

To conclude the rambling

It is a paradox. If you define the success of a species by ability to bend the environment around to their will, then humans most productive trait is the desire to innovate.

However, innovation upon innovation can lead to imperfections and further problems (which in turn will need further solutions).

A valuable skill, to those who's vocation it is to innovate (software developers especially), may be to recognise when a problem can be solved by removing a layer of complication rather than adding yet another "solution".

This week's fun

No big post this week, due to being pretty busy, so instead I'll round up some of the bits and pieces that have occupied my mind this week.

Erlang:

On the Erlang front I'm wading through some slightly less blog-worthy chapters of Programming Erlang: Software for a Concurrent World, getting to grips with error handling and exeptions. I'm going to try and tackle a more unusual task next week.

At work:

I've been wresteling with Servers. One site is flat HTML, and should therefore run super fast - however, due to a huge quantity of internal redirects and a sudden upsurge in traffic the server was grinding to a halt! Solution: move the redirects from .htaccess files over to vhost.conf, but I think they are going to have to be whittled down very soon.

I also set up a CentOS Virtual Machine as a staging/testing environment and was pretty pleased by how much I can get done from memory using the shell. It's a while since I realy played with Linux for more than a couple of hours and I could definitely envisage moving over to it on a more permanent basis. Quite a few dev tasks are easier there.

Personal Projects:

Development on my second web app (the first being Good Baad) is coming together nicely. The working prototype is built with my "ultra-lightweight" PHP MVC framework, which I'll write about some time soon. Although I'm wondering about porting to Erlang as it's a heavily realtime system that could take advantage of Erlang's concurrency.

Random Thought:

I've been worrying about the environmental impact of the web, and most discussions focus on the huge server farms used by mega-sites like Google and Facebook. However, I'm sure that individual developers and small companies could be working more actively on these problems too.

What a dull post! I'll step it up next time, promise. Just to spice things up here's a video of a nutty robot: