As I embark on my next project that will require me to duplicate efforts that I know have already been made, I think back to one of the initial promises of OO: reusable objects. When I first started learning about OO many moons ago I was told that there would be this wonderful and vast trove of objects that I could simply pick up, augment and reuse for my own purposes. The unfortunate reality is that there are a precious few objects available.
But why is this?
Off the top of my head a few reasons come to mind.
- Licensing. I have worked in what could be considered to be the “staff augmentation” business for quite some time. All this that boils down to is I typically have very little say or sway when it comes to licensing potentially useful technology. Compounding that is the much feared GPL. Companies run shrieking away from GPL’d software.
- Language constraints. A number of widely used programming languages are severely limited in their ability to augment existing objects. For example, in Java I cannot add a new member to
Objectthat would then be present in all objects. (In theory I actually can do this with AOP but the JVM goes out of its way to make this a nightmare.)
- YAGNI. The whole religion of “you aren’t gonna need it” mandates that the objects you create should only have the functionality that they need. By not providing those “well, maybe” hooks, these objects are limiting their own lifetimes and usefulness.
- Lack of imagination. The ability for a developer to think out of their domain is severely limited (and is only going to get worse as each domain becomes more complex). This will limit the potential usefulness of produced objects to other domains.
- Different standards. Different frameworks, different approaches, etc all contribute to objects that are fundamentally incompatible.
This entry was not written to bring about change or to criticize but only to point out some of the road blocks that exist.
Continue reading It was all a lie — Part 2.