On Fri, 2001-09-21 at 21:47, Todd Gillespie wrote:
> You are making a classic marketing mistake, namely confusing lack of
> training with unwillingness. There is no reason to believe that
> someone who is trying to learn a computer language is averse to learning
> mathematics at the same time.
Well, that would have been me, anyway. I started programming because I
hated math and wanted the computer to do it for me ;-) Well, that's not
exactly how it happened; but suffice to say I've always been behind in
math, but I picked up the _logic_ of programming quickly, and now I have
a Software Engineering job (doing C++) and I have some knowledge of at
least a half dozen other languages. All with no more than high-school
level Algebra 1 math, most of which I've forgotten.
If I had thought that programming well *required* advanced math skills
back when I began, I probably wouldn't have started at all. Things are
different now; after a few years of experience, I'm eager to learn the
more esoteric maths and only wish I had the time to do so. But that
comes out of a purely personal desire to more fully understand the field
in which I work, *not* out of any proffessional need. My job has never
presented me with a problem that I was at a loss to solve because of
poor math training. The times I've coded recursive functions I did it
because it just "made sense" to do so for the task at hand, not out of
any formal mathematical training.
There seems to be a dichotomy between the CS view of programming, and
the more pragmatic industry view of it. The CS view seems to be that
you can't even begin to program without having advanced math knowledge.
My real world experience suggests that only a fraction of the
programming jobs out there ever utilize that math knowledge. On the
other hand, my experience also suggests that when you really strive to
master the art of programming you begin to get an intuitive grasp of
some of the relevant mathematical concepts, without necessarily knowing
the names for them. But that's just conjecture...
I will readily grant that modern programming pretty much owes everything
to math and mathemeticians. But I've lost count of the times I've told
people I'm a programmer, and they've responded "oh, you must be really
good at math then, huh?". This strikes me as really sad, because these
people all think that they can't program because they never got far in
math. A lot of people, who might find their work made somewhat easier
by a smattering of programming knowledge, are hampered in getting that
knowledge by their fear of math. They think that to gain entry to this
elite world, they need to first be able to fill a wall with equations.
Which scares them to death because they hated math in high school.
Whereas if you show them a simple Ruby (or Python, or even Perl) script,
they'll usually comprehend it quickly with a bit of help.
I would even go so far as to say that for some people, programming might
be a good introduction to math, rather than vice-versa. It certainly
seems to have been true of me.
somewhat related questions:
1. Someone made a mention of Ruby being "properly tail-recursive".
What's the definition of "properly tail recursive"? I've heard the term
before, but I'm not sure what it means. In every language I've coded
in, functions can call themselves; is this all that the term means? Or
is it something more?
2. My impression of recursion has been that it ought to be used only in
cases where the function can only recurse a predictable, reasonably
small number of times; otherwise the stack will overflow eventually.
The "factorial" function in the examples seems to break that rule. Is
this safe? If so, why?
3. Todd: Since you have such a high respect for math (and you quoted
heinlein :-), do you have any book recommendations for someone desiring
to learn the formal mathematics that relate to programming?
-- Avdi Grimm