One of the more famous Edsger Dijkstra quotes is from his 1972 Turing award lecture, How do we tell truths that might hurt?
Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.
Note that he specifically says native tongue, not English. Which makes me wonder why all of Dijkstra's most important writings were in English, not his native Dutch.
But I digress. Let's consider the first part of the Dijkstra quote. Should competent programmers be "mathematically inclined"? It might be instructive to think of programming as a form of mathematics, at least for one reason: to resist localization. Although there have been attempts to create localized programming languages, as far as I know, nobody has ever tried to localize À or the number 3. They're universal. So in that sense, programming languages bear a vague, passing resemblance to mathematics. Learn the symbols once and use them everywhere in the world, no matter what your native tongue is.
On the other hand, I have not found in practice that programmers need to be mathematically inclined to become great software developers. Quite the opposite, in fact. This does depend heavily on what kind of code you're writing, but the vast bulk of code that I've seen consists mostly of the "balancing your checkbook" sort of math, nothing remotely like what you'd find in the average college calculus textbook, even.
{
i = j++ / (x + v);
}
Not exactly the stuff mathletes are made of.
I never understood the desire to formally equate skill at mathematics with skill at programming. While being a math wonk certainly won't hurt you as a programmer, it's very hard for me to draw a direct line from "good at math" to "good at programming". Like Rory, I believe that software development requires some markedly right-brained sensibilities.
When I was growing up, I remember hearing people say things like, "If you like computer programming, then you'll love math." I always thought that these people were absolutely nuts. While there is something intrinsically similar about certain types of math and computer programming, the two are different in many more ways than they are similar.With math, and I'm not talking about the crazy number-theory math philosophy "Do numbers really exist?" side of things, but with the applied stuff, there are correct answers. You're either correct or you're incorrect.
With coding, the best you can hope for is to do something well. With so many different ways to effect a single outcome, it's up to some very right-brained sensibilities to determine if you've met your goal, as there isn't anybody (except [another more experienced developer]) who can tell you if you're right or not.
If you ignore your right brain, and I'm talking generally about abstraction and aesthetics, then you can slap some code together that might work, but it also might be one hell of a maintenance nightmare. If you focus only on the right brain, you might have something that works, but is so utterly inefficient and personalized that you're the only person on Earth who could make sense of the code and maintain it.
All those caveats aside, people still advocate the idea that math alone has the power to make you a better programmer. Steve Yegge makes the best case I've read for the programmer-mathematician, with his five points:
- Math is a lot easier to pick up after you know how to program. In fact, if you're a halfway decent programmer, you'll find it's almost a snap.
- They teach math all wrong in school. Way, WAY wrong. If you teach yourself math the right way, you'll learn faster, remember it longer, and it'll be much more valuable to you as a programmer.
- Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard. In other words, math is something you can pick up a little at a time, whenever you have free time.
- Nobody knows all of math, not even the best mathematicians. The field is constantly expanding, as people invent new formalisms to solve their own problems. And with any given math problem, just like in programming, there's more than one way to do it. You can pick the one you like best.
- Math is... ummm, please don't tell anyone I said this; I'll never get invited to another party as long as I live. But math, well... I'd better whisper this, so listen up: (it's actually kinda fun.)
To me, this reads like a broad recipe for becoming intellectually curious and building skill at solving abstract problems. Important programming skills, to be sure, but not necessarily exclusive to the study of math. If math is your preferred way to sharpen your saw, then have at it -- but it's hardly the only way.
I recently received this email:
I run a small (4 people) web dev shop and I'm finding that younger coders haven't had the pleasure of writing assembler or managing without library functions. I've always found strong math skills to be one of the most useful skills for coding, and when one has Google and a massive library of functions, one doesn't have to be good at math to get things working, until it either breaks, has edge cases, or brings out OS or library bugs.Some quick examples: simplifying tricky equations to determine array indicies or memory offsets; trigonometry to help with physical calculations; mental hex/bin/dec conversion; logic equalities such as DeMorgan's theorem.
He's got the right idea; if we're going to talk about math, let's get out of the abstract and into the specific. Let's talk details. Examples. What could be more math-y than that?
What code have you personally written where a detailed knowledge of math made your work easier? I can think of some broad categories. Writing a 3D game. Or a physics simulation. Or low-level image filters. Or compression algorithms. The list goes on and on. But if you're in those situations, you'll know it.
Maybe I'm a hopeless optimist, but I think most programmers are smart enough to learn whatever math they need just in time to attack the problem at hand.
100% agreed. Professional engineering is much more like lego assembly with components than it typically is like doing calculus. The only reference books I actually have are all stats and math ones, not programming ones, and they are plenty sufficient when I need them.
Kris Wehner on April 1, 2009 1:42 PMI think what the original author meant was that, when someone is good at math, not necessarily knowledgeable about a specific field in math, but has the brain to seek how and why of mathematical problems as well as knowing how to utilize the current tools and knowledge available to solve the math problem, or even to prove a formula is correct. It is similar idea in programming perspective where you have to think about how to efficiently and effectively design your code and algorithms to solve the business problem, or even just programming problems. Many of our current programming projects are just simply providing interface for data entry and validation. But to write much more complicated software, such as a database (oracle, sql server, ...), AI, .. etc, you will need to be able to formula your problem, develop steps and coming up with algorithms. Even a simple tetrix game ( we all know how to play that, but it takes a lot more to develop an engine to be able to support the game play) will take a lot of math-like thinking in programming way to do that.
Terry on April 1, 2009 1:42 PM
You don't really need to know math to write code, you just need to know how to apply it. My first love is 3d graphics programming. I have a 9th grade education, so the gap in the math education I have recieved and the math that is used in 3d programming is huge. So first I hunkered down and learned what a vector was, then I hopped my butt into the math channels on IRC and explained what I was trying to do, and can someone hook me up with a formula please?
Nothing to it. I think a monkey could write code. Logic is everything. I spend so much more time trying to figure out how to get my hands on something (like control 'a' relative to control 'b') than I do trying to figure out how to solve my problem that it's not even funny.
Quaternion Rotation still gives me fits though.
Micah Czar on April 1, 2009 1:43 PMOops, I should have used the words test in reference to programs instead of prove but the idea is similar. To mathematically prove that even the most trivial software is always correct is a tall task. If there are just 32 if statements in your program then there are 2**32 possible different states that your program can be in based on a statement being either true or false.
o.s. on April 1, 2009 1:44 PMI've come a computer science major and I detest math... none the less, I took a whole lot of it. Way, way more than I ever use (assuming I even remembered how to use it).
It all depends on what area of computing you do... for most, I suspect a strong understanding of advanced math is overkill but absolutely nessassary for a select few.
Kris on April 1, 2009 1:59 PMJeff... You sound EXACTLY like those people in the TV show Numb3rs who complain that maths won't help us catch this killer.
TraumaPony on April 2, 2009 2:03 AMno one has ever tried to localize... I had to stop reading right there. You should be teased about that one for a long time. Please tell Joel that you deserve to be the but of a joke on your podcast.
Theres 10 localized symbols for 3 on this page:
http://en.wikipedia.org/wiki/3_(number)
Ian on April 2, 2009 12:53 AM
Jeff PWNED...
:)
Do mathematicians believe in god?, i Know programmers do...
:)
I'm curious if Jeff is ever embarrassed that he is always misinterpreting things and making terrible generalizations. I guess it gets all of us into an intriguing conversation, so it's not all bad.
chris on April 2, 2009 2:44 AMGuys, give jeff a break..whatever he writes on blog need not be 100 % accurate and correct all the time...if he learns that something is wrong he will correct it..
after all he is also a human being and a fellow programmer...he also makes mistakes just like any one of us...
so go easy on him..
The real reason I feel the best programmers have a strong mathematical foundation is because such a base is required for understanding the real performance of your code. It's difficult to optimize a method/function/routine/etc if you don't possess the skills require to analyze the running time of said algorithm. Yes, most people can figure out that a for loop is O(n) but as soon as you start talking O(n ln n) lots of people's eyes cross...
http://en.wikipedia.org/wiki/Big_O_notation
Jeremy on April 2, 2009 2:59 AMWell.. your post don't follow from your title. It feels rather like something Are competent programmers more likely to be 'mathematically inclined'?.
If ability of logical thinking is seen as a part of mathematics I would definitely say that it helps.
Since I work on the web side of things (for a small e-commerce company) most of the actual math works is of the 1+1 variety.. but lately some statistics have begun to creep in (which is interesting and somewhat fun).
(I also like to believe that I have a nice understanding of my native tongue (and an acceptable level of understanding of English).)
Berserk on April 2, 2009 3:05 AMTo the people who think it's always ok to learn the maths just in time: Let's compare this to physical skills.
Would you take anyone seriously if they said they'd learn to swim just before taking a job as a lifeguard? Or someone learning to sew when they get a job as a seamstress?
Some minor maths you can pick up on the spot, but many tasks require too big a chunk of maths to learn like that, and almost anyone who thinks they can do it is simply overestimating their own abilities. (Sure, our lifeguard friend can learn to swim in a week, but he'll be rubbish at it, and he's not going to save anyone's life).
mac on April 2, 2009 3:10 AMLearning math made me a lot better as a programmer.
Hell, once I was trying to figure out a physics problem in a commercial piece of software I was writing while in college, and realized the solution was actually held in the calculus lecture I'd attended the day before.
Don't underestimate math at all.
Bill on April 2, 2009 3:14 AMWTF? What are you talking about? programming is not about programming, but about communication skills, so please stop wasting our time and write something usefull. How to control people?,How to humiliate your boss? - thats the kind of programming related articles we would all need to be better programmers.
mark on April 2, 2009 3:19 AM@Grom..
For people asking about the right way to learn math. Have a read of http://www.maa.org/devlin/LockhartsLament.pdf
Really Excellent article..
I now understand the beauty of math...forget programming...i love math now..
i have wasted 13 years of my schooling in the math..OMG...
one more thing..
MATHEMATICS IS ART AND SO SHOULD PROGRAMMING BE...
WE ARE DOING THE SAME TO SOFTWARE ENGINEERING AND COMPUTER SCIENCE..THAT WE DID TO MATHEMATICS IN SCHOOL...
WHAT A SHAME!!!
There's no point responding either way. This is just a traffic-building post. The smackdown approach indeed. I'm glad our academia shuns it.
Either you're mathematically trained programmer, and from your experience you think that it'd be nice for all programmers to have that training and you've sure found it useful and you've sure noticed other bad code that could be better if the guy didn't try to reinvent matrix multiplication.
Or you're not mathematically trained, and you're defending yourself because you may not have needed the training (although it begs the question that without the knowledge, how can you know what you've been missing)
pffft on April 2, 2009 3:57 AMI had a coworker once who had a masters in math from a prestigious school. He could code for sure, but nobody else could decipher his code. It was the classic massive method sort of thing (thousands of lines). It was as if he thrived on mastering large problems. He was creating problems (large puzzles) as he was solving them.
As has been said (http://blogoscoped.com/archive/2005-08-24-n14.html), good programmers are lazy and dumb.
Brad on April 2, 2009 3:58 AMfrom my experience during college:
people whose really good at math (by I mean really good, they really are like born to be a mathematician, not just someone whose diligent enough), they learn about how to code faster (much faster actually) than someone whose just have an average math skill.
I think it's because programming mostly are about abstract thinking and reasoning, something that a mathematician's brain used to.
The one job where I really used some of the (multitude) maths from university was my first, where I worked with music DSP software. Apart from that, knowledge of boolean algebra is always useful and set theory applies to database design. I do however belive that studying mathematics developed my analythical skills, which I use every day.
Jens J on April 2, 2009 4:08 AMNiyaz PK: I do not consider web development anywhere near REAL programming.
You must have missed this post: http://www.codinghorror.com/blog/archives/001216.html
Brad on April 2, 2009 4:15 AMI had to integrate a function once when writing some AI code. There wasn't a lot of math in my part of the AI, or anything like that. The integrated function wasn't too complicated once I worked it out.
I just needed to recognize that the quantity I needed was a cumulative value of a function over time -- the area under a curve. If I didn't have exposure to calculus, I don't know how I would've recognized that fact or solved the problem.
Math is like any other systems science. Write enough code and you're going to run across it.
Trav on April 2, 2009 4:46 AMMath is hard, let's go shopping! http://www.codinghorror.com/blog/archives/001172.html
Sorry, just had to. :)
Rick Brewster on April 2, 2009 4:49 AMWhat about every time you've needed to figure out the big O complexity of your code?
Do you work with recursive or dynamic algorithms? What about basic data structures like trees, hashtables, and heaps? You need math to be able to understand their running time and correctness.
Certainly, someone can put together a CRUD web application without understanding any computer science or math. However, the same person might not be able to hack:
1. The basic data structures he uses.
2. The database management system his data is stored in.
3. The kernel
4. The compiler or interpreter he uses for his programming language.
All of those things I listed have components that require some understanding of CS and math to grok. Parsers in programming languages are often implemented as a dynamic algorithm for instance...
Do you really count as a programmer if you don't understand computers or algorithms, but can only program in a narrow domain that has no complexity?
Brendan Miller on April 2, 2009 5:10 AMI see maths as a metalanguage build on a natural language. Mathematicians redefine terms (tree, family, free, kernel, etc.) which have their mathematical meaning and relationships. it goes from simple redefinitions to complex theories.
On the other side, science (like physics) tries to modelize the world: it goes from complex to simple; which also helps the computer scientist (see domain driven design for example)
IMHO, mastering the math metalanguage as well as the physics modelling help the computer scientist.
StÈphane on April 2, 2009 6:16 AMWriting a plotting api [1] is a good example of where one might need some math. Trigonometry, Hermite curves, boundary calculation, etc.
[1] http://linil.wordpress.com/2008/09/16/cairoplot-11/
Rodrigo Araujo on April 2, 2009 6:34 AMProgrammers don't need to be mathimatically inclined, but they also shouldn't be adverse to math. When a programmer tells me they're not into something (like math) I think that's a shame. I can't relate to them anymore. Why exclude a whole block of subject matter b/c you're not interested in it or afraid you won't be good at it. You said we should constantly be learning, that includes math, it excludes nothing.
Mike on April 2, 2009 6:43 AMMath at the very least trains analytical thinking and problem solving. Most of the, I change that, all of the great programmers that I've worked with were really good at math.
if we're going to talk about math, let's get out of the abstract and into the specific. Let's talk details. Examples. What could be more math-y than that?
Yeah, what Jeremy said about this, except that I'm not certain you don't know what you're talking about... it could be just a slip of the tongue.
Out of curiosity, are you really familiar with upper-level mathematics? I hope so, because otherwise you are writing a review of a tool you have never used.
Ian Maxwell on April 2, 2009 7:13 AMIt is the other way around today.
Should competent mathematicians be above average programmers?
dbasnett on April 2, 2009 7:18 AMWhat code have I personally written where a detailed knowledge of math made your work easier? I had to fit sensor response curves into an insanely small eprom, so I had to create a multi-segmented Taylor series algorithm as a mechanism to fit the curves and develop the coefficients...just for instance. Web jockeys that are throwing textual data around might not have much math to do, but all of us scientific and engineering programmers sure do. I once spent 2 months playing with Mathmatica trying to come up with an approach to a programming problem. And what about game programmers? They eat trig for breakfast, I'd imagine.
scafativ on April 2, 2009 7:29 AMI remember that when we have learnt Gaussian elimination at school, I was absolutely convinced that I never ever would use that in my future life again - OK, then I didn't know yet that I would make my living as a computer programmer. Then, at a web (!!!) development job many years ago, I had a complicated 3x3 system of linear equations, remembered the algorithm, but not the name - it was with classic.asp, and I solved the system by hand. The result was 2-3 screen pages of algebra and dozends of pseudo unit tests verifying the intermediate formulas (some of them failing due to rounding problems) - but the software worked. Later, I discovered that there exists software called CAS or computer algebra system.
Now I'm working on an asp.net intranet web app at another company, and I had a hard time trying to convince my boss that a linear equation with boundary value constraints for some variables is not linear no more and cannot easily be solved for another variable. I ended up with a mixed solution, partially algebraically solved, partially with an iterative approximate solution. The dissent remains, but as long as the results are OK, there's no point in going through the profoundities of implementing inequality solvers (no, things like that don't exist at all in the sooo cool .net library).
What sometimes drives my crazy is the absolute impossibility to explain the unsettling primitivity of the so modern state-of-the-art best-of-all-worlds .NET framework (using C#) with regard e.g. to linear algebra (I must admit that I have studied computational linguistics at university where we have learnt Prolog) to most of todays programmers. They even claim that a function returning a delegate is a function returning a function (Ever heard of C pointers? Yes, that existed in ancient history. Delegates are sooo much better, really the ultimative thing!). These are the people which will never grasp what a CAS is for, which never have seen the beauty and usability of 4GL KI languages like Lisp and Prolog (#8222;These are only for scientific purposes!#8220;).
But that's why I always was the programmer who was charged with those programming tasks these people couldn't accomplish at my former job (which I left for differen reasons).
@dbasnett I think you are starting to get to the nub of the issue. The biggest math nuts I have ever know were impossibly awkward when it came to real life problems.
I suspect that the proposition needs to be reversed. While mathematicians may claim logic as their own, applied logic (and common sense) is, I suggest, the lingua franca of all the great programmers/system developers.
Mathematical skills are too often equated to a very limited set of capabilities, far short in my mind of the skills required to be a truely great programmer.
Even programmer is, in my world view, not what we are talking about. We are talking about people who can enter chaos, see patterns where others see noise, and then reduce their understanding to an algorithm - or implementation - that a machine can repeatedly perform for the benefit of others.
There is nothing inherit in that process that requires specific mathematical ability (although it may, in certain domains). The core is logic and pure reasoning ability.
Which is why - and I offer myself as a great example - we find programmers who are effectively multi-lingual in many programming languages, but struggle with even one additional human language. Programming languages are in effect just subtle variations of an expression of distilled, pure logic, whereas human language is in only the most superficial sense logical.
I love human language, and always wish I spoke many more than I do; but in learning languages, and leaning programming, I recognise the two share nothing other than the vulgar use of the word language.
Paul on April 2, 2009 7:58 AMI agree that COMPETENT programmers don't need to be mathematically inclined, however, one will never be a skilled* programmer without great math skills.
* read: able to code efficient and robust software.
How else would you (just a few examples):
- Put several controls in a UI container and move around them in columns and rows on a resize.
- Update the hue or color on a progress bar or other mechanism depending on status.
- Use user selection on an array of items to affect bit-type flags using 2 to the Nth power.
Sure, you can use conditional statements or other mechanisms for this, but then it's neither efficient to update and sometimes to run, nor is it robust: i.e. doesn't require logic code changes to update.
In short, math over conditionals or other similar mechanisms doesn't require the logic to be updated when expanded. Use these lesser methods and you will be competent. Use math, and similar forward thinking approaches, and you will be skilled and your software will be smoother, sleeker, and easier to update.
David on April 2, 2009 8:03 AMMathematically inclined is not to be confused with knows math.
By mathematically inclined Dijkstra meant having the kind of intelligence that would allow one to do well at math if one had the need or desire to do so. Not because one needs to learn math to do programming, but because one needs the same kind of intelligence.
The thought processes involved in constructing a mathematical proof are similar to those involved in constructing a program; the thought processes involved in finding the flaw in a proof are similar to those used for finding the bug in a program. The same thought processes used in polishing a proof to make it more elegant are used in refactoring a program to make it simpler and easier to understand and modify. The same thought processes used in learning a mathematical notation are used in learning a programming language or API.
Frank Silberman on April 2, 2009 8:40 AMProgrammers maybe, but what about configuration managers or such?
Silvercode on April 2, 2009 8:50 AMThe Dijkstra quote is that programmers should be mathematically *inclined*. I think the point was not that they be know a lot of math or even that they like math, but that they are the sort of people that, if motivated, are good at learning and understanding math.
I just noticed Frank made the same point above... ::sigh::...
There is such a strong disagreement about terms, and no one's mentioned it.
If you're talking about basic arithmetic, sure. Everyone needs a fundamental understanding of the stuff. If you're working on a computer, a decent understanding of binary representation / operations (and a very good understanding of floating-point limitations) is helpful.
But the real help, for me, was several years of abstract math PROOF courses, the ones that are usually for math majors. That is where you see proofs, written in english (or whatever, but not foolish symbols/code), in set theory, group theory, graph theory, measure theory, and so on. It is where you deal with the first examples of complexity (is a countable infinite set, such as the integers, the same size as an uncountable infinite set, such as the real numbers? Proof that no one-to-one mapping exists between the two.), transformation of a problem into a smaller or already-solved problem (... which reduces to the lemma we already know is true, so we know the problem we're trying to solve is proven, also.)
The years of work with this, build some basic intuition and also give you useful tools.
I was given a nasty programming task, one that looked like weeks of work on an ill-specified set of requirements that were guaranteed to change. Worse, it was a financial application in which a mistake could result in lawsuits. (There was a guarantee that, post-implementation, the customer would change the requirements.)
How to do this, without truly shoddy, bug-ridden code? It turns out that all of their special case requirements could be translated to a problem dealing with equivalence classes in sets, and the robustness of the solution could be traced to the robustness of the translation of the problem. A proof in one area translated to a correctness assertion in the design for the code. Implementing the code itself was an hour using a simple table-driven code, easing maintenance.
When they changed the requirements post-installation, with more special cases, the engineer installing the code needed to add a couple of entries to a table and restart the application. He charged them a lot of money to do it, too. :-)
Jeff Bowles on April 2, 2009 9:25 AMNote that he specifically says native tongue, not English. Which makes me wonder why all of Dijkstra's most important writings were in English, not his native Dutch.
In fact, Dijkstra's essay about semaphores was written in Dutch.
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD00xx/EWD74.html
Reference: Wikipedia article on semaphores,
http://en.wikipedia.org/wiki/Semaphore_(programming)
JMW on April 2, 2009 10:00 AMThey teach math all wrong in school. Way, WAY wrong.
Yes, in American schools they certainly do, but it's typical of an ugly American to assume that whatever is done in the US is done world wide.
I moved to the States from Germany in my teens and started 9th grade here. At first I thought they were kidding when the math teachers expected me to memorize formulas to apply to math problems. Sadly enough, that is apparently the norm in schools here. Instead of teaching kids how to logically analyze a problem, they teach kids to memorize formulas. No wonder our kids suck at math!
I've always been good at math, as long as I can remember, and I believe it does help me with programming. However, maybe logical thinking and problem solving analysis are the important parts that apply to programming.
Dennis on April 2, 2009 10:17 AMPeople usually say what's important is the thought patterns math teaches. I think what they're trying to say is that what you need is good logic skills. As a commenter above notes (mistakenly thinking that this is evidence of the importance of maths) De Morgan's laws of logic are the sort of thing you'd use when refactoring.
James on April 2, 2009 10:25 AMProgrammers should understand discrete math really well because you're always dealing with sets, functions (domains and ranges), and relations whether you like it or not.
Steve Goguen on April 2, 2009 10:40 AMI agree with Dijistra... and a lot of people that has given specific examples of math being used... but I still feel a canonical example is missing.
Set Theory.
If you have write a SQL data manipulation statement, then the better that you are at math set theory, the better you will manage databases. Otherwise, go back to cursors and treat your data server as a glorified dBase storage... or google about it.
Jorge Varas on April 2, 2009 10:52 AMThere is math and there is math.
In North America math is mostly about formulas.
In Eastern Europe math is mostly about reasoning and proofs, from very early (11-12 years old kids do proofs, some fairly ingenious!). Numbers are one of the things you can do proofs about.
It's a huge difference between the two views.
The german encryption machine (Enigma) was broken by a team of mathematicians. Not because they had to do heavy arithmetic (their calculations pretty much stopped at counting) but because they were used with the type of rigurous reasoning required for the task.
Rumunski Programador on April 2, 2009 11:33 AMThere is math and there is math.
In North America math is mostly about formulas.
In Eastern Europe math is mostly about reasoning and proofs, from very early (11-12 years old kids do proofs, some fairly ingenious!). Numbers are one of the things you can do proofs about.
It's a huge difference between the two views.
The german encryption machine (Enigma) was broken by a team of mathematicians. Not because they had to do heavy arithmetic (their calculations pretty much stopped at counting) but because they were used with the type of rigurous reasoning required for the task.
Rumunski Programador on April 2, 2009 11:33 AMMath has been marginally useful to me in my career (understanding how good statistics work can help; big-O is a lot easier once you understand series) but I believe having been a physicist in a past life makes me a much better programmer. The experimental method makes you a better debugger, and in general a healthy dose of skepticism is a programmer's best asset.
Bertrand Le Roy on April 2, 2009 11:49 AMI forgot most of the advanced maths I learned in school, but I had to relearn some of it since I started developing my map making software: a href=http://igorbrejc.net/kosmoshomehttp://igorbrejc.net/kosmoshome/a">http://igorbrejc.net/kosmoshome/a">http://igorbrejc.net/kosmoshomehttp://igorbrejc.net/kosmoshome/a
Mostly trigonometry, nothing too fancy.
Igor Brejc on April 2, 2009 12:52 PMI expect 'the math requirement' is due to the origins of programming. The first essential use for computers and thus programming was to solve complex mathematical or physical problems (enigma, Manhattan project, moon landing). You can't really solve partial differential equations with a computer if you do not know how to do them by hand. E.g. error estimation of numerical methods do require some math.
Now programming is ubiquitous. I think it was Clay Shirky who compares it to typing. There are hardly 'typists' anymore, and soon there will be no more 'programmers'. Of course there will always be people writing compilers, but most 'coders' will be people writing tools for their not-so-mathematical profession. (See also todays post on www.freedom-to-tinker.com about programing for law professors.)
The most important thing programmers should know is the 'big O notation' I think. But this mainly trickles in through 'leaky abstractions' (see Joel's Spolsky's article), which might improve in future programming languages.
Personally, as an astronomy PhD student, math is kinda required. But again not as part of the programming an-sich, but for the things to actually implement. (All in English BTW.)
BertBert on April 2, 2009 1:16 PMYou might not need actual mathematical theories or constructs in day-to-day programming, agreed. But it seems evident to me that a strong analytical background and thinking is a big plus, even a must for good programmers.
So I don't think mathematically inclined is to be interpreted too narrowly, but rather in the sense of having an analytical view of the world and the problems to be tackled. A natural reflex to view a problem in terms of its technical solution is just the foundation a good programmer needs.
wwwald on April 2, 2009 1:22 PMWhile a programmer doesn't necessarily have to know calculus and the like, it's crucial to know and do all the pre-calculus stuff correctly, to know the numbers as they are in the purely abstract domain and in their purely concrete and limited incarnation in the computer hardware and software. Somebody who doesn't know if he should add 1 to a value or subtract or do something else to index the right array element can never be a good programmer. Somebody who doesn't care about overflows, underflows, and loss of precision can't be a good programmer. Somebody who can't estimate the complexity of their own code can't be a good programmer. Those who can't pay attention to detail can't be good programmers. Somebody who can't prove their code is right mathematically/logically, by a good test or a combination of them can't be a good programmer. And a good test often times assumes some good math background or math inclination too.
I have seen so much crappy code, it's unbelievable. And often times it was crappy because it was written inattentively with very lax math and the authors never bothered to actually prove its correctness or adequately test it. They just hoped it would work and it appeared to until put under scrutiny.
My math background and inclination has helped me to understand and correctly implement well-known algorithms, modify them to suit my needs, invent my own algorithms, write mostly correct code, debug code, test and review code (not only mine), find bugs in code, optimize code. Had I not had that, I would've been a disaster, not a programmer, let alone a good programmer.
Anonymous on April 2, 2009 1:25 PMAnd I even dare to say, programming isn't for math challenged.
Anonymous on April 2, 2009 1:28 PM//I think most programmers are smart enough to learn whatever math they need just in time to attack the problem at hand.
Have to totally agree with you...
Jaskirat on April 2, 2009 1:31 PMno one has ever tried to localize... I had to stop reading right there. You should be teased about that one for a long time. Please tell Joel that you deserve to be the but of a joke on your podcast.
Theres 10 localized symbols for 3 on this page:
http://en.wikipedia.org/wiki/3_(number)
The first person who can lucidly explain Reed-Solomon encoding using just their high-school math and a bit of stuff they picked up because they needed it wins a prize.
You don't need math to write something like StackOverflow, because the clever people already provided you with all the tools and the platform.
Maybe when StackOverflow's search is as good as Google's Jeff will have made his point.
Will on April 2, 2009 1:59 PMyour an idiot.. didn't bother to read the whole post either
name on April 3, 2009 2:38 AMdidn't realize it was april fools ;_;
jokes on me .. as usual
name on April 3, 2009 2:39 AMWikipedia says Knuth isn't dead. yet.
Jake McGraw on April 3, 2009 3:20 AMWe seem to have very different ideas of what maths is - to me Maths is a right brain activity, from final year school onwards. Aesthetics are very important for proofs - beauty is one of the key things a professional mathematician is looking for, and it's the main reason many advances are made. How the blogger you quote could imply that abstraction isn't a key part of maths I don't know.
It isn't obvious why maths is interesting or relevant - that's why a lot of people don't learn it. In my experience though, most maths is largely irrelevant for programming - worst case get the requirements documented by someone that knows the stuff. However the skills and abstraction you learn from doing high level maths are probably as useful as some of the skills you learn in a CS degree. And of course, maths is much more interesting than programming.
Andrew on April 3, 2009 3:32 AMI think language and thinking skills are infinitely more important than math skills. Documentation and clearly written code are much more important than advanced theory and calculus.
Data Recovery Software on April 3, 2009 4:27 AMIn my experience, maths competence was a barrier. Almost fell at first hurdle: how do you make sense of a=a+1 ?
Just the wrong language to start with. a := a + 1 made a lot more sense back then. ;)
Vinzent Hoefler on April 3, 2009 4:42 AMSee what happens when I go away for a week ñ Jeff posts a bizarre post like this and thereís little point responding as there are now over 200 comments.
But if you are still reading this, could you clarify what you mean by
ìOn the other hand, I have not found in practice that programmers need to be mathematically inclined to become great software developers. Quite the opposite, in fact.î
What is the opposite of the first sentence? That you need to be a great developer to be mathematically inclined, that being mathematically inclined will mean you wonít become a great developer, or that you need to not be mathematically inclined to become a great developer?
By the way, I'm surprised you didn't comment on this quote,
ìIt is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.!î
Steve W on April 3, 2009 6:04 AM@Steve W
On the other hand, I have not found in practice that programmers need to be mathematically inclined to become great software developers. Quite the opposite, in fact.
What is the opposite of the first sentence?
Well clearly, he *has* found in practice that programmers need *not* be mathematically inclined to become great software developers.
That you need to be a great developer to be mathematically inclined, that being mathematically inclined will mean you wonít become a great developer, or that you need to not be mathematically inclined to become a great developer?
I believe that none of these count as a direct opposite. I'm pretty sure one's a complement, but I couldn't tell you which one without consulting a logic textbook.
I think you need to understand the math behind the application domain you are working with. If you are doing google maps, graph theory is vital. If you are doing heuristic approximations you need numeric calculus. Programmers need to know boolean (binary) logic, because sometimes the abstraction leaks up ( http://www.joelonsoftware.com/articles/LeakyAbstractions.html )
Hoffmann on April 3, 2009 6:48 AMI use math all the time when programming. Not really because it's math, but because it's a pattern language too. If you can relate a complex problem to a mathematical model, you often get free solutions, or at least a different perspective on it and the ability to simplify it.
Some examples:
Estimation software, just need to implement the formula, but still need to understand the guts of it.
Multilingual content synchronization without a master language. Based on set and graph theory.
Probabilistic caching strategy.
Do you really need math to be a good programmer? Certainly not, but there are some solutions you may not find by yourself.
LP on April 3, 2009 7:01 AMFor webprogramming you should be mathematically declined. It's sufficient to concanate strings together. All Jeff Atwood's applications is just string concatenation and some sql, and a odd bit of regular expression. Nothing wrong with that. I'm not saying I'm a tad bit better than him, actually a lot worse..
codemonkey on April 3, 2009 7:06 AMBlah, blah, blah...higher level math = abstract non-linear thinking. It's all been covered so I won't go into it. That said...
I once changed a truly horrendous sort algorithm to a binary sort. The sort went from taking over two minutes to less than two seconds.
I think the programmer before me never got past Algebra 2.
Emily -- not a spammer on April 3, 2009 7:41 AMHow on earth did you come by the idea that mathematics was primarily a left-brained activity? We grok SQL and set theory with the same bits of gray matter. Without that, a person will only ever be a cookbook programmer.
Math, music, and computing all involve making use of formal systems to express creativity. These three aptitudes are a statistical cluster.
Paul Murray on April 3, 2009 8:10 AMIn my experience, maths competence was a barrier. Almost fell at first hurdle: how do you make sense of a=a+1 ?
David on April 3, 2009 1:16 PMMy definition of math seems to be broader than yours Jeff. To me the best part of math is logic and space perception. Those are definately something a programmer needs. When writing anything nontrivial, like designing the database or business logic of even a small application, the ability to visualize it all in your head is essential.
But I'm also with you on the right-side-of-the-brain argument. To be able to enjoy programming and designing programs/databases/UI's/whatever requires that one sees it as a form of art or self expression. You try to communicate with others through your creations. And that's art to me. That's why it always amazes me when I meet programmers who just don't care...
But I'm probably preaching to the choir here.
Antti K on April 4, 2009 2:54 AMAs with many such questions, the best we can really do to answer them is to carry out carefully designed studies.
But just to add some not-too substantive speculations, I think (but can't confirm, since who really understands the functioning of their own brain?) that math has helped me abstract more easily, as suggested by some previous posters. I also wasn't able to properly handle and understand recursive algorithms until I grasped proof by (weak and strong) induction. But my hunch is that beyond specific applications, knowing high level mathematics isn't hugely helpful to effective software engineering though it is certainly necessary for _computer science_.
I also think it is necessary to deflate both Jeff and Steve Yegge's overoptimism about picking up math on the fly as necessary. 3 cases which are unlikely to be comprehensible to 99% of programmers without quantitative backgrounds (unless they did several months or years of background study) include mathematical physics used in high-end visual effects and physics simulation (not real time physics game engines) in movies, advanced statistical algorithms and stochastic analysis, and cutting-edge image processing of the type developed mostly by mathematicians (not engineers and computer scientists) that involves high-end mathematical analysis. In fact, quantitative software developers in the finance industry have traditionally had backgrounds in quantitative disciplines like physics, financial engineering and math, not CS or SE.
While I heartily agree that it is no requirement to be skilled at math to be an competent programmer, I will submit that any able programmer has the potential to become a skilled mathematician. You did allude to this in your post. Although I agree that programming requires a good right brain this is true for mathematics, too. The great mathematicians are incredibly creative. But in the end, whether we like it or not, all programming ends up being a logic problem. And all math too. All good programmers have in common with mathematicians that they are excellent logicians.
Eric Z on April 4, 2009 1:19 PMDijkstra wrote in English because that's where the audience is, and knowledge of math helps understanding stuff like recursion, functions, pointer arithmetic, memory management and logic in general. Despite of what you guys might think, your math knowledge is worlds ahead of the average person.
LKM on April 5, 2009 6:12 AMI wish Jeff spent more time reading comments. He seems to write, maybe read a couple of the first comments once in a while, then move on. He only reads what's put into books and that's a terrible shame. So many of these comments are much more informed and therefore informative than anything he writes.
I've also noticed an increasing trend of the articles being increasinly narrow in focus and argument. I'm beginning to think that the articles are being constructed for the simple purpose of getting arguments happening, which will get more visists, more blog reactions and therefore more advertising $$. That's a shame because previous articles were more rounded.
Philip on April 5, 2009 7:27 AMI have to say that, yes, competent programmers should be mathematically inclined. A few examples:
- Once as an exercise we had to process an array of numbers which was a stock price over time, and the program had to figure out at which time to buy one of it, then which time to sell it afterwards, to maximize profit (of course, it's not a realistic scenario since we're doing an a posteriori analysis, but bear with me here). Some people could do no better than brute force their way out by trying every possible difference that made sense, so they had O(n^2) programs, while by keeping track of the right info it is possible to do it with a simple linear scan of the array*. Then the scenario was complicated with one buy, one sell, one buy, one sell (necessarily in that order). Brute force, in O(n^4), was no longer reasonably feasible, and I was the only one who figured how to do it with a linear scan. Mathematics give you the insight that There Might Be A Better Wayô, and the tools and confidence to prove that your linear scan always gives the optimum; mathematics is not just about how much is cos(1/det(dJ0(t,x)/dtdx)) (not a real formula), it is also demonstration theory, number theory, calculability theory, etc.
- Floating point. Don't get me started on this. Take http://stackoverflow.com/questions/717994/how-to-handle-multiplication-of-numbers-close-to-1 for $DEITY's sake. Anyone with a little knowledge of floating point limitations would have instantly known that they should store the numbers in their x-1 form, and make the product by adding the stored forms, adding on top of that the product of the stored forms if he suspects it may not always be neglectable. Someone with a good knowledge of numerical analysis ( http://en.wikipedia.org/wiki/Numerical_Analysis ) may, if he figures out the loss of precision would otherwise be catastrophic (if for instance, while the product of the stored forms are individually neglectable, their final sum may not), add extra precision by storing the numbers in their log(x) = log1p(x-1) form (log1p(a) does log(a+1), without loss of precision if a is small compared to 1) and add the stored forms, doing something equivalent to the multiplication at better precision (log(x) + log(y) = log(x*y)); or better yet, he would rewrite the abstract algorithm to get rid of these problematic computations and instead implement an equivalent algorithm that is resilient to the loss of accuracy caused by floating-point rounding.
- while control theory ( http://en.wikipedia.org/wiki/Control_theory ) is not mathematics, it is chock-full of them. If you receive data from the network and decide, depending on the amount of buffered data, to play back content more or less fast, you're creating a feedback loop, possibly without even realising it, and if you're not careful, you may end with an unstable system (in the sense that it will spontaneously oscillate)!
Programmers should not necessarily know all these mathematics, but enough knowledge to recognise when they're in one of these situations, because otherwise they will not even realise they're in a situation that require a good grasp of the mathematical concepts involved, and end up painfully rediscovering them. That is why I have issue with your Maybe I'm a hopeless optimist, but I think most programmers are smart enough to learn whatever math they need just in time to attack the problem at hand. Even a smart programmer, if he is missing the mathematic culture necessary to recognise the hole he's digging himself in, will waste who knows how much time in that hole. This, by the way, is pretty much the same thing as the usual how much CS is actually useful for programmers? debate: without the traditional CS stuff, they are not going to recognise they're writing a O(2^n) algorithm or that their memory usage patterns have horrible locality.
So I think programmers should be mathematically inclined enough to recognise when they should be researching more mathematics for the task at hand, and that requires enough mathematic knowledge and good mathematic (and scientific) culture.
Pierre Lebeaupin
*you keep track of the minimum value encountered so far and its location, which you init with the value first item and 1, and of the max difference and the location of the pair that gives it, which you init with 0 and (1,1); you start from the second value; for each new value in the array, you check if it is strictly smaller than the recorded minimum, if yes you update the minimum value and its location; if not, you take the difference of the value with the recorded minimum, and compare it with the max difference recorded, if it is strictly higher, you update the max difference value and location of the pair, the latter with (location of recorded minimum, current location). Once you are done scanning the array, the result is the current state of the location of the pair.
Pierre Lebeaupin on April 5, 2009 9:44 AMI'm pretty lucky to here another programmer talking about math like me. I always say math shouldn't be a programmers love, especially while talking about efficiency and how to solve realtime performance problems. It's always hard to tell a math-oriented programmer how to solve a problem by the computer way (math which is important to understand how to processor can do it, not how the mathematician does it).
Kekskiller on April 5, 2009 11:48 AM1) Big help to programmers, systems, and communications people:
combinatorial analysis, graph theory, queuing theory,
I've used Taylor McLaurin series to deal with formulas that start with terms that almost cancel each other out. That happens a lot in dealing with error rates in long messages in communications.
Logarithms: Calculating a value on the Poisson distribution involves multiplying two factors and dividing by a third. The first can be very small. The other two can be very large. The Poisson function in MS Excel does not handle parameters that cause the small factor to be smaller than the smallest number or the large factors to be larger than the largest number. Combining the logarithms of the 3 factors makes it possible to handle vastly larger parameters.
Now if there were a way to let you use the your own VBA functions as functions in the spreadsheet....
David on April 6, 2009 4:08 AMI wish Jeff spent more time reading comments.
There are only so many hours in the day.. I do try to read all the comments.
Jeff Atwood on April 6, 2009 11:29 AM@Jeff I stand corrected.
Although off topic I was trying to work out why resent posts seem so one-sided and less rounded and sometimes controvertial. The first through was pure advertising $$. But now I'm wondering if Jeff is moving on from being a questioning novice to owning his own opinions based on his reading and understanding. To the opinions seem narrow because they are a specific point of view. Regardless -reading the comments is the best way to get a broad understanding of the topics.
There was a specific question:
What code have you personally written where a detailed knowledge of math made your work easier?
Off the top of my head I'll list 10 that simply wouldn't have been possible without kowing mathematics. Most are a maths process so mandate mathematical understanding, but having a detailed knowledge of the underlying process meant that I could write the code in the most efficient manner.
1. Any base to Any base conversion (up to whatever base the character set can support - such as 64 (email/xml), 128, 256, or even 95,221).
2. Encryption and security (including some hacking - not cracking)
3. Server Performance Analytics - not watching numbers but performing statistical tests to determine significant changes in performance.
4. Error detection using confidence intervals (using Normal distribution through a Bayesian outlier approach).
5. Fudged figure detection using Benford's law.
6. Accounts Receivable collection distribution analysis for cash flow predictions and determination of collection efficiency.
7. Network throughput measurement and estimation using Poison distribution.
8. Revenue/growth prediction utilising multiple regression.
9. Rounding of generic BI graphs using pythagorean rounding.
10. SQL programming. I believe that the structure, indexing, joining and selecting in SQL requires a high level of multi-dimentional mathematical thinking. This includes both OLAP and Relational databases.
I run a small (4 people) web dev shop and I'm finding that younger coders haven't had the pleasure of writing assembler or managing without library functions.
You know, it's funny. In all this excitement on the internet lately about how good programmers don't necessarily NEED to go to college, and how good programmers don't necessarily NEED to know math, everyone forgets the importance of a college degree.
I have to take classes dedicated to assembly to get my computer engineering degree. That means I'll at least have the pleasure of experiencing this type of coding before I graduate, which is why my degree has this mystical value that nobody without one will admit.
Matt S. on April 7, 2009 8:08 AMTwo math/programming stories from the same lab:
A guy stepped into my office with a problem: the code for a 3D vision problem was slow and unreliable, and required human oversight (no pun intended). Immediately I said there's a better way. I don't what it is, but I know it's there. Thirty seconds later I caught up to my intuition: what had been done as vector calculus could be done as group theory, fast, discrete and certain.
Some time later the same guy came to me with an optimisation problem that was eating a LOT of cycles. I came up with a method borrowed from quantum mechanics -- that's right I said quantum mechanics -- and reduced a search that had taken just over a month to a few minutes. It was the biggest optimisation I've ever done, before or since (and it was later torpedoed by the same guy, who was bucking for a promotion and didn't want any big successes in our group that didn't have his name on them).
My point is that just in time doesn't work. If you've thought about the math beforehand you'll see these things. If you haven't, you won't know what you're missing.
P.S.:
Dijkstra: The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity.
Maybe I'm just professionally immature, but I think that anthropomorphic terminology can be a very concise and elegant way to discuss computing systems _when_used_correctly_. It's when people don't know enough of the subject to tell a bad metaphor from a good one that things get cloudy.
Beta on April 7, 2009 11:05 AMBack at school (tech college) my instructor mentioned that all we need to know is add, subtract, multiply, and divide. Any other formulas from there the person requesting the program would give us the formula. Granted this is a tech college where the focus is a person writing business applications, not the next Quake. But to this day the fanciest thing I had to do was a mod().
Also, I HATE MATH CLASSES to this very day.
Mike Wills on April 7, 2009 12:56 PMWhen I was in High School, I was a complete art freak (painting, sketching, etc) with a passion for computer programming and absolutely no interest in Math which I subsequently dropped as a subject on.
When it came time to develop my first 3D Engine, let's just say that missing all that Math class was a bit of a bummer. I had to teach myself Trig to get the job done. Needless to say, I managed in the true spirit of Coding proving that programmers are smart enough to learn whatever math they need just in time to attack the problem at hand.
They teach math all wrong in school. Way, WAY wrong.
This rings a bell - I wonder how much easier (or at least, interesting, and therefore motivating) it would have been if it had been anchored to reality rather than presented as a bunch of abstract problems?
BTW Right-brain/Left-brain is apparently a myth that grew up around some experiments involving people whose brains had been split in half (literally). Not did the results not apply to a normal brain, it is an example of how the popular press remains decades behind science.
Paul Coddington on April 13, 2009 12:32 PMI wonder how much easier (or at least, interesting, and therefore motivating) it would have been if it had been anchored to reality rather than presented as a bunch of abstract problems?
But, to bring this back to the origional question, if someone is not interested in abstract problems, are they going to be a competent programmer?
Steve W on April 14, 2009 5:20 AMYes.
Preeti Edul on April 14, 2009 10:42 AMI agree with Edul
mattbg on April 15, 2009 1:29 PMIf you look at work done over the last 300-400 years in approximating pi (for example) you will see how the idea of creating a working AND beautiful / elegant solution for something in maths is pretty analogous to the idea of coding.
Sure most of the work in programming is the daily bread and butter hum-drum but that work is not why people become programmers. If you LIKE (or LOVE) programming you'll quite likely LIKE or LOVE maths as well once you get beyond the simple calculational operations (that a decent computer program can do for you anyway because good mathematicians / programmers worked out how to en-code them).
Salubri on April 24, 2009 6:02 AMJeff, I find most of your articles shallow. This is yet another one. Its almost like u don't understand the deeper meaning of things around you. I won't add in another comment abt the specifics of this article, 'cause ppl above have just hammered you. Its amazing tht ppl still flock to read your trash.
ratz on May 27, 2009 1:05 PMThis was a good "article" if you will. I'm glad I read it.
Anyhow I have my Bachelor's & Master's in Computer Science and my MATH is horrible, but I can program very well. It all depends on the person and getting the job done in my book. I agree there are many different ways to get the job done some less/more efficient than others but at the end of the day its a matter of making the customer happy.
What the hell are you all damn woodpeckers talking about?!? :))
Have you programmers never tried to read The Art of Computer Programming (TAOCP) by Donald E. Knuth.
Really... From my point of view if you manage to solve most of the exercises in that book(s) you can assume that you know the mathematical tools sometimes necessary in programming.
207BottlesOfBeerOnTheWall on July 23, 2009 6:48 AMA distinction between programming and computer science is necessary for this discussion. Historical quotes might confuse the topic a little bit because of how far the two have diverged in the modern day. And then even within programming there is such huge variation in the nature of endeavors. Programming might mean writing macros in VBA to one person while it means writing numerical approximations to QED problems in C to another.
Since the usage of programming is so vague, hard and fast rules about programmers seem futile at best.
Ryan Shannon on February 6, 2010 11:15 PMI don't think the correlation Dijkstra was referring to between math and programming has anything to do with actually using math in your programs. Rather it's that the logical problem solving techniques and skills that a mathematician uses are the same as those that a programmer uses.
Carton on February 6, 2010 11:15 PMThere's plenty of math that's useful or even necessary. The problem is that we think of it as computer science rather than math. Like others have said - probability, set theory, number theory, graph theory, formal languages, automata theory, logic, etc. (and of course the basics like arithmetic and elementary algebra and coordinate geometry).
And other branches of mathematics are less useful, unless you're specifically dealing with them: calculus, real and complex analysis, abstract algebra, non-Euclidean geometry, etc.
But this just goes to show you that to even ask the question is kind of silly. To try to divide math into CS math and non-CS math is kind of pointless.
Jon on February 6, 2010 11:15 PMI ordered this book about Art and programming, and wound up needing to get a minor in mathematics to understand it. It really helped my coding, though.
Pat Morrison on February 6, 2010 11:15 PMBack in my day, people believed math skills were required for any kind of scientific pursuit, biology, chemistry, computers. It is probably true, but it discourages those kids who may not excel at computational math (doing math in their head), but can understand higher math concepts given the crutch of a calculator.
I remember my mom telling me I couldn't be a scientist since I wasn't good at math.
There are lots of different types of programmers needed in this world. We need far more than we can currently supply with our educational program. To fill this need, we need to open up the field even to people who failed calculus. There are some types of coding you can do without knowing higher math. Basically, math skills shouldn't be a requirement - it discourages far too many young people from pursuing computer science and/or software engineering. You probably do need math for computer science, but not so much for software engineering.
You need some math to be a project manager, but it's not complicated math.
Shannon Davis on February 6, 2010 11:15 PMTo follow up - reading more of the comments - I do think you need algebra and problem-solving skills - like the dreaded word problem is a perfect example of understanding a problem (requirements) and having to go through logical steps to come up with an answer (the solution).
I was thinking of math as either really high math, taught on college-level to math majors - beyond algebra and geometry. Or I was thinking of it was simple calculations. I know for a fact that you can't trust me to subtract double-digit numbers in my head. But I can solve a logic puzzle. It's the logic puzzle solving bit of the left brain that makes me good at what I do, not the ability (or in my case, inability) to calculate/compute sums quickly.
I guess it's like reading. Some people read slower than others. All programmers need to be able to read. But if you aren't a speed-reader, you don't get disqualified from the job.
Shannon Davis on February 6, 2010 11:15 PMThis statement is highly inaccurate. Logic is a topic within math, and creativity is needed in proof construction, a core skill.
@Delmania Logic is a branch of Philosophy, not math. Study your history please.
I had a Math instructor once (many years ago) who loved disproving mathematical formulas to the class using Logic. He wanted us to know that the two are very different creatures. It would be more fair to say(although still incorrect) that math is a subset of Logic.
Wolfmandragon on February 6, 2010 11:15 PMThe comments to this entry are closed.
|
|
Traffic Stats |