Posted
by
Soulskillon Friday July 18, 2014 @06:37PM
from the i-before-e-except-SyntaxError: dept.

An anonymous reader writes: There's often debate amongst modern programmers about how much math a professional developer should know, and to what extent programming is math. Learning to program is often viewed as being on a spectrum between learning math and learning spoken/written languages. But in a new article, Jeremy Kun argues that the spectrum should be formulated another way: Human language -> Mathematics -> Programming. "Having studied all three subjects, I'd argue that mathematics falls between language and programming on the hierarchy of rigor. ... [T]he hierarchy of abstraction is the exact reverse, with programming being the most concrete and language being the most abstract. Perhaps this is why people consider mathematics a bridge between human language and programming. Because it allows you to express more formal ideas in a more concrete language, without making you worry about such specific hardware details like whether your integers are capped at 32 bits or 64. Indeed, if you think that the core of programming is expressing abstract ideas in a concrete language, then this makes a lot of sense. This is precisely why learning mathematics is 'better' at helping you learn the kind of abstract thinking you want for programming than language. Because mathematics is closer to programming on the hierarchy. It helps even more that mathematics and programming readily share topics."

The problem with all the articles like this is that they're either written by people who did take math or didn't, and in either case both believe their side is right. The article is clearly written by someone who took a lot of math so, surprise, he thinks math is good for programmers. But I took nothing past Calculus (and have never professionally used even Trigonometry), and I'm a successful programmer, so I think math is unecessary.

Until someone actually does a study on this, it's all gonna come down to "the way I did it was better"... and that's just noise.

It highly depends on what you do. If you work mostly with the common database applications, basic math is enough for you and it is unlikely that you will ever need anything above Calculus or even Calculus.

On the other hand, if you work with RF you will most likely need a lot of math. If you work with high level optimization algorithms you will need Abstract Algebra. If you work with Geolocation you will need a fair amount of high level Geometry, specially Non Euclidean ones.

So in the end the answer is: Higher Math is not necessary in all fields of programming but it is certainly very necessary in many.

Studying computer science requires a fair amount of math to understand why some algorithms are more efficient than others rather than just accepting that they are. And, it can be a great help in working out the storage and IO requirements of a program. How much math you need to be a working programmer depends, as you point out, on what branch of programming you specialize in. Personally, I've always considered programming to be more a branch of logic than one of math.

Formal logic is a branch of mathematics. It's part of a branch that is called decision and discrete mathematics. Programmers specialise in the application of that branch, just as staticians specialise in statistics and probability.

Yes, I know, but very few people except mathematicians think of it that way. Most people consider it to be an entirely different study so I phrased it that way to emphasize that much of computer programming has nothing to do with what the average person thinks of as math.

In the end, I've always concluded the same, every year this topic comes up (it is just about annual here). I don't want you to know calculus because you'll actually use calculus on the job (though I have an O(N) vs O(log(N)) question on my interviews that you'd better be able to answer).

I want you to know/pass calculus because by the time you've worked that hard at that level of proofs, you've mastered *variable control*. In each level of math, you don't get out of the class having mastered it. You get out of the class having mastered the year that came before it. When you can pass calculus, you have *mastered* functions and analytic geometry (I hire for UI work). Passing those two the year before showed you mastered variable manipulation and proofs in Algebra 2 before it.

So no, you don't *need* calculus on the job, but you need everything below it, and the best proof that you've *mastered* them (not just taken them, but mastered them) is that you've passed a calculus class.

Calculus is perhaps not the best measure however. Depending on where you go in the programming field calculus is likely less useful than some decent depth of knowledge in graph theory, abstract algebra, category theory, or combinatorics and optimization. I imagine a number of people would chime in with statistics, but to do statistics right you need calculus (which is an example of one of the directions where calculus can be useful for programming).

Not every programmer deals with these [mathematical] questions regularly (which is why I donâ(TM)t think math is necessary to be a programmer), but if you want to be a great programmer you had better bet youâ(TM)ll need it.

