the two paths
Recently, a friend linked in a forum signature to Master Foo Discourses on the Two Paths. I’ve been thinking about this one a great deal recently. While the entire Master Foo koans collection is meant to be funny, I think that it speaks volumes just how much reality there is in some of the tales.
I can say that I personally would consider myself to follow the Zen of Brutality. This has a great deal to do with my current occupation, where we jokingly refer to ourselves as “firefighters.” In essence, my job is to fix problems with industrial programming. When I am called out, I come up with the quickest answer to correct errors and bugs that only appeared after being implemented. The expectation is that whatever issue is there needs to be corrected as soon as possible so that normal functionality can resume. Not all of my answers are elegant, and oftentimes I’ll get something to the point of operation long before coming up with a solution that serves to perform the original function in a error-free manner. Much of what I do is the software equivalent of duct tape.
I carry this basic concept into everything that I do.
As an example of the two paths, I can think of a really clear example. Xaos52 (who has commented previously on some of my blog posts) and I both have weather forecasts to terminal output scripts. His is a wonderfully complex and well implemented bash script. Mine is one line tied to an alias that dumps output from w3m to stdout and pipes to grep using regexs to filter out the lines of data I want.
So which one is correct? Well, both of them to a certain degree. Whereas I’m pretty certain that Xaos’s script was created with other users in mind, mine was created so that I could get the day’s weather forecast without leaving my terminal. I never considered other users because I had no intention of anyone other than myself using it. Being a one-liner, it would be easy to modify for other purposes, but it only works if you have w3m and it has the location hard-coded into it. While you can do the same thing with elinks, or many other cli browsers, I don’t perform checks for all possible conditions because I know what I have installed. The complexity of the implementation is determined by the intended usage.
In the end, I believe that it’s important to try to make things as clean as possible and as simple as possible. Even the most complex programs should strive to remain clear and concise. Even the simplest programs should strive to be as capable as possible of not behaving erratically due to a mistype. The most important thing is to keep in mind is what your expectations are of the finished product. Never lose sight of the primary goal, and the rest should work itself out.