Kurt, I completely agree. After reading the whole article, I find that his argument that large codebases are /inherently/ bad is a weak one. I'd like to comment on two of his major points: a) Large codebases are *unmanageable*, even by IDEs and b) Large codebases are *hard to learn*, remember, maintain, and extend. Steve is pushing a very good concept here: Parsimony (extreme frugality). It is one of the 17 rules of Unix Philosophy (http://software-quality.blogspot.com/2005/12/basics-of-unix-philosophy.html). However, it seems like he is missing some key design patterns as you mention, Kurt.

a) Large codebases don't need to be unmanageable. They should be composed of lots of small codebases--tool kits, frameworks, sub-applications and what not. The trick is to make each part a simple /part/. The whole may be complex, but enhancing a modular codebase will require additions of and changes to a small number of simple parts. Loading huge codebases into Eclipse is silly; load a small portion of the codebase instead.

b) Large codebases don't need to be hard to learn. A good codebase will have searchable documentation that is auto generated. It should require learning a small subset of the modules and functions by eliminating the need to manage low-level operations and following the principle of least surprise. Consider a database connector. The main things developers need to learn are functions like connect(), query(), beginTransaction(), rollbackTransaction() and commitTransaction(). It is easy to remember because the method names are intuitive. The database connector probably has dozens or even hundreds of files to manage drivers, connections and compatibility, but editing those files is unnecessary--the database connector can be a separate module that never is loaded into Eclipse at all.

- Ken Snyder


Kurt Griffiths wrote:
If you are trying to reduce the size of your code base and switching
languages simply isn't an option (for one reason or another), there are
several other areas you can focus on that can really help:

1. DRY
2. Relying on operating system services/libraries
3. Using 3rd-party components
4. Using code generation and/or an embedded scripting language
5. Supporting plug-ins and templates
6. Choosing smart DAL and UI frameworks that don't require a lot of
boilerplate code

On Dec 19, 2007 10:44 AM, Nathan Blackham <[EMAIL PROTECTED]> wrote:

This article was mentioned in the IRC channel.  Remember that he is
describing a problem that can exist in any language.  He isn't bashing a
given language other than to get his point across.  I am not a big
programmer, but I can understand his argument and is something I think
every
programmer should look at and examine if they fall into the big code base
trap.

Without futher ado:
http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html

Later,
Nathan

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/






/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to