I don't think you need math even to be a great programmer. I do think a lot of great programmers are people who think in mathematical terms and thus benefit from mathematics. But I also believe you can be a great programmer and not be the sort of person who thinks in those terms. I expect the latter is harder, but then I'm a mathematician so I'm more than read to accept that I have some bias in this topic.

College education wastes countless hours teaching academic stuff that a great majority of programmers will not use on the job, while neglecting critical skills that could be immediately useful in a large.[sic]

Of course there was a time when college education was supposed to be education and not just vocational training.

Yes, I've heard the "well rounded" person argument. I can even accommodate it, to a certain extent, but it would stop at being exposed to ideas versus having to become competent at doing calculus problems in order to pass a course. I personally am not interested in doing calculus and haven't made use of it in over 20 years of programming.

It isn't even about creating well-rounded people, and never really was---the point of a college education was to become an academic. You went to college because your end-goal was research. Of course, at that point in history the alternative was likely monastic life because your older brother was going to get the farm... That being said, it wasn't really until the middle of the 20th century that college was seen as a way of advancing a career outside of academia. Whether or not you believe that the role

Whether or not you believe that the role of universities *should* be vocational training, the curriculum and organization of institutions of higher education---particularly research universities---is still geared toward that Enlightenment ideal of academia.

Colleges are basically turning into poor imitations of vocational schools. The same is true for some universities. You get the worst of both worlds.

Because you are a 20 years old know-nothing you arrogant bratand maybe there is more than one thing in the entire wolrd that could be of interest for you ?

Maybe if you weren't an arrogant asshole posting as anonymous coward you wouldn't make such statements. I've been to college and have long-since graduated. Most people go to college because it's a checkbox for higher-paying jobs and a chance to party on their parent's dime and government loans.

That's nice and all, but the vast majority of people go to college to get a well-paying job afterwards. That's what the point of the "major" is for.

You want to be trained ? go to a craft school or whatever you call them in your country.

College is a checkbox to get into higher paying jobs, so your suggestion of going to a "craft" school doesn't help.

PLUS YOU GET TO CHOOSE YOUR SUBJECTS so stop bitching!

Err, no, you don't when your major is something like computer science and they force you into heavy calculus courses. That's the topic under discussion. Try to pay attention.

2 years into the job I have greater mastery of pretty much any aspect of the project we are working on, and my skill-set is improving exponentially, while they almost never learn anything beyond what they know because they lack the methods to learn.

Yeah, that's a lot of bullshit. It's impossible to become a programmer with

Higher Math is not necessary in all fields of programming but it is certainly very necessary in many.

... which means that higher maths is really domain specific, and not necessary for programming. Otherwise I could say the accounting or biochemistry were necessary to learn to program, if that's the field I started out in learning to program

I love HLSL for how crazy you can get with the math and how easy it is to work with vectors and matrices.

