Reusable software

When a student of carpentry wishes to learn to build a ladder, he might study an existing ladder. He may learn to make each part. And by so doing, he will learn powerful, reusable concepts. He will learn the function of a rung as structure and step. He will learn the value of precision in making a hole for each rung. He can then use those concepts to build a fine ladder.

In order to learn, he may also disassemble a ladder and rebuild it from those parts. He will have a good idea of how the pieces work together. And given good parts, he can build a fine ladder.

I wish to do this with software. I should be able to study an existing piece of software and learn its "parts". Then I can build a new one myself that suits my needs.

Or, having found a piece of software, I wish to decompose it to a certain level of abstraction. And using those abstractions, build my own software, roughly equivalent to the original.

These are two kinds of reuse: reusing the parts and reusing the ideas. I wish to do more of these by studying existing software. I feel that it would advance my art tremendously.

This post used to be available at the old drupal site.
I have disabled comments. If you think this post is important enough to talk about, thanks a lot! You can always contact me at eric@lispcast.com. Otherwise, there are plenty of good places to discuss or respond to what you have read. I would prefer if you responded on your own blog. Barring that, there are newsgroups and mailing lists. Finally, Reddit, Hacker News, and other link sites. Happy hacking!