|
![](/i/fill.gif) |
Darren New wrote:
> You don't need to know algebra to know how to write a program? You don't
> need to know how "and" and "or" works to write a program?
>
> You can't understand what a compiler does without knowing any abstract
> algebra. Heck, you can't even know the difference between a literal and
> an expression without knowing abstract algebra. You realize that "pass
> by value" is abstract algebra, right?
OK, now I actually *know* abstract algebra, and your statements still
make no sense to me.
> How do you know if your while loop terminates if you don't know how
> predicate calculus works?
You don't need to know the formal theory to understand how a simple loop
works. Basic intuition will tell you that.
> Actually, I think the answer is more that you know these things, and you
> just don't know the terminology the academics use for much of the stuff.
The discussion seems to be gradually anealing towards the idea that it's
not the *names* that are the problem, but the near-total lack of any
semblance of documentation about them that doesn't assume you already
hold a PhD in advanced mathematics.
For example, the documentation for the Monoid class states
"The monoid class. A minimal complete definition must supply mempty
and mappend, and these should satisfy the monoid laws.
Methods:
- mempty: Identity of mappend.
- mappend: An associative operation.
- mconcat: Fold a list using the monoid. For most types, the default
definition for mconcat will be used, but the function is included in the
class definition so that an optimized version can be provided for
specific types."
Assuming you already know what a monoid is, this is quite transparent.
If you've never heard of a monoid in your life, none of this makes the
slightest semblance of sense. And looking it up on Wikipedia still
doesn't tell you what this has to do with writing useful programs in
Haskell. (Or any other language.)
(The same library features Endo, "the monoid of endomorphisms under
composition". Even I have no clue what in the name of God that actually
means.)
The concensus seems to be that
- Haskell is inherantly mathematical, with a strong emphasis on deep
abstractions.
- Deep abstractions can be hard to learn, so we should document them better.
However - and this is what makes me so angry - there is a strong element
in the community who claim that Haskell should *only* be used by maths
experts. I find that to be arrogant and elitist.
The reasoning behind this seems to be "if you don't study category
theory, you cannot write computer programs, so it's OK for Haskell to
demand that everybody learns category theory before using it". This is
of course easily falsifiable.
--
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*
Post a reply to this message
|
![](/i/fill.gif) |