That's probably not the kind of math that is the topic here - you're talking about math as the application domain of the program being written, but most often, the "programming is math" claims refer to the fact that any program itself is an artifact amenable to mathematical study, regardless of the application domain it covers. One typical question these days is, for example, "what invariants exist in the execution trace of a concurrent program that lead to the same result?" Or, how you can reorder (and per

I took nothing past Calculus either and up until two or three years ago never even used trigonometry in my professional programming. The last few years I've been writing satellite simulations, which has forced me to knock the rust off some of my old math skills. Most programmers can get away with very little math a lot of the time. A lot of very interesting programming involves a fair bit of math. That programming is generally being done by some guy with a Ph.D. in another field, and he's usually doing it i

I took nothing past Calculus either and up until two or three years ago never even used trigonometry in my professional programming. The last few years I've been writing satellite simulations, which has forced me to knock the rust off some of my old math skills. Most programmers can get away with very little math a lot of the time. A lot of very interesting programming involves a fair bit of math. That programming is generally being done by some guy with a Ph.D. in another field, and he's usually doing it in Fortran.

You're touching on what I consider to be the ultimate fallacy of this question. If someone asks the question "how much math does a programmer need to know?", I'd answer with "a programmer of what?"

My profession happens to be videogame programming. In my own experience, higher-level calculus is largely unused, but geometry, linear algebra, and matrix math are the bedrock of 2D and 3D simulations. Even then, the level of competence required depends largely on your specialty. A graphics programmer requires

Well, but the computer science major at my college required six other math classes (including two calculus classes beyond the first that I completed). For many programmers (obviously not all) that math is a complete waste of time.

Actually, that's more of an application of math than math itself. People so often confuse the two! Being able to integrate and being able to postulate very general hypotheses relevant to your problem and to prove them are two entirely different things, however.

I think part of the problem is that "programming" is itself so diverse. If you were to be a graphics programmer, you would certainly need your linear algebra, geometry, etc. If you worked with scientific computing, you'd need even more math (e.g. differential equations, statistics, etc). If you worked as a DSP programmer, you'd need to know calculus (and then some). In contrast, web development doesn't really require any of these. However, they all involve "programming", and the people writing the software can all be called "programmers", even if one's writing a website (no math) and another is doing a fluid dynamics simulation (lots of math).

I think part of the problem is that "programming" is itself so diverse.

The other part of the problem is that math is so diverse. There's calculus and engineering math with all kinds of techniques for solving this or that PDE; there's set theoretic foundations; there's graph theory and design theory and combinatorics and a slew of other discrete math topics; there's topology and metric spaces and various abstractions for continuity; there's linear algebra and all the finer points of matrices and matrix decompositions and tensors and on into Hilbert spaces and other infinite dim

In contrast, web development doesn't really require any of these. However, they all involve "programming", and the people writing the software can all be called "programmers", even if one's writing a website (no math) and another is doing a fluid dynamics simulation (lots of math).

I don't entirely disagree... but:P i am a web developer, who also happens to like lots of vector math, writing physics engines and in particular: writing SPH fluid dynamics simulations and other n-body simulations.

I would agree that some of my understanding of slightly above basic math is not necessary in most of the more common web development work in my job, but i do find it helps me be a better programmer in general... so perhaps the point is that math can make you a better programmer. Id also argue tha

I guess it depends, I have used math twice n my professional career - once to use trigonometry to show the distance between 2 points (Pythagoras) and once with a complex equation that was reduced to a simpler one.

Now, if I was a cryptograpic engineer, I think I might use math more often:)

But, as I tend to be more of a LoB engineer, math is not something used very often at all. If at all. I refer to the aforementioned pythagorean equation for the distance between 2 points using a triangle.... the business

The problem is, you've actually used maths every day in your career, you just haven't realised it. When you are programming, you are by definition doing maths - programming is a branch of discrete applied maths.

The reason math helps a whole lot in programming is that it teaches essential critical thinking skills. Some people are good at critical thinking skills without taking math. The _majority_,however, require some type of education to help mold their methods of thinking. Many, even with a whole lot of training do poorly with critical thinking skills.

Claiming that you have never used math in programming simply demonstrates that you are not programming for scientific purposes (writing a GUI for a CAD program

I find that most people trying to argue against math generally are doing so by asserting that if a certain math is not put to practice in the software that a person is developing that that math is unnecessary. It also seems to be commonly asserted that persons with a strong mathematical background are just being pretentious.

I believe that the anti-math crowd is missing the point. For a software developer it isn't the skill of solving calculus problems, but the skills required to solve calculus problems. What I mean by this is that in order to work to a solution for a given mathematical problem you are exercising many other skills. Skills such as logic, abstraction, visualization, etc. are very much employed in software development. You go to the gym not because you have aspirations of mastering a bench press, but because you aspire for a stronger, healthier body. Mathematics are an example of exercise equipment for a software developer.

You go to the gym not because you have aspirations of mastering a bench press, but because you aspire for a stronger, healthier body. Mathematics are an example of exercise equipment for a software developer.

As an important sidenote, I want to underline that literally going to gym is also important to a software developer.:) Your mind will greatly benefit from the energized body.

