23 September 2008 - 19:34OOP inheritance

Typically OOP inheritance is used for sharing various common methods and a typical example would be something like this:
You have interface Vehicle which has sub-classes Bicycle and MotorVehicleMotorVehicle in turn has the sub-classes Car and Truck, each with its specifics. Car, Truck and Bicycle are all sub-classes of Vehicle and as such are all inheriting the same common behavior, such as some object which specifies the speed limits within which each Vehicle should operate (for example a Car should be able to handle higher speeds than a Truck or a Bicycle).
Fair enough, and this way to use OOP inheritance has its reasons for use.

However, one other reason for using inheritance that I see is for creating substitutes in order to partition code bases. In this case you are using sub-classes not because you need some shared behavior to be encapsulated in a super-class, but because you have distributed teams working on the same codebase and you need to minimize collisions between them in the codebase (a collision would be 2 or more persons working on the same file and is usually resolved by a merge in CVS). Solving conflicts thru CVS merge is a pretty error-prone process and doesn`t scale out well, so at one point it is necessary to partition development so that different teams can work on the same project without elbowing each other.
Sub-classing in this case would solve this problem by letting a developer substitute its team’s type for another team’s type.

One example is using helper classes which service a POJO and which are used by more than one team:
Let’s say that we have a TaxProcessor class that uses a TaxCalculator for calculating the taxes to be applied to a trade. Let’s say that you have 2 teams, one working on taxing bond trades and one working on taxing equity trades and that they are all using the same TaxCalculator class on the TaxProcessorTaxCalculator has the method taxTrade which delegates to taxBondTrade and taxEquityTrade. As time goes on a lot of fixes are put into taxTrade in order to deal with various corner-cases to the point where 1) TaxCalculator becomes hard to maintain and 2) more than one developer is working on the same method at the same time. A solution would be to sub-class TaxCalculator into BondTaxCalculator and EquityTaxCalculator, have each implement the method taxTrade according to its specifics and then have TaxProcessor use the appropriate class according to the trade type.

As you can see from above good software models imply good separation of concerns. Good separation of concerns translates in good separation between development teams working in parallel on the same project. Good separation between development teams results in low transaction costs or interaction costs between teams and into a more efficient way to delegate work and in a development environment which scales better.

No Comments | Tags: Development, Management

19 September 2008 - 16:57Link-less search

I was reading this post on BW’s Blogspotting and I think that link-less is not going to work because the content producers will be pushed out of the equation like it is explained below:
But what Raghavan is describing sounds very much like an effort to push relevant Web pages down, or even out of the equation. “We’re not giving you pages, we’re giving you information synthesized from other pages,” he says.
In this scheme, Web pages cease to be destinations. They simply fork over information, gratis.
 

Yeah, like I would ever want to fork-over my content to Yahoo so that they can put an ad next to it. There is a sense of ownership to the content that you are creating (not necessarily monetizable) that would enrage many content producers if Yahoo would neglect it.

If search engines master this transition, how will the Search Engine Optimization crowd tweak their Web pages?

If search engines get around to this SEO will transform itself into a business that would protect your content from being pulled out of your site and plastered on Yahoo’s link-less search.

No Comments | Tags: Miscellaneous

2 September 2008 - 18:21Speculating on Chrome

Chrome, the browser developed by Google is about to be released. I get a pretty weird feeling from this, because Google was known to support Firefox, because it comes on such a short-notice and because I don’t see any benefits to Google, at least not immediately.

Firefox is a pretty decent browser, or more likely, a pretty decent browsing platform onto which you can install various plugins which will make you browsing experience better. Not too bad, even though I have a lot of problems with their address bar.

I think that what sets Google’s brower apart from the Firefox and IE, the browsers currently with the biggest market share, is the vast mass of data that Google has upon browser users and the way they will leverage this data to gain market share and the number of web-applications that it has in its portfolio. This browser will probably be integrated with Google’s other offerings such as GMail, Google Apps, etc… I think this sets them so far apart that the browser to come out of Google may not look like a browser anymore, but rather as an integration tool between your email (GMail), your RSS reader (Google Reader), your office documents (Google Documents), instant messaging (Google talk), etc… Who knows, maybe it will integrate even with Google Android ;-).

As I have said before, Google has put together a large amount of data that helps it describe the typical user that browses the web, and I think that this data will be leveraged in order to get ahead of Firefox because it Google may develop better ergonomics with of this data. Google will probably battle against Firefox for market share and this battle will be a battle between application designers (Firefox) and statistics on usage (Google). It will be interesting to see how it unfolds.

Later edit: I have been using Chrome for an hour or so and it feels more like a desktop than a browser. It manages to hide away, yet make available when needed, a lot of browser-specific functionalities. It feels like Firefox when run in full-screen mode, it gives you more space and manages to stay in the back-ground. A web-application should take advantage of all this space. The web is the new desktop…

My assumptions about Chrome’s design were largely wrong, from what I see Chrome is pretty much concerned with getting the browser out of the browsing experience by using a minimalist design rather than with implementing some funky ergonomics.
I think that its biggest hit is the extra space given to its user and I get the impression that  this extra space will make more of a difference for people WORKING thru the browser rather than simply consuming some passivly thru it, because this extra space makes you more productive. I don’t even see Chrome, yet with a few keystrokes I get any browser-specific functionality I need. I get the feeling that web-applications will need to be re-designed to work in Chrome and take advantage of Chrome’s extra space, for example Wordpress works atrociously in Chrome. 

Oh yeah, and the address bar is way better than Firefox’s. A few more tests and Firefox is history.

Later Edit: Firefox is history as far as I am concerned, I will be using Chrome.

Last thoughts on Chrome: Chrome is taking the browser out of web- browsing, it is almost invisible, when I am browsing I don’t see it at all, it has no edges and no menus, you only get the page that you are working on and its menus (this is why I said that web-applications may need to be re-designed in order to take advantage of the extra space that Chrome gives you, I am a bit confused when I am using Wordpress because where I now see Wordpress’s menus I was used to see Firefox’s menus). When I am toggling between pages I feel like I am toggling between 2 different applications.

No Comments | Tags: Miscellaneous