Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Math Programming

Math Skills For Programmers — Necessary Or Not? 609

An anonymous reader writes "Currently, the nature of most programming work is such that you don't really need math skills to get by or even to do well; after all, linear algebra is no help when building database-driven websites. However, Skorks contends that if you want to do truly interesting work in the software development field, math skills are essential, and furthermore will become increasingly important as we are forced to work with ever larger data sets (making math-intensive algorithm analysis skills a priority)."
This discussion has been archived. No new comments can be posted.

Math Skills For Programmers — Necessary Or Not?

Comments Filter:
  • by Anonymous Coward on Thursday March 25, 2010 @03:58AM (#31607882)

    The one with more math is the one you want.

    • by Fluffeh ( 1273756 ) on Thursday March 25, 2010 @04:08AM (#31607928)
      I did the highest level of maths in my Australian higher school certificate, but didn't really do much in the way of physics at school or Uni. Even with what I am programming in my spare time (a space based build/conquer/explore type game) I am finding that I have to resort to buying coffee for friends that DID do physics and higher levels of maths at Uni to get some of the formulas I need to work out the things here. Also, I work with numbers ALL day pretty much at work (Senior Performance Analyst for a multinational) - so I ain't exactly derpa derpa derpa when it comes to numbers.

      Can I google and find the formulas? Sure, yeah, but do I have the level of understanding with all of Kelper's Laws and bits to change them to what I want for my game? Nope.

      Anyone who says that maths isn't needed for a programmer is utterly kidding themselves - or working at the low end of the food chain.
      • by Thanshin ( 1188877 ) on Thursday March 25, 2010 @04:16AM (#31607976)

        do I have the level of understanding with all of Kelper's Laws and bits to change them to what I want for my game? Nope.

        You needed to change that bit for your game?

      • by smallfries ( 601545 ) on Thursday March 25, 2010 @05:42AM (#31608340) Homepage

        I'd go further than that - most chunks of maths are things that are absolutely essential for some area of programming. You may not need to know everything all of the time, but for any particular task you will need to know some of this (non-exhaustive) list :

        Statistics - useful just about everywhere, but in particular if you have to do any kind of data analysis in your work. Knowing particular distributions and how to compute the properties of them is essential.

        Probability - if you use any kind of randomness in your work this is essential and in quite a few places where you don't deliberately use randomness but you are using non-determinism to model lack of knowledge i.e packing and filling of sparse data-structures.

        Algebra - the daddy. Knowing a simple formal language that lets you rearrange expressions is an essential first step towards understanding a programming language. The more you learn the more it will help. If you head down to the Category Theory end of the pool then Monads and Arrows come in useful if you swim away from imperative languages and find something more interesting.

        Logic - the other foundation. Learning to apply logic is relevant in any area of programming as it is an elementary part of programming. A deeper understanding of propositional and predicate logics is essential to do any work in compilers and will aid your understanding of control and data-flow in any language that you work in.

        Linear Algebra - anything that touches the "real world" requires a bit of LA, as the parent mentioned physics, 3D graphics and I would add Vision to that list.

        Set Theory - these are your basic building blocks, use them well. Whether it is building the right data-structure or using a database this is the foundation that you need to understand.

        Graph Theory - some people never need anything more complex than a relational database, but some people only care about the relations. If you want to model any large network (the internet, or social interactions, economics), or perhaps programs within a compiler, or just the relationships between discrete objects then you will either learn some Graph Theory first, or rediscover it yourself the hard way.

        Combinatorics - counting is fun! Counting (and enumerating in the programmer's sense) complex objects is basic problem that crops up in almost every area. For people without some grounding in combinatorics it is the kind of question that will get kicked up to the "office guru".

        Now, if only maths graduates could program their way out of a wet cardboard box, then we could truly start designing giant flame breathing killer robots.

        • by HungryHobo ( 1314109 ) on Thursday March 25, 2010 @06:10AM (#31608432)

          Programming as a skill in itself is totally separate from most of those .

          But to be a good programmer you don't just have to be able to write good code- you have to be able to write good code which does useful things and unless you have a decent understanding of a few of the above you're going to be missing a number of very useful and powerful tools.

          • by Opportunist ( 166417 ) on Thursday March 25, 2010 @06:24AM (#31608476)

            I dare to disagree. Programming is basically putting algorithms into a form a computer can understand. Nothing more. And where do these algos come from?

            It baffles me to no end every time I see "programmers" apply who consider math as some sort of secondary skill. It's not. It is the primary skill for a good programmer. I do not need someone who can "translate" my algorithm into code. I need someone who can take my problem and develop an algo for it. Coding it is the most trivial part of the solution.

            • by smpoole7 ( 1467717 ) on Thursday March 25, 2010 @07:53AM (#31608804) Homepage

              I dare to disagree. Programming is basically putting algorithms into a form a computer can understand. Nothing more. And where do these algos come from?

              It baffles me to no end every time I see "programmers" apply who consider math as some sort of secondary skill. It's not. It is the primary skill for a good programmer.

              .

              Absolutely. And an old dog like me can even provide a classic example: older OS's like DOS and CPM had to cram a lot of functionality into a relatively small amount of memory. They also had to perform decently on small, slow (by today's standards) processors. The approach that they used was the vector table.

              Simply put, the functions were numbered in order: get OS version was typically the first (function 0), and successive numbers were for all of the other important functions: open file, write file, get system time, and so on.

              Now: can you imagine how inefficient that would be if the original programmer had used a "switch" statement (or the assembly equivalent, with a bunch of "compare and jumps")? Instead, the function number was left shifted (equivalent to multiplying by a factor of two), then used to find an index in a vector table that contained the addresses of all the functions. Neat, compact and lightning-fast.

              This technique is still used today in small embedded processors that suffer from similar low speed and limited memory problems. I used it myself on a small controller in a contract job back in the 1990's. It allowed me to cram everything (read keyboard, activate relays, check temperatures, and more ... even including a quick and dirty "config" option ... in a PIC micro with 2048 bytes of memory. :)

              I have never met a really good, really world-changing programmer who wasn't also good at math. Not necessarily with high-end math, but just good at the fundamentals of algebra, and with the ability to "think" in numerical calculations and offsets.

        • Re: (Score:3, Interesting)

          Those are all things I did as a CS undergrad, but there was also huge importance put on proofs. Everyone is talking about writing good code doing useful things quickly, but (and this is especially important in real time applications, such as autopilot on planes), if you can't prove that the code you have written is going to do what you want 100% of the time or its not 100% accurate, then really what is its worth. Maths is vital (ok not if your connecting up a website, although it does have applications in
          • if you can't prove that the code you have written is going to do what you want 100% of the time or its not 100% accurate

            Bah! If it works on my machine, my work is done.

          • by DMUTPeregrine ( 612791 ) on Thursday March 25, 2010 @01:10PM (#31613296) Journal
            Proofs are somewhat overrated: you CAN prove that code matches a formal specification, but you can't prove that the specification is correct.
            “Beware of bugs in the above code; I have only proved it correct, not tried it." -- Donald Knuth
            You're right about the maths being important though.
      • Re: (Score:3, Interesting)

        by Blakey Rat ( 99501 )

        I think people are looking at the problem wrong.

        Programming is programming; it's a discipline independent of anything else. It involves logic, but not math. (Unless you include logic in math, in which case the answer to this question is "duh" and there's no point in having this discussion.)

        If you're writing a program in a domain where math is important, for example calculating spaceship orbits or rendering 3D graphics, then math is important. This is also kind of a duh.

        But here's the fun part: if you're wri

    • by ghostdoc ( 1235612 ) on Thursday March 25, 2010 @04:40AM (#31608108)

      Actually the one with better people skills is the one you want.

      Maths is great for some coding problems, I'm not saying it isn't, but you rarely bump into a commercial coding problem that requires any degree of serious maths. I've been commercial coding for nearly 20 years, and I've hit a maths problem 3 times (and the last two were solved by a half-day of Googling).

      But you will bump into a people problem in commercial coding. Every. Single. Day. Knowing how to cope with those is massively more important (and Google can't help you with them).

      But the article wasn't really talking about this. The article was talking about becoming a Great Programmer.
      To become a Great Programmer, don't spend your days coding CRUD websites. You're never going to build/discover something amazing while doing commercial coding.

    • Re: (Score:3, Insightful)

      by Aceticon ( 140883 )

      As selection criteria, Professional Experience/Proven Skill pretty much trump everything else.

      (Think about it, who would you rather have, the guy with 10 years Software Engineering experience in the field or the one just fresh out of university with a Maths Doctorate)

      After that you'll go for people which can work well in a team.

      Maths is a nice to have, but except for very specific domains (such as Quants and other positions where you're creating Algorithm engines), it will never outweight Experience and Tea

  • Absolutely (Score:5, Insightful)

    by deisama ( 1745478 ) on Thursday March 25, 2010 @04:04AM (#31607902)

    Math KNOWLEDGE may be debatable, but Math skills are essential.
    If you don't have the ability to break up and solve mathmatical formulas, how do you expect to be able to solve complex programming tasks?

    Plus linear algrebra is awesome. And everytime I do anything even remotely 2d or 3d related, I always wish I had paid more attention in Geometry.

    But more than anything, its good to know that there's an equation for that. Even if you don't remember what it is, or how it works, having the simple knowledge that it exists to look up is more than worth the time of taking the class.

    • YES! Math skills are essential. It's not what you know, but your ability to solve problems. Problem solving is the key. However, as you said, having knowledge is important too.

      There can be two types of people. The math nerd (high math skills), and the programming geek. A combination of these would be great, but, who do you think would make it in the LONG RUN?

      • Re:Absolutely (Score:5, Insightful)

        by Thanshin ( 1188877 ) on Thursday March 25, 2010 @04:11AM (#31607944)

        There can be two types of people. The math nerd (high math skills), and the programming geek. A combination of these would be great, but, who do you think would make it in the LONG RUN?

        The first who marries the CEO's daughter.

        • by Antony-Kyre ( 807195 ) on Thursday March 25, 2010 @04:33AM (#31608084)

          That would be the math nerd... the one who knows how to multiply.

        • by Moraelin ( 679338 )

          Reminds me of a quote by Gene Fowler, "Keep the company of bums and you will become a bum. But hang around .with rich people and you will end up by picking up the tab and dying broke".

          Especially given this kind of survival of the assholiest when it comes to who gets to be a CEO in the first place: Is Your Boss a Psychopath? [fastcompany.com]

          Don't assume that these guys care about you just because you married their daughter. Not about that daughter in the first place. Or about anyone else than themselves, really. If they did,

    • Re: (Score:2, Insightful)

      by Hognoxious ( 631665 )

      Plus linear algrebra is awesome. And everytime I do anything even remotely 2d or 3d related, I always wish I had paid more attention in Geometry.

      That's nothing to do with programming itself. That's to do with the subject you're programming about - the problem domain.

      You could program perfectly well just knowing how to add, subtract, multiply and divide if you worked on (yawn) accounting systems.

  • by TheRagingTowel ( 724266 ) on Thursday March 25, 2010 @04:05AM (#31607906) Homepage

    Another person who is ill defining mathematical thinking. I consider mathematical thinking not only Linear Algebra, Infi et al, but everything that requires exact abstract thinking and has the properties of consistency and a formal and defined "language" to represent ideas.

    For that matter, I think that mathematical thinking should be defined more broadly, such as conceiving design ideas and representing them with, say, UML or DFDs as mathematical thinking as well.

    So yes, mathematical approach is a must in programming.

    Just my 0.02c of course.

    • by julesh ( 229690 )

      I consider mathematical thinking not only Linear Algebra, Infi et al, but everything that requires exact abstract thinking

      Exactly. You need to understand maths to, for example, predict what a particular SQL query will do, or to perform any more than the most basic reasoning about how two parts of a program will interact. Maths is a lot broader than dealing with numbers and vectors.

    • by TheVelvetFlamebait ( 986083 ) on Thursday March 25, 2010 @05:13AM (#31608232) Journal

      Just my 0.02c of course.

      In a world where people contribute an ostentatious $0.02 to a discussion, you are contributing 0.02c. Your humility amazes me sir!

      That, or you're just incredibly stingy. ;-)

    • Re: (Score:3, Insightful)

      by smallfries ( 601545 )

      but everything that requires exact abstract thinking and has the properties of consistency and a formal and defined "language" to represent ideas.

      So you have redefined "maths" as computer science : the study of formal languages and their computational properties....

      So yes, mathematical approach is a must in programming.

      ... and then you point out that programming requires your redefined maths, which is actually CS. So yes, programming does require CS.

  • They Help (Score:4, Insightful)

    by ShakaUVM ( 157947 ) on Thursday March 25, 2010 @04:06AM (#31607916) Homepage Journal

    It really does help to have math. There have been times when a software solution became ten times easier because I recognized it from a college math class.

    Contrawise, when I work on software that uses math beyond my ability, I have trouble debugging it, and constantly have to rely on the math person I'm working with for help.

    • People are saying two things here, and thinking that they're mutually-exclusive. Some point to areas of commercial programming beyond basic CRUD operations, saying that math would be a big help there. Others point out that for standard CRUD and gluing together pre-written software libraries, math skill doesn't much matter either way.

      Hey, they're BOTH right. However, the trend is moving toward the latter type of programming job. Forget high-level math... I seldom use my COMPUTER SCIENCE skills on the job

  • more than just 2+2 (Score:4, Insightful)

    by saiha ( 665337 ) on Thursday March 25, 2010 @04:09AM (#31607934)

    I would hope that if you are in the computer programing world you understand that cranking out solutions to formulas is way more suited to computers than it is to humans.

    If you want to solve a bunch of math problems then boot up maple, matlab, or any number of programs.

    Doing a bunch of calculus or whatever is _not_ the reason that you want mathy people to be computer programmers. Analyzing and quantifying problems, applying appropriate algorithms, optimization, etc are all areas where someone who understands the math behind a problem can far outshine those who don't.

    To be honest though I think most software devs are into math anyway.

    • by moteyalpha ( 1228680 ) on Thursday March 25, 2010 @04:19AM (#31607996) Homepage Journal
      Absolutely. I do blender and if I didn't understand vector rotation and normals it would be virtually impossible to any good work. You can get the computer to do the heavy lifting, but you have to know what you are asking for. The advantage that exists now is that if anybody is weak on math skills, MIT and others have plenty of open course ware to cover the bases all the way to multi variable calculus.
  • by TheKingAdrock ( 834418 ) on Thursday March 25, 2010 @04:12AM (#31607948)
    ...but it's not the kind of math you might be thinking about, like calculus, etc. Rather statistics, discrete math, combinatorics, etc. are becoming essential skills if you want to be better than average.
    • by gravos ( 912628 )
      Calculus is a foundational skill for analysis of algorithms [mit.edu], which is a bare minimum requirement if you want to work with Google-sized datasets.
  • by Statecraftsman ( 718862 ) * on Thursday March 25, 2010 @04:16AM (#31607978)
    Math is necessary for programmers but also for life. That wasn't the best thing in TFA though. The most insightful nugget in this piece was that we should think strategically about what we choose to learn. One the one hand, a programmer can chase the buzz...Rails, Struts, and the Twitter API and get jobs with the cool kids. Far better is to learn general tools that will be around a long time. This is why I like free software and gnu/*nix. The community has built a core set of tools(scripting/database/web) that stands to be around for 20-50 years or more. Just something to think about as you build your programmer/sysadmin toolset (assuming programming/sysadmin work isn't just a temporary thing for you).
  • No one's going to argue that you need to understand arithmetic, basic algebra, maybe even some geometry, statistics, and trig depending on what you're doing. That's true frankly not just for computer science and IT, but for any even semi-technical field. But integral calculus? Differential Equations? Nonsense. But yet most colleges require two to three years of calculus for CS majors. A lot of this is probably because CS is part of the Engineering department and it's easier to just make the core requi
  • I aint never taken much to cypherin but it t'aint stopped me hankerin to be a brain surgeon and that's whats I'll be, soon as I finish the fifth grade!

    Signed
    Jethro Bodine.

  • For graphics you obviously need trigonometry. Lots of things we used to develop earlier is now available as free libraries. Much more important then advanced mathematics is, IMHO, having good estimation of how will certain solution or algorithm perform in various situations. This is developed in programmers head with time.
  • If you're asking... (Score:3, Informative)

    by vikstar ( 615372 ) on Thursday March 25, 2010 @04:30AM (#31608058) Journal

    If you have to even ask that question, then you won't get a programming job that requires math skills. You'll be the bottom of the barrel in your programming group, and then a few of years later promoted as their manager because you can't do any of the technical stuff but are great friends with the boss, or you'll end up doing system support swapping out tape backups and fixing printer jams.

  • From my experience I found the understanding of Mathematical Logic [wikipedia.org] to be absolutely essential for any programmer.
  • Yes and no (Score:5, Insightful)

    by poor_boi ( 548340 ) on Thursday March 25, 2010 @04:32AM (#31608074)
    Asking if math-skills are necessary for a programmer is kind of like asking if people-skills are necessary in the field of law. Some lawyers find success by performing in the courtroom and for the camera, while others find success in their skills with research, interpretation and analysis.

    "Programming" is a massive category. Some programmers need incredible math skills to do their jobs. Some programmers convert thousands to hundreds with broken substring operations [experts-exchange.com], then keep their jobs, and make good money doing it. So there's a spectrum.

    But if I had to hazard a guess, I'd guess that the majority of programming jobs out there don't require very much mathematical heavy lifting. And often times if you do run into something that could be tricky, it's already been solved by someone else, complete with copy and paste source code.

    Yet many programming jobs do require serious math skills, and probably (hopefully) always will.

    TBH I don't know if some of the best software engineers I've met are any good at math. They're good at interpreting API documentation, good at structuring code to meet the strengths of the language they're using. Good at project planning, time estimation, and risk analysis. Good at understanding how computer and network systems work and -- often more importantly -- how they fail. They understand how users interact with software, and what users expect and want.

    The truth is, software development has become as broad as life & human interest itself, and generalizations about the practice are becoming more and more meaningless.
  • here is an interesting video with leslie lamport ( http://en.wikipedia.org/wiki/Leslie_Lamport [wikipedia.org] ) : http://channel9.msdn.com/shows/Going+Deep/E2E-Erik-Meijer-and-Leslie-Lamport-Mathematical-Reasoning-and-Distributed-Systems/ [msdn.com] "When you understand something, then you can find the math to express that understanding. The math doesn't provide the understanding." “The mathematics of computing; things like sets and functions and logic, are to computing what real numbers are to physics.”
    • by epine ( 68316 ) on Thursday March 25, 2010 @07:01AM (#31608624)

      Leslie Lamport's contributions should be more widely appreciated. He has the knack for reasoning very hard about apparently simple problems that aren't as simple as they first appear. This is a distinct mathematical talent from being able to solve tricky integrals. It's surprisingly hard to reason about computational processes in a completely convincing way. The effort does wonders for the correctness of my embedded code. Note that with the modular behaviour of integers, the normal rules of algebra don't always apply (this shows up most often dealing with pygmy integers).

      Long ago when I was a beginning C programmer I managed to implement a simple binary tree in a wonky way. My comparison operator was deterministic, but didn't form a full order. The tree seemed to work fine. I could add elements and test for membership, it was all golden. Then I tried deleting an element. This worked. But I noticed something funny about the tree afterwards. Since my comparison operator was not a full order, the tree rebalance operation following a deletion could orphan some elements so that they wouldn't be found.

      I showed this to a coworker who told me "What are you worried about? It mostly works doesn't it? Your tree insert and membership test passes doesn't it? We need to move onto another task." But I was stubborn and a voice inside me went "this can't be right". Element inserts and searches in that system were common (like #define in C) but deletions were fairly rare (like #undefine in C). That broken code could have been out in the field causing nightmares for a long time before we tracked the problem down. Half an hour of consternation later, I had figured out how I butchered the order operation in violation of the full order requirement. I had cases where A B && B C && C A. This is not good for a binary tree with deletion. The nasty part is that it limps along further than you expect.

      In that same job I had an improperly initialized pointer that scanned through a memory data structure comparing on a string field on some odd field size such as 23 bytes. (Sue me for my youthful indiscretion if you've ever had to label diskettes by compiler phase). Strangely, the pointer scanned several hundred k of memory not part of the table, then properly aligned with the table it was supposed to find, and returned the correct field. It seemed to work under testing, but I noticed the performance was a bit odd in some cases. This lead me to investigate and I found the unitialized pointer. Once again, if this code had been released, it was a ticking time bomb the first time some random values in low memory simulated a match with the search key.

      I learned a lot in that job about defensive programming. A couple of years later I came across one of Dijkstra's books and the spark jumped from his finger to mine. Bugs have been a rare event in my code ever since. Dijkstra taught me to think properly about all possible orders of statement execution where the program remains correct. The order you first write isn't necessarily the only one that works. The mental discipline is a lot like classifying all the components in your BBQ kit into formal symmetry groups before you begin assembly. It pisses me off immensely when I miss some obscure drill hole and conclude that two panels are entirely identical, only to discover much later they weren't (usually after I've pounded in those flimsy plastic wheels that resemble a hip joint with rickets).

      Try next time *before* assembling the BBQ to formally write down the symmetry group for every little flim flam and see if you can still F up the first assembly. I bet you can't.

      What it comes down to is that math is an attitude as much as a skill. I tell my GF from time to time that math is fundamentally the attitude that 100% of what you don't understand is smaller than a grain of rice. How many programs have I screwed up because of a big mathematical mistake? Can't think of any. Going way back, how many times have I screwed up

  • From sorting data efficiently, to calculating statistics, to drawing geometric shapes.

    Programmers should cherish the mathematics and abstract thinking - it's the only part of our expertise that is guaranteed to remain useful until retirement, when all our favorite languages have become either obsolete or unrecognizable. (And visual interface design has been rendered obsolete by brain implants. :P )

  • The thesis in TFA is that developers are mostly busy building CRUD code and 'websites' and that if you don't want to get completely tired of it 5 years down the road, you need to do other things, possibly just for yourself (because at work you only are building CRUD/websites) and then come up with problems where math is King, and this is so that you will get more 'respect' like those great software guys like Dijkstra, Knuth etc.

    Well, I'd say if you are only doing CRUD/websites now and that's it, you should

  • Set theory (what you need to understand to make effective databases, for your "database driven website") is still mathematics. There's more to mathematics than linear algebra or differential calculus.

  • People who are good at math tend to be good at logical thinking.

    Similarly, people who are good at logical thinking tend to be good at math.

    Relevance? To be a good programmer you need to be really really good at logical thinking - without it, you'd take way too long to "crack" a problem or devise a new algorithm or plan an inheritance hierarchy, etc. A strong background in math is therefore advantageous, but is not an absolute necessity.

    It boils down to what exactly you are coding. If you are writing a

  • by headLITE ( 171240 ) on Thursday March 25, 2010 @04:52AM (#31608166)

    You don't need math skills for programming work.

    You do need them for theoretical computer science, and in turn, you need theoretical computer science to invent something new that you could program. Most programmers don't do theoretical work themselves, and most theoretical computer scientists don't finish their software ;-) It's a completely different type of job.

  • by DaScribbler ( 701492 ) on Thursday March 25, 2010 @04:55AM (#31608172)
    A coder with great math skills can write some really slick algorithms. However, more often than not, despite how well their algorithms are documented, if they're working with a team of developers they are usually pushed to dumb down their code so as to accommodate the skills of everybody else on the team ('team' more accurately meaning 'project manager') to make it more 'readable'.
  • Count the loop nesting, look up any well-studied algorithms, and don't be a dummy about computation/storage hidden behind layers of object-oriented obfuscation. It's easy.

    Seldom does anybody need to determine things down to the last byte or CPU cycle. You can't do that anyway unless you use something like assembly. In the time you might spend improving your estimate, computers will get faster and your software project will get later.

    Just doing rough estimates puts you way ahead of everybody else, allowing

  • by unity100 ( 970058 ) on Thursday March 25, 2010 @05:01AM (#31608190) Homepage Journal

    most of programming inevitably consists of creating logic constructs in algorithms. if this happens it has to be that, but also if that happens with that and it also has to be this and that and so on. they constitute the backbone of programming. anyone lacking understanding of logic would have a hard time. the rest, can easily remedied - we have innumerable libraries, classes, frameworks performing many complex mathematical operations. its better to have very strong logic, and make up for the rest with this approach, and efficient. furthermore, you can receive interdisciplinary help, hell, even help from internet in that regard, if you come up with some problem that has to be solved with a math equation. a mathematician can also help you with that. but the rest, the logic part, you gotta be sharp at that.

  • What I would like to know is what are the best resources to learn math? I find wikipedia's math pages are written in such a way that they are pretty near impossible to read, they are all technical accuracy and no explanation.

    Are there better resources that don't involve taking 3 years off work to go back to university?

    • Wikipedia's entire mathematics section is pretty much useless for learning new concepts--its only value is as a reference for specifics about things one already understands well. Hell, even when I look up stuff I already know their explanations of it often make no sense to me.

      MIT OpenCourseWare, maybe?

  • Next month marks my having worked professionally as a programmer for twenty years.

    That is all.

  • Yes, you will have to have *some* understanding of math, but how much and what kind is really dependent on what you are developing. If it is a database fed, scripted web page, the required calculus won't be that much compared with a missile guidance system or a 3D rendering engine / driver (because it is a completely different problem domain).

    In most development cases you have to break down complex problems to many simpler ones to make it maintainable. This breaking down strongly reduces the math complexity

  • Skorks contends that if you want to do truly interesting work in the software development field, math skills are essential and furthermore, will become increasingly important as we are forced to work with ever larger data sets (making math-intensive algorithm analysis skills a priority).

    It partially depends on the definition of "Truly interesting work".

    The point of math skills is mostly that they are problem solving skills. You want programmers to have those skills.

    I think the point of 'ever larger dat

  • by amn108 ( 1231606 ) on Thursday March 25, 2010 @05:41AM (#31608336)

    ...which often benefit from a fruitful relationship. That said, I would point out that in my experience programming and mathematics are two distinct disciplines, and neither requires the other. You really can be a professional programmer without knowing anything beyond the most basic arithmetics.

    Programming is application of pure logic, the latter isolated from the all but basic mathematical concepts. Mathematics is application of logic in a specific manner which springs from simple arithmetics and has evolved into own world, not in the one of the most important "worlds" we have.

    One important remark would be that programming is often APPLICATION of mathematics, which is one case where the two disciplines cannot, for a time being, be separated. In that case, one obviously needs a programmer who is also a good mathematician.

    Also, obviously, given two programmers with equal programming skills, pick one with the better math skills over the other, if no other qualities affect the choice. It is like picking any other job candidate - you pick one with more qualifications, even if these apply only remotely to the field of work the company does. And since mathematics is a close cousin here, the choice should be obvious.

  • yes, you need math (Score:3, Insightful)

    by AlgorithMan ( 937244 ) on Thursday March 25, 2010 @06:16AM (#31608452) Homepage
    • Just look up, what the "relational" in "relational database" means... it stems from purest mathematical logics!
    • You need linear algebra and even up to full algebra (anisotropy) for 3d engines
    • artificial intelligence has lots to do with mathematical logic
    • most optimization problems have to do with graph theory - and logic
    • randomized algorithms: pure probability theory
    • string processing, regular expressions, compiler generation: lots of automata theory (which is closely related to graph theory)
    • deep, deep analysis for running time bounds (esp. for recursive programs)
    • lots and lots of logic for semantics
    • etc. etc. etc.

    without profound knowledge of math, you are a tinkerer. you program off the top of your head. To really, deeply understand what you are doing, you need math!

    • by ascari ( 1400977 ) on Thursday March 25, 2010 @06:54AM (#31608586)

      Pizza analogy: You can't work in a pizzeria without profound knowledge of chemistry

      Car analogy: Automotive engineers are the best drivers, the rest are tinkerers

      General: Tool makers vs. tool users

      Just because most (all?) programming is based on mathematics it doesn't necessary follow that math is essential or even particularly important to the practice of programing. It could be argued that problem domain knowledge plays a similar role. For example, one could equally plausibly contend that without a profound knowledge of banking you shouldn't write banking software. In my experience hiring managers prefer domain knowledge over generalist skills such as math. Personality is another biggie.

      I suspect that the tone of this thread is reflecting the prevalent commodization of programming. We wish that smarts, maths skills etc. are important factors, so we can feel good about ourselves, feel smart, important whatever. In reality very few of us will ever again have jobs where math skills are truly important. Dumbing down? Maybe. Some might see it as a natural consequence of the fall of the "priesthood" that ruled computing decades ago.

  • math is no help? (Score:5, Insightful)

    by l3v1 ( 787564 ) on Thursday March 25, 2010 @06:51AM (#31608568)
    linear algebra is no help when building database driven websites

    Oh for [whatever]'s sake, who on this earth started spreading the "wisdom" that all apps are database-driven web applications that do nothing more than displaying user-input two-line texts with images and videos?

    I could list dozens of algorithms - even from my day-to-day use - that nobody on this earth would be able to correctly and efficiently implement without proper math skills. And even the term math is too broad, natural language-related stuff, image/video/vision content processing stuff, simulation stuff, overall machine learning stuff plus ai-related fields, control systems - and I could just go on forever - don't come without their associated - sometimes fairly deep - math topics.

    The social web will come and go, but apps and algorithms that do something even remotely useful, won't ever be accomplished by math-knowledge-lacking code monkeys.
  • bottom line (Score:3, Insightful)

    by AlgorithMan ( 937244 ) on Thursday March 25, 2010 @07:12AM (#31608658) Homepage
    the bottom line is: yes, you can use libraries (for this, you don't need much math), but to be a GREAT programmer, you need to be able to program things yourself (for this, you need math). If you can only piece together other peoples code (which you don't even remotely understand), then you are a tinkerer. It will be complete coincidence, when your code works reliably and fast.
  • by Livius ( 318358 ) on Thursday March 25, 2010 @08:32AM (#31609060)

    There's no reason that "most programming work" and "truly interesting work" would have anything in common.

  • What part of Maths ? (Score:5, Interesting)

    by Nicolay77 ( 258497 ) <nicolay.g@gMENCKENmail.com minus author> on Thursday March 25, 2010 @08:39AM (#31609122)

    Mathematics is a huge field with lots and lots of small ramifications.

    You may want someone who understand statistics for your SEO stuff.

    You may need someone who knows calculus for a physics simulation.

    You need someone who knows a lot of linear algebra if you want to write a search engine.

    You probably need someone who knows about concrete mathematics [wikipedia.org] for almost all the rest.

    For everyone who thinks that they do not use maths when programming: what do you think regular expressions are?

It is easier to write an incorrect program than understand a correct one.

Working...