My feeling is that anything beyond algebra is unnecessary for programmers (in general) EXCEPT logic. I think every programmer should have two or three semesters, or even years, of logic. Programming languages just don't cover quite the same area, and usually skimp badly on logic. (I will agree, however, that theoretically the logic could be taught within the context of programming, except for a tiny bit that should deal with reasoning in unbounded contexts, i.e., infinitesimals, infinities, omega-complet

While the ideas of mathematics are (usually) precise, the language is fuzzy, informal and requires a lot of context. Everyone who ever has compared a fully formal proof and one done in the typical style mathematicians use can immediately see that. On the programming side, there is no room for fuzzyness. Or rather, whenever it is found, it typically is a bug and often a security vulnerability.

This is what Dijkstra has been arguing since the the 1960s or 1970s or so. Of course, given that Dijkstra has been dismissed and shunned by both mathematicians and programmers all the time, both mathematicians and programmers are doomed to perpetually rediscover the same thing and then proclaim it as a major discovery of their own.:D

We got good exposure to Djikstra at university (CS course). His problem is that he was ahead of his time. His other problems that even CS folks struggle to understand what he said (not because it is to terribly difficult, but because many CS folks are so terribly dumb). The think is that the formation of a new field of academic and engineering study and practice takes a long time. CS is not there yet. May take another half century or longer.

You may have a legitimate debate over which is more precise math or particular programming languages but has anyone ever argued a human language is more specific ? I'd love to see people program without understanding the propositional calculus. No strike that I may have actually seen that and it wasn't pretty. Comedy aside, anyone who has ever tried to write a parser understands just how non concrete natural languages are. Something like 90%

Ahem. Captain misdirected vitriol much? The emphasis was clearly on the relative ordering of programming vs. math, with natural language largely included as a point of reference. Way to seize upon the least interesting/provocative aspect of the piece and attack it like a cat going at a roll of toilet paper. No doubt it felt satisfying, but nothing of value was achieved.

I see why you went AC for this reply. I'd suggest actually reading the blog post, it's worse than the flaws I pointed out and it's little more than pointless navel gazing. It's a shame so much crap like it has been making it as slashdot stories lately. I have to guess somebody is using multiple dummy accounts to promote stories through the firehose.

A big part of organic chemistry in college is "synthesis" problems where you are presented with a molecule and you're supposed to outline the steps (chemical reactions) required to turn it into a different molecule. I find that this closely mirrors programming where we're manipulating data instead of chemicals. We all have access to the same tools and there's more than one pathway that will work, but we're trying to find the most elegant / efficient solution

It was all the shortcuts, left out "intuitively obvious" steps, and sloppy use of variable names and symbols that drove me up the wall trying to learn advanced math from (imho crappy) math profs.

