I don't really agree with this, because programming as a field is just
way too large. waaaay too large. Also, you didn't name any actual
field except moderately advanced algebra (number bases and a
rudimentary understanding of particular operations of base-2 number
systems: and, or, xor, shift, rotate). Also note that stuff like 2's
complement and modulo number systems, both of which are required to
understand why 'FF' can mean '-1' in certain circumstances, are
sufficiently out there for standard math that not even the most
hardened course on mathematics will -ever- even touch upon those
subjects. If you're going to hear about it at all, you're either doing
your PhD in something math-related, or, you're getting a course
focused on computers, and the actual mathematical basis for that stuff
can usually be discarded, as you're unlikely to make a name for
yourself redesigning chips from scratch).
I'll prove my point with a few specific fields.
FIELD 1: Computer Graphics.
If you're going to write 3D engines, you'll need to know a lot of math
and you really need to have a feel for math. In an earlier age you may
have discovered new ground in Math and have some proofs or theorems
named after you. All the way from advanced algebra (number bases and
doing math with modulo), matrix math, calculus, geometry, and so much
more. You really need to be a wiz with the geometry of course, but,
really, you need to thoroughly grok it all.
I actually know a fine example to prove my point. Behold, Carmack's
inverse square root:
http://www.codemaestro.com/reviews/9 (warning,
code is commented with colourful language. Also, may make your head
explode. You've been warned!)
However, a lot of math tends to focus on precision. In the age of
calculators, this trend has only intensified: If the answer is 'square
root of 2', then you just can't get away with '1.414' anymore.
However, in computers, you get the opposite. It's not only perfectly
acceptable to just get close, it is usually of the utmost importance,
and finding creative ways to get close enough is where the real
innovation lies. At least the math commonly employed in computer
graphics is at least somewhat covered in your usual garden variety
high school and college generic maths degree. At least, here in
europe. The 2 years of math I received in my freshman and sophomore
year in the US would be laugh out loud hilarious if it wasn't so sad,
unfortunately.
Math needed: Almost all the common fields.
FIELD 2: Cryptography
A niche field with a lot of niche math involved. It's really its
entire own little math world, but here too the rule holds, perhaps
even more than for 3d stuff: You really need to understand and have a
natural inclination for math, or you're not going to be doing anything
new, and, in fact, you'll have a real problem even keeping up with the
rest.
Highlights here include the intriguing field of modulo algebra and
certain obscure math hypotheses (such as the prime-related stuff, like
riemann's and mersenne), most of which never get covered in non-crypto-
specific math courses, even really advanced ones. Here too, matrices
rear their head. You'll also need to healthy dollop of creativity
here, because the most difficult job of anyone doing crypto is
figuring out how to break crypto algorithms.
This field is -really- small. Tiny, in fact. Most folk involved in
crypto spend all, or the vast majority, of their time on protocols and
systems analysis. Even Bruce Schneier probably spends less than 2% of
his time tearing apart actual crypto algorithms. If you really know
this stuff, the NSA might want to talk to you, though.
You don't need to know jack about the specifics of floating point
math, though, just to give an example.
Math needed: A lot of algebra. Crypto is a very specialized field.
FIELD 3: Front-End work.
This is a big field, and for many applications, all that's really
difficult for the entire project. For this you need to know absolutely
no math, not even number bases and the 'assembly' set of operations.
In fact, if you have trouble grasping the concept that '5 + 5' is 10,
you can still program this stuff and excel at it, assuming your
difficulty lies in some obscure form of dyslexia, and not because
you're an idiot. If you want education (other than programming pur
sang), you should look into design and usability engineering
principles like Fitt's law (the time it takes to perform an action is
linear to the size of the object you need to go to times the distance
you have to travel to get there, at least where mouses are concerned,
though you can get around Fitt's if the target is in a screen corner.
That's good stuff to know as a usability engineer!). As far as innate
skills, you really need to have a basic grasp of utility. A lot of
programmers are absolutely -incapable- of understanding this, and as a
result, a lot of programs are about as clashingly ugly as vomited on
turd. Fortunately the programming world is starting to understand the
importance, with the whole 'web 2.0' movement putting a lot of focus
on utility, as well as Apple being more popular than ever.
Math needed: Not one iota. Knowledge about the golden ratio might
help, but if you have a feel for beauty you tend to identify the
golden ratio without even knowing that it IS a ratio, that it exists,
and that you can calculate it. You really just need to know the
number, you don't need to know the why, what, or how. I don't call
that 'math'.
FIELD 4: Web Scaling
If you're writing software for huge web companies that need their
stuff to scale, you need to have a good grasp of fundamental
informatics, a fairly specialized field, as well as a good general
feel for math. This is important, because you'll need to come up with
schemes to cheaply assign tasks into processes which can spew results
back in no more than LOG(n) the amount of data your system has, and if
that's not possible, you'll need to find a way to distribute the job
to a large bunch of servers in a way that the act of distributing it
is itself LOG(n) or smaller. There aren't any specific number problems
you will be solving here, you just need a good 'feel' for things. This
is a bit of a theme: For a lot of cutting-edge programming work you
need to thoroughly grok math in general just so your brain can make
the right connections to get the job done.
You can study for a decade, but, if you don't really get it, you'll
never be able to put all that math you learned to use.
FIELD 5: Programming Languages
Let's say you want to make a new programming language. Set theory can
help you, but mostly it helps to have a good understanding of
processes. Stuff like regular expressions actually came from the math
world, for example. Also, it helps if you can spot a way to generalize
a language. LISP is still the most math-like elegant approach to
designing a programming language. Then again, for java, it looks like
the authors shoved all the math out the window and just grabbed a
bunch of convenient stuff together from various languages, put in
absolutely no effort to turn it into an elegant whole, and just got
down to business and programmed up a good language, then spent some
money on the best marketing -ever- done in the name of a programming
language, and here we are: Java.
Evidently it's not a necessity here.
So, there it is. You either need a truckload of math and a good
feeling for it, or, you don't need any whatsoever. Good news for all
involved: If you're a giant math head, there's a big range of jobs
that only you and the tiny fraction of this planet that shares your
skills can do, and nobody can butt in on you, and if you don't,
there's an even larger range of jobs that'll do you just fine. Though,
I firmly believe that programming itself requires a certain type of
mind that's hard to study for.
On Jul 27, 3:20 am, Christian Catchpole <
christ...@catchpole.net>
wrote: