Michael T. Richter wrote:
> And in, you know, the real world of programming you don't
> face mathematical problems as your bread and butter.
Can you prove that? ;)
> You face problems
> in a messy world of too-short deadlines, too-few resources,
> too-poorly-communicated requirements and too-many-hours work.
In it's essence, the way of mathematics is to solve an infinite number
of problems at once by generalizing and simplifying them until they read
"1 == 1". But that's exactly the kind of stuff you need: thanks to
generalization, you already implemented all requirements before the
customer can even conceive them and thanks to simplification, needed
resources and hours of work shrink to reasonable amounts resulting in
deadlines becoming harmless :)
Well, i mean it seriously.
- Coding a complicated configuration system, no doubt baroque, can it be
simplified by basing it on a simple but powerful macro language with
simple and sane semantics? Can it be based on the lambda calculus? Is
this general enough? Maybe you want to assure that every macro terminates?
- Coding a graphical user interface with lots of forms, can they be
reduced to their essence and generated automatically from a data type?
Perhaps in the style of Functional Forms
(www.st.cs.ru.nl/papers/2005/eves2005-FFormsIFL04.pdf)? Are they general
enough? If they require immediate feedback or interactive error
checking, may tangible values (http://conal.net/papers/Eros/) be an idea
to base on?
- Coding a dynamic website and having to control caching and data
mining, can this logic be separated out, restricting yourself to a
programming model that allows those this to happen transparently? Can
you plunder Google's Map Reduce model for that
(www.cs.vu.nl/~ralf/MapReduce/paper.pdf)?
- Coding data base access or a package management system, can data
integrity be assured by again restricting yourself to a less general
programming model? Like Software Transactional Memory? Or is it just
enough to use strong typing and a simple yet clever data structure
(http://www.galois.com/cufp/slides/2006/CliffordBeshers.pdf)?
The structures behind the repetitions, the generalizations to rule them
all, the simplifications to find them, they all lie there. But they may
resist discovery and you may need cleverness and, well, mathematics to
find them. The point about Haskell is that its type system is pure and
rich enough to enable you to actually express the proof, the insight as
a program. Only few programming languages can do that. And you know:
computers and Haskell itself are products of mathematics.
Regards,
apfelmus