
Should Math Be a Prerequisite for Programming? - wq
https://www.linux.com/blog/should-math-be-prerequisite-programming
======
throwaway729
Carol Smith seems to have confused "math" with "whatever's covered in math
101/103 and some particular place".

Calling for "mathematics to not be a pre-requisite to programming is like
calling for mathematics to not be a pre-requisite for trigonometry.
Programming is constructing and manipulating syntactic objects. Programming
is, literally and unambiguously, "doing math". They are not separable
activities.

Aside from which, elementary algebra is actually extremely important stuff for
any programmer to understand. We're not talking group theory, we're talking
knowing the difference between a graph of x vs. a graph of x^2 vs. a graph of
2^x. How to manipulate conjunctions and disjunctions and implications. I can't
imagine programming anything particularly useful without knowing that sort of
stuff. Which doesn't mean that formal elementary algebra is a reasonable pre-
requisite _course_ , but it really _is_ pre-requisite _knowledge_.

~~~
internaut
> Programming is, literally and unambiguously, "doing math". They are not
> separable activities.

Notably the authors of SICP, no mathematical slouches, would disagree with
you, in the first few pages they explain the difference between using symbols
to mean _what_ from symbols used to mean _how_.

~~~
ulucs
Even if I didn't disagree with that statement, won't having only the knowledge
of _how_ and no knowledge of _what_ leave you in a bad place when you move on
to non-trivial problems?

~~~
internaut
I wrote a complicated reply, then deleted it.

I think it resolves to this: having formal descriptions for _what_ matters a
great deal in defining limits and algorithms resolving into calculation. That
is important because you could waste your time. We see creatures in nature
like Julia Galef's Sphex which follow simple algorithms but because they don't
understand their terminal goal they cannot alter a suddenly ineffective
algorithm. Clearly understanding limits has the capacity to limit stupidity.

However we also know that practically many non-trivial problems are solved
before we can put them into a mathematical framework. It applies to Geoffrey
Hinton and the neutral network's effectiveness with a small number of layers.
According to many mathematicians that should have been implausible and Hinton
was toiling in barren fields and yet today we see it works. So the limit
existed in their model rather than reality. Physical examples of the same
phenomenon include useful atomic power and heavier than air powered flight.

Sometimes the theory leads the practice. Other times the practice outstrips
the theory. So in answer to your question, I wouldn't have much confidence
either way.

------
unsignedqword
I'm surprised people don't really think about this in the opposite direction -
that programming can be used to help understand math better. How many people
have gotten along better with linear algebra and calculus by virtue of messing
around in a game engine? Having to actually apply math knowledge to solving
problems - some applicable context - works wonders for cementing and
fertilizing that knowledge.

Many a student thinks to themselves in a math class: _" Man, I'll never use
this."_ When you actually need the math, suddenly you have this "oh shit"
moment and you step into gear.

------
ankurdhama
If programming = "The ability to program a computer to do something aka giving
instruction to a machine" then you don't need math.

If programming = "The ability to solve problems by modelling them as
computational problems and coming up with the solution aka algorithm and then
using computer to solve the problem". Then you do need math.

Remember, you can be a good mechanic without being an engineer but there will
always be the ceiling of mechanic that you cannot cross.

------
douche
I'm not sure that the Calc 1/2/3 sequence that tends to be a typical
requirement for university CS programs is really anything more than a fairly
inefficient bozo filter.

I remember wasting a lot of time learning algebraic and geometric identities
that I never ended up using for anything more than rearranging and simplifying
nonsense equations.

~~~
Ologn
I have a wallpaper app where you can see which wallpapers are popular. One
problem in determining popularity is I continually add new wallpapers. If each
download has the same score, then a wallpaper from three years ago that people
download once a week will be shown for some time before a newer wallpaper that
people download every day. Also, as the wallpapers appearing high on the
popular tab have a higher chance of being downloaded, it becomes a self-
reinforcing loop, cementing the place of the old wallpapers.

My solution for this was exponential decay. Newer downloads get a higher score
than older downloads. The older the download, the lower the score. Now I have
a better chance of seeing what's popular no matter when it was added.

This is not the most complex practical problem in the world and the solution
is straight out of Calc 2.