Let me tell you about the lecture with no less than three different Epsilons (a rounded one, a less rounded one, and something in between) used in the exposition of the proofs. That and my slight myopia kind of did me in in that class (or would have if I hadn't cribbed notes from my neighbour.)

Math is big. It encompasses everything from continuous (calculus) to discrete (logic). It abstracts even from there into levels only mathematicians would understand.

People who don't know math think it's just calculus or just algebra or just linear algebra or just abstract algebra or some other high level mathematical discipline. They forget that working with integers is math. Set theory is math. Graph theory is math. Boolean logic is math.

Agreed. Any program can be broken down into a sequence of mathematical operations. It's generally not the type of mathematics that would be of any interest to a mathematician, but it still falls within the domain.

TFA tries to make the case (poorly) that Math involves ambiguities and Programming does not.The greatest of all mathematicians, Carl Friedrich Gauss, stated, "I mean the word proof not in the sense of the lawyers, who set two half proofs equal to a whole one, but in the sense of a mathematician, where half proof = 0, and it is demanded for proof that every doubt becomes impossible."Not much room for ambiguity in that.

TFA tries to make the case (poorly) that Math involves ambiguities and Programming does not.

I've been trying to think of how this could be, and the only thing I can think of is the syntax of math is less formal than the syntax of programming. In programming, each command is clearly defined, whereas in English there's some ambiguity about the meaning of the word 'is.'

Any sort of ambiguity means there must be a method of resolving the ambiguity. This is true no matter if you're talking about human language, math, or programming. In language and math, the method of resolving ambiguity is context. That is, the person you're communicating the concepts with presumably knows enough about what you're talking about to be able to resolve the ambiguity.

Note that both math formulas and programs are pieces of communication, nothing more. Programs are a way of communicating intent t

Before you can start formulating them — in any language, even in a spoken one — you need to think through the decision-trees and handling of exceptions and errors.

A "Hello world" program — in any programming language (except, maybe, the assembly) — is vastly simpler than a list of errands you may get from your spouse on a weekend. Heck, a single errand of shopping may be more complex:

Buy two pounds of X, if it is fresh, otherwise buy only 1 pound and another pound of Y.

When you are giving instructions to (programming) a human — or anything/anyone else with intelligence (artificial or otherwise) — humor may become available as a construct both for the instructions of the programmer and messages from programmed.

My argument was and remains: algorithms are the most important part of programming. Before you need to put in writing (or even verbalize it), you

No you don't need math to write an iPhone App or an interactive website.
You do need math to understand why looking up some keys in a HashMap is much faster than iterating over a vector.
You do need math to understand why some encryption algorithms are better than others
It just gives you the tools to better comprehend what's going on under the hood, so you have more information to make the right choices in how to implement something.

Bur how often do you need to understand those things to implement a typical computer program that helps a user get something done? Oftentimes, you simply need to know one is better than another and get on with it. Of course, you'd need that understanding to, for example, work on the TrueCrypt sourcecode. But generally? I don't think so/

While I freely admit that most of my programming has been in other areas. In every project I do it seems the day comes when boss says, what we need here is a visual. Where: when I click on it here..., when I drag it their..., when I spin it... What you have to understand (and many here do) is that you screen/window/view is laid out in a coordinate system. So you cannot escape it! You quickly need: geometry, trigonometry, vectors, and if your doing any 3D calculus.

I went for years keeping my math and my programming separate. Often programming involves little more math than x++. But then I really buckled down and learned a pile of math which I now pile into my programming. Interestingly enough when I try to show my algorithms to other programmers they say, "I forgot all that math 1 day after exams." But these algorithms often are cutting thousands of lines of code away and result in answers that are instant instead of a more iterative approach that could take minutes or much longer.

The math that I am referring to is all pretty basic year 1 or 2 stuff. Basic Discrete, basic calculus, etc.

Financial. Although another project that I am in charge of is a game which uses much of the math I have recently updated, but nowhere near as much. In that case it is linear algebra and the corresponding matrix related math. Although much of that is taken care of by fairly comprehensive libraries; although it is nice to know what is happening when I have the libraries do their (no doubt optimized) math on things like vectors and whatnot.

some 20 years ago (yikes, did the math and it's closer to 30). I wanted to do signal processing and such, but I realized MIT grad students were doing all the fun stuff. I now write embedded software, and the only time I use math is when I either go off on a tangent, or sine off on an apology for doing so.

...on my Commodore 64, since we didn't have any games when it came out.

Interestingly enough, I sucked at "school math" and flunked math entirely. Imagine the expression on my math teacher when he saw me coding in assembly at the new computer-park back in the 80s, when he barely could understand basic.

Since, I've made numerous demos in the DemoScene with Amiga, and later on coding robotics AI with MCUs (as a hobby, nonetheless).

So no, you can absolutely learn to code quite decent software and hardware without deep math skills, but it helps if you want to do real advanced stuff like coding your own Render-Engine (but then again, how many are they?) My advice - learn whatever you need to achieve what you want.

would be better than math if one is looking for a bridge from language to programming. Absent symbolic logic, math -- especially algebra -- is a good introduction to the concept of computer programming because of its logic component (application of the algebraic hierarchy is a simple logic system.)

Mathematics, chemistry and physics use formal languages. Terms and consequences are concise but rather difficult to deal with. Informal languages such as we speak daily are sloppy but efficient and rather easy to understand by comparison. It is that slop that makes informal languages so useful. Imagine E= MC squared if you have no clue what E, M or C mean at all. It might take decades to ascertain what the equation means..

I have a rather annoying learning disability, and have suffered from it since I was in first grade: I have a great difficulty memorizing things. Now, even with that rather annoying problem, I managed to be near the top of the class in both grade school and high school. What happened is I learned early on how to analyze the patterns behind the subjects I was expected to memorize and when test-time c

What happened is I learned early on how to analyze the patterns behind the subjects I was expected to memorize and when test-time came was able to reconstruct most of the required information based on those patterns.

Sounds from that like you're a natural mathematician.

The more maths you learn, the more intricate the patterns become and apparently utterly unrelated areas become connected as an entertaining natural consequence of their existence.

Math is mandatory for engineers. In the early years people getting a degree in any way related to computers, hardware, software, programming, playing games while smoking weeds... were all engineers. Now that there is mass separation in the field the importance of math on any particular field is not as obvious. Us that design network gear and program network interfaces need math. Lots and Lots of it.

Well, of course maths, programming, and natural languages are different, but all of them involve a symbolic language that models something and expresses that model. Kun seems to be focusing just on the differing degrees of precision these symbolic languages employ.

People tend to think of natural language as only a medium of communication, but it is also the way the human mind models whatever it perceives or imagines, and despite the fact we do that mostly instinctively, it is by far the hardest thing about

Computer programming can be seen as more rigorous than mathematics because if the written program is not correct, the executable will not run; whereas a mathematical proof may contain elements that are not completely described but part of mathematical lore. However we do not possess a compiler for mathematics. Conversely language may be more abstract than mathematics because language, in addition to mathematics, may express information that is not mathematics, e.g. poetry, imagerie, etc. However mathematica

As a guy with two masters in math who knows 15 languages... I also disagree. There are some languages that are mathematical (like Haskell) but most programming has more in common with cooking (sequencing the application of resources) than math.

Which gets to the core of the problem when trying to decide how "like math" programming is. Which "programming"? Languages vary a great deal, but even more importantly the type of task one is trying to complete varies even wilder.

Even if one is going to follow the idea that it is not math itself one should learn and more the abstract reasoning one picks up while learning match, even that is questionable since the amount of abstract thought that is useful varies from task to task and environment to enviro

Math is a language. Just because you can frame things in that language doesn't mean that that language is necessary. Recipes are often in English. English is sequencing (words are a serial stream after all). That doesn't mean English is necessary for programming (there seem to many competent non-english speaking programmers as far as I can tell).

Disclaimer: I am a professional research mathematician; I do understand math just fine.

Proficiency in mathematics for the most part has little to do with being able to learn a programming language. This much I agree with. However, proficiency in mathematics does provide a strong indicator as to what you will be capable of doing with those languages. You may not be performing Calculus or manipulating matrices in the software that you write but the skills that provide an aptitude for performing such math are very much relatable to software development. Such skills include, abstraction, visualization, and logic to name a few.

You might not be terrible at math. I thought I was terrible at math (I'm also a software developer). I also thought I was only good at discrete mathematics (which was a course I took during my university degree, heavily related to programming and CS). Furthermore I thought I was terrible at learning human languages, after having had 7 years of compulsory French at school and not being able to form a coherent sentence in French.

Your reply is very interesting and outlines the fact that one should not stop learning after school, but instead revisit past and new subjects with a different eye and different tools. Also motivation is the prime mover here.

Being skilled in a subject is mostly how much you practice at it. I'm sure that if you put as much time into math as you did programming, your opinion wouldn't be the same. I'm a mathematician-turned programmer and I agree with the article.

One thing, though, is that programmers have a lot of tools to help them out. High-level languages like python, interactive development environments, debuggers, and of course being able to run the program and see how it behaves. All of these tools serve to hugely augment o

From the ambiguity within your comment (what language, natural or programming?; Is the fact that you can pickup this that or the other in 8 hours
an attribute of this that or the other or of your very self?) I conclude that your programs must end spectecularly.

A "programmer" can be someone who spends two days putting together a complex Excel macro (poorly), or someone who designs an information systems architecture for a significant enterprise. These are VERY different activities.

On top of that, I'll say that approximately 85% of people doing programming aren't really competent. Compare how often software crashes vs how often cars fail in such a way that they crash themselves. So you have to specify, are you talking about MOST programming, or competent programming? Most programming isn't done competently.

Well-designed and larger software projects require a thorough understanding of a large set of rules, both knowing what the rules are, and understanding WHY the rules are as they are, and when to apply which rules in order to move forward. In that sense, it's very much like math. Also like math, one wrong decision can lead you down a path of futility, from whence reversing course is time-consuming.

TFA is really about the human mind. We understand patterns as different forms of language, music is the most basic and universal, it lights up all areas of the brain, then you have spoken language built on top of musical patterns, then along comes symbolism in the form of writing and icons, math is our most recent and most precise form of natural language [youtube.com].

The take home message is, expose your kids to maths [youtube.com] without boring them to death.

The vast majority of programming is fairly simple manipulation of states and symbols, which are themselves a small subset of numbers. yes and no are 1 and 0, etc.

The way those manipulations work together quickly becomes very complex.

You can do a boatload of things with just that knowledge. Entire video games. Many types of process control and dedicated controllers. Most reasonable scripting jobs, most "webby" stuff, database stuff, etc.

Mathematics is a very wide field. There are specific branches of it - Boolean Algebra and the Calculus of Propositions (symbolic logic) whose mastery will definitely elevate you above the fumbling herds of hack programmers. Basic Calculus teaches one to think in terms of functions, and few programming languages are devoid of the concept of functions or lambda calculus.

On the other hand, I manage to completely forget even the very existence of trigonometic identities (to my cost) for over 15 years, and unles

Then it is fine. I would expect programmers to struggle with classical math geared toward physics. That's perfectly logical: it is easier for people who come from physics because they understand the applications. And vice versa: physicists have huge problems with discrete math, where you can't round or generalize everything to hell.

Otherwise, it was repeated many times before. The math in itself is not as useful as studying math is. Math doesn't relate to software development directly - but math

The big thing holding back computing is that computer programmers tend to think only in terms of algorithmics, and not in terms of (mathematical) computation. Computation in mathematics allows all sorts of funky stuff, and the only area where it is commonly applied is in vector manipulation. Applying matrices to matrices to matrices allows us to create infinite combinations of reusable transforms, which can then be applied to all the vertices in a 3D model at a low cost. Applying a series of algorithmic pro

Are you going to argue that recursion and iteration is not mathematics? Yes you may not understand everything in the branch of mathematics that you are applying, but one is still applying it, that doesn't make it sent less mathematics.

For most programmers, recursion seems to be a tool to completely -- but unpredictably -- blow out the stack. Cynical, I know, but that's been my experience.

Although I gotta tell ya, one of my favorite recursive things is a particular area fill routine for rectangular pixels. Simple and beautiful. Just elegant as all get out. Once I understood how it does what it does, it was like someone washed my mental windshield with Windex. That was a great day.:)

1. Rich parents / Male who is excellent at a popular sport
2. Prestigious law degree
3. Prestigious MBA
4. Good salesman and good at golf
5. Economics/Law majors/MBAs who got into strategic/management connsulting
6. (The rest)