That's funny, because I have always thought of programs as extremely
refined arguments.
No. They are algorithms. And can be built upon.
Can be built upon in theory, but in practice they are with high
probability thrown away and rebuilt from scratch.
Because they are complex linguistic objects which, like philosophers'
arguments, are often harder to figure out than to do over from first
principles.
Except when they are discarded just because the readers lack the skills
and patience to figure things out. In my experience, that's more often
than not. In particular, I think programs that endure and grow are
unlike algorithms and philosophers' arguments or mathematical
derivations. A point is reached where programs become more complex
than any one (even exceptional) person can really understand
completely. In the form of support code, bug fixes, and algorithmic
refinements, they embed requirements and novel use cases that were not
evident to designers. Efforts should be made to study, simplify and
extend these programs. Meanwhile, efforts should also be made to
identify and eliminate abstractions that just confuse people.
Whether algorithms or arguments it doesn't really matter. It depends on
the programming language. Logic programming languages are more like
Wittgenstein and less like recipes.
Marcus
============================================================
FRIAM Applied Complexity Group listserv
Meets Fridays 9a-11:30 at cafe at St. John's College
lectures, archives, unsubscribe, maps at http://www.friam.org