CS Profs Debate Role of Math In CS Education
theodp writes "Worried that his love-hate relationship with math might force him to give up the pursuit of computer science, CS student Dean Chen finds comfort from an unlikely source — the postings of CS professors on the SIGSE mailing list. 'I understand that discussing the role of math in CS is one of those religious war type issues,' writes Brad Vander Zanden. 'After 30 years in the field, I still fail to see how calculus and continuous math correlate with one's ability to succeed in many areas of computer science...I have seen many outstanding programmers who struggled with calculus and never really got it.' Dennis Frailey makes a distinction between CS research and applied CS: '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.' Frailey adds that part of the problem may be that some CS Profs — math gods that they may be — are ill-equipped to teach CS in a non-mathematical manner: '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? Are such courses always relegated to instructors or adjuncts or other non-tenure-track faculty?' So, how does this jibe with Slashdotters' experience?"
I don't think it's continuous math that is the hard part of CS... http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15251-f07/Site/
on Slashdot?
Could ./ benefit from some kind of elementary math in some SQL scripts?
SELECT count(DISTINCT story_url) ?
I'm not a lawyer, but I play one on the Internet. Blog
And, for that matter, do you want to learn in the classroom, or in industry?
The World Wide Web is dying. Soon, we shall have only the Internet.
If you don't want math with your computer science, learn computers / networks / shiny jargon at a trade school
It's everywhere. Unfortunately, it seems that the overwhelming majority of those who are taught it are almost universally unable to see where it can and should be applied.
Deleted
We need some grammar nazis in the admissions offices.
I could understand CS majors being required to take linear algebra, but Calculus and Calculus 2? It's a waste of credits for the most part.
I don't know about calculus but doing formal proofs help me in learning programming because they are, in essence, the same thing. In a formal proof, you break down a problem into simple steps and state the authority for each. It is similar to programming. So some math is good.
Don't stop where the ink does.
1. Undergrad comp sci is for the fundamentals of comp sci, not the latest marketing buzzwords like "cloud computing";
2. Comp sci is a branch of mathematics, and any of the elementary branches of mathematics may be combined to improve your toolset. For example, complexity theory may involve analytic number theory;
3. You probably wanted a trade school. Universities do not exist to train you for a job. They may make you better in the workplace, but that's incidental.
I dropped out of College because I couldn't get in to CS due to math requirements, however I took many contracts to create back-ends for successful web sites, took contract jobs to convert and create document/spreadsheet macros for fortune 500 companies, in my spare time I make independent games, and at my current job I create many tools to streamline the work we do. Clearly I understand the stuff, I have it on my resume, but maybe a degree would have helped me get me started much earlier on what I actually wanted to do. Instead I had to take a lot of crappy jobs to get here and missed on the opportunity to put more money away from my future since I was stuck in minimum wage until someone recognized my real talents.
In the Business degrees the students/profs didn't get no respect (and were nowhere near as funny as Rodney Dangerfield). So, they started adding "math just like the real degrees." It has gotten to the point that when you look at the requirements for an Accounting Ph.d. (a ture labor of Sisyphus) the ciriculum looks like anything but accounting.
Personally, I think CS has degenerated to the same level of the other degrees generated by the great American Degree Mill. It now has the primary purpose of sucking up Government Grant Money.
Just my negative opinion from watching this comedy for the last half century...
The purpose of a computer science degree is to teach one how to think computationaly. Math is the universal language of computation.
I don't get why I had to learn all the math in university. I agree some math is useful, but I have never in my 10 years working applied any of the advanced stuff, nor found learning it helpful.
I think everyone is so stuck on the relationship between Cs and math they refuse to even hear arguments that dispute this. Why is that? Why such math zealotry?
There is nothing distinguishing about any of the examples noted; nor worth any study. I don't deny that the mathematics::programming link of overstressed.
Seems the problems are more rooted in basic experience. Many arts understand that imitate comes before create; despite the whining of the student/apprentices. While programming isn't quite an Art, its practice is close enough to deserve a different approach from the basic sciences.
Certainly the root of all evil is falling into the buzz-trap where studying and instance of a technology (java, cloud computing, multi-core(wtf?)) takes the place of learning something worthwhile, like planning, design, debugging.
bah, get off my lawn.
CS degree != webmonkey
Once upon a time, CS was a field within applied mathematics. In my opinion, CS still is. The problem is most people who major in CS, especially at the Bachelor level, will likely end up become programmers once they graduate and won't be actual "computer scientists" per se. In most other engineering fields, there is a differentiation between mechanics, machinists, technicians, engineers etc. Most people wouldn't hire a mechanical engineer to do machine and tool making, or a civil engineer to dig holes, unless he was also so qualified. One alternative is for universities to have separate tracts for applied programmers and students who are more interested in the theoretical end of CS. I don't think you need to be a mathematician to implement most programming ideas, but you do need to be very well versed in mathematics to know how to find optimal solutions or design software to solve unique problems for which there is no simple recipe. Disclaimer, I am not a CS major. It is only my opinion from the outside.
Then offer Software Engineering in the Engineering department.
Perhaps I went to the wrong university, but my computer science degree was more like a software engineering degree anyway. The vast majority of my teachers were not math prodigies. I actually did both math and computer science and whenever I tried to link the two I got blank stares from my computer science professors, although my math professors could give me wonderful insights even though that wasn't their field of study.
Overall I enjoyed my math degree far more than my computer science degree; I've always been one to prefer the theory over the application. I'm sure if they had offered a choice between a software engineering degree and a pure computer science degree I would have chosen the latter and probably would have enjoyed it more. In my eyes math in a computer science degree isn't a problem, it's the fact that they're trying to meld two different subjects into the same degree. Math in computer science is just a red herring and detracts from the actual problem.
Physicists think computer science means numerical calculus, since most of theoretical physics is difficult calculus problems. Perhaps this is why there are so many physicists who write unreadable code.
Simon's Rock College
and even physicls 3a/3b and 4a -- some curricula are retarded
So, the professor, Brad Vander Zanden, appears to be a professor at the University of Tennessee. Great, it seems to be an ok school; it's a top 50 public school, and a top 100 overall US school. That's a respectable ranking. He even has something of a research page. However (and I don't live anywhere near there so I don't have personal experience, and things could have changed since this list was compiled), their computer science program is ranked rather low, so I don't know if he's all that great an authority.
Here's my opinion (disclaimer: please don't trust my opinion, a random guy on slashdot, either): basically, if you know math, you will use it. You don't need it; you will still find a way to survive in the software world without knowing math, but math will open many doors for you. Would you really want to be shut out from understanding computer graphics, understanding artificial intelligence, and algorithmic complexity? That's just in computers, if you close your mind to math you'll be closing your mind to understanding the way the physical world works, too. You'll be losing the logical/mental discipline that comes from understanding math. Why would you want to give up all that, and try to live as a code monkey?
"First they came for the slanderers and i said nothing."
I have seen many outstanding programmers who struggled with calculus and never really got it.
That's because computer science is not programming. You won't find an outstanding computer scientist who doesn't have a solid mathematical background. The theory of computation and the basis for all we do is entirely based in math, and therefore understanding math is essential and inseparable to understanding computer science.
our students are overwhelmingly seeking careers in which they apply computer science.'
If you're looking to be a vocational institution, by all means, drop the math and train your students to be code monkeys. Yes, train, not teach, because teaching them would consist of providing them with a solid mathematical foundation on which to base their careers.
And it's patently false that applications of computer science do not require math. In my field, robotics, I do a lot of programming, but I do just as much theoretical work to understand the algorithms I'm using, and to develop new ones. Linear algebra, statistics, convex optimization.... these are all mathematical topics I use regularly, and I couldn't function without. Cutting topics like these not only take the Science out of CS, but the true value from the education itself.
The courses can't ignore math - but they don't have to go into it nearly as deeply as they do. Basic binary and theory should be included so that there is an understanding of what the compiler/interpreter is doing taking high-level down to machine level.
I'm not a mathematician but I've done my stint with calculus (back in the late 60's at high school and then university, just as compu-sci was really getting going) I hardly ever use anything but basic add/subtract/multiply/divide, even in designing some of the more sophisticated business and consumer products I've been involved with (but I've got Knuth's books and use them); that's why there is a need for experts - to bail me out when I need them. We need both kinds of computer people - those who can deal with the algorithms at the core, and those who can apply those algorithms to real programs that interact with humans. But more than that, we need more "real" people who have gone through the computer programs and thereby have at least a half a clue as to how computers really function and how to apply them to problems.
Was talking to a friend of mine - he grows flowers and cuts hair for a living - and he was decrying the fact that all the various computer stuff he's got is "just too complicated" for the average old pharts like him (and me, but I've grown up with it so I'm an exception to this) - and I had to agree because the programs were designed in large part by people who are techs and mathists - not your typical non-tech humans. Put it down to the filter at the education point of requiring the math skills that weeds out many is my guess.
Problem is highlighted by the note that the math profs have problems teaching compu-sci from anything but a math perspective - and the bulk of computer program design is in the human interface and basic business world that they don't easily relate to (nor do students who understand them in most cases)
So putting up the largely artificial barrier of understanding math (at least for some aspects of compu-sci) is hurting our use of computers in many ways.
Been there, done that, paid for the T-shirt
and didn't get it
It bugged me when I was in school that there wasn't an option for Applied CS in my undergrad program. Then I got into industry and found that the majority of my useful skills were derived from subjects that I taught myself to make me a well-rounded engineer. I felt a little short-changed by my education. However, as my skills aged, I found that I was leaning more and more and my theoretical skills to supplement my abilities and keep up with the fresh meat that came behind me. As I moved up, practical skills were pushed aside as I made use of concepts to help design and diagnose the systems that I develop. In short, like most things, the real answer isn't 'either/or' but rather both. You need to give the students a full tool box that works now, works later, and provides a way to make the box bigger quickly and easily. And a student that doesn't want both sets (theory and practice) probably shouldn't attempt either.
I have seen many outstanding programmers who struggled with calculus and never really got it.
The summary is not absolutely clear on who makes this statement, but the article attributes it to "a professor". I don't know where this professor works, but the outstanding programmers I know can all do calculus in their sleep. Not all programmers, or even all good programmers, but the outstanding ones. It isn't about continuous versus discrete, which is a complete and utter red herring, but the ability to think abstractly. Hell the best programmer I know is a pure theoretical mathematician: his code is always beautiful, clear, easy to maintain, and, imporantantly, correct; he's prolific to boot. But he's an outstanding programmer. I know plenty of work-a-day programmers who are not outstanding, and whom I would suspect would have problems with integration by parts.
Based in part on my differing experience, I posit that the quoted professor does not work at a high-end institution where really outstanding programmers are likely to be found. This opinion is bolstered by the observation that discrete mathematics (the Z transform, difference equations, discrete Fourier transforms, and the like) and continuous mathematics really are not that different if taught properly. If an individual can't master continuous and discrete mathematics, then they are not going to be an outstanding programmer, because they can't think sufficiently abstractly.
Outstanding programmers can do system architecture, data structure design, algorithmic development. No one who can design and understand a Fibonacci heap is going to have problems with dx/dt.
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
...over my career, both as an academic and as professional software engineer, I appreciate fully the distinction made between the mathematical foundations of computer science and the application of computer solutions to mathematically oriented problems. To start a four-year degree in computer science with the same calculus-oriented math series that the "physical world" majors take is a bit wrong-headed IMHO, but not completely. First, the math of computing is discrete, and this deserves first attention in a good discrete math course right after college algebra. And for most of my career, a solid foundation in logic, sets, relations, etc. served me well in both professional software development and college teaching. Indeed, my schooling went as follows: BS CIS, MS CS, and DCS (that's Doctor of Computer Science, as opposed to PhD...), where my bachelor's program had both a solid business core as well as just enough "continuous math" to understand the foundations of calculus. Missing was the discrete math I mentioned above, but I got that in my MS.
But now, I find myself smack in the middle of the defense/aerospace business, and the day-job application involves aspects of both calculus and statistics for which my schooling did not fully prepare me. Now, my role is more about technical leadership than practition-ing, so I'm not floundering, but I've had to dig out the old texts and learn some math on my own that most of you learned (or slept through) in your earliest years of college, or even in high school. What's really important for me to understand are things like the computational complexity of a proposed solution, that a branching structure in a code segment covers both nominal and corner cases (they do let me sit in on peer reviews...), and other foundational computer science things that the schools, in their increasing "IT" orientation, aren't covering much anymore.
I was an academic advisor for a year, probably the worst on the planet, because I told my students things like, "major in CIS, then switch to CS for your masters, avoid the calc hell" and "don't be doing school unless you're really motivated in the major" (ha, the admissions advisors LOVED that one... NOT!)
So, if I were king, I'd make all computer science students take discrete math, so there. After that, the math depends on what industry (domain, applications, whatever) in which you plan to work. For some, that may be statistics, for others the calc series. But the point is that the primary math of all computer professionals is logic, sets, relations, and the rest of the "discrete phylum", and that should be learned for competency, first. Doggonit.
I thought I might do a CS course in 1969, but when I realised that it had such a heavy maths focus (1st year was just the standard maths degree course) I gave up that plan and went and worked in the industry. Can't say I've ever found the lack of advanced binomial or )calculus any hindrance at all, and I've been involved in many areas (none of them commercial thankfully)
...but my degree experience (CS at one university and Software Engineering at another) poor Mathematics skills just makes life more difficult. You will just have to accept that you have to work harder than others who are good at it (if only to overcome your dislike). It is also worth noting that there are different branches of Mathematics and being bad at all of them is different to being bad in only area but fine in others. Further, different courses will place different emphasis on Mathematical content (e.g. HCI style courses may emphasise statistics).
There is also a difference between programming and Computer Science even if you can argue that programming is a subset of Computer Science. Computer most certainly is a branch of Mathematics (or if you want to annoy people you can say Mathematics is a branch of Computer Science ;) and there is Mathematics underlying all computation. However if you are terrible at Maths you can still create great non-mathematical programs but you have to accept that there will be certain types of programs you may not be able to write (or write well) until you conqueror the Mathematics.
Just because knowing more usually doesn't hurt doesn't mean you HAVE to learn more but whichever direction you take you simply have to accept there will be consequences.
I know (as even the summary said) this is a religious/contentious topic, but: For both CS and computer engineering, math as a discipline provides several abstract tools in terms of abstraction, modeling, and discipline, as well as actual concrete skills (for algorithmic analysis, estimations and the like).
But the summary mentions continuous math, and I must say most non-CS programmers will only encounter discrete problems. Unfortunately some problems do require floating point or control of continuous processes (i.e process control applications), but regrettably by the time that happens most of the required math classes will long since have been forgotten!
Electrical engineers have technicians to help actually make the things they've designed.
Mechanical engineers have machinists to help actually make the things they've designed.
Software engineers have programmers to help actually make the things they've designed.
As an ME, I would be embarrassed if I couldn't also turn a lathe, but that doesn't mean everybody is going to feel that way, and in terms of immediate return on investment it isn't the best use of my time anyway (although I would argue strongly that in the long run, skittering around the machine shop makes me unequivocally a better engineer).
I was under the impression we already knew that "hello, world" is something anybody can do, and that there's plenty of useful code to be written by people without four year degrees.
Realistically, most tasks of engineering interest don't require an entire team of people who can solve the difficult problems. It hurts to say that, but it's true.
University through AI had me taking computer courses -- which sounded like fun, since I was a computer guy all my life. It would have taken four years before even getting to an AI course, because of all the math courses along the way. I don't care what you say, when I walk through a room, my brain doesn't do any calculus to avoid walking into the desk. It just doesn't. But AI in CS said "calculus is the fastest way to approximate natural path finding".
So I left, and switched to psychology, where AI is called cognitive modelling.
The first day said "the goal is to model things after natural processes, if it takes ten days for the computer program to walk through the room, but it does so naturally, computers will be faster next year."
The third day of the course was to write a neural network in LISP -- oh, and to also learn LISP from scratch -- to solve a real-world decision-making problem. We had two weeks to complete the assignment.
Neural networks are fun, by the way. And ten years later, when I wrote an on-line ticketing program that needed to choose the best way to apply multiple coupons to multiple purchases (in a self-serve kiosk application), brute-force computation did it in 60 seconds, competent programming did it in 10 seconds, pre-computing did it in too much memory for the device, a neural network did it in 50 milliseconds. My client was very happy -- and never knew.
Those who see 1's and 0's and those who think math isn't necessary.
Long ago only math majors could get close to the vacuum tube monster computers (late 50's). Knowledge of different bases (10, 2, 8, 16, 12, 60) were necessary. Also knowledge of rings, fields, boolean, and other modern algebras were essential. I hated calculus and took any math class that did not require calculus. My degree was math (1961) and I was in the computer industry for over 50 years and I never, ever had to use calculus.
If you're doing important work like social networking, web development, some aspects of user interfaces... Then you do not need understanding of calculus and other "continuous math" disciplines.
Only if you're doing less important things like computer graphics, HPC, general algorithm optimizations/evaluations, and so on... Only then you need to bother with heavier math.
Of course, one can argue where is S in CS if CS is social networking and web development.
Above statements are partially ironic, of course, but...
Computer programmer is not synonym for computer scientist. Most (probably 95+% or more) of computer programmers are only craftsmen. Current higher education only makes this situation worse by educating craftsmen and not engineers, most of time.
http://opencm3.net, http://www.nongnu.org/gm2/
Computers are basically machines, and so follow a very mechanical, physical sort of logic.
Math is about abstractions, and constructing abstractions of abstractions.
There is some overlap, in the way that math can be used to describe almost any process.
There is some overlap, in the way that computers can manipulate symbols to produce results.
In the same way that metallurgy is not necessary for an auto mechanic (though in rare instances it might be helpful) advanced mathematics is not necessary for a working programmer (though in rare instances it might be helpful).
I was always taught to use maths for maths homework -- i'm sure this lesson is universal
I used to think that too, until week before last. I'm a literature major who couldn't make it past second semester calculus. Until week before last I never needed to do any math in programming beyond arithmetic.
Then I landed on a project involving OpenGL. There's a heck of a lot of math there, and a lot of math/graphics jargon. What makes it even more frustrating are all the tutorials for beginners that assume you've majored in math and never bother explaining homogeneous coordinates, frustrums, etc. Almost as annoying as they're assuming you already know the syntax to glsl. I am good at geometry, and could write very complicated POVray models, but OpenGL has been kicking my butt due to my lack of linear maths.
Don't blame me, I didn't vote for either of them!
Computer Engineering?
Computer Liberal Arts?
Business Computing?
Computer Programming?
Applied Computing?
I wonder how well respected a BA or BS from Big Name University would be if the major was "Applied Computing" compared to the same degree/coursework under its existing title of "Computer Science."
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
My understanding is that CS is effectively a branch of applied mathematics. Therefore, it's puzzling to me how CS can be taught without any math, which is some people want to advocate. However, it does seem strange that a lot of CS programs require their students to study Calculus, differential equations, and other continuous math subjects. Discrete math is a lot more useful in CS. Calculus should probably be taught only up to differentiation and integration (just one semester) and then followed by discrete math course to build up math intuition for algorithms courses.
There is a difference between computer engineering and computer science (the ability to code or plug computers and the ability to program efficient algorithm)
I made a come back to university after 10 years of working to get more in depth math background for video games. You do not get to calculate lots of things being a Db admin or a GUI programmer with a RAD tool.
Video game or applied science with a need to computerize math models needs computer engineers. In Quebec the distinction is becoming more relevant as computer consultant are lagging behind in both expertise to modelize high end product and the ability to precisely say how much time it will take to create/maintain/update a piece of software.
I go to ETS btw which has teachers that are behind big ISO norms like 14764 for example and others that are reasearched for small teams of less than 15 members for really small enterprises.
Sorry for the bad english, I am a frog ^ ^
The point of teaching math at all, at least past checkbook arithmetic, is to endow students with the ability to think logically. Those who have an aptitude for science and engineering may find more advanced math such as calculus and linear algebra useful for their careers. However, the vast majority of people will never use more than arithmetic "for math's sake". Still, the hope is that those geometry classes taught them how to think carefully, break a problem down into its constituent parts, and solve it. This is a skill that is useful well beyond applied mathematics.
This post expresses my opinion, not that of my employer. And yes, IAAL.
At Keene State, we try to keep the CS major as applied as possible, doing projects for real clients in the community.
Part of this is realizing calculus isn't necessary. We have a Math for CS course which focuses on more logic and algorithmic math.
I got a degree in CS because I wanted to write programs. Granted I can write a compiler, but when I see an IDE like XCode, I'm completely lost. I'm good at math and I understand all the concepts of programming, but when it comes to making something appear on the screen beyond a console based unix app I'm completely lost.
My guess is that in ditching the 1 year long course in Logical Structures and Boolean Algebra I could have been taught something that was worth a damn. Most of the classes I took were really interesting and I see how they relate to the subject but I guess I had a different version of programming in mind when I signed up that the school did.
Do you know how fast a Dynamic Programming solution would have taken (if you still have numbers to hand)? I would have though it would be somewhere between competent and your neural network solutions but perhaps it would have been brute force by another name...
this can be said about a lot of degrees. There is a pile of classes that are included with degrees that will be of no use beyond getting through to graduation day. After that, people go into their chosen profession and never have use for all those hours in unrelated classes unless they do indeed continue on to get that Masters or Ph.D. Why is this news?
I started a Bachelor's in computer science and switched to an applied software engineering program. It's much less math, and the average course is far more useful in the real world. All the employers I've talked to so far have said that they prefer hiring out of the applied program because the students are ready to start working and have a broader range of skills.
As many have already pointed out, computer science != programming.
What we need is more schools that offer applied programming programs for those who want to become programmers and not computer scientists. And more students need to learn the differences between them and which one they want.
I strongly believe that computer science should continue to be a math-heavy major. As a Computer Science PhD student, it is important to learn how to write proofs, have intimate knowledge of discrete structures in mathematics, and yes, know calculus. However, I agree with the central point that most computer science majors don't really want to do "pure" computer science when they graduate. Along those lines, I really think that there should be a software engineering major that overlaps with computer science but also includes more practical (yet methodological) training such as software testing and some empirical aspects of software development.
I think a better question is: Do these professors think their college should be an institution of higher learning or a trade school? (Disclaimer: I got a PhD from a top-20 university.)
Let me make a few points:
First, while it's true that numerical math is not used in many CS areas, discrete math is. Logic, set operations, and the like are used pervasively in CS. And learning numerical math is a core breadth area that instills mental discipline. Quite frankly, if math is not your strong point, then you should consider moving out of CS.
Second, the role of a university CS undergraduate curriculum is not to teach "cloud computing or multi-core systems or software engineering". It's to teach core CS topics. It's like like suggesting that a mechanical engineering student should be taught how to fix the engine of a Ford Mustang or that an electrical engineering student should be taught how to install video cards into a PC.
Let me make this clear: Any "hot topic" CS subject you teach in a university will be outdated in a few years, quite possibly between the student's freshman and senior year. This includes "cloud computing" and "multi-core systems". Back in my day, the hot topics du jour were ATM networking and grid computing, but fortunately I went to a good university that focused on core topics.
What's the difference, you ask? Here are you go:
Hot topic: cloud computing
Core CS topics: distributed systems, distributed algorithms, operating systems
Hot topic: programming in C#
Core CS topic: programming language structure, compilers, automata theory
Hot topic: multi-core systems
Core CS topic: computer architecture (x86, for example), instruction sets, digital systems
Hot topic: writing video games
Core CS topics: graphics, linear algebra, digital image processing
Learning math and these CS core topics allows students to learn new skills in the future. Case-in-point: Recently I have been working in a new area: machine learning algorithms (SVMs, bayesian inferencing, etc.). The importance of this area has grown in the Google-era and was not widely regarded when I was an undergraduate. My fundamental knowledge in mathematics is serving me well right now.
Finally, the professors quoted in the article are from U. of Tennessee and SMU, which are like 4th-tier universities. So don't take their word too seriously.
This story resonates with me. I would have wholeheartedly agreed with the professor when I was a student and being forced to take Math classes that I did not like. However with my experience in the "real world" I now disagree.
I ended up minoring in Mathematics, because of the of the all the Math requirements for a Computer Science major. I strongly disliked the advanced Calculus courses and could not imagine why we needed to take them. Since then I have worked in the industry as a Software Engineer for 14 years.
In retrospect I see that the time at the university was preparing me for the real world. The lesson was not that Math is important to a Software Engineering career, but that we often have to do things that we don't like to get to the stuff that we do like. I would LOVE to program all day (and sometimes I can), but there are all sorts of other things that Software Engineers have to do _and_ be good at to succeed at our jobs. We have to do all kinds of tasks that is not programming, fill out "TPS reports", be able to speak in front of other people, the good ones even have social skills (gasp!) to convince people to try their way or work with them to solve a problem. I dislike the extra tasks almost exactly as I disliked Calculus 3, but in the end, I got through it and will be a better Software Engineer because of it.
As far as the point that math turns away people that would be influential to the field of Computer Science. Tough. If they didn't have the fortitude to put up with stuff they do not like or are not good at they would likely be a prima donna in the workplace.
"Tempt not a desperate man" - Willy S.
I mean I've told this story before but I had an advisor(who was a physics professor) tell me during orientation to take the freshman physics for physcists because I did well on the physics placement test.(Which basically just repeated checked to see if you got Newton's first law. I mean honestly, it's not that hard.) So what was the problem? I took a calc test at the same time which he saw and it said my calc was fairly weak. The course was basically one big applied applied math course where they expected that you knew calculus to start with and the course made no sense if you didn't know calculus. (It was a figurative train wreck and only got worse when they broke out the linear algebra that I wouldn't see for years afterwards, let alone those weird ass integrals for center of mass that nobody understood.) Now that was the worst advising I've ever seen. I suppose I could bring up the fact the thing I absolutely despised as a CS major wasn't the math requirement but the foreign language requirement that the school had as a general requirement but that'll be for another time. (Lets just say all the reasons they gave me for it are horseshit and they know it's horseshit.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
Dennis Frailey makes a distinction between CS research and applied CS: '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.'
I get that the extent of math necessary in computer science is an open question and I won't pretend to have an answer to it, but challenging the presence of math, and the academic approach in general, in a university setting bothers me. Of course computer science ought to be taught as an academic discipline in an academic setting. Who cares if students will use it in their careers? The whole point of a university is to study academic disciplines—maybe you intend to apply them and maybe you don't, but either way they are considered worthy of pursuit for their own sake. And that goes not just for computer science (assuming that's your major) but for math, science, and humanities as well.
If you just want to get a job as a programmer without learning all that theoretical stuff, skip the university altogether and just buy a book, or go study at a technical college. Now, you might have a really hard time getting hired without that bachelor's degree, and that does indeed suck, but that's the fault of the labor economy—it's not fair to ask universities to change their philosophy to accommodate corporate culture.
"This algorithm runs in constant time. Come on, 2,147,483,648 is a constant..."
In most real-world jobs that I've worked in, it's more about being able to shuffle data from one pile to another efficiently, rather than working the math (which is, at best, uncertain). I say this from the background of having a degree in Drama and yet, I still have a decent job as a programmer doing real work (not as a manager, either).
The major problem with switching to applied computer science is figuring out which technologies or sets of technologies are going to be truly useful going forward. It could be argued that all of them are, but some of the current crop have yet to prove themselves, except in specialized cases.
I would argue that real-world programming, if one has some sort of talent or bent toward it, can probably be taught in two years (or less) concurrent with subjects on techniques in specialized areas. This would lead to most programmers needing, at best, an associates degree.
"My God...it's full of trolls!"
Unfortunately, there are many disciplines within CS that require a math background. I couldn't imagine approaching a graphics class without having taken Linear Algebra, or a class covering formal languages, state machines, and the like, without having gone through Discrete Mathematics. For that matter, Calculus 1 level stuff occasionally comes in helpful with determining the complexity of algorithms, and networking classes routinely apply intro-level calculus in order to calculate numbers like the most efficient values for different aspects of a system in order to achieve the best throughput.
That said, in general practice, it's rare that I need to use math beyond algebra. Even so, however, theory classes like the ones I mentioned above are what make Computer Science a science, as opposed to merely being a programming major. If you're suggesting that you don't need math for a CS degree, then you're very wrong. You may not need it for an Associates level programming degree, but you most certainly need it for a CS degree. To suggest otherwise is to miss the distinction between the two.
time for IT jobs to drop the need BS or MS for level 1 jobs what use Calculus on HELP DESK? Desktop support? or IT ADMIN?
and Most CS Educations are poor for IT work anyways trade schools are much better.
http://www.csmonitor.com/USA/Education/2011/0202/Does-everyone-need-a-college-degree-Maybe-not-says-Harvard-study
http://www.networkworld.com/news/2011/022511-it-graduates.html
...however they use logic a great deal.
Keep in mind when old-timers like me were in college, CS was about determining how to best utilize the 640 KB of memory you had available. You needed to understand more math than now.
OTOH, I actually think that multiple languages are a must for programmers these days. I - for one - speak/write German and Spanish. I have seven programmers with CS degrees and an additional six analysts with CIS degrees working for me.
The Kai's Semi-Updated Website Thingy
you cannot be an engineer. Honestly, the one discipline that cannot lower its core requirements is Engineering (CS included). I agree on one hand, too many CS majors do not have a clue how to actually develop real software when they graduate college. This especially happens when CS is a part of the math (arts and science) dept, but this total focus on theory is the problem, not because the students must understand high level math. IMO, this is why CS should be a part of the Engineering college, to ensure the theory can be applied. Every engineer I know has passed Calculus 3, imho this should be a minimum req. to build systems that affect the lives of other people...just a thought.
Math
If you don't want math with your computer science, learn computers / networks / shiny jargon at a trade school
Which is precisely what employers want someone with a BSCS to do: sling code, manage their network, administer the database and many times support. Just go through the job listings and you'll see the typical laundry list with "a degree in Computer Science, Engineering or Information Technology wanted."
If you want to do algorithms and other mathematical type of things, you'll need at least a Master in Mathematics - skip the MSCS - most of those jobs want a graduate degree in math.
Here I'll add to the war:
CS = code slinger; aka Code Monkey.
Math = algorithms and design.
If you don't want to be a code monkey kids, get a degree in Math.
The Information Systems guys will end up in management.
1. The fact that Computer Science has its foundation in mathematics.
2. Support Vector Machines, computer graphics, optimization problems, machine learning. All require math to understand how they work, and how to apply them.
3. Learning computers without the math is called an MIS degree. If you don't like the math, then get out of CS.
4. Also, you have to understand that in most universities, the calc/physics requirements serve as a weeding out process.
It's really simple: what you want to do is just get down to coding, get a 2-year degree, or just teach yourself and then start at some company as a coder at the bottom rung. If you want to be an academic or have the background to work on a broader variety of problems, get a 4-year CS degree. If you don't want that, don't get a CS degree, there's no reason everyone needs one.
If you do go the CS route, though, don't whine that the degree has math in it, since in science that's how we attack problems methodically. Hence the S in CS. When you picked your school and program, it's not as if the math part of the curriculum was some big secret being hidden from you, you're the one who signed up for it.
If you're pursuing a degree in computer SCIENCE, of course advanced math will be involved. Do you really think your favorite C++ development tools just appeared without any math? Do you think Linus gave us the OS Of The Gods without math? If all you want to do is hack databases or keep the network running, why are you getting a CS degree? I can get a Gen-loser to do that job at half your overpriced College Graduate salary and all the Doritos the kid can consume and he won't bother me about "family leave" or 401Ks. He'll do a better job of it than a huge percentage of you graduates as well (ya, I know you don't want clients to see him - that's why I keep him in the dungeon with the fridge and all the porn he can stream).
Working as a Software Engineer for 10 years, I've only really needed up to Data Structures. If you want to be a programmer, you can goto your local for-profit school and learn how to program. I've never needed continuous math outside of school. When it comes to work, algorithms was more useful than linear algebra.
But universities are doing more than training you to be a programmer. They also need to find the next generation of professors and researchers. This is the same reason that all of us tech nerds learned history and Shakespeare in high school. None of you reading this message are probably using those classes from HS, but someone in those classes needed it to become who they are today. Forcing everyone to go through each of those classes allowed all of us to make a informed decision about what to do with our lives, with respect to both a HS diploma and a CS degree.
I have seen many outstanding programmers who struggled with calculus and never really got it.'
Programmer != computer scientist
Sigh. My previous comment was horribly garbled. What I meant to say is - did you test a dynamic programming solution too? It sounds like the sort of problem that such a technique would do well at (but perhaps it would run into the same problems as pre-computation).
I have never asked a math question while interviewing a programmer. The average corporate programming job requires basic math and at the very most simple well known formulas. I would say heavy math skills are only helpful in some very specific programming specialties. The last thing I want my programmers doing is writing their own bubble sort routines.
Got Code?
Comment removed based on user account deletion
For any applied (e.g. programming, engineering, etc) computer related field, what is necessary are courses in advanced algebra (e.g Algebra 2), logic (algebraic and boolean), and a basic grasp of calculus (e.g. Intro to calculus or calculus 1). Those should be sufficient math courses for an MS or BS degree in computer science or computer engineering degree.
If you pursue a PhD in computer science, then more advanced courses in logic, calculus, differential equations, number theory, and numerical analysis are appropriate, and should be required. Those courses should be optional for students pursuing an MS/BS.
JMHO. But it's the correct opinion. ;)
make imaginary.friends COUNT=100 VISIBLE=false
I don't get why I had to learn all the math in university. I agree some math is useful, but I have never in my 10 years working applied any of the advanced stuff, nor found learning it helpful.
And some other grad from your class will tell a completely different story. My first job was pure tech, embedded kernel software. My second job was molecular modeling. If I did not have the math (which I too never expected to use) I would not have been qualified for that job. Also, later when I went to business school I used more advanced math in marketing classes than I ever did in computer science (again, I never expected this).
So basically the CS program is preparing your for more advanced jobs, a wider range of opportunities. The fact that some members of your class never go for such jobs (and you may not be one of those, perhaps your next job will use the math) is no reason to drop math from the CS program.
It seems like a lot of people are confusing CS and Software Engineering and aren't aware of the differences. I think that a lot new students want to be software engineers but most schools only offer traditional CS programs. So it's only natural that they are going to be turned off by what seems to be math courses with no relevance to what they want to do.
CS is very important to have and I love it, but I think many schools dismiss the importance of having a Software Engineering program as well.
Software engineering and computer science are two entirely different fields. I don't know why they're combined so often.
After twenty years of recruiting engineers, I find aptitude for maths as the strongest predictor of development ability - the more descriptive degrees don't cut it. Software engineering courses teach to how to get the bugs back out again and manage the process, but good maths is what stops bugs being there in the first place.
really should be tailored to the kind of programming and development the student expects to be doing after he graduates. Working for a defense contractor? Yeah some basic understanding of calc and linear methods etc is probably useful. Business? Outside of narrow quant areas on Wall St, nothing much beyond simple math from high school. Of course there areas where more advanced stuff like graph theory might be appropriate - maybe in the telecoms or CIA. But to force students (as I once was) to take a few high level math courses just 'because' its not fair to any involved.
I'm not one to nitpick, but increasingly I find that nearly every single post on a story is off topic. There are hardly any posts about the topic itself. Joking is great, humor is great, side notes are great, but when on-topic stuff becomes under 10% of the comments, well... many repetitive comments about spelling, duplicates, personal attacks...
Build your own energy sources from scratch. http://otherpower.com/
There is no argument here. It's akin to saying "Let's be honest, most creative writing majors will end up in marketing, so a creative writing education should cut the crap and focus exclusively on applications in marketing."
I like my engineers to be competent programmers and mathematicians. If you only want to be a code monkey, save yourself some cash and go to a trade school, not a university Computer Science program. Please stop trying to redefine "Computer Science."
I took international studies in college instead of comp sci because I couldn't handle the math. That ended up working just fine for me - I now program for a living, and I got to study stuff in college I had more of a personal interest in.
All that software has of unreliability, security holes, bloat, inconsistency, bugs, maintenance costs, comes from dunces being "successful" at meeting some deadline one day and passing some conveniently lax or naive testing and validation and having some pointy haired manager sign off and moving on with their careers to another project. CS IS math. Programmers who cannot understand math, no matter how proficient they are at hacking code, are always the ones leaving behind a mess that will eventually cost much more in the long run than the problem they were supposed to fix.
CmpE major here, just finished up my sequence of 9 math courses needed for the degree. All were useless except Calculus and Linear Algebra, and then only marginally useful.
Likewise we have to take a Physics sequence that includes a class on optics and lasers. Has nothing to do with anything, but they need to give the professors a job.
To anyone struggling with math who wants to be a CS/CmpE major, don't give up. I had to start off with basic (rudimentary) math in community college, doing long division and multiplying and stuff. Yeah, it never gets easy but it isn't impossible.
And remember that the purpose of college is to drain your savings and grind your will to live down to nothing. You'll have to take a LOT of pointless classes that are unrelated to your major. That's just how it is. Don't let your dream die, but prepare to work harder than you ever have for no reason at all.
Whether Calculus is used by a student later in their life is irrelevant. Calculus (as well as other college level subject like physics, biology, etc.) enables a person to develop their mental capacity to think well and think critically. What you learn in CS is a set of tools that are used to solve problems. Whatever area you go into and apply your CS training you will need these thinking skills to solve those problems.
The math shouldn't be that hard for bright enough individuals. A university degree is just as much a test as it is an education.
The problem is, many of us have been reduced to the lowest form of code monkey. Being a business owner, I know that the vast majority of coding work is just the most mind-numbing stupid shit you could possibly imagine. Not only are there few positions that actually require you to know any math at all, but no matter how talented you are, you're often forced to work shoulder to shoulder with people that would be better off flipping burgers.
That the need for math is questioned comes from a big mismatch between what the CS degree trains you for, and what 95% of people with a CS degree do with it.
I would submit the math requirements are common in the core requirements of any Bachelor of Sciences degree, rather than specific to a Computer Science major.
If you don't want to master basic college-level math to earn a sciences degree, then perhaps you should be lobbying academics to offer a Bachelor of Arts with a Applications Development major instead.
I would submit the math requirements are common in the core requirements of any Bachelor of Sciences degree, rather than specific to a Computer Science major. If you don't want to master basic college-level math to earn a sciences degree, then perhaps you should be lobbying academics to offer a Bachelor of Arts with a Applications Development major instead.
My university had two options for those interested in computer programming. Computer science in the school of science and Computer Information Systems in the school of business, other universities had a Computer Engineering option in the school of engineering(*). There were a few students who transferred to CIS since they were not interested in taking the extra math classes. I agree that there is no problem with the math requirements, the problem is that some people are in the wrong program.
...
(*) CS, CIS, CE, etc don't have fixed definitions. At other universities CIS is in the school of science not business, CE in the school of science,
The real issue here is the personal hygiene of CS professors. I had not one, not two, but THREE cs professors that refused to wear deodorant. Learning become unbearable, as each time I questioned their logic they decided to come near me to explain. A noxious gas then enveloped me each time as I struggled to stay on point and remember what I even had questions about. The results from it? Not the best understanding of math, but great tolerance to the army's gas chambers.
CS is more about continuous math than ever.
Until the mid-1980s, computer science was mostly about discrete mathematics. Knuth is heavy on combinatorial and clever integer math. Mathematical logic and proof of correctness were big. I went through Stanford CS for a Masters in the mid-1980s, and and never had any class that required serious number-crunching.
But now it's completely different. Graphics, game programming, machine learning, robotics, control, audio and video processing, and even finance all involve heavy number-crunching. Differential equations come up everywhere. Statistics is far more important, and there have been major developments in the theory of statistics. (Much classic statistics assumes you're limited on compute power; that's why "least squares" methods were so popular once. Now there are better techniques, ones much better at handling outliers.) As a result, AI is working much better than it did during the "expert system" and "AI Winter" eras.
Basic calculus is not advanced math. Calculus is just what gets you to entry level so you can learn real math. Real people use this stuff. Last year I took a course at Hacker Dojo on machine learning, taught by a quant from Blackstone Capital using the Stanford course materials. They assumed everyone had a thorough knowledge of calculus. I'm not a "math person", nor an academic, but that's the price of staying active in this industry.
If you just want an "IT" degree, you may not need much math. The math parts will be bought with the package you install and administer. But in that case, you're probably better off getting a degree in business administration with some extra IT courses.
Sadly, the scholastic system, like everything else, is so corrupt that very little education or science actually happens. Let's face the truth, most people only care about their paycheck. Nobody really gives a damn about students or an effective curriculum. It's all about money making more money, power seeking more power. Of course, if universities actually took some responsibility for the careers they are supposedly building, they would design real world course material. Furthermore, they'd test real world accomplishments, not just to some prof's arbitrary standards. Lastly, the graduate people into needed positions rather than churning out an overabundance of useless and expensive paper degrees.
For all the money universities get, they sure don't return enough back to society. Most university funding just goes to supporting pretentious people in fancy lives.
And some other grad from your class will tell a completely different story.
Then they can take it of their own volition. They should not force random knowledge upon people because they might need it. If people make a mistake and fail to take needed courses, then too bad for them. Let me decide what opportunities I wish to have.
As one of the other posters has pointed out there are programming oriented degrees outside of the school of science that do not require as much math. Go for one of these degrees, don't water down a science oriented degree.
If you were good at math and computers, you were a CS major that also gave you a math minor. If you were good at computers, but not at math, you were an IS major which had significantly lower levels of math as a requirement. If you were good at neither math nor computers, you were a MIS major where you took classes on Powerpoint and math on flashcards.
I had up to Calc 2 for my CS degree. I didn't go on to a masters but I have a decent job doing UNIX/Oracle coding. For me the most math I've used is +, -, *, / and some set theory. Outside of that I've yet to touch any calculus or trig or anything fancy in 6 years of programming work out of college.
I guess I could touch on that stuff more in my work but then I have other people who may have to look at my code and not understand what that stuff is about. K.I.S.S. applies to application design and coding so maintaining things is easier when accompanied with good documentation.
I'm not going to be around forever and I'd like the code I write to last beyond me for some time. The easier it is to work with the longer it'll stick around I think so long as the problem it solves lasts beyond me.
~~ Behold the flying cow with a rail gun! ~~
Why are the biggest leaders in the computer industry all college drop outs? They took much less computer science than the degree holders and look who's ended up dominating the industry. Heck, in the one area I really know, databases, the drop outs are busy throwing away all of the theory about relational databases and building super fast, very useful tools like Cassandra. I know that many academics might not think of SQL as particular academic, but it was one area where research made its way into products. Now the practical folks are learning it wasn't a worthwhile path to follow, most of the time. Even the people who still use Oracle spend all of their time denormalizing the tables, essentially unlearning all of the theory that the algebraic theoreticians created.
Political science. Christian Science.
I see little or no ability to do experiments, observe phenomena in computer systems, or handle scientific thinking coming from CS majors, little in CS profs. They are all applied math types.
When did you last read a paper about observations of real-world network traffic phenomena? About the distribution and intervals for context switches that take time from the main computation in a super-computer cluster and the implications for cluster design?
"The Constitution, the WHOLE Constitution, and nothing but the CONSTITUTION."
I'm not very good at math. Well, I should rephrase that, I'm not very good at sitting down and doing math problems, I always forget to carry the 1 or write down the wrong decimal place, something silly. What I do get is the theory. In programing it is incredibly important to know what things like a modulus is. You don't have to be great at working out the formula, but knowing it exists so you can search for pre-existing code that uses it to solve your own problems is vital. So, do you need math? Certainly. Do you need to be great at math? Definitely not.
Mathematicians can write the algorithms and spam filters that the rest of us copy and paste... It takes one. If you want to become this person, then pursue it.
As for the rest of us who copy and paste, we may not need to be inventive, but we should be literate. We may not need to solve problems ourselves, but we should be able to recognize the best answers and the best code to use.
On a similar tangent, how about the role of art and user psyche in CS? There is little emphasis on user interfaces, and the graphical representations that are the glue between the computer and its users. Even the design of programming languages is user centric. It is not a matter of math, but rather of convenience, efficiency, and utility.
In any case, this is a typical case of oversimplification. If you are confused about your own role or your research in CS, you may have a problem, but as of CS as a whole, the requirements of being a competent "computer scientist" can remain undefined. It is a mythical being which its ambiguity can be entertaining.
Dennis Frailey makes a distinction between CS research and applied CS: '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.'
Universities have to contend with the huge proportion of society trying to turn them into trade schools. They are not trade schools. They are Universities. (Well, SMU may be a trade school masquerading as a University, for all I know.) They are not in the business of teaching people to do a trade. They attempt to prepare people to do any job. Putting up with the uneducated masses try to destroy our institutions of higher learning is bad enough, having adjunct professors try the same is an admission that they are in the wrong place. While academia is a place where we can have conflicting ideas, we can't have dumb-asses. Fire him.
I still fail to see how calculus and continuous math correlate with one's ability to succeed in many areas of computer science... I have seen many outstanding programmers who struggled with calculus and never really got it.
Studying math is the training for your brains. Studying it simply makes you smarter. Some can go without it, sure. But for many math is crucial in helping to (unconsciously!) learn how to organize their own thinking process, formalize their own thoughts. Math also teaches brains how to solve problems and (most importantly) that solutions depend (very much so) on definition of the problem. Heck, without the math we wouldn't even have the concept of "definition of the problem."
Additionally, math language is pretty much only common international language. Try to explain some method or proof to the new math-less CS graduates (I've met couple of them already) and they would stare back at you as if your were an alien. All they know is "Java is the programming language," "Bill Gates knew only BASIC and is billionaire now" and "O(n*log(n)) is good, O(n**2) is bad" (without actually knowing what BASIC looks like and what the meaning of the O(x) notation).
Otherwise, the question is kind of well known and answer is also. Those with strong engineering bias (aka "read the books and do all by books") tend to disregard value of math for they look at it as a factual subject. (e.g., I myself haven't seen an integral since graduation. So should I haven't studied them?) Those with scientific bias (aka "books are mostly wrong, should write myself one") tend to appreciate and enjoy the side-effects of the studying math: math language, formalization of processes, defining the problems, etc.
All hope abandon ye who enter here.
It seems like all the real world courses are years behind the times (a networking class using a book written in 2000? Yet I need the 2011 edition for my entry level physics book, material which hasn't changed in decades). Yet I'm forced to take a language theory class, which while an interesting topic, really seems far less useful to the typical CS student than my networking elective.
Most people are job seekers and college is just a hoop to jump through in that pursuit - I've run into plenty of people without passion for their subject of study; they are there for the job they want (influenced by the pay, stability, and misconceptions of what that job will be to them.)
Industry only ever cares about the bottom line; human resources are just another form of resource with some PR risks attached to it-- but otherwise quite removed from humanity. They pressure universities along with their drones to train workers... even complaining about graduates as not knowing enough of the buzzwords they are looking for (which is not the purpose of universities.)
3 Aspects are going on from what I see:
1) Trade school lacks prestige (pay) over college so the 'market' demand is for a university level prestige in a trade school.
2) Business philosophy(religion?) permeating all aspects of the culture. If you run a school with a business mindset you are going to rip it from its foundation. My university is in a culture war not inside the institution but inside the minds of its staff. Words like I.P. gain acceptance and warp perspectives. "Producing students", employers as the "indirect customer", and students as a "customer" are changing perspective as well as shunning those who stick to the traditional perspective that brought the world forward up to now.
3) Society bias for college. not having a degree is becoming as bad as being functionally illiterate. My former employer had no degrees in the building except mine yet even hiring a RECEPTIONIST they'd chuck out the applicants without a degree (in this economy they get a lot of applicants.) Nobody working there could be hired for their own position these days.
I create waves with staff when I argue the college model is not even good for programmers or even software engineering. IT as well. Those jobs are more like carpentry or plumbing and should have a better suited model. This is largely misunderstood and hopeless but i keep making the point hoping they at least get what i'm saying. I have a carpenter and a plumber uncle- there is a ton of experience involved but no PhD program for them-- they are masters of their field which is every bit as much (in some cases more so) as most PhD degrees. In their career, a degree wouldn't mean much because you can't book learn it all classrooms over a few years. It uses other kinds of learning and thinking. Our schools too often focus on 1 approach as if there is only 1 way to think about EVERYTHING; research shows there are different ways of thinking, different kinds of intelligence, and different learning styles. I've seen plenty of good students who are "smart" because they can navigate a system that happens to be suited to them but who can not function outside; they often go into academia -- not because they suck, they are great - but because it best suits their talents... this however results in a cycle of like minded people concentrated in an institution which is part of their own identity and therefore must retain the characteristics which were so beneficial to themselves (for the self-centered ones; not all are like this - others merely fail to see...sheltered and have a culture-shock reaction to alternatives.)
Democracy Now! - uncensored, anti-establishment news
When you tell people to consider leaving computer science if math is not their strong point, you need to be more careful. I was in a fragile position once where I thought about leaving computer science because the math was difficult for me. I thought that I needed to be naturally talented at math and that it should come easy to me if I wanted to succeed.
When it comes down to it, I pushed through and stuck it out to the end. I wasn't the best in any of my math classes by any means. Most of them were passed with "C"s. I am 3 years out of college, and making $80,000 a year. Not once has my difficulty in math been an issue for me. I know being smart and really good at math makes it tempting to put yourselves on a pedestal, but seriously, knock it off. Not everyone has to be as smart as you to succeed in this business. There are many many creative and talented people who compared to other people in the field, aren't the smartest. Often times they end up being leaders and doing really great things because they are the ones with the most drive. They don't give up just because something doesn't come easy to them.
So if any of you out there are considering leaving CS because you struggle to do the math, take a long hard look at it. If you feel like you do really well with the programming side of it and it's just the math you have trouble with, there is a good chance you will be just fine after graduation.
TL;DR
If anything the math weeds out the idiots. Or those that aren't willing to work their ass off at something hard. Math is hard. You need to do it over and over until you get it.
If you can't hack it then become an MIS. You aren't as employable and will make less, especially in the long term. Not every company will hire an MIS but everyone will hire a CS. There's still jobs for you. But please, don't touch anything serious because you've proven you don't have an analytic mind who enjoys solving hard problems and challenging themselves. That's what a CS to MIS quitter tells me.
"If you are a dreamer, a wisher, a liar, A hope-er, a pray-er, a magic bean buyer
Prior to studying CS in university, I had previously gone to college for two years, studying Electronics Engineering (it was a two year course). There were 5 math courses, 3 of which were Calculus. It made looking at math proofs when I was taking Artificial Intelligence or Cryptography in university look like fun. I haven't used a lot of the math I studied in programming (although I did write math functions for a language called REXX, including routines for sin, cos, tan, log, ln, e, fact, C, P, and since Rexx does math with arbitrary precision, it made for a good calculator: I came up with an algorithmic enhancement to the exponent function 6 months before I took it in an algorithms class: I could compute 123456789.123456789^123456789.123456789 in 1/2 second on a 40 MHz '386 to 500 siginificant digits, and could check my exponent finder using (1.000001^999999) ...add zeros and 9's in equal measure to get better values of 'e'. ) The math lets you understand things like recurrence relations, algorithms and their efficiency, and gives a deeper knowledge about why divide and conquer algorithms work so well. University is education. Tech. schools and industry provide training. Don't confuse the two.
Sadly, all these theologians equate mathematics to analysis. Ten seconds of understanding would show you that its underpinnings are algebra and logic.
Steve Stevenson, School of Computing, Clemson.
The main point is that anybody using a linear list for non-linearly accessed data needs serious adjustment with a cattle prod regardless whether or not he is able to spell "quadratic".
It does not matter whether a CS major can upon request prove to you just how bad his programs are as long as he is not bent on doing them right by default.
A good CS major needs to be able to analyze a new algorithm. A good programmer needs to be able to pick a good established algorithm. Both are orthogonal skills. A good computer artist will create good new algorithms. That's not as much a skill as a gift.
If you are designing hardware Calculus is what you need. If on the other hand you want to built good software Finite Math is what you need to know. From the software side, computers don't understand Calculus, which by the way is shorthand for complex Finite.
The more complex the task, the simpler the steps need to be.
Every time I look up something on wikipedia even regarding topics I know quite a bit about there are always a series of very impressive looking figures and equations that are all greek to me.
Sometimes I get the feeling that there is a kernel of understanding I'm missing out on because I don't know enough strategies for manipulating ideas as equations.
If the universe can generate multi-cellular life without explicit knowledge of mathmatics I'm sure many can have successfull careers without knowing the difference between a vector and a tensor...then again most of us don't have billions of years to get our work done.
Hot topic: writing video games
Core CS topics: graphics, linear algebra, digital image processing
FWIW. Graphics is only part of video game development. Most of the time the graphics is largely "outsourced" by licensing a graphics engine. Other parts of game development are in the areas of artificial intelligence, networking, databases, human/computer interaction, etc. Hovering over everything is data structures and design/analysis of algorithms, this is where so many things go wrong. Toss in a good understanding of architecture and compilers. The core CS topics necessary for developing a modern AAA game is pretty comprehensive.
Many aspiring to work in game development limit their chances to do so by focusing only on the graphics. Just as many interested in computer programming limit their opportunities by avoiding the advanced math. I will admit that in many of my jobs I did not need the math, however to my surprise I've had job opportunities that did require having had the advanced math classes. Not that I was doing much of the math myself but I needed to understand and communicate with the actual mathematicians. I've had to dig out those textbooks from that "extra" second year of math to implement some algorithms.
I think the distinction between pure "research grade" CS and applied "I want to get a job in the real world" CS is the important thing.
For too long it has seemed as though if you like computers then you should aspire to a CS degree. But as everyone finds out, the stuff you learn in a real in-depth CS program is often not applicable to much in the world of interesting application development. The stuff that IS could just as easily be taught in a more applied way without all the math.
We're supposed to be leveraging "re-use" and not re-inventing algorithms every time, so people should be able to use a library of algorithm objects (or whatever) for pretty much ALL applied programming, at which point all you have to understand is the trade-offs between different available choices and what they do but not necessarily how they do it or especially how to invent a better one.
I think of "real" CS as what you find in Knuth. If you want to publish papers on combinatorial algorithms then you probably want at least a master's in math before you even get started with the computer stuff. You will then aspire to getting a job as a CS professor, or possibly working in a corporate sponsored lab for IBM or maybe Google. But the things this type of scientist does may not be the kinds of things that actually got people excited about computing to begin with.
If what you really want to do is to build cool applications and Change The World(tm) then honestly hardly ANY math is needed, and while more knowledge and a better understanding of the fundamentals of what's going on will always make you better, there might be more effective and efficient things to expend your effort on, especially in cross-discipline areas that interest you and which you would like to work in.
Pure CS is really just pure math, and there are a limited number of applications (and jobs) in such a thing. What really makes computers interesting is their applications, so instead of CS, why not learn applied programming plus an application domain like Biology, Finance, etc. Ask yourself "what problems do I want to solve?" and if computing is going to be a tool to that end and not just an end unto itself, then a pure CS degree is probably a waste of effort.
G.
Load balancing.
While you may be exposed to the concept of derivatives in pre-calc, Calculus is directly applicable to modern software development. At my first programming gig, I used calculus to do selective database usage, based on load. I was told to rewrite it less efficiently to ensure that other developers would understand and be able to maintain it.
If you don't believe calculus is a fundamental for software development, I will believe you haven't really done much software development.
Often wrong but never in doubt.
I am Jack9.
Everyone knows me.
First, while it's true that numerical math is not used in many CS areas, discrete math is. Logic, set operations, and the like are used pervasively in CS. And learning numerical math is a core breadth area that instills mental discipline. Quite frankly, if math is not your strong point, then you should consider moving out of CS.
Are you kidding?
I was in a PhD program in Electrical Engineering at a top-10 university [not trying to start a pissing contest here]. Quite frankly, I had a much better opinion of CS until I started taking a lot of graduate-level CS courses there.
Saying CS people do a lot of math is like saying a bank teller or cashier does math all day.
I found undergrad and graduate CS students alike would go running for the hills as soon as someone said the words 'integral' or 'derivative' . Random processes and statistics were avoided.
Most 'numerically' focused papers/research was focused about speeding up raw calculations (such as matrix multiplication) without any understanding of the application and without any critical examination of the possibility for lowering complexity through close approximation, transforms, etc...
Many papers (especially related to CPU/compiler performance don't even average measurements properly). Even the industry-standard 'SPEC' CPU benchmarks use the wrong type of averaging which leads to incorrect results -- in some cases a faster computer (which completes all benchmarks faster than a slower computer) can have a *worse* score than the slower computer].
Computer architecture and programming are fine things to learn, but they are not enough in themselves. If a person wants to be an architect, they have to know not only about construction but also about design -- art, etc... Likewise, I think too much of CS is focused on either way-to-abstract stuff and/or trade skills without giving students a chance at actually learning something more domain-specific.
Programmers are a dime a dozen. Decent programmers that truly understand what they are implementing (in a specialized field - engineering, sciences, etc) are very rare.
This dude seems to believe computer science is the same as software engineering. It is not.
0x or or snor perron?!
I remember 15 years ago in my first class of university in Number Theory, a student asked a question along the lines of, "I'm in computer science. Why I am learning this stuff? Am I really going to use this on the job?"
The professor said something like "No you will never need this on your job. However a computer scientist needs to be able to solve problems. You come here to develop your problem solving skills. One of the best ways to learn how to solve problems is with math.".
I don't remember much from University but I remember that and I believe math is NOT a waste of time. It is really hard to find a software developer who is a good problem solver.
I didn't really "get" mathematics until after I'd been programming steadily for about 5 years. After that, concepts like n-dimensional matrices, determining the area under curves and relational changes between quantities became much more intuitive.
What always made math difficult was never the basic concepts, which are often trivial. It was the god-awful symbols and counter-intuitive syntax used to express math. Had I learned concept-symbol relations early, like Chinese and Japanese students do when they memorize characters, I expect that I would have had much less trouble.
Please do not read this sig. Thank you.
Anyone who cannot cope with mathematics is not fully human. At best he is a tolerable subhuman who has learned to wear shoes, bathe, and not make messes in the house.
-- Robert A. Heinlein.
And I'm a borderline human who was happy to get a D in Differential Equations. However, I encourage anyone who thinks differently to do what they feel is right, and leave the good jobs to the rest of us.
Calculus class is not. You can teach a monkey to take derivatives and integrate. But students struggle because on the exam, they'll have to do a lot of algebra and mathematical trickery to get to the simple parts. When students come out, they're far more mathematically mature, I noticed this a lot when tutoring students. That mathematical maturity is essential to being a good programmer. You could develop that with a class simply on mathematical puzzles (something less practical than discrete). But why not teach them calculus as a side benefit?
At the program I am at now, I have had to learn Discrete Math, Linear Algebra, Calculus (up to differential equations), and Statistics, and this is before even taking an algorithms class. Even if you are a programmer understanding Calculus and the mathematical concepts helps to train your mind to think logically and abstractly about problems, which is the main concern of programmers. Eventually you will run into a problem that involves mathematics, and because you have already been introduced to it you will have some understanding of the problem to grab hold of. Logic is at the heart of the issue, and the best ways to make students think logically about solving problems is through mathematics. Once you have a logical base, the programming is easy.
And to understand probability you need some math.
I find myself needing calculus only when a programming project involves calculus. It's a useful skill to be good with calculus, but it's not necessary to know. It's probably good to have students learn rudimentary calculus to sharpen their abstract thinking skills, anyways.
Calculus: The study of breaking large problems into infinitesimal ones, making them linear and therefore "easy".
Programming: The study of breaking complex operations into small ones, making them obvious and therefore "easy".
Yes. I clearly understand how calculus has no relationship to programming.
Given that, we should probably remove all floating point support from all programming languages.
Coding: The study of finding someone else's code vie Google, cutting and pasting it, then randomly editing it until the compiler quits whining.
Well I can certainly see how calculus wouldn't help there.
Math is important for CS studies, but not to the extent it for engineering studies. However, my experience has been that formal logic is MUCH more relevant to CS studies and practice, yet pretty much ignored by most CS curricula. I studied mechanical engineer, had to take a required philosophy course, so I took a course in Formal Logic - best course I ever took to prepare me for a career in CS and software engineering.
I didn't find the math to be difficult or even tiresome. But the nimrod professor criticizing me for exiting subroutines in the middle of loops and conditionals?
I found that to be annoying given that I'd started programming in ASM before I ever hit a university and it offends me to execute code I don't have to just so my code always hits the return way down there at the bottom.
Yay, Michael Abrash; boo, academician.
Orwell: "In a Time of Universal Deceit, telling the Truth is a Revolutionary Act"
Taking a degree in computer science and then complaining that you were not taught how to configure a Cisco router is like taking a degree in physics and then complaining that you were not taught how to run a power plant.
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
It has been said that if one learns how to play a musical instrument then it is easier to learn to play a related instrument, i.e. tenor sax & alto sax or piano and organ. The same is said for language. If one learns German, Scandinavian languages (English, too) should be a fairly quick study. In my discipline, Christian theology, I learned to read both Attic & Koine' Greek and biblical Hebrew. My undergrad college had a requirement that Attic was a prereq for Koine' so I was pretty well prepared for the relative easiness that was New Testament Greek. Latin, although not formally required either in my B.A. or M.Div., I find so similar to Greek in grammar and syntax and a fair amount of vocabulary that it would be fairly straightforward. Related, Hebrew provides a good foundation for other ancient Semitic languages such as Ugaritic and in it's modern context Arabic. But since I went back to school to pick up a degree in CS about 10 yrs ago (never finished, btw--wanted to learn to be a *NIX sysadmin and still do) I was reminded of a very valid point in my first semester of Attic: how many people graduating from an American HS know how to identify parts of speech, know the rules of standard English grammar, distinguish clause types, or simply diagram a sentence? Learning Greek as I did absolutely made me cognizant of my own native language and my wife (4 yrs of French), both of us cringe at what passes for final copy in newspapers, even prominent newspapers. All of this is to ask if programming language instruction should have a necessary prerequisite of standard English grammar & syntax, and, no, the silly English composition courses that are mandatory in virtually all core curricula don't count. Additionally, would it be better if language instruction was indeed seen properly within the discipline of linguistics rather than a sub-discipline of mathematics? Lastly, since programming is invariably applied logic does it not follow that a fundamental course in logic would be necessary? Then again, how many philosophy departments require logic before jumping into its sub-disciplines? (Logic is probably seen as an artifact of dead white male European colonial hegemony...but I digress...) The classical trivium (grammar, logic, rhetoric) that is the foundation of the liberal arts HAS to be recognized in the discipline of CS. Trying to teach CS apart from a proper understanding of the above would be shortchanging students by making them not truly prepared.
Pax, Pastor Mac
A majority of programmers are employed in developing business software (e.g. inventory, benefits, medical, insurance), government service and policy software (e.g. dmv, food stamps), and cots software (e.g. Windows, Office).
Logic is important. Discrete math is important. Stats is important. You can be a successful programmer without formal knowledge in these areas, but formal knowledge in these areas is important to be an excellent programmer.
But continuous math just isn't important even to being a successful programmer for the majority of career paths. Yes it comes in handy, and yes it opens up opportunities for you that you wouldn't otherwise have, but it just isn't critical. It won't make or break your career.
Given that most professional programmers aren't going to have more than 4 years of post secondary education, better to use that time for what's most important. Those who want to pursue an academic computer science career or a career in a science or engineering field can go to a research institution or double-major in math, biology, physics, etc.
It's just a way to talk about things that we observe in the world with some precision. If you're willing to put some thought in, you can probably figure it out. Your brain does math on it's own all the time, you just need a vocabulary. In essence, that vocabulary is moving math from one part of your brain to another through symbolism.
I paid for that stubbornness with a couple hundred basis points off my GPA
Very telling. If your goal is to skate through college without being challenged, then by all means, drop calculus. It is a deep and challenging subject at the heart of science and engineering. I scorn supposedly intelligent people who choose to pad their GPA instead of learning something worthwhile.
Here is how ACM and IEEE try to organize computer related fields:
http://www.acm.org/education/curric_vols/CC2005-March06Final.pdf
This attempt of standardization is saying that the purpose of CS is to explore and teach long lasting truths related to computers, and that is not achievable without formal language of math. If you are meant to learn how to speak mathematics, then you should practice your speech as often as you can and broaden your vocabulary as much as you can. So it is not the problem in CS as a field, rather it is lack of understanding what it's supposed to be.
Hey, if you're too stupid to understand basic calculus then you're probably not smart enough to be a good programmer anyway. Either go get an english degree or teach yourself HTML and just design webpages for a living. Leave the real programming to those of us who know what we're doing.
Many other posts explain why certain math-that-doesn't-matter really does matter to CS students.
Part of the problem is just that different fields need to master different math in different orders, even if at the end all of them end up having mastered almost all the same things. The math department's ordering specifically works best for math majors, though, and colleges aren't going to make a special duplicate math department for the exclusive use of the computer science department.
Therefore, we end up getting our math content in a less than ideal order; some things maybe much too early, other things too late. It can take a few semesters before all the pieces snap together well. This contributes to the attrition among CS students; certain CS classes may be much harder if you haven't mastered the right math yet, and sometimes certain math classes may be harder if you don't yet understand how you'll be applying it.
I dislike this kind of dissing of math in favor of praising a "hands-on" approach to programming.
I don't know if developing math skills helps with what is mostly a craft such as programming, but I think that encouraging an anti-intellectual atmosphere in the programming community will only lead to an even greater abundance of insultingly crappy code that consumes more effort and causes more frustration than any other factor in the industry.
You don't need a CS degree to get into programming...
You do need programming to get a CS degree.
CS includes math science and discrete knowledge of the inter-workings of a computer system or related
I studied at the University of Wollongong (Australia), which is heavily influenced by a large multi-national company. They pretty much defined what they wanted out of a graduate, and the university taught accordingly. As a result, UOW has one of the highest employment rates of CS grads. I didn't do any maths there, and have spent 15 years in online development. The funny moment happened when, for a small javascript app, we had to calculate when a point had touched a line. We looked it up on Wikipedia, and continued on our real job of understanding what our customer REALLY wants/needs and giving it to them.
The problem here is that CS has become much more diverse over the years. It is definitely true that it has its roots in mathematics, and I would still argue that some math should be required for CS students.
However, I noticed that your area of specialization strongly determines what kind of math you need. For example, if you specialize in computer graphics, you probably need a good dose of linear algebra. However, if you specialize in data mining or human-computer interaction, you will depend more on statistics.
Personally, I never needed all the calculus and algebra that I learned in university, but I certainly wish I'd know more about advanced statistics - and that was only a very small part in the curriculum.
The question that actually seems important to me here is not if math is relevant to CS students, but what kind of math is actually relevant.
Completely disagree with this. Computer Science for years has been practically defined as applied mathematics until recently. Even then, math knowledge is still essential even in applied CS. My knowledge in computer graphics (which includes game development, a highly sought-after career in CS) wouldn't be half as sufficient if it weren't for linear algebra and vector calc classes I took in college. Despite the rapid development of advanced frameworks and SDKs, computers are still fundamentally ones and zeroes, and without foundational understanding of how these bits translate to actual programs students will not succeed in the field.
CS science is a strange "science" and still in its infancy. If your goal is a four year degree and go and be a middle of the road rock solid computer guy/gal then differential equations isn't necessary. If you want to work at the elite level, I don't know how to get there or what it takes. I do know the middle is the first to be out sourced - good luck. r/ jim
My father, with his Masters in CS, went his whole career, until just five years before retirement, without using calculus. Yes, he was working in scientific domains. OTOH, just the other day, I was playing around with an example using "rock, paper, scissors" and it occurred to me that this was interesting from a combinatorics standpoint: what are the minimum number of states you need to produce a win, lose, or draw outcome for two participants?
Math is all around us; no you don't need to use high level math everyday, even in software. Yes, you need to get over your fear of math (don't say you suck at it; everybody says that). The sooner you learn to like math and appreciate it for its beauty, the better off you'll be.
Nathan's blog
I think they're looking at the wrong place to solve the problem. In fact, they haven't identified the problem - they've identified symptoms and are trying to treat the symptoms. The problem is that many students are not equipped to handle somewhat advanced math. This is a problem with our educational system and our society. We need more people able to think abstractly and logically. I'd be surprised to find somebody who could be an excellent programmer who wasn't at least somewhat decent at math (able to do decently in college calculus courses, at the least), because the thinking skills required are common to both.
I would think you need to understand at least algebra. I mean computers are dealing with variables all over the place, and while many computer programmers don't end up doing actual math, even in Web UI development there are times when I need to call Math.round() or be able to do understand simple algebra.
Only 'flamers' flame!
What's the difference between a computer scientist and a programmer?
Typically, the computer scientist is great at math but can't program, and the programmer is great at programming but stinks at math.
Unfortunately computer science has become a bit too broad to have an easy definition, however, the one thing that almost every hot field of computer science has in common is a heavy reliance on math. For example, to name just a few,
- natural language processing (predicate logic, probability...)
- computer graphics (projective geometry and numerical optimization)
- computer vision (projective geometry, advanced linear algebra, numerical optimization)
- computer security (aka cryptology, modular arithmetic)
- quantum computing (you don't even want to know)
Some code monkeys are mad because they thought in hs "hey wouldn't it be cool to write video games for a living" so they majored in CS, found out that programming was so hard for them that they needed to be taught it over and over for FOUR years when really only 1 or 2 is needed and on top of it they got squashed in calculus only because they were so immature they had bad work habits, which they still have at their code monkey jobs until this day.
Look, after you know the basics you can figure out the rest. That's the real scam of a CS degree. So what the hell else are they going to teach you? Only the hard stuff that gets rarely use. And BTW, if you look into computer graphics, you might need to know some continuous math. So your lucky your dream didn't come true. Have fun creating webpages next week...
I'd also offer minors or sub-specialties in graphics, which is math intensive, and game design, where knowledge of physics is good so you know what rules to break, and where you need some psychology as well. And then a security sub-specalization, and many more. But the one thing this article does invoke is the need to define a better set of characteristic goals for the degree. And anything that requires a for credit "Office" course really needs to be rethought by the schools board of regents. If you're going to be programming nuke plant safety systems, you better be smart enough to pick up how to use office while typing papers up in the quad without any lectures. Of course feel free to RTFM.
As a point of reference in the varying needs, I worked for a physics department that analyzed spark chamber lab data. This involved taking their sets of differential and other equations and creating code to implement the various tests. So if you didn't know diff eqs you could fake it, but if you knew them you could write code that didn't just mirror their equations, which in some cases results in non-deterministic run times, and you could create software that performed equivalent operations within the accuracy limitations of the incoming data and was deterministic. That takes a more in depth knowledge of theory of computing as well as advanced math. Of course if you are just programming financial transaction software, well, no wait, that is likely more important, and so you need to know security aspects of software so you don't leave bugs to be exploited by hackers. So bad example, so then maybe if you write the 99% of iPhone Apps that don't pay back the cost of the developer SDK license, sure you don't need much math back ground or even advanced theory. But for real world problem solving we just open up a whole nasty can of worms as we take the science out of computer science. And is training a computer hack even worth the cost of getting or giving a four year degree, can't we just leave this to the associates degree from some obscure community college (and that's hack not hacker please!).
Even music majors know the importance of math and use it for transposition of keys and scales.
- Tjp
I am in wallow with my inner money grubbing capitalistic pig. ... Oink!
College has never been about getting you ready for the real world. It is about giving you the tools so you can understand different points of view better in the work place, its about socializing. For example, I majored in Computer Engineering, and we had to take a differential equations class. I realized that the math in that class could be applied to other things. I ended up taking a Circuit II class, and click a light bulb went off, I noticed that the circuits could be turned into a differentials equation problem, and it seems easier to me to do it that way. However, while everyone else was learning rule of thumb equations, I didn't have to remember anything at all, and my numbers were closer than theirs. I think college is a place to make you a well rounded person, so when you get out you will see different ways to attack a problem.
As for the differences of a software engineer and a computer science major, it really comes down to the university you go to. At my university, computer engineering we had more credits than computer scientists and electrical engineers, because our university believed computer engineering was the joining of the two majors.
Math is weight-lifting for the mind.
Very few people learn math because they need to evaluate limits and reason about integral domains in their future jobs. Calculus is especially marginalized out by software written by only a handful of people.
It's developing abstract reasoning skills that make math worthwhile, and those who "just can't grasp it" are worse at solving problems in general. All else being equal, the mathematically-experienced are better software engineers.
Not to mention that much of the new and interesting ideas are presented in math-heavy papers.
Seriously: if you think you can do Computer Science without math, GTFO. Or even better, kill yourself now and avoid breeding more math-illiterate fucktards than we've already got.
What's next? "I want to go into CS, but spelling variable names right is HAAAAARD!"
I always find that programming helps explain the math. Instead of taking someone's word for it, you can just derive what they say. If we all grew up this way, learning math and using programming to illustrate the result, this wouldn't even be a conversation. We would arrive at university with the theory under our belt, and we would have the skills to expand it if desired or focus on the application of what we already know.
But first, let me get this out of the way: it is absolutely true that most people want CS degrees in order to get jobs that you could do equally well with a 2 year associate's degree in Information Technology, and even better with a high school diploma and a bunch of experience.
HOWEVER, the students are probably better off on the job market with 4 year CS degrees. Looking at things from the perspective of a potential employer, there are two reasons the CS degree has a leg up:
1) All else being equal, <a href="http://en.wikipedia.org/wiki/General_intelligence_factor">the student capable of learning Calculus is probably more competent at everything else as well<a>. It's far from a guarantee, but on average, this will be true. The CS degree is valuable precisely <b>because</b> many people can't do calculus.
2) The 4 year CS graduate is, on average, from a more privileged background, or, if they're not from a privileged background, they've got an honorary promotion into the privileged class and 4 years in College will teach you how children of privilege (or, "entitled little shits" as we are popularly known) are supposed to behave. The people doing the hiring are, almost without exception, entitled little shits themselves who would rather hire their own kind. More sophisticated types will dress this up as item #1 above.
You see a very similar dichotomy in medical school admissions, with regards to organic chemistry. In theory, there are a number of situations in which an MD might benefit from knowing ochem, but realistically, it isn't going to come up. Furthermore, ochem is taught as if all of the undergrad biochemistry majors were going to move on to careers in basic research. That said, would the colleges be doing their students a service in dumbing down their ochem curriculum? No, they would not, because the medical schools want students who can pass ochem, for basically the same reason.
Medical Schools are in a position to be very selective in their admissions. Therefore, they can require (and they do) those students who can pass the ochem courses which are designed to prepare a student for a career in original basic research. This means that ochem is a hoop-to-jump-through for most of the students who would take it. This doesn't mean <b>any</b> of the students would be better served by dumbing it down! If you did, the medical schools would demand upper division molecular biology, which would then fill up with premed students, who don't need the subject material and are just looking for the certification that they are elite; this is happening to some extent already.
Likewise, really good programming jobs are scarce, so employers are in a position to demand candidates who <b>can</b> do calculus even for jobs that don't need it. Associates degrees (and more) in Information Technology and variants thereof already exist. But people with professional aspirations get CS degrees instead precisely <b>because</b> they are more exclusive and difficult. If you dumb down the CS curricula (or if community colleges start offering CS degrees), employers start to demand master's degrees; this is happening to some extent already.
The good and new comes from no quarter where it is looked for, and is always something different from what is expected.
I think academia is right to distrust "teaching to the fad" because concepts don't change, and people who know the concepts will be good at picking up the fads. Math -- to a lesser or greater extent, it's arguable -- is one of the concepts.
Analogy: if you'll be programming in Java and Python, why learn C or assembly? Don't "tough" concepts like pointers and managing your own memory turn off a lot of potentially great programmers? Well ... apparently they wouldn't have been so great. Without these concepts, you think you're fine bubbling along in Java till one day you try reading in a 10-MB file by using String str = str + nextLine() and don't understand why it's taking forever.
So -- this is also about standards. What standards a student has for herself, and what standards a school wants to set for its students. You think most of the programmers hired at Google don't know calculus and linear algebra? It's not about whether you integrate functions on a daily basis, it's that (1) you've proven you're smart and those smarts often correlate with good coding, and (2) you have additional tools and a better understanding in many cases. In industry, that pays.
And to be blunt, if someone told me they hadn't had calc or probability, I would distrust their overall understanding of the field of "computer science". Nothing against their programming skills, it's just that a lot of what I call "CS" includes mathematical concepts, and I think that a CS degree should include them.
Your point with regard to patents is well taken, but for a computer scientist to be finding excuses not to do mathematics would be like a runner shooting themselves in the foot before a big race. Mathematics is nothing more than thinking clearly and being able to recognize it as such. Perhaps if one can't think clearly and do proofs, then mathematics will seem confusing.
Algorithmics is little more than the making use of mathematical structures, expressions, and relationships in efficient and effective way, whether or not you have been trained to recognize it or not. Obviously, training can help. One of the most important aspects of mathematics is that it can instruct computer programs to recognize situations where it would be foolish to think that computable solution actually exists, when it does not, such as a "quick algorithm" for finding minimum length Steiner-trees (one of the key problems in computational biology).
I earned a 4 year BS degree in CS years ago. I took 2 terms of calculus, which maybe helped. I also took various discrete math, finite math courses as well as operating systems, assembly language (that i've never programmed in for financial gain) and more. While it may not have taught me how to walk into and office and just do Cloud Computing, what it did (clearly IMHO) give me a huge leg up an every and anyone that didn't have my background in the theoretical stuff. Thru the years it has been so much easier for me to understand computer concepts, e.g. the GUI, UI, much OS related stuff, IT stuff than people that had to learn how to do computer related stuff that didn't see all the thought underlying.
One has to decide what one wants in life. You need all sorts of tools including the ability to understand and use mathematical models. Discrete quantities use Arithmetic and Algebra and continuous quantities make use of Calculus. One does not know what tool will be useful at what time as the job market and skill sets are changing. In the past you can put a label on yourself - CS, SW Engineer etc., but now with a dynamic integration of areas of applications overlapping such as, Computational biology, computational medicine and so on., no one can say that I want only these courses in my degree. What you need is to take core courses and take more courses when necessary. Without mathematical knowledge real life modelling will be almost impossible. Programming will be done computers eventually and then what happens to these high pitched programmers?
To those who find math in their studies unnecessary:
During my studies i always thought: I am never going to use this, this is way too theoretical. And i thought that for theoretical physics as well as for mathematics. The came the master thesis in experimental physics and i needed the biggest part of what i learned and more.
I cant promise this happens to you in the same way, but i can state the following: If you want to be a programmer then don't study CS, but program. The difference between computer science and programming is that i don't expect (he/she may very well be able to) a programmer to be able to design a protocol to handle sporadic loss of data, because, well for this you need math (stochastic/linear algebra). Calculus can be used at many places. One which comes to my mind is "find the minimum" in resource usage which may have a known scaling on a variable which (e.g. number of subdivisions you use in divide and conquer) you set different parts of you program. Yes, sure you can experimentally figure that out. But every programmer can do that, you don't need CS for it. But he may not be able to make a function which automatically determines some parameter according to an available resource.
The other question is: do you want to restrict yourself to programming only things which don't require calculus? So this mean you don't consider the many "embedded control loop" or "embedded signal processing" jobs worthy of being cherry-picked by you? You don't believe that e.g. integrating or transforming a sensor input and being able to talk to your customer (which may be a physicist working for a company to make a product ready) about it will affect your professional career? Processing numerical data is still quite some field which may enter you path in one way or the other.
Ultimately, and this may now be a little harsh: Some of the tests in the first semesters are cases of "real artists ship". Its irrelevant if you like it. Its irrelevant if you understood it by intelligence. Its irrelevant how much you to work for it. Just get it done. Unless you have an explicit legasteny for math, passing a test of the very elementary math you usually learn is not a matter of talent alone, but mainly a matter of preparation. Preparation includes the parts: learning (and a little understanding), training and being ready to take the test (which is many times the biggest problem). If you have problems with the latter, go to a counselor. In my experience students mainly fail in math because there is some kind of unrealistic expectation leading to a mental block (along the lines of "math just requires intelligence, so if i am bad at math then i am stupid and will never understand it and nothing i do will change it"). My experience show that people who address these blocks early and openly have a much easier time to study and succeed, even if they are not in top percentiles of intelligence or talent.
Yeah, the math wasn't your problem. It was the shallowness of your knowledge of the classics (that is, the Bugs Bunny cartoons). You should have known that the term "nimrod" is not a general purpose insult; rather, it means "a mighty hunter", after the eponymous Biblical Nimrod. Applied to Mr. Fudd, it was meant sarcastically.
Anyway, if he wanted your code to return at the bottom of the function, you should have just put gotos in at the appropriate places. Would be amusing to see the look on his face when he saw it, anyway.
Calculus is more than just continuous derivatives and integrals. Calculus is where you get a lot of the notation and concepts for other university-level math courses. You can do some pure discrete stuff -- e.g. number theory, predicate calculus -- without it, but for a lot of it you will need to understand integrals and derivatives and limits.
As someone who went through a very "theoretical" CS program
...
Most students didn't get a chance to take analysis or anything that would teach them about WHY the shit works or what the theory or point of it was. We just had to do course after course of symbolic manipulation that none of us would ever use.
So, on one hand, your CS program was very theoretical, but on the other hand, it was mostly symbolic manipulation and not many proofs? IMO, thats about as far from theoretical as you can get. Symbolic manipulation is absolutely useless unless you have an idea beforehand of where it should lead you (much like a program is useless without I/O and some form of documentation). For that you need theory (unless those ideas come naturally to you - but I have yet to meet such a person).
I had to think about this a bit before responding... I left college because they told me I had to take calculus or do not come back to my major. I left, and got a job as a COBOL programmer. I then moved into system programming, went on to be published at conferences, magazines, etc. My job now is main frame capacity planning and performance measurement as a storage vendor. Yes, I use math in my job. Calculus? NO.
My wife doesn't listen to me either...
Context, eh? He was indeed a mighty hunter...always hunting for flaws, and inventing them where he found them to be lacking.
And I daresay I wouldn't have gotten the honors I wanted if I had indulged myself with "goto", for once I stepped off that precipice I have no doubt my labels would have been of the sort:
efficiencyBefore:
style:
inthe:
realWorld:
youShould:
tryIt:
once:
Orwell: "In a Time of Universal Deceit, telling the Truth is a Revolutionary Act"
To join programming competition groups and events...
I have learned more in the programming competition meeting at my University than any class. If you don't know about it check out UVa online judge! They have hundreds of questions where you make a program that takes in input and outputs the expected result exactly.
These problems give you: 1) Practical experience to popular problems in industry and research 2) A chance to learn new algorithms, methods of input/output, "tricks", coding styles 3) A chance to network with other people at practices/events 4) A chance to impress employers
Oh, and by the way, you'll likely need some math for the hardest problems (not the easier ones though). Especially an understanding of big O.
I just had a round #2 software engineer interview with EA. It was a technical skills interview. I nailed it and got hired, largely due to programming competition. In case you were wondering, they did ask me a few math questions.
Seriously? All those points are obvious to any CS student after one semester. The only reason this does not change is because professors need to teach. They don't want to, but they need to.
The reason you still have Calculus is because there is a ton of math teachers who needs to teach classes in order to be able to continue their researches (or just to get pay for those that don't do research). A very a good portion of those with math degrees end up in academia. How do you feed all those people? By making them teach classes to the most people you can.
Nevermind that a CS student would be a lot better learning calculus from a CS teacher, no, you learn it from a math teacher. He will make you prove that lim (x->0) x/x= 0 by the definition and make you thank him for it. Why? Because if Newton did it, so should you.
I do think that calculus/math is an important part of CS, but the way they teach it is so completely wrong that passing the class or not it makes absolute zero difference to anyone not going to academia (and even to those only a tiny fraction actually need it). I think I could teach a CS student everything they need to know about calculus in two days, really. Well one more day for a test I guess, add one more day if you want movement physics in to show some application to all that stuff.
This is also impossible to change. Math teachers need to teach someone, if they let a major get away with math classes taught by their own soon everyone will want too and then they will get less funding for their researches, hiring, etc. The math department is fueled by all those "lesser" disciplines that use math someplace, somewhere. The CS department are a bunch of people who liked that math and probably do use it actively and do have a valid reason to want their undergrads to learn it too, that is if the undergrad go to the same career they did (pro tip: they won't). The system is so rotten that in most countries colleges NEED calculus in the degree somewhere to be able to grant people with CS diplomas.
In my college (University of São Paulo, São Paulo, Brazil, campus São Carlos), in special we have a very strong (read unforgiving) math CS course. For the first 2 years we have more math than other stuff. The main reason? The CS department is part of the math department. The main complaint of my fellow undergrads? They spend so much time studying math that they can't even enjoy all the CS stuff, if they need to skip a class to go to the doctor they will do it on the data structures class, not the calculus. If they need to study for the discrete math class they will make their digital logic work the fastest possible (or leave it to someone else of the group). This is so widespread here that one of the main reasons that employers like people from my college is because we survived all the math which means we are at least smart enough to pass and not lazy enough to quit.
Now if you excuse me I have some integrals to calculate on my saturday night, I have a test monday. God help me when I start calculus 3, I will need to stop reading slashdot.
How about instead of having fewer mathematically literate people we require that every degree has a level of math that should be considered competent. So no matter what you have to know some basic calculus? I hate hearing the shit "I won't ever use it, blah blah blah". 100% of your education isn't a jobs training program. Colleges should still be interested in outputting thinkers but then again that deal went out the window after they raised rates a billion fold, admitting it was a jobs program.
"If you are a dreamer, a wisher, a liar, A hope-er, a pray-er, a magic bean buyer
You can make a slightly stronger statement. Proofs and programs aren't just similar.
Proofs are programs and programs are proofs.
Use of the words "good", "bad" or "evil" is almost invariably the result of oversimplification.
Easy. Stop trying to teach those thing in Computer Science, and move 'em to Information Technology where they belong. Leave Computer Science for the science of computing, rather than being a catch all "using a computer is the primary focus of this task" degree. No one's trying to require electricians to have a degree involving quantum mechanics, nor visual artists to have a degree in material sciences. And we don't ask nutrtionalists to teach hospitality, even though they both revolve around "food".
Note that I'm just picking on the cited examples, I didn't read the linked articles at all.
Paul "TBBle" Hampson
Paul.Hampson@Pobox.Com
What CS students need an education in more than anything is Discrete math (graph theory, set theory, number theory, etc...). Calculus is the complete opposite end of the spectrum. While Calculus can be useful, it should take a backseat to discrete math.
I might not need math for programming but I definitely need math to understand what I'm programming. Tasks from game development to automation can not be completed without understanding basic math (we'll they can.. but in order to do them properly some understanding is necessary).
I wonder whether rigorous courses in math are really necessary for programming. Obviously there are certain core topics and algorithms that every programmer needs to know but I'm not sure everything that is taught is really necessary. IMO a good programmer should be able to know where to look if they run into a specific problem and be able to work it out from there. I should be able to identify that a certain problem requires knowledge of calculus, geometry or whatever, spend some time reading about it to get the job done.
Obviously, people involved in computer science research should know their math upside down and inside out.
I quit college because of math. I had taken a ton of CS courses, almost enough to graduate, yet still had year upon year of math to go.
I have been writing software for a living now for about 16 years. I don't recall EVER using any mathematics beyond arithmetic. (Even when I was writing 3D software, the freaking API handled the math for me)
CS is taught by math a-holes because that's the closest thing that existed in academia when these new-fangled gadgets arrived. Now? It's a joke to even pretend that these bearded math lovers should be teaching anybody.
16 year old kids writing mods for Minecraft know more about computing than those guys.
In my roughly 15 years of experience, advanced math comes up very rarely in the day to day life of most coders. There are exceptions: graphics programmers, AI programmers, etc. But 90% of the jobs out there are frankly taking some data from a database and manipulating it through a GUI in some fashion (usually a web page). This is in great contrast to the *origins* of Computer Science which are highly mathematical and involving modeling and such on large mainframes.
Given this, mathematics requirements beyond pre-calc should probably be dropped for CS people. Those CS people interested in the more mathematical applications of CS can go ahead and do the advanced math.
I reiterate. Look on DICE or Monster.com. How many of those jobs really need someone who knows higher math? I think you'll find 10% is about right.
This topic falls under ludicrous fact that universities have put themselves in - claiming that the credentials required for an academic career are the same for vocational career. A full 80 % of the students in college ought not be there - where a liberal education prepares academics for research or a citizen for pure intellectual development. We need to expand our community colleges into a applied apprentice and cooperative curriculum - whose credentials are equal in perceived value (if not more value) than the academic degree.
"CS" is a very broad field. Are you a project manager? A SysAdmin? A repair tech? A coder - be it device drivers, websites, compiled apps, operating systems... ?
A certain amount of math is good for any human to have. If your field requires more, you should learn it.
Running cable or troubleshooting an ailing PC doesn't require much in the way of higher math skills, but coding requires at least a good grasp of logic.
Writing an app like Mathematica would certainly demand some serious chops. (Programming is like teaching, in this case teaching a computer how to act. You yourself must know how it works before you can explain it to others.)
Even if you're in a managerial role, riding herd over those doing the heavy lifting, it would still behoove you to be familiar with what your group needs to know to get the job done.
With all due respect, I wouldn't want anyone who can't handle intro Calc (limits, derivatives, antidifferentiation, introduction to series) coming near my computer and/or network. It's not a terrifically difficult subject.
https://app.box.com/WitthoftResume Code: https://github.com/cellocgw
The return statement is there for a reason along with destructors and the RAII idiom.
I guess it leaves it up to the optimiser whether or not there is a single physical exit point though.
I have been arguing for a non-mathematical approach to software development for years. Please see Organic Programming. Very few of us are doing Algorithmic Development. The problem that needs to be solved is the complexity problem. We need artists in the profession who can model problem spaces.
It's the low rank of the computer science program that makes this a real issue for this professor.
A student who gets a Ph.D. in CS from a top-twenty program, like this guy, has a good chance of ending up at Google working on machine learning (for example). Obviously a strong theoretical grounding will pay off in those cases.
But what about the students who get a bachelors in CS from a 4th-tier program? Not many of those people are going to be inventing the future. Most will end up as web developers, corporate programmers, or IT staff, if they stay in the field at all. If they finish school knowing calculus, but not knowing the practical realities of writing and managing code, they are not well prepared to start their careers. In fact, they are probably at a disadvantage against people who taught themselves programming by actually coding things in their spare time.
Build a man a fire, he's warm for one night. Set him on fire, and he's warm for the rest of his life.
I am a high school drop out. No top 20 for me. I am however a codec developer and self proclaimed computer scientist.
I spent years reading math books, studying algorithms, etc... even stood in for a professor at Johns Hopkins for a week. I even followed a my friend's full CS curriculum to make sure I didn't miss anything. I can recite Knuth, have an intelligent argument with Tanenbaum without citing Linus constantly and recently was teaching my 8-year old son derivation just to see if he was old enough for it yet :)
Your post is extremely accurate and should add one more topic :
Hot topic : Computer Video and Audio (all of it, not just bits)
Core CS topic : graphics, linear algebra, digital signal processing, differential equations AND DSP programming, this includes computer architecture, counting cycles, Big-O, Little-O, every single thing you could know to squeeze one more cycle out of the CPU. Computer memory technology (learn what's really involved with loading and storing), electronic engineering (learn how to predict errors based on electrical issues). Network engineering (learn about network protocols and how they behave across routers, switches, different topologies) because you can't design video or audio stuff without knowing how it's carried.
If people want to be IT guys who program, that's great, go to a community college and learn a language and a technology.
If people want to be computer scientists, then they need math. It's a critical tool for solving problems. A computer scientist needs to do more than just cut and paste a chunk of code they googled. They have to create new algorithms or implement other algorithms that were math. In computer science, math is as important as English.
I haven't been in the states forever, but DeVry Institute (I think it's called) has always taught electrical engineering as well as computer programming. That's a crumby little trade school. It's barely one step above "Become a truck driver..." schools. I think the 'proper' term for them are vocational schools.
Computer scientists only end up in mundane programming jobs if they are poor problem solvers. If you can't solved your simple little social problems like getting yourself a proper job, then you probably are better off in a software engineering position anyway. Besides, it's a good idea to be a chump code junkie for a while when you graduate anyway so you can gain some practical knowledge. Makes it so that when you move on to your proper job, you know more than pure theory.
And don't knock engineers as being less than scientist. I'm an engineer who sits next to a scientist all day and between the two of us, we have a whole brain to accomplish things with.
I took CS and struggled in Math. I work in my field now, and have for over 10 years. I have never even come close to using any of it. I could see if you worked in a heavy science field (say modeling some physics or something) or in actual CS theroy, but in reality I would say that 99% of CS grads never see any benefit to most of the math prerequisites they are forced to take.
I know my choice in CS school was basically determined by math which is just wrong. My first choice required high school level calculus. I didn't have it. I had to take a calculus test that if I passed would allow my acceptance. Not having a stitch in calculus you can imagine how that turned out. The worst part is that going to a small rural high school it wasn't even offered, so I couldn't take it even if I wanted to. The only alternative was to NOT go to university for a year so I could get the required calculus credit which is totally BS.
I ended up going to a a school that was more liberal arts, and thus didn't have the requirement. Though this could partially be because it was in Ontario that had grade 13 (I being from Nova Scotia only had 12 grades), and it was assumed that many took the calculus in their 13th year. Anyway the CS still had the same math requirements as any CS degree, so I still struggled. I ended up taking Calculus 100 and Linear Algebra 100 in my 5th year of University (took a year to get a GIS certificate at a collage). So here I was taking advanced 400 level CS classes while go to class with frosh for math, as well as being older than everyone except the teacher, and then only barely (she was a younger prof). Anyway I think the only reason in the end I passed (I think I got a 54%) was that the prof felt sorry for me, and understood that my degree basically hinged on me somehow magically getting over 50% in her Calc 100 class.
Anyway yes in some cases I think math was relevant. Binary Algebra made sense in terms of CS, and statistics was useful, however the rest pretty much felt like they just made them requirements simply because it was math.
The 2 most valuable math classes I ever had as it relates to my CS career: Logic and Arithmetic, in that order. Calculus? Never once used it, not in my CS career, and not in my personal life either. I've been a Systems Administrator and Systems Engineer throughout my entire career.
If I had been designing 3D simulation and mapping algorithms, OK maybe calculus would've been useful, but then I would have gone that route in college if I wanted to do that. As it is, getting a math minor (up through Calc III) to earn my CS major is a complete load of bunk!
If I could get back the time in my life that I wasted on Calculus classes and the heartbreak I felt struggling at every step of the way, I'd be a much happier man today. Calculus was by far the biggest load of crap I have ever had to deal with in my life in relation to its actual usefulness in my life (i.e. zero).
If you can't do the curriculum, you probably don't belong there.
Sounds like a whiny 5th grader who complains they'll "never ever use geography, so why I need it?". Give me a break. Quit whining and do the work. It's good to challenge yourself once in awhile. Nobody's going to coddle you in the real world.
I know I would NEVER hire somebody that failed to learn some basic math. If you can't grasp some abstract concepts, I would think you would have a tough time learning anything new, much less come up with something "outside the box".
If you aren't suspicious of your government's actions, you aren't doing your job as a responsible citizen.
But general computer use should be mandatory, as fundamental as algebra and geometry. And I am not talking using spreadsheets and word processors and web browsers. I mean teaching kids fundamental computing concepts, and how to use a command line to actually compute things:
You can argue about whether they should learn to do this using bash or python, or MatLab or R, but the important thing is to teach that, yes, computers can do these things, and let the students' imaginations apply these tools to whatever problems they may have.
All of these things are really easy to understand, and are completely fundamental to common every day computer tasks. Most people never even try to solve their own problems, rather they wait for some programmers to include the aforementioned computing functionality into a GUI, and if the GUI doesn't have that feature, then they think its impossible to do. Even the simplest things, something that could be done with one line of a bash script, an ordinary user doesn't know about it and is stuck relying on that freeware thing they downloaded to take care of it for them.
Education FAILs to teach this; it needs to change.