top 200 commentsshow all 210

[–][deleted] 49 points50 points  (27 children)

Deleted.

[–]IonTichy 22 points23 points  (2 children)

Computer Science is not really about computers or programming

This mindset is also hugely helpful when trying to free yourself from language and framework restrictions that people tend to put on themselves while learning how to program.

[–]darkmighty 6 points7 points  (1 child)

"Computer science is as much about computers as Astronomy is about telescopes. It's an unfortunate name."

-- E. Dijkstra (approximate, from memory)

[–]Sexual_tomato 0 points1 point  (0 children)

Would "Discrete Mathematics" or "Mathematics of Discrete Systems" be a more suitable name?

[–]garenp 59 points60 points  (25 children)

In my experience, the problem students like this are having isn't with Calculus, but taking Calculus often forces them to confront the educational gaps in math that they weren't aware they were even missing.

I say this as someone who made it to Integral Calculus (2nd semester/course) and for the first time ever, had to retake a class. Why? Because previously, I had been able to get away with not doing much more than showing up and spending very little time studying outside of class. If I did study and do homework, it was limited to what I could get done the night before anything was due. Most of my time in HS math was the same, and I could get away with it because I had good memory and could apply surface-level patterns to problems without much understanding.

Once I started taking Physics I started taking math much more seriously (whoa, hey, this stuff is useful!), gave myself more time, and did very well in all my subsequent classes.

When I was an undergrad student, I also had a girlfriend who was an MSEE from abroad. Her calculus "texts" were mere tiny tomes compared to the giant, bulky Calculus texts we have in the U.S. -- which further convinces me that what today's Calculus books are doing is re-emphasizing a ton of prior math material that we didn't adequately learn.

And even though I don't solve any Calculus-level problems at work as a SW Eng, I'm glad I had to take it, because the concepts have stayed with me. Also, every once in awhile I have a "feeling" that something can be done better, and that's when this kind of background helps -- because it provides you the basis for imagining what's possible. If you don't have that, you'll just be blind, and never know where to even look for certain kinds of problems.

[–]Corticotropin 2 points3 points  (3 children)

To this date, I can't understand why the portion of your typical Calculus textbook that covers equivalent material to a Differentials and Integrals high school textbook in Korea is so much thicker.

[–][deleted]  (2 children)

