Solve the meta-problem

I keep getting links to cool articles, blogs and essays. Sometimes I just mark them to read later. Some times I just dive in, sample them a bit. What excites me, may not excite you. But if you are in the software industry and share some of my interests, you may just want to take a look.

My sources of essays are links on Digg, doggdotus, slashdot, reddit. There is a bit of overlap there (doggdotus is an aggregator of digg, slashdot and del.icio.us). Here is an essay that got me started for the day.

How To: Be More Productive

Aaron is accomplished. Long before I read anything he wrote, I knew him for his software contributions. He describes himself as an Activist, Writer and Hacker. I knew about reddit and web.py and his contributions to semantic web and Python communities. I recently started reading his Raw Thought

This blog post is a gem. Like many other posts of his, it makes you reflect. If you are a software developer/software entrepreneur you can relate to this essay . For me, there is one thing that stands out more than anything else:

Another way to make things more fun is to solve the meta-problem. Instead of building a web application, try building a web application framework with this as the example app. Not only will the task be more enjoyable, but the result will probably be more useful.

Yeah. That is what it is all about. If you are a software developer, you can be an order of magnitude more productive, if you can take the approach of solving a meta problem. Some times this method of solving produces a tool. Some times it produces a design pattern or a framework. But almost, always, it produces one of the most elegant, reusable solutions.

Here are a few meta problems and the solutions that software pioneers invented. Some times they are so beautiful, you are sit in amazement at the mind that created them.

  • Parse different formats – Build a way to describe a parser and build a parser-generator (lex/yacc)
  • Find a way to describe a database – Recursive use of the concept of relationship to describe themselves. The metadata in an RDB are just tables like any other (with some special privileges)
  • You need a way to build different markups – Build a makup meta language (like XML)
  • You need to describe a set of resources and relationships and make statements about them – Create RDF/RDFS

Need I say more?