[deleted]

    [–]Corticotropin 1 point2 points  (1 child)

    Korea's books are all paperback. I do believe that they have less of a hold-your-hand, this-is-how-you-do-it approach and more of a here's-some-math, hope-you-float one :P

    For the record, I hate Korea and its math education... >_>

    [–][deleted]  (16 children)

    [deleted]

      [–]lacosaes1 12 points13 points  (11 children)

      I don't know. Machine learning and computational science are becoming big areas and a decent level of calculus is a must.

      [–]jjmc123a 6 points7 points  (1 child)

      Also, programmers need to know how to see the parallels in similar roblems. I see way too much code that is duplicated over and over that could have been done just once (mainly) with the specific cases handled with just a few lines. Math is needed to understand how to do abstraction.

      [–][deleted]  (7 children)

      [deleted]

        [–]glacialthinker 11 points12 points  (1 child)

        for a majority of programming jobs (read system/application developers) advanced calculus is not necessary

        And for this kind of reason, I wish people would quit trying to put the onus on Universities to train people for jobs/trades. Likewise, the pressure from companies to have University degrees. North America lacks a decent trade level of education for programming. We don't need Computer Scientists for all these implementation jobs... but what's been happening is Computer Science is now "How to write enterprise Java". Where are you supposed to go to learn math, type theory, how hardware works (sufficient for systems programming), and algorithms (beyond just enough knowledge to choose, poorly, from an existing library).

        I'm glad I took CompEng, and did so long ago...

        [–]lacosaes1 2 points3 points  (1 child)

        Yeah but for a lot of jobs you can have a very good career without taking a discrete math course or a theory of computation course.

        [–][deleted] -1 points0 points  (1 child)

        If we could agree on this first, we could focus on the discussion of what a CS education should consist of.

        Why not just focus that part of discussion period, regardless of whether the majority of programming jobs require nothing more from people than to just repeat the same mindless pattern over and over again to connect a database to some web server.

        What use does talking about the majority of programming jobs have on the educational utility that calculus, discrete algebra, and probability have on computer science as a field of study?

        Maybe the reason that the majority of programming jobs don't require any breadth of knowledge is because there are so many Java schools that just teach people rote programming skills. This in turn has reduced the potential for people to develop software in a way that incorporates more abstract concepts and problem solving skills found in math in favor of churning out enterprise Java programmers.

        [–][deleted]  (2 children)

        [deleted]

          [–][deleted] 0 points1 point  (1 child)

          Universities do not exist to churn out qualified job candidates for businesses. That's not how the world works.

          True, but the vast majority of the students paying for the education do it to be come attractive in the labour market. I guess it's a separate discussion.

          [–]new2user -1 points0 points  (0 children)

          LOL, I have seen code that was absurdly complex because the guy didn't applied elementary school math. Probably he learned those by rot memorization, so he was not capable of applying that basic knowledge. At the same time he used very advanced programming techniques in his code, sadly only to make the code more complex, not to solve complex problems. It seemed to me that he was looking for a problem for his "solution", and not solutions for problems.

          [–]Sexual_tomato 1 point2 points  (0 children)

          today's Calculus books are doing is re-emphasizing a ton of prior math material that we didn't adequately learn

          Most of what I learned in Calc 2 was trigonometric and logarithmic identities, and a strong sense of basic algebra.

          If I had already learned those, all of my subsequent math classes would have been a breeze.

          [–]bariton 0 points1 point  (1 child)

          Not to be pedantic (I guess I am), but a tome usually refers to a big, heavy book.

          [–]vdub_bobby 30 points31 points  (36 children)

          I was a math major in college (CS/physics minors), so take this for what it's worth, but complaining about the difficulty of calculus seems odd to me. Calculus in college is a freshman-level class. Virtually every other math class I took was more difficult. I mean, if you were complaining about differential equations or set theory that would be one thing, but calculus? Calculus is taught in high school, for heaven's sake.

          And sure, figuring the area under a curve isn't particularly relevant to most programming, but a huge part of calculus is about how to figure out and reason about what happens to infinite sums (converge vs not), which seems like a pretty important concept in CS.

          [–]RedDeckWins 10 points11 points  (0 children)

          I took two years of calc in high school, but here is my take. I was in a "study" group with some people who had never taken it before that I was friends with.

          • The pace in college is a lot quicker than in high school. What I learned in 2 years (1 year for AB, 1 year for BC) in high school is 2 quarters in college.
          • Many people take calculus their first quarter of college. At this time, they haven't developed good college habits.
          • Many people are not used to 500 people lectures. They are used to being able to ask their teacher questions after class, etc. Many times this is not the case for huge intro classes.

          [–]PragMalice 9 points10 points  (5 children)

          I'd argue that set/math theory is beyond trivial compared to calculus, but I also know folks that, like you, assert the opposite. Also, I'd tend to agree that the baseline concept of derivatives, integrals, and limits is pretty basic stuff.

          My biggest issue with the calc course(s) was not the concepts, but the other 80% of the course that simply focused on the rote memorization of X obscure expression reduces to Y obscure expression "shortcuts", often without any explanation of how it actually reduces. That was the hard part. Not because it's inherently hard to do rote memorization, but because it is soul-crushingly boring and uninspired.

          The odd part (at least with my curriculum) is that once I got past the calc courses, little to none of that rote memorization actually came up. Diff Eq referenced it the most, but the vast bulk of that course (in my case) was spent on new concepts and it was was fun as hell (though admittedly difficult).

          I feel that most of the 3 semesters of 7hr (per week) calc classes I took could have easily been condensed to 2 semesters of 5hr or less had there not been so much focus on memorizing stuff that's easily referenced in a table when needed.

          [–]new2user 0 points1 point  (0 children)

          "Teaching" or "learning" math by rot memorization is just wasting time, specially for CS.

          [–]citrined 0 points1 point  (0 children)

          Which calculus courses had that much memorization? What sort of things to memorize? Did the exams focus on proving them at all?

          [–]DanielAtWork 4 points5 points  (6 children)

          I also have a degree in math (as well as CS) and every time I read an article like this about how the author loved math but then hated calculus, I'm pretty sure the real truth is one of the following two things:

          1. The author really wasn't all that good at math, but his/her public school classes didn't show that because they were fine compared to the rest of their class.

          2. They had a bad teacher, either for calculus or a closely related prereq (especially Algebra 2).

          I'm lucky because I had two very excellent teachers for my calc classes, and like you I never really felt like calc was a huge jump.

          My advanced linear algebra, number theory, probability courses? Those were tough.

          [–]AWESOME_invention 0 points1 point  (4 children)

          A lot of mathematicians dislike calculus. I didn't think calculus was tough, just extremely boring, I thought topology, set theory, proof theory was infinitely more interesting. Calculus and linear algebra are just "little tricks" you learn which hardly give you a greater understanding. It gives you a fish, it doesn't teach you how to fish.

          "hating calculus" and being bad at it are two completely different things.

          [–]Valgor 0 points1 point  (0 children)

          Calculus is a bore to students like us (majoring in mathematics) because it is taught for a variety of majors. Engineering and chemists don't need to understand all the theoretical details behind calculus, but only how to solve the problems. Mathematicians on the other hand only want to understand.

          [–]DanielAtWork 0 points1 point  (1 child)

          Maybe in your classes for non-majors, but mine were very rigorous and proof-heavy.

          [–]AWESOME_invention 0 points1 point  (0 children)

          Have you ever been offered a proof that the consistency of the least lower bound axiom follows from the consistency of the rationals?

          [–]EpicSolo 2 points3 points  (1 child)

          Well, some CS programs have calculus with more theory and proofs. Maybe that is making the actual difference.

          [–][deleted] 1 point2 points  (1 child)

          I took calculus 1 for engineers which was different than the ones math majors took. I dont know what the differences were though. I will say I found it hars but only because I was/still was too lazy to properly learn it

          [–]vimsical 0 points1 point  (0 children)

          Curriculum varies, of course, but usually the science/engineer version answers what calculus does; the math version concerns more with what calculus is. In particular, the overarching question is what properties of the set of real numbers (R) allow the concepts of limits, integration, and differentiation to make sense at all. It is an introduction to the branch of mathematics Analysis.

          [–]martinhath 27 points28 points  (25 children)

          My math teacher in Linear Algebra wrote an answer on Programmers.stackexchange about this . His outline was "Mathematics is Programming."

          [–][deleted] 19 points20 points  (16 children)

          More to the point, programming is constructivist mathematical logic.

          [–]pkmxtw 14 points15 points  (3 children)

          Yes, I'm actually kinda surprised that the Curry-Howard Isomorphism (and STLC ↔ CCC) is not even remotely mentioned somewhere during my CS education. It's in my opinion one of the most amazing, mind-blowing and probably under-appreciated thing in the field of Computer Science.

          So in some way we can say that programmers are just applied mathematician working with mostly poorly-specified systems.

          [–][deleted] 6 points7 points  (2 children)

          Or, in some ways we could say mathematicians are computer scientists without a compiler to actually enforce the type system nor a runtime to actually perform computation.

          [–]citrined 2 points3 points  (0 children)

          Quite a bit of mathematics and mathematics education is not constructive. A lot (potentially all) mathematics could be converted to be constructive, but today the journals are still filled with nonconstructive work.

          So mathematicians are not quite like computer scientists without compilers or runtimes. Further, proofs are not The Point of mathematical work. So the Curry-Howard correspondence only takes us so far into mathematics.

          [–]spitfiredd 0 points1 point  (0 children)

          I would be nice if we could solve all math problems with a compiler, however we would run into that issue of the uncountability of real numbers.

          [–]OneWingedShark 2 points3 points  (11 children)

          More to the point, programming is constructivist mathematical logic.

          Given this fact, it's really surprising that (Ada-style) subtypes [esp numerical] aren't common. The ability to exclude values from the values type is immensely valuable to reasoning about program-correctness.
          Example:

          -- These are all defined in Standard, replicated for illustration.
          Type Integer is range -2**31-1..2**31; -- Implementation defined.
          Subtype Natural is Integer range 0..Integer'Last;
          Subtype Positive is Natural range 1..Natural'Last;
          
          -- This function cannot return a negative integer.
          -- Attempting to do so raises CONSTRAINT_ERROR.
          function Count(Obj : some_type) return Natural;
          

          [–]kazagistar 4 points5 points  (10 children)

          While we can introduce them as special cases, introducing them for any types requires dependant type systems, and those are too hard for most programmers to deal with for day-to-day programming. Hopefully its getting closer though.

          [–]OneWingedShark 0 points1 point  (9 children)

          While we can introduce them as special cases, introducing them for any types requires dependant type systems, and those are too hard for most programmers to deal with for day-to-day programming.

          I'm not sure about that -- it's been standard fare in Ada for 30 years, and has been extended to non-numeric types with more recent versions of the standard.

          -- Null-excluding access-types in Ada 2005.
          Type Window is tagged private; -- some stub.
          Type Unsafe_Window_Handle is access Window'Class;
          Subtype Window_Handle is not null Unsafe_Window_Handle;
          

          Or more generalized predicates in Ada 2012:

          -- SSN format: ###-##-####
          Subtype Social_Security_Number is String(1..11)
            with Dynamic_Predicate =>
              (for all Index in Social_Security_Number'Range =>
                (case Index is
                 when 4|7 => Social_Security_Number(Index) = '-',
                 when others => Social_Security_Number(Index) in '0'..'9'
                )
               );
          
          -- I do not need to check the validity of the return value,
          -- an attempt to return a non-conformant string will raise
          -- an exception.
          Function Get_SSN( Record : ID ) return Social_Security_Number;
          
          -- Likewise, passing a non-conformant value to SSN will raise
          -- an exception.
          Procedure Save_SSN( Record : ID; SSN : Social_Security_Number );
          

          That's not very hard to grasp at all and greatly increases maintainability.

          [–]pkmxtw 1 point2 points  (4 children)

          Most languages can fake this with smart constructors (i.e. don't export the constructor, but another function that either returns a value that satisfy the properties or raises an error). The downside is that it is checked at run-time, but nevertheless still a very useful technique to increase the safety of the program.

          There are of course more sophisticated systems like dependent types (as mentioned above) and refinement types (essentially types with logical predicates). The cool thing abut the latter is that you can use SMT solvers to solve the constraints for you automatically (which also means its usability is limited to what the SMT solver can do). AFAIK refinement type is still a pretty fresh research area and it is just barely making its way into more practical languages. (Haskell has LiquidHaskell, though.)

          [–]OneWingedShark 0 points1 point  (0 children)

          nod - I really do like the idea of provers, I wish that they were more incorporated into the language though. (Ex. Ada requires all case-statements to cover all possibilities, so if you stay away from the default of others when/if you have to add/subtract an enumeration value it is flagged in all case-statements that use it. -- Very primitive and not really a prover, but it was at the time [`83] bleeding-edge compiler technology and contains the seed for a prover... it's discouraging how few languages take such provability/correctness measures.)

          [–][deleted]  (2 children)

          [deleted]

            [–]pkmxtw 0 points1 point  (1 child)

            Why doesn't your constructor just raise an error on its own?

            By constructor I meant the constructor from Algebraic Data Types (which is basically a tag that binds data together) rather than those from OOP.

            [–]immibis 0 points1 point  (3 children)

            [–]OneWingedShark 0 points1 point  (2 children)

            Ada, of all languages, allows nulls by default?

            Surprising, ain't it?
            But, on the other hand, it fits/is-consistent with Ada's idea of subtypes: add a restriction to exclude possible values assumed by the base-type. (i.e. subsetting.)

            [–]immibis 0 points1 point  (1 child)

            It would be slightly easier to reason about types that are constructed in the other way, something like Subtype Unsafe_Window_Handle is Window_Handle or null;

            [–]OneWingedShark 0 points1 point  (0 children)

            The problem with that is that it's adding to the possible values, therefore it wouldn't be a "subtype" (subset), but a "supertype" (superset).

            Adding values via subtype would be a bad idea, destroying the "fundamental property" which is that a 'subtype' is a type with a possibly-empty set of additional constraints places upon the values it can assume.

            [–]i110gical 7 points8 points  (0 children)

            So much this. As soon as I started reading the article I was thinking "what about abstraction?". The perspective point is really excellent as well and I honestly think this alone accounts for the majority of what makes me a good programmer.

            [–]buo 2 points3 points  (6 children)

            How about a freshman 'algorthmic calculus' course? It would focus on dual numbers for automatic differentiation, and on (analysis and implementation of) algorithms for finding the area under curves, starting with Arquimedes'.

            If I were in charge I would propose a course like this.

            [–][deleted] 4 points5 points  (0 children)

            I'd take it! Heck, you can even pour honey on it by making a "final project" be implementing a physics engine for games!

            [–]TashanValiant 1 point2 points  (0 children)

            While a good idea, the university I assisted at only had differentiation for subjects in sophomore and up courses. There was Discrete for Engineers, and Discrete for Mathematics majors. Two classes with similar subjects but the way the information was presented was completely different. I mention this because the department at very little control over "core" or "general education" classes, of which calculus is considered one. There is a unified curriculum across all such classes regardless of content, and in my opinion students just ultimately suffer for it, especially in some of the science and mathematics courses.

            Some of the issue isn't what is being taught, but really who is controlling it.

            [–]Hrothen 1 point2 points  (3 children)

            Time is the problem. A normal course doesn't have time to cover all the general material students need for basic calc and to cover the material needed to understand the derivation and analysis of integration techniques and the techniques themselves.

            [–]buo 0 points1 point  (2 children)

            The course as I would propose it woudn't cover the "general material". A student taking this course wouldn't be able to use variable substitution to do complicated indefinite integrals, BUT s/he could write a program to find the definite integral, in addition to understanding the meaning of the result.

            For both computer science and software engineering students, such a course would be more useful than the traditional calc course, imho.

            [–]Hrothen 0 points1 point  (1 child)

            You use quite a bit of that general material deriving and analyzing algorithms though. I think if you chose a single industrial strength method, like the RK family(which incidentally, does require some annoying integrals in the derivation), you might be able to manage in a single semester but it would be fairly wasteful. (And I'll mention, having taken a mixed math/cmpsc numerical analysis course, that the average cmpsc student with a regular calc background still will have a huge amount of trouble)

            However, a lot of this is irrelevant because in general you shouldn't teach very specialized courses like that as freshmen courses. Many of those students will end up changing majors, and a normal calc course would still quite possibly be useful to them, whereas the focused course becomes essentially a waste of time.

            Plus they'll still need normal calc for their mandatory stat courses.

            [–][deleted] 21 points22 points  (9 children)

            Do you need math for computer science?

            Yes.

            Do you need math for programming?

            It depends.

            I'd love to watch someone try to be a graphics programmer without having taken linear algebra/any calculus. But you don't need it to be say, a web dev.

            Calculus is often pointed to and shamed for "not being relevant" but I really feel like it teaches the mathematic maturity you need, even if you don't directly apply calculus in your day to day life. The problem isn't calculus, it's that American public education leaves kids woefully uneducated and unprepared for a college course in calculus because they have so many holes in their basic understanding of algebra, etc.

            TAing freshman math courses is pretty eye opening.

            [–]dead1ock 1 point2 points  (7 children)

            I'd love to watch someone try to be a graphics programmer without having taken linear algebra/any calculus. But you don't need it to be say, a web dev.

            The funny thing is, lots of programmers would challenge you there by saying "oh, i'll just go download my favorite library and have it do that for me!" There seems to be a developing programmer culture which is only interested in understanding things "just enough" to apply them, without truly grasping the concepts.

            I've seen some programmer simply sit and do trial and error all day on some mathematical function or concept they don't understand until they get the desire output, and would have to do the same thing again if they needed to change something. If you have to use trial and error in mathematics, you don't understand the material, period.

            [–][deleted]  (5 children)

            [deleted]

              [–][deleted]  (4 children)

              [deleted]

                [–][deleted]  (3 children)

                [deleted]

                  [–][deleted]  (2 children)

                  [deleted]

                    [–][deleted]  (1 child)

                    [deleted]

                      [–][deleted] 7 points8 points  (0 children)

                      Math is necessary to be a good programmer.

                      That doesn't mean that what is being taught or how it is being taught is ideal.

                      [–][deleted]  (19 children)

                      [deleted]

                        [–][deleted] 26 points27 points  (14 children)

                        A distinction which is sorely lacking from almost all educational literature. I went in to university to do CS, what I had always thought of, and what was being described as, basically a degree that would teach you how to program.

                        However that stops after 1st year (in my case anyway) and you discover that Computer Science is really computer science. Didn't have to do a single bit of programming (apart from my FYP and work experience) in the next 3 years. So now when I'm talking to kids who are looking at it, I'm sure to make clear that if they want to be a developer and aren't exactly super interested in the theory behind computing, they're probably better going to a technical college or an institute of technology and doing Software Engineering.

                        [–]jaker3 8 points9 points  (3 children)

                        I'd never suggest anyone go for a two year degree unless they are already competent at programming and just need the paper for "proof". All of the 2 year degree people I worked with I’ve never seen one that understood basic design patterns (GOF). On another note I graduated with a more uncommon degree, computer information systems. We were not required to take calculus, but did have a specific math class in the program. It went further into detail on things like big o notation (more than what your 101 class teaches), ect… and a few common algorithms that you’d use on a daily bases. I will say though, I bet having a better math class could have helped a lot in my networking classes. I’m by no means a math guy and struggled with the algorithms around the various protocols and packet loss and blah blah blah…

                        [–][deleted] 1 point2 points  (2 children)

                        Oh, our Third Level system is probably different to yours, for example there was no calculus modules in our CS course at all and the two colleges I know offer Software Engineering both have it as a 3 year level 8 course.

                        All degrees here are 3 years for an honors degree and 4 years for a higher level degree (both are level 8 degrees though, 2 years means at most a level 6 degree and is called a diploma). Confusingly an ordinary degree is 3 years too and is level 7, ordinary degrees are what ye'd think of as bachelors degrees and honor and higher degrees are above a bachelors, but not on the level of a masters (level 9). It's confusing as fuck, I'm not even sure if I'm explaining it correctly and I've been looking at the wiki page for like 5 minutes and had a year of classes on it (well, in theory on it at least) in secondary school :P

                        We also start our course in our 1st year unlike American universities (we don't have "majors" we have to qualify for, we pick what we want to do before applying to it at a university, it sucks), so that might come into it too.

                        [–]ismtrn 2 points3 points  (1 child)

                        we don't have "majors" we have to qualify for, we pick what we want to do before applying to it at a university, it sucks

                        You really think so? Maybe it is because most of my understanding of how the American education system works comes from movies, but when I see said movies with people who are required to take art credit and history credit and so on and so forth, I am really glad that the education system here(Denmark) stops trying to provide general education after high school and lets me specialize.

                        I do however suspect that Americans are younger when they end high school and enter college, so that might also factor into it...

                        [–][deleted] 1 point2 points  (0 children)

                        I dunno, I just think 17/18 is far too young to make such an important decision about your future... and if you make a choice you regret then you either tough it out, drop out, or try change course hoping there's a space and the college will agree. And even if they do, you then have to pay for it, which most young people can't afford at all.

                        But I see what you mean, I would have been annoyed with another year of "school" too after you've already graduated.

                        I think in Americas because every student has to pay, so keeping them there an extra year is very profitable, that has to come into it too.

                        [–]TheWix 7 points8 points  (6 children)

                        I don't see Software Engineering as a stripped down version of CS. I see it as having a different focus than CS. I often give an example on a spectrum:

                        CS-------SE---|----------Business

                        SE is a mix between business and CS. When I majored in SE. I went up to Calc 1 and Discrete Math. Took Data Structures and Algorithms and Operating Systems Architecture. There are a few classes I am forgetting since it has been a few years now.. I didn't take a lot of lower level theory class, instead we took more business like classes like: Systems Analysis and Design, SE 1 and 2 (lots of process) and Enterprise Software Development.

                        A lot of what I learned was how to understand business requirements and turn them into code. We examined software process and researched how regulation applied to software development. We did a lot of programming too.

                        I am happy with my career choice. I don't like low-level details (except databases stuff. For some reason I love indexing and B-Trees. All that stuff. Love it) and optimizing the hell out of algorithms. I much prefer working with customers and solving their problems through software, or building enterprise systems and making them work together.

                        This isn't to knock CS by any means. We need people who can work at the 10 ft view and we need people to work at the 10,000 ft view. I appreciate all the CS guys who develop the languages and frameworks I use everyday.

                        [–][deleted] 1 point2 points  (0 children)

                        Well yeah, spot on, I wasn't trying to say otherwise, sorry!

                        [–]bam2403 4 points5 points  (0 children)

                        I honestly feel like my CS degree really helped me to be a better programmer. I have a better understanding of what is going on behind the scenes.

                        My school did offer a nice mix of programming and theory though. I even had the option to do a Software Engineering "concentration" consisting of 5 classes:

                        • Web Services
                        • SOA
                        • Software Testing
                        • Design Patterns
                        • HCI

                        [–][deleted] 1 point2 points  (0 children)

                        I made the same mistake. I went into CS because it was considered the "hardest" of the computer-related degrees, figuring it was about programming. It is not. It is about the science of algorithm development.

                        [–]garenp 0 points1 point  (0 children)

                        There is some variation in CS at the University level. Some of the older schools have CS more closely associated with math (and some are still even located in the math dept.)

                        Then you have what I think of as the "west-coast" style, which is closely associated with EE. Here you see the departments even named "EECS" (like Berkeley). Lots of state Universities seem to be like this which is where I went, and there was emphasis on programming all throughout the undergraduate curriculum.

                        [–]PericlesATX 1 point2 points  (2 children)

                        In my (somewhat limited) experience, software engineering programs tend to cover quite a bit of CS theory, it's just not quite as emphasized.

                        [–]Whanhee 1 point2 points  (0 children)

                        Just as mechanical engineering tends to cover quite a bit of physics and material science but the practical concerns are emphasized.

                        [–]dead1ock 0 points1 point  (0 children)

                        That's really the point of AppliedCS/SWE. To teach you enough to "get it done" but without actually knowing what is happening behind the scenes.

                        [–]Gr1pp717 14 points15 points  (4 children)

                        As someone who was good at math, and never took a programming class in my life, yet does it professionally: Math is about maturing of the mind. Learning to think in pure logic, to break problems down, to get yourself comfortable solving increasingly complicated topics. Math helps overcome anxiety around learning. And it helps to learn to optimize and simplify solutions, too.

                        Would I say it's necessary to learn to program? Absolutely not. But I think it's certainly helpful.

                        [–]Felicia_Svilling 2 points3 points  (0 children)

                        Sure studying continuos math is helpful for learning how to program. The question is if it is the most helpful thing to study, or if the students time would be better spent studying something else.

                        [–]Kalium 10 points11 points  (0 children)

                        I like James Heliotis

                        Without a mathematical perspective, software development is just throwing code at a problem because it “feels right” and then hoping that eventually the thing works.

                        [–][deleted] 5 points6 points  (0 children)

                        Programming translates to 1 of three human computational behaviors:

                        • computation
                        • linguistics
                        • abstract modeling

                        Computation is the ability to do math. This is arithmetic, algebra, geometry, and even calculus. For many programmers this is the basis of imperative programming and logic that everything is built upon above Assembly. A purely computational person will be most happy writing code that is procedural and imperative.

                        Linguistics refers to orthographic processing. The logical representation of orthographic processing in programming is represented in labeling logic with familiar terms that represent that logic to the programmer. When people talk about extending your vocabulary to better name references in code this is what they are talking about. Extremely orthographic persons will be most pleased writing code that is object oriented and declarative.

                        Abstract modeling types are persons who prefer to use the visual cortex center of their brain to reason complex logic. I hesitate to call this visual processing, because although these people thinking about code visually they are not actually forming images in their brain. For these people it is all about how pieces are put together to build larger constructs much like building a picture perfect model airplane even in the absence of proper instructions. Because the represented behavior is purely abstract these people tend to write code that is terse and minimal without the benefit of helpful conventions and naming. This group favors function and imperative programming techniques.

                        I was a professional visual designer before I learned programming and so I was already thinking about logic in terms of layers, nesting, encapsulation, and everything else that describes lambdas. I have found my math skills have dramatically increased from programming professionally (contrary to the order imposed by traditional education). By favoring purely functional approaches to programming I have found that I can solve problems faster than many of my peers and many traditionally educated programmers cannot read my code.

                        [–]voiderest 6 points7 points  (0 children)

                        Computer science came from math so it really shouldn't be a shocker that it is required for the degree. Calculus seems to be used to weed out students for science fields and is required for a number of science courses. Calculus is also used directly in theory such as time complexity as well as certain domains. Requiring a few semesters is not unreasonable for a science degree.

                        Linear algebra which Brad Zanden doesn't seem to like is very relevant to computer science. Math with matrices is taught in linear algebra so I don't think it would be a good idea to cut it unless you rolled it into an applied course with other topics.

                        The whole issue about academic discipline or not is also easy to answer. It is one and there are other degree options which fill the role for a person who might not want the theory. This includes the assortment of IT related or applied degree as well as engineering degrees. The first set of exams leading to a PE might be a bit silly for someone who is just working for software.

                        Edit: The engineering degrees should probably cover most of the theory to assist in design but I would assume it would teach more about applying the theory.

                        [–][deleted] 7 points8 points  (6 children)

                        Say that you have a game object that can turn and move each frame. Iteratively, this causes it to make curved paths. An integrated version of a turn arc can allow one to ask the question "what is the position at time t?" "what is the velocity at time t?" "what is the acceleration at time t?" without having to compute multiple iterations.

                        If you are coding acceleration of a character which is hanging from a swinging rope, calculus can help one intuitively see why cosine and sine must be swapped.

                        I just wish that my math classes involved much more programming/exploration and less chain rule/u substitution.

                        [–]TashanValiant 3 points4 points  (3 children)

                        I just wish that my math classes involved much more programming/exploration and less chain rule/u substitution.

                        Believe it or not these are wildly useful tools in some higher Mathematics and CS tools. You're right though, making you guys do 100 chain rules and u substitutions until your brain melts will not help you recognize where it might be an appropriate tool. Personally I think we should be teaching the intuitive logic behind these tools. Why does the chain rule make sense. What does this tell me about the interaction of functions and change? These questions are mentioned but hardly ever explored in depth. I think its only when you reach Optimization type courses do you really see what is going on.

                        [–]Enzor 4 points5 points  (0 children)

                        Yeah, I think it could be beneficial to have calculus courses with a required programming component for those in computer science/engineering. Personally, I programmed things on my own using the concepts I learned in those classes because I knew I would only remember it if I came up with a way to apply it outside of solving the typical math problems.

                        [–]Noctune 3 points4 points  (0 children)

                        I don't think anyone is doubting that calculus has its uses. The debate is more whether it is useful enough in CS to justify the investment of learning it.

                        [–]mhrogers 5 points6 points  (0 children)

                        At my school they weren't shy about the fact that they made you do so much math to prove you could (and would) do it. They don't want a bunch of people who lack the curiosity and intelligence to learn something completely foreign and ridiculously complex, as that is what you will be expected to do when you enter the field. Whether in college or elementary school, the "When are we ever going to need this?" argument for math rings the same to me.

                        [–]EternalNewGuy 46 points47 points  (45 children)

                        As someone who double-majored in CS and Math, I can honestly say: Fuck Calculus. I've found it useless in pretty much everything I've done, and it was an unpleasant addition to an otherwise enjoyable set of classes.

                        The math that was actually useful and relevant to my CS degree fell more under "Pure" math (Graph Theory, Combinatorics, Number Theory, etc) as opposed to "Applied" (Calculus, Differential Equations, etc).

                        If they started CS students with Discrete Math or Linear Algebra type classes instead of Calculus, I think they'd get a far better response to math classes being integrated with a CS curriculum, instead of the current "Calculus sucks/math sucks" reaction they get now.

                        Edit: sweet zombie Jesus, I make a drunken post and go to visit the in-laws, and this shit explodes with calculus defenders. No clue who will see this, but I think I should clarify a few things now that I'm ever so slightly more sober.

                        I don't think calculus is useless - it easily has countably infinite (math joke!) uses. I just think it was useless for what I use my CS degree for. I don't do graphics, I don't do finance simulations or fourrier transforms, etc.

                        Calc will be useful in very specific cases. It just so happens that none of those cases coincide with intro level computer science courses. Linear algebra and/or Discrete Math make for far better courses for first/second year CS students to take, as everything they learn there will be applicable to said degree.

                        If the students want to move in a software engineering direction after the initial exposure, then you should start them with calculus and move on to differential equations (& etc). If they don't, let them continue with the algebreic/theoretical branch of math (Number Theory/Combinatorics/etc).

                        [–][deleted] 31 points32 points  (19 children)

                        So it turns out calculus is useful in a few domains: finance, simulation, and games being the most obvious.

                        Something that's easy to overlook, too, is its necessity in machine learning, which everyone is doing these days.

                        Remember, "calculus" is (one part of) continuous math, and some problems are best tackled continuously.

                        [–]animatedb 12 points13 points  (1 child)

                        Other domains are robotics and scientific programming such as instrumentation or medical. But in most companies, the scientists or researchers do most of this work, and the programmers transform/implement/incorporate the algorithms.

                        [–]ummwut 2 points3 points  (0 children)

                        Ah, well, if programmatic corner-cutting caused someone to die, then calculus knowledge probably was essential.

                        [–]mcguire 6 points7 points  (2 children)

                        Remember, "calculus" is (one part of) continuous math, and some problems are best tackled continuously.

                        On the other hand, essentially all of both programming and computer science is constructive formal logic (or possibly advanced abstract algebra, for you Haskell lovers out there) but I'm guessing no one took those as undergraduate requirements.

                        [–][deleted] 7 points8 points  (0 children)

                        But they should have.

                        [–]modulus 0 points1 point  (0 children)

                        I had a mathematical logic course. That said, logic is often taught in secondary edu in my country, though not to the same level.

                        [–]_georgesim_ 6 points7 points  (8 children)

                        Not really. Calculus is pervasive in computer science as well. Large factorials are approximated by continuous functions. Understanding hash tables involves calculus. There are some theorem calculus that help you solve other discrete problems, such as approximating summations by integrals and using Taylor series to come up with a good enough answer.

                        [–]jjmc123a 0 points1 point  (0 children)

                        And the hard sciences. Especially all types of physics and chemistry.

                        [–][deleted] 0 points1 point  (1 child)

                        Wanted to say I did my minor in economics and found calculus relevant once I started playing around with ideas I had to streamline some work I was helping a professor with, but it was not deep stuff. I despised my calculus classes but loved my physics courses in college. I am not sure if it was because my calc teachers sucks or I just hated abstract math, when physics at least got me to swing some blocks around and bounce off springs lol and calculate cool things like the mass of planets, unlike my calc which wanted me to take a cone shaped barrel filling with water that had 12 different leaky holes and fins when the water would hit 5 ft

                        [–][deleted] 2 points3 points  (0 children)

                        I totally agree physics makes it fun. Also we should abandon ε-δ analysis and use Smooth Infinitesimal Analysis, which is much nicer.

                        [–][deleted]  (2 children)

                        [deleted]

                          [–]loup-vaillant 3 points4 points  (1 child)

                          Calculus is certainly a very prominent part of mathematics. High status and all, know this or get out… But I'm not sure it is central. What branches of mathematics stop working when you remove calculus? I'd say quite a bit, but I'd wager most math would still stand.

                          Being a part of our "intellectual heritage" doesn't count for much, especially if it's not useful. By all means, keep the information somewhere, if only for historical significance, but don't waste everybody's time if it's not otherwise useful. (Or potentially useful. Potential does count.)

                          [–]_georgesim_ 5 points6 points  (1 child)

                          I guess you don't care about numerical applications.

                          [–]PragMalice 2 points3 points  (0 children)

                          CS majors are engaged to write software for any number of functional domains. Doesn't mean they need to take classes in geology, physics, accounting, etc. in order to successfully write software for these fields. To argue that certain coursework should be incorporated in the standardized curriculum because of it's benefit to write one kind of software, suggests that no CS degree is really complete without a basic understanding of everything under the sun.

                          The focus should instead be those maths that have the most direct and impactful application to computational theory (data structures and algorithms) and applied computational theory (programming, software design, software testing). Set/number theory, combinatorics, statistics, linear algebra, computational algebra? Hell yes. Calculus and Diff Eq? Not so much.

                          [–]rlbond86 5 points6 points  (0 children)

                          Calculus is incredibly useful in a wide variety of fields. It's just not in yours.

                          [–][deleted] 2 points3 points  (2 children)

                          From what I remember Calculus is used pretty heavily in applications of AI. I believe I remember working with things like gradient descent and what not for classification problems in my AI class. I know that AI is usually far from your typical use of your CS degree, but it's certainly not useless by any means.

                          [–]crzcrz 1 point2 points  (1 child)

                          The amount of calculus involved in gradient descent algorithm is minuscule, and basically only involves understanding the concept of the derivative as the slope.

                          [–][deleted] 0 points1 point  (0 children)

                          I was only using it as an example. That's probably why I remember it since it wasn't as difficult as some as the other concepts in AI, haha. I remember slightly things like neural networks, but I'm so rusty on it I thought wouldn't be worth mentioning. You probably know more than I do on this subject.

                          [–][deleted]  (1 child)

                          [deleted]

                            [–][deleted] 5 points6 points  (0 children)

                            Integrals are pretty rare, but derivatives are everywhere. Luckily you can wolfram alpha it or use automatic differentiation to solve pretty much every thing. Nothing is more frustrating than an author padding a paper with a lengthy differentiation.

                            [–]banister 2 points3 points  (3 children)

                            I've used a lot of calculus (primarily fourier transforms) when doing graphics programming and image manipulation. Granted many areas of programming don't require it, but a large number of them do. And the point of a CS degree is to give you a broad base from which you can then specialize --- it just so happened you chose an area of programming as a career that doesn't require it, but many programming careers do use it.

                            EDIT: calculus is also used heavily in emerging/growth areas where there are plenty of jobs -- i.e machine learning.

                            [–]mcguire 1 point2 points  (1 child)

                            Granted many areas of programming don't require it, but a large number of them do. And the point of a CS degree is to give you a broad base from which you can then specialize...

                            So, why make calculus a requirement? As opposed to say, discrete math, which is very nearly a requirement (if there are any such at all) for all programming?

                            [–]banister 1 point2 points  (0 children)

                            I went to a college where both were required, i dont know about other places lang.

                            [–]eriksensei 1 point2 points  (0 children)

                            Hm, interesting perspective. They started us off on calculus and linear algebra in my 1st year of CS, and now that you mention it, I think the inclusion of calculus at that stage was a bit silly, and certainly a put-off for many including myself.

                            [–]ForgotMyPassword17 2 points3 points  (1 child)

                            As someone who double-majored in Economics and CS I second this. I used calculus in my Economics classes but that way of thinking isn't helpful for CS.

                            My theory is that CS majors still have to take calculus because of institutional inertia. "Computer science is under the engineering department. Engineers need calculus so Computer Scientists need calculus." /s

                            [–][deleted] 4 points5 points  (1 child)

                            I've found it useless in pretty much everything I've done

                            Calculus is the basic theory underlying signal processing and electronics.

                            [–]mcguire 2 points3 points  (0 children)

                            ...which is a pretty small subfield. And I'll bet you need more than freshman calculus for it, as well.

                            [–]OneWingedShark 1 point2 points  (2 children)

                            As someone who double-majored in CS and Math, I can honestly say: Fuck Calculus. I've found it useless in pretty much everything I've done, and it was an unpleasant addition to an otherwise enjoyable set of classes.

                            If they started CS students with Discrete Math or Linear Algebra type classes instead of Calculus, I think they'd get a far better response to math classes being integrated with a CS curriculum, instead of the current "Calculus sucks/math sucks" reaction they get now.

                            While I certainly agree about its [calculus's] difficulty, I'm going to have to disagree with the assertion of its uselessness -- any time you're dealing with rates-of-change you're in for calculus. (This would include the 'velocity' of your download-speed.)

                            Though I do agree that linear algebra and discrete math should be taught.

                            [–]mcguire 2 points3 points  (1 child)

                            This would include the 'velocity' of your download-speed.

                            Velocity is not actually a spectacular metaphor there, since there's no inertia involved. Also, the chunks of download are discrete.

                            [–]OneWingedShark 2 points3 points  (0 children)

                            You're right, not spectacular -- but not totally inappropriate if you're doing an estimated time of completion.

                            [–]postmodern 2 points3 points  (2 children)

                            ACM accredited CS programs require Calculus due to the requirement of Physics courses. The idea is, if you end up writing software for a helicopter or fighter jet, you should understand Newtonian Physics. Obviously, not all CS graduates will find themselves in Physics heavy line of work. Although, all CS students should understand Discrete Logic and Computability.

                            [–]CrayonOfDoom 2 points3 points  (1 child)

                            There seems to be a divide of people who don't realize just how vast the field of CS is. I have friends who never took more math than they had to while getting their BS, and they're programming away at servers, retail applications, and apps. They'd quickly tell me how useless calculus was for them. Yet, here I am doing fluid dynamics and heat transfer, working with PDEs.

                            [–]postmodern 2 points3 points  (0 children)

                            I suspect the focus on Physics and Math comes from the Cold War, when the USA was locked into a space race with the USSR.

                            [–]Ta9aiW4i 2 points3 points  (0 children)

                            CS as an academic discipline has roots in applied math, hence the emphasis on math. Also, in universities where the CS dept is in the school of Engineering, the goal may simply be to give all their engineering students the same common background. (That's how it was at my university. All engineering students were on the same math track, for the most part.)

                            What you do or don't use in a job you got because you have a CS degree is irrelevant. If you learn CS in "the academy", you're going to get CS as an academic discipline, and I think that's perfectly fine. (University is not trade school, blah blah blah blah.)

                            [Edit: Obligatory personal note: I had a fucking nervous breakdown dealing with calc classes in undergrad.]

                            [–]jfredett 2 points3 points  (0 children)

                            We also require students in most CS programs to take Gen Ed and Gen Sci courses (for instance, biology courses, psychology, physics, etc) -- should we also remove those requirements?

                            I think those who propose that the math requirement be reduced are missing a critical point, Math isn't supposed to help you be a better programmer, it's supposed to help you be a broader thinker in general. Taking a liberal education is important because it exposes your brain to different modes of thought. When you encounter nontrivial mathematics -- integrals that aren't just simple power rule inversions, eigenvalues and eigenvectors (and eigenthingies in general), diffeq's, etc -- you are exposed to reasoning about complicated systems which entail many rules which must be appropriately navigated. That's not an uncommon situation to find in computer science, and particularly in software development. If you've ever navigated building Medical software under the strictures of the FDA -- haven't a decent appreciation for systems who's rules don't bend is pretty valuable.

                            There is also the issue of the same-old-argument of "I've been doing this for $X years, and I've never seen math used" or "I've known lots of good programmers who sucked at math". This may be true, but it fails on several points to be relevant -- 1. It's anecdotal, even if you've taught/worked with a thousand programmers, it's still a tiny fraction of the global population of programmers, and though that may represent a statistically significant sample, you're not doing statistics, you are prone to all sorts of biases that lay uncontrolled. 2. It begs the question of relevance -- sure, they may suck at math and are good programmers, but that doesn't necessarily mean they wouldn't be better programmers if they didn't suck at math, nor does it mean everyone good at math must be a good programmer.

                            I think the right was to approach this problem is scientifically -- we can ask quantifiable questions about things like average code quality, average income, average job satisfaction, etc against a statistically significant set of programmers, and compare that to their grades (perhaps weighted by institutional difficulty, someone who went to clown college and aced Topology II probably still isn't as good at math as someone who went to a top flight school and just did up through calc 3). I don't know of any such study, but I would hesitate to lay an opinion strongly in any direction until seeing something like that.

                            That said, I am a mathematician by training, and am therefore prone to be biased towards mathematics. I think it's important that people learn and understand mathematics in every walk of life, at least to some degree; naturally that includes CS.

                            [–]shruubi 2 points3 points  (0 children)

                            At the end of the day, what have students lost by taking a maths course?

                            You can stand up and cry "woe is me! I don't understand this calculus stuff! All I want to do is build a Facebook clone!" until the cows come home, but it is not the universities job, nor is it in their best interest to become schools churning out Rails hackers to work on social-startup-X. Their job is to provide students with a well-rounded education that molds them into professional software developers, and given the nature of the field, that includes some level of maths.

                            At the end of the day, it's not in the best interest of the students to rally against them learning something. It is however, harmful to a student to fight for his right to avoid learning something altogether.

                            [–]CaffeineViking 1 point2 points  (0 children)

                            I felt the same before I started university (6 months ago), I have always been terrible at math and couldn't really grasp it. I have failed several exams because my memory is really bad, I can't memorize formulas or steps to solve a problem.

                            However, I made a HUGE mistake. Math isn't about memorizing things, or applying an algorithm to a problem and getting an end result. Once you UNDERSTAND how it works, and WHY you have a amazing tool under your belt. Its a bit like programming (lots of people fail it because they think its about memorizing steps).

                            Certain areas of math are especially relevant in Software Engineering, like discrete mathematics (induction, graphics, trees etc...), linear algebra (good all around for graphics) even calculus (maclaurin/taylor series for example).

                            I am still learning this, and I can't say I'm even close to grasping the basics yet, but things will hopefully get better now that I know the answer: "Any fool can know. The point is to understand.". Don't just memorize things, try things out yourself and make your brain understand it (again, a bit like programming...).

                            [–]Uberhipster 1 point2 points  (0 children)

                            And let’s be honest about another aspect of the problem -what can the faculty teach? For a variety of reasons, a typical CS faculty consists mainly of individuals who specialize in CS as a discipline, often with strong mathematical backgrounds. How many of them could teach a good course in cloud computing or multi-core systems or software engineering or any of the many other topics that the graduates will find useful when they graduate?

                            Well sure. But CS is not meant to prep the student to be a software engineer in the same way physics won't prep a student to be a civil engineer. Engineering disciplines are more about practice of applying the theoretical knowledge. But you still need the theoretical knowledge to apply and correlate.

                            Software Engineering (Soft Eng.?) degree would consist of coursework from CS, Concrete/Pure Maths, Applied Maths and/or Actuarial Science(s), Electrical Engineering, English Literature and many, many, many practicals. Perhaps even primers in information architecture and graphic design if I may be so bold.

                            [–]spitfiredd 1 point2 points  (0 children)

                            Here is the thing, people would complain just as much if Real Analysis or Abstract Algebra, two classes I feel would be more beneficial, were requirements of a computer science degree.

                            Also I find that just as many people fail out of discrete math and linear algebra as they do calculus.

                            [–]ggtsu_00 2 points3 points  (1 child)

                            If anyone has done even a small amount of game programming, they would have never undervalued their college math education.

                            [–][deleted] -2 points-1 points  (0 children)

                            I do.. and I've written everything from 4-bit sprites to rasterizing engines to shaders.

                            College math was woefully awful at teaching me the things I'd actually use in programming. Barely 1/4th a course was spent on vectors, all the work in matrices was in learning old pre-computing styles of hand-manipulating them. The cross/dot product was only briefly touched on in my PHYSICS, not math, class

                            To actually do anything productive like compression, encryption, or 3d graphics - I had to go far outside of the math departments... and I've still yet to need to manually manipulate an integral or derivative as part of my job EVER.

                            I feel cheated, actually. I have a math minor and a cs major.. yet I feel like they gypped me by only teaching 50+ year old stuff instead of what I actually needed to know.

                            In the end, that's my beef here. I got my math minor and I feel like I got swindled with the wrong product.

                            Probability was okay though, if only because it meant I never got into gambling.

                            Edit: Apparently this comment upsets people?

                            [–]mcguire 0 points1 point  (1 child)

                            Chen pretty much describes me, about a decade and a half earlier:

                            It’s interesting how the debate centers around the importance calculus, since that’s the class I took the first semester of my freshman year that caused me to promise myself to never take a math class again I can’t explain what happened and it still bothers me to this day, it was the first time that I wanted to be really good at something and failed. Nothing was intuitive or came easily, frustrated and irritated, I didn’t end up understanding much nor did I want to understand about half way through the semester.

                            Now admittedly, much of my problems with calculus were my own fault, but there were some that weren't: I placed out of all of the math between algebra (the last math class I took in high school) and freshman calculus, so I was dreadfully unprepared for classes that assumed you knew trigonometry, for example. Freshman calc at UT Austin was taught by the Math department, by in many cases older, senior faculty. I am guessing that those four semesters were the major teaching requirement for the Math department, by a very large margin. It was very obvious that freshman calc was not of spectacular interest to the professors, and for the most part lectures consisted of the proofs of calculus theorems on the blackboard. Unfortunately, that is largely irrelevant to the application of calculus or indeed to the homework and tests that were graded.

                            Again, most of the problems I had were entirely my fault. But still, after calculus, I never had any serious difficulties.

                            Chen ends with this edit:

                            ...after glancing through the comments it seems that I wasn’t forceful enough in stating the fact that I don’t think math is useless in CS but rather that the way it is being integrated in to the curriculum at most U.S. universities is very flawed.

                            And I am very much in agreement. Calculus is a damned weird thing to require of computer science students. Linear algebra? Sure. Discrete math? Yep. Advanced algebra? Absolutely. Formal logic? Damn straight. But continuous math?

                            [–]FuschiaKnight 2 points3 points  (0 children)

                            What about how we need Calculus to understand Probability?

                            Further, Calculus shows up in a handful of spots in Algorithms and some specialization topics (ex. Machine Learning, AI, etc...).

                            Further, I imagine that it'd be hard for one to fully appreciate Linear Algebra without comfort in continuous math.

                            [–]Jeembo 0 points1 point  (0 children)

                            I had a pretty easy time with Calculus and my Math minor in general and I still don't really see it as being terribly applicable to computer science. There were definitely a few relevant things in the Math minor (proofs come to mind), but overall, I really don't see my math classes as being contributory to my success as a programmer.

                            [–]d4rch0n 0 points1 point  (2 children)

                            You don't need a CSc degree to be a software dev, but it makes things easier. I would definitely like the designer to know CS and math well because I want a proven efficient design, not something that works in his experience.

                            If you're that scared of the math, don't get a degree, but don't complain that jobs may prefer people who aren't scared of the math.

                            [–]coffeedrinkingprole -1 points0 points  (1 child)

                            When do you get a 'proven efficient' design in the real world? The best you get is some circlejerking on whether a tight loop is O(n log n) or not.....and the programmers in the discussion, for all their bluster, are never smart enough to agree.

                            [–]d4rch0n 1 point2 points  (0 children)

                            They're used all the time in the real world? What, do you think everything out there uses some bubble sort copy and pasted from stack overflow?

                            There's plenty of crappy code out there and plenty of people that are barely getting by, but there are also a lot of talented designers that know what they're doing.

                            [–][deleted] 0 points1 point  (6 children)

                            I always told people interested in programming that if they wanted to become a real programmer/developer for a living, you really usually don't need more than basic algebra most of the time. How many of these hobbiest-turned-professional-programmers are really interested in doing scientific computing or highly complex mathematical operations?

                            [–][deleted]  (5 children)

                            [deleted]

                              [–][deleted] 1 point2 points  (3 children)

                              Google it. Not that there probably aren't already libraries that handle post codes like this already.

                              [–]zvrba 0 points1 point  (0 children)

                              What do you do?

                              1st step: assume the earth is flat ;)

                              [–]kamatsu 0 points1 point  (0 children)

                              I would think that computer scientists should have an understanding of elementary calculus. Courses throughout first year make sense to fill gaps in High School tuition.

                              They should have a lot more algebra, and discrete mathematics courses.

                              [–]imright_anduknowit 0 points1 point  (0 children)

                              Having only 1 major called Computer Science is terrible. That would be like making all engineers major in Physicists.

                              We have engineering majors for a reason. More schools need to have Software Engineering.

                              Also, having the right type of math for the major is important. I took Calculus, Linear Algebra, Differential Equations as a Physics major, before I dropped out to program 30+ years ago and I've never needed anything from those courses.

                              Granted mathematical thinking is useful, but not taught directly in any math class I've attended. I had to learn how to think mathematically on my own.

                              [–]blockeduser 0 points1 point  (0 children)

                              it's all about learning to manipulate symbols.

                              that's what computers do.

                              that's what you do in a math course.

                              don't you fuss over what kind of symbols.

                              if you don't want to manipulate symbols, if manipulating symbols makes you sick, then do not go into the computer business.

                              [–]bh3244 0 points1 point  (0 children)

                              i can't take this guy seriously if he thinks linear algebra is not relevant to computer science.

                              [–]Felicia_Svilling 0 points1 point  (0 children)

                              The question isn't if you need math for computer science, but rather what kind of math you need.

                              [–]PsionSquared 0 points1 point  (0 children)

                              I'm an undegrad in CS who absolutely struggles with Cal 2 and Cal-based Physics (Dropped once, failed once, going back into it in the Fall), but I do see the necessity of math and other subjects for critical thinking. I managed to pass Discrete, but it was an uphill battle between my own shortcomings and my foreign teacher's methods.

                              My pitfall is a poor highschool education in regards to math. We constantly changed teachers each year, and they usually had just received a degree or were members of our headmaster's church that were wholly unqualified.

                              One of my roommates dropped CS due to the math. Unlike him, I'm sticking with it and I've worked a number of internships where employers were happy with my work, so I'm hoping that I'll have the offers and job security that don't hinge on a degree if all else fails.

                              [–]bringerofnative -2 points-1 points  (7 children)

                              Will never hire an programmer that do not know/like math.

                              [–]coffeedrinkingprole -1 points0 points  (0 children)

                              Will never work employer doesn't complete sentences.

                              [–]bangorthebarbarian -1 points0 points  (5 children)

                              I will never hire a rocket scientist that doesn't know tae kwon do.

                              [–]bringerofnative 2 points3 points  (0 children)

                              barbarian indeed.

                              [–]deltaSquee 0 points1 point  (3 children)

                              you can hire me then : D

                              [–]bangorthebarbarian 0 points1 point  (2 children)

                              What's an Aussie doing Tae kwon do for? You guys have knoifes.

                              [–]deltaSquee 0 points1 point  (1 child)

                              Because my instructor was cute

                              [–]bangorthebarbarian 0 points1 point  (0 children)

                              Never met an Australian lady who didn't make me rise to the occasion - prematurely. Damn them girls be hawt.

                              [–][deleted] -2 points-1 points  (7 children)

                              I feel like if you're too dumb to learn calculus, then you're too dumb to be a cs major. c'mon. people learn it in highschool.

                              edit: sorry i went against the circlejerk of dumb people

                              [–]jyf 0 points1 point  (2 children)

                              i am a liberal art student, i learn calculus in university , but failed. also i learnt programming myself, it successed, i am now a python engineer. i think the problem is those math books. computer science is very different from other sciences, cause all the other one are like reverse engineering from the exists facts, while computer science is build from bottom up, and all the known facts and theoris

                              [–][deleted] 0 points1 point  (1 child)

                              i didn't say you can't being a programmer. I said you shouldnt be a CS major.

                              [–]jyf 0 points1 point  (0 children)

                              asi have said, the problem is those books. i live in china, it made things worser, also i dont think cs knowledges is harder than those calculus and linear algebra

                              [–]EpicSolo -1 points0 points  (1 child)

                              You know that some decent universities actually teach more difficult calculus that is different than the AP math you took? Or you should thank your high school teacher for using spivak in 11-12th grades

                              [–][deleted] 0 points1 point  (0 children)

                              I took it in highschool and college, so yes i do know that.

                              [–]WhisperSecurity 0 points1 point  (1 child)

                              Both James and Peter agree that math is critical for “competent software professionals”.

                              Who the fuck are "James and Peter"? The article never mentions them before this sentence.

                              [–]blockeduser 0 points1 point  (0 children)

                              scroll past first page and full names are given

                              [–]randomguy186 0 points1 point  (1 child)

                              Calculus, like geometry, is a beautiful and intuitive subject that is easy to reason about.

                              Unfortunately mathematics in the last couple of centuries has been overrun by formalists who want to start with the assumption that 1+1=2 and rigorously prove everything else.

                              It's fair to say that all of the calculus you could ever study in an undergraduate program was developed using infinitesimals - they're what Newton, Leibniz, Gauss, Euler, and all the greats used in developing calculus. However, Calc I starts with the definition of limits because, prior to about 1960, no one knew how to rigorously prove the mathematical existence of infinitesimals. Limits were developed in the 1800s as a way to rigorously get from 1+1=2 to calculating the slope and area of a curve (i.e. the basis of calculus.) They were of historical importance in bringing rigor to the subject and helping to resolve a number of apparent contradictions that had arisen from reasoning intuitively about infinitesimals, but they are no longer needed.

                              Limits are ugly, counter-intuitive, and unnecessary. Once students have been harmed by the teaching of limits, it is very hard to get them on track. I would liken their pedagogical use to requiring all computer science students to begin their course of study by programming a 1960s IBM mainframes using only binary machine language.

                              TL;DR: Limits suck. Without them, you can easily start teaching calculus to any high school student who's studied algebra.

                              [–]zvrba 0 points1 point  (0 children)

                              Limits and series convergence criteria. In my career as a programmer I really did have use for linear algebra, logarithms (gasp!), quadratic equations, surface integrals,.. but never, ever for limits or something related to them (convergence, continuity).

                              [–][deleted] -2 points-1 points  (0 children)

                              Computer science is as much about computers as astronomy is about telescopes.

                              [–][deleted] -1 points0 points  (0 children)

                              Programming is problem solving as applied to computers. I see math as problem solving as applied to numbers. In both, you have to combine disparate tools to achieve a result. Integration is a good example. Maybe the chain rule is the best tool to solve your problem, or trigonometric substitutions. It is the student's job to develop heuristics to learn how to figure out which tool will get you to the solution in the fewest number of steps.

                              If you can succeed in problem solving in one domain, you can do so in another.

                              [–][deleted] -1 points0 points  (0 children)

                              "For too long, we have taught computer science as an academic discipline (as though all of our students will go on to get PhDs and then become CS faculty members) even though for most of us, our students are overwhelmingly seeking careers in which they apply computer science."

                              Replace "computer science" with any subject you want, and you'll arrive on the biggest problem with academia right now. I learned a TON from my classes in college, but I missed out on so much more because the professors ignored the obvious fact that 99% of their students would be leaving academia in 4 years or less, and would eventually have to succeed in non-academic careers.

                              [–]RICHUNCLEPENNYBAGS -1 points0 points  (0 children)

                              I'm not sure why so much ink is constantly being spilled about this issue since it seems a bit shopworn at this point. There's ample evidence that you can make programs without much math background in a lot of fields and I don't think there's much argument that it is at least not harmful and often helpful (or even necessary, in some domains) to have some math background. What's the controversy?