Math And The Computer Science Major
An anonymous reader writes "What sort of math are CS majors expected to take? Why are these classes useful? Does programming really have that much to do with math? Lineman.Net has published an article that answers these questions and more. If you are considering a CS degree, be sure to give it a look and make sure you are taking steps to prepare for your college career."
...demand more math than others. Artificial intelligence techniques, for example.
And what the article said about game programming is right on... trying writing even a simple Brickout clone without knowing basic trigonometry and you'll run into problems.
The Army reading list
As a student graduating (June) from a CS similar degree, I take this opportunity to warn/help inform others about such fields.
:-)
If you truly love programming and want to code for a living, do NOT attend such Universities as DeVry, many State Universities, or other small "tech" schools. This may sound like common sense to some, and outright madness to others, but trust me on this one. I personally am about to graduate from DeVry, and, although it's surprising reputation, they in no way prepare a student to enter the world of programming. The majority (I'd say 70%) of the skills I've obtained have been acquired by means of self-teaching and learning from friends.
More and more, I've been seeing that "programming" degrees focus much more on the management side of things, instead of the developer role. Perhaps this is because of the apparent problem of off shoring IT jobs? The main problem is not that the Universities have changed to this approach, it lies in the fact that the said schools teach in such a manner, WITHOUT advertising so. It brings about a sense of deceit and trickery...but perhaps that's what they were going for?
01000001 01011001 01000010 01000001 01000010 01010100 01010101
we have to know math because the math majors cant program, usually. as a programmer, youll have to work with NUMEROUS different people from all sorts of other fields. you might be designing heat control systems, biochem simulation software, or electronic simulation software like me. the more you know the better in this field, i think.
use your turn signal! you people act like it's divulging information to the enemy
Not entirely unrelated question about high school math: A couple of weeks ago I was out with my little brother who recently turned 18 for a beer and to shoot pool. He was having trouble making shots so I said "Imagine the table is a large sheet of graph paper when you plan your angles and shots." he said "I've never used graph paper."
He's graduating from Grade 12 this year, am I just a relic[0]? What do schools use now to teach geometry? I hope it's not all done on a computer, the practical hands-on stuff is invaluable.
[0] I'm 38; mom died in '82, dad remarried and could still get wood.
Trolling is a art,
I am an engineer working with programmers and one of the biggest issues I have is getting them to implement some of the complex math in their code. Many struggle with it and that is a huge problem.
Evolution or ID?
Discrete Mathematics for Computer Science. Know it love it!
For my CS degree, I was required to take all the same math courses a math major would have to take. After numerical analysis, my head was spinning.
I tried every decent and legal way I could think of to resolve the issue w/the business before I rented the chicken suit
Coding is not as important a part of computer science as you may think it is. CS is full of theorems and proofs. Computer science is the science of making algorithms more efficient. Programming is about implementing algorithms.
At my school, Xavier University, Math and Computer Science are a single department. It makes sense, though - the study Languages and Automata is an extremely mathematical pursuit, but it's also very important to Computer Science. The same could be said of any number of different CS related topics.
My blog
Useful?! You can't do anything without it. You can't study graphics without maths. You can't study 3d graphics and simulation without quite advanced maths. You can't study audio without maths. You can't study just about anything in computer science without maths.
Only a Mickey Mouse comp sci course would not require maths to quite a high standard.
Probability theory would probably(ha, ha) be a good one, and I think that calc is pretty essential for anyone majoring in anything having to do with math. But if you have to take MAT 99 or 100, you probably are in the wrong field...
to computer studies? very. time and space complexity proofs, anything to do with computer vision, graphics, signal processing, A.I., networks,... but if you just want to be a code monkey, well.. still important.
When I was in college CS majors had to take Calc and Discrete Math.
I can see the need for the discrete math but the Calculus was unnecessary as far as I could see.
Excpect everything up to calculus 3, and possibly physics which is a calculus class in disguise They have litte or nothing to do with programming, Most of what you will learn in colledge has little to do with anything.
Neural Nets store their information in matrices of varying dimensions. Without knowing how to manipulate them, you'll be in a world of pain.
Calculus, Probablility and Statistics, Discrete Math And the prereqs for it.
3D graphics - Linear Algebra
Digital Signal Processing (for Audio) - Complex Math
How else are you going to figure out how much money to ask for in Rupees? ($1USD = 44.5641 Rupees as of this morning)
Analytical skills are developed in large part due to math. Take all you can get and pay attention!
Go check out Virginia Tech's CS program. I only did the first two years then transferred to another school, but while there I took 8 math classes in 2 semesters. Most CS majors took one extra math class before graduating to get a Math Minor.
Was it helpful, was it worth it? I'd like to think so, I didn't sleep through discreet math for nothing!
programming != computer science
if you think programming is all there's to computer science, then don't study computer science.
Cue up all the "i d0n7 N0 4nY m47H & i 4m 7eH 1337!" comments from people who write shitty, bloated, inefficient code because they didn't have the brains or dedication to pay attention in their math classes.
The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
The problem is is that alot of college courses I have seen focus on computer science which deals alot more with low level programming and algorithms, in which case you need some extensive math.
I however write more applicatons/user interface type stuff, and use the libraries that CS guys create (STL to just name an example), thus I rarely ever write anything myself that I need advanced math skills.
Programming in and of itself doesnt require math, but when you start writing advanced data structures, thats where you will need calculus/algebra and some others. It all depends what kind of programming you plan on doing.
..i never want to touch their code. usually it lacks basic logic. the programmer/designer usually does not have a good grasp on other mathematical concepts either. this is true for even simple business logic. the code is usually inefficient...in my experience anyway. the math really helps you to deal with thousands of processes working together, as well as potentially avoiding deadlock by looking at things on a grand logical scale. again, just my experience. take the math.
Perhaps the most related, useful, but most underappreciated related discipline is statistics. Of all the non-CS classes I took, stats is the most relevant to my day-to-day life. For example, doing analysis of performance and tuning software system, I often see people use bogus statistical analysis, and making mistakes based on those results. Even if your curriculum doesn't require it, I would highly recommend taking a stats class or two.
Calculus I, II and III
Discrete Structures (graphs, trees, etc.)
Linear Algebra
Numerical Analysis
Algorithms
Abstract Algebra I
Also you have to take one or two math electives.. I opted for a course on Game Theory.
This is just a snapshot of my school career... YMMV, however one can see that CS and Math degrees are still heavily linked.
I usually thought of it as the difference between learning how to program vs memorizing a bunch of useful code snippets and how to translate them to different languages.
You are in a maze of twisted little posts, all alike.
Let's assume that you are well versed in Trig and Algebra (you should have learned them both in HS). Take, at minimum:
Discrete Mathematics (some call it Applied Mathematics)
Calculus
Number Theory (Cryptography)
Linear Algebra
I have a CS degree with a math minor and have been completely surprised at how often I've used the math portion of my education in the workplace. I'd recommend taking a good mathematical modeling course as well, as it typically offers a great mix of math, engineering, and CS.
In the olden days programmin' was about numbers - now its all about strings. You really dont need much maths to write a shopping cart applications, or a "content management system" or something equally as boring.
As with many things you do, you can do it quite a while without getting heavily into math, but when you deepen yourself you have to understand math and master it to a certain extent. For several years I did quite a lot of sw development without really using math, but when later starting my PhD I would have been lost without math. Programs are math. Every program can be converted to lambda calculus which is a mathematical expression form. Programs are art, as well as math can be seen as, and... programs are literary work. A certain story or idea can be expressed in many ways, without changing he actual idea behind the program. This is also the reason why software can not and should not be patentable, as it is now within USPTO (due to an old mistake...).
If you're majoring in CS, the major isn't really about programming. Math and logic help for some programs you'll end up writing, but they're a lot more helpful overall for studying algorithms and the rest of CS.
Programming is the same to CS as learning how to use lab equipment is to chemistry. Helpful in studying fundamentals, but far from the point.
I have BS degrees in both CompSci and Math, an MS in CompEE and am finishing an MS in Math. I work as a SW Dev doing image processing. For me, Linear Algebra and a little bit of probability are very useful, sometimes on a daily basis.
Of course, someone doing Financial stuff, for instance, would probably really need some DiffyQ and more calculus. Since all of these are mentioned in the article, I'd have to agree with the author.
Oh, and knowing more math than my boss is terribly handy for getting out of those long, boring hallway conversations. After a certain point, I just start bringing up quaternions and rotaion matrices, and voila! Meeting's over!
I went to CalPoly San Luis Obispo (http://www.calpoly.edu/) and Computer Science was in the College of Engineering so we had to take the same Calculus and Physics classes as the other engineers, not to mention tons of theory classes. This on top of the normal programming and general education classes. Did these classes help me to become a better programmer? Definitly, by helping me to expand my critical thinking to include more than just "how to code". I think that any CS person that DOESN'T take at least a few classes of some high level math is just hurting themselves.
Let's be clear here. Computer science is science, not engineering. When I got my degree, there were no programming classes. Any monkey can learn how to program, and many dropped out just to do that. But, please don't say that computer science is programming. That's like saying sugery equates to cutting meat with a knife.
I don't know about anybody else, but I never use more than basic algebraic skills whilst programming. Saying you have to be strong at maths to be a good programmer is a myth as far as I am concerned. Algorithms and data structures rarely contain any complex maths and are more about understand how many simple actions work together to create something useful. I'm not saying learning maths won't help in any way, but I think it is very overrated. There is little maths behind most programs and they are more about program state, how it is transformed and control paths. If you actually need some sort of complex maths to solve a problem, the work will already be done for you in text books and you will just have to implement it.
Computer Science is so much more than programming. Artificial intelligence, complex adaptive systems, learning algorithms, efficient distributed systems, systems, usability, algorithms and computability, image and pattern analysis, scientific computing, and more. A good computer science student will have the mathematical background to be able to work with any information in an efficient and intelligent way.
Did my CS Major in the 80's (crank the INXS, please)
- Calculus, calculus and more calculus
- Linear algebra
- Discreet Structures (which was basically advanced trig)
Calc I was the ball-breaker ; I seem to recall taking 5 pages of notes on my first day of class - even before the syllibus was handed out. Only "D+" I ever got in college. Bell curve was such that if you could pull a 50 on a take-home test, you passed with a 'C'. However, this made Calc II and III easier. Go figure.
Most people don't ever use mathematics much more complicated than basic arithmatic, so why do we have to take it in school? Math isn't about math; it's about thinking. Complicated problem teach impressionable young minds how to tackle problems logically, using what you know to be true to determine what you do not. I happened to love it (of course), but a lot of kids were always complaining about how they were never going use Modus Ponens in life. Turns out they were very wrong...
I'm a CS major in my Junior Year. We are expected to take pretty much all of the Math EE majors take which is all of the Calc Series (I-III), DE, Linear Algebra, the Physics Series (I-III) and other Engineering related Math. It's quite related to CS so if your looking to get into a degree program without Math, I wouldn't reccomend it because if you ever do grad work in CS/want to be well rounded, you will need some of this math.
Graph paper was ubiquitous 2 years ago at my school. Of course I was a forgetful bastard, always ran out, and ended up drawing in lines on line paper..........
Photos.
For my BS in Comp Sci (1992 U of Wisconsin), I had to take 18 credits of math, and achieve a B average in those courses. The 18 credits comprised:
Calculus 1: 5 credits
Calculus 2: 5 credits
Calculus 3: 5 credits
Matrix Algebra: 3 credits
Although the University offered minors, my college (the college of letters & sciences) did not. If they had, I would have taken the remaining two credits in order to get the minor in math.
IMHO, the assistance that math has provided me has been invaluable in my career. NOT because I use calculus on a day to day basis, but because it forced me to develop critical and systematic thinking skills. And THAT has been invaluable. At the time I hated it, but in retrospect it was really good.
$.02.
Key to financial independence: Spend less than you earn. Save and invest the difference. Do it for a long time.
Since when did DeVry have a "surprising reputation" ?
I thought everyone knows that vocational tech schools suck.
I have a degree in CMPEN. I took three semesters of calculus, one semester of differential equations, and one semester of linear algebra. Several CS classes could classify as math, such as discrete math and some of the more theoretical ones (automata, lamba calculus, etc). Some optional courses can include numerical programming and numerical analysis.
I did DSP and digital communications simulation for a long time. Without a very firm grasp of math, you are not an effective programmer in this field. Most people who don't really understand DSP and digicomm, both theory and implementation, can trace their problems down to the math.
(S(SKK)(SKK))(S(SKK)(SKK))
Discrete
Calc 1-3
Probability and Statistics
Diffy Screw
That was what I had to take I think.
Maybe only 1/4th of my CS classes involved programming projects outside of the introductory courses, and in those courses the programming aspects were just to test what you learned more than anything. You were expected to learn how to program on your own time.
What?
HEy , why on earth would a typical computer science student require mathematical skills
,unlesss you are in Research , jobs like sys admin , programming , DBA , etc dont require math very much.
I would be hapy if they had added Logical Skills
Besides
I came from the same CS/MIS disipline, and honestly math and CS do NOT go hand in hand.
For some reason people think CS needs calculus and differential equations and a whole lot more to get by. Listen to me.... you use calculus to find the derivitives of a curve. If you're a CS major you don't need freaking calculus, your typical windows box can solve it for you. And if you can't figure how to calculate numbers with a computer, you shouldn't even be a CS in the first place. Go ahead gimme the -5 troll for being upfront and honest with my 4 year experience.
I have found that Philosophy, especially Logic, is also very applicable to Computer Science. It has been especially useful in relational database design and development.
The SCIENCE of programming requires math. The art of programming may not. There is a distinction. That is why the lawyer in the next office over from me was able to put together a fairly good system to manaage his office and case load in a 5GL but couldn't truley understand the difference between a quick sort and a bubble sort. Of course, almost no one writes sorting algorithms any more. If you are writing a program that utilizes mathmatics to accomplish a goal ( e.g. the matrix algebra used in 3D graphics development ) it is not the programming that requires the math it is the problem space. The thing to remember is that, in a way, when you are studying computer science you are not learning how to program you are learning how to learn to program. Now and Information Systems degree would be more about learning to program and leaving it at that.
The amount of math you actually need is really minor. My school required calculus just to get into CS. However, we never used it. Algebra was the highest math most classes required. The closest I got to higher-level math was in 3D graphics working with vectors and matrices.
Requiring calculus for CS majors is unnecessary. I think the schools use that to only weed out candidates. Considering this, I imagine schools will now remove this requirement since less students overall are entering as CS majors.
Before everyone says the sky is falling, I don't necessarily think this is a bad thing. I certainly haven't used any calculus while doing professional development. So, why we require it of undergrads is beyond me.
Computer Science is just that, the science of computation. Algorithms and stuff. Of course maths is necessary. In my degree we had 3 years of statistics/queuing theory, and one year of calculus.
People complained about it. They thought that computer science meant PHP programming and a bit of Java. Hence the very high (almost 50%) drop-out rate after first year!
Programming is easy, computing is a challenge.
The most important classes I took were Discrete Mathematics 1 and 2 which covers predicate logic, number theory ect and Algorithms which is useful in programming.
I'd say Calc 1,2 and 3, Differential Equations are of no real use.
"Patriotism is supporting your country all the time, and your government when it deserves it." Mark Twain.
During my time at schoool, I was told by a careers advisor that to become a software developer I would require at least an A-Level (Im not sure of the US equivilant) in Maths.
A-Level maths covers subjects like calculus and imaginary numbers.
After 5 years of professional software development, I cant remember one time where I have needed this level of mathematics.
Now a business course, that would have been useful, some kind of analyst training would have been ideal, but advanced maths.... definatly not.
Im sure there are exceptions in the development world, I figure those doing 3D simulation would require a basic grasp of newtonian physics, and there are obviously scientific systems that would require a bit more knowledge, but even for the fairly advanced finacial systems I have worked on, the most that was required was some floating point aritmatic and percentage calculation... and thats what the computer is for anyway!
I've found that the mathematics courses required are a bit more than what I expected. The article certainly states the current situation with most colleges and universities requiring more math courses, something I wish I had a better idea of when signing up and scheduling my first year. The idea that programming doesn't require math is sadly prominent in most of the mindsets of students around here.
Yeah, I just did my scheduling for next semester, with Calc II set up for an 8 am course...
"calculus III is slightly harder than calculus I but not nearly as hard as calculus II"
Yeah, that's just GREAT news to hear.So I would suggest some basic knowledge in algebra (the part of maths that deals with collections of mathematical items, fields, groups, equations...) which lies at the very heart of maths. Then, some calculus to round it off (just in case someone wants you to calculate an integral...) and a little statistics (suppose you want to write analytical software). The real geeks might want to learn about number theory, too, but mainly for academic purposes (i.e. for fun). If you know your basic math, you can easily develop into other parts.
This is the programming part. I agree that if you just want to do web development, then the above seems questionable.
Anyway, where I studied, the department of computer science teaches the above subjects to students who want to obtain the bachelor. But as they grow, I observed that they do not really know much about maths...
Black holes were created when god tried to divide by zero
More than anything else, higher math teaches you how to solve problems.
How to approach complexity step by step and break it down into manageable pieces.
How to deal with abstraction.
How to THINK.
Anyone who is an accomplished programmer will appreciate these skills.
It is by no means the only way to learn this, it just seems to work. If you can master higher math, you can usually pick up programming.
First I just want to say that computer science programs are not all created equal. There are definately less schools who teach it well than those who dont.
Now for math, personally I was required to take a fair number of courses during my first and second year. While I didnt find it all relevant to CS, there definately are reasons to take math courses to help you in CS. Proving runtimes is mainly math, encryption is mainly math, etc.
Also, I just want to make a note that CS != programming. You take a 4 month course to "learn to program", and you take a 4 year program to begin learning computer science.
[I can picture a world without war, without hate. I can picture us attacking that world, because they'd never expect it]
I started a Math/Computing joint degree course, and talking to people on both sides I worked out that there was about a 1/3rd overlap between the courses.
Course this meant I ended up doing 4/3 of a degree. Which didn't sit well with my plans of having a social life so something had to give.
My point is that there is always going to be a level of overlap - maths goes a lot easier if you know how to get a machine to crunch the numbers for you, and computing studies need a certain level of numeracy.
Oh, and set theory is just bloody essential if you end up anywhere near databases.
'Don't worry' said the trees when they saw the axe coming, 'The handle is one of us.'
The rest of the world is filled with mono-educated outsourcing fodder that have crammed a narrowly-targetted CS education into as short a time as possible, memorizing syntax and call center protocols. The best possible insurance of future employability for someone considering CS is to add something else to your curriculum to expand your horizons. Math is certainly one likely candidate, but some other excellent combinations are CS and Music, CS and the Humanitites, CS and Foreign Languages, or CS and English. The suggestion is somewhat counter-intuitive. Most CS majors will frown on your interest in the Humanities. Exactly. Set yourself apart. Study what you are interested in, distinguish yourself from the pack, and seek an advantage through challenging, broad study.
Yeah, baby. Dual Major CS/Math... that's what I'm doing. Nothin else to do, so why not?
I've never been one for math, specifically algebra. You see, before I had the opportunity to take algebra in middle school I had been programming with QBASIC. Having no formal training in Basic I ended up coming up with mathematical solutions using crude loops, variables, and goto statements. Not kosher programming now that I look back but so what, I was 12. When teachers tried to "teach" me algebra I felt like I was being unlearned. Most of the times I just scripted up some basic to help me with the homework.
Years later my high school offered a C++ class so being the geek I am I tried to get in it. Unfortunately the pre-requisites for the class were kind of high including algebra 1, 2, geometry and calculus. Like I said, I was never one for math, but programming i could handle. This was the teachers first year teaching C++, prior to that he was teaching QBASIC. When he rejected me based on my lack of pre-requisites I threw together some quick basic using RND, some colors, circles, and a few system commands to make it look pretty. The teacher let me stay and I got an A in the class. I may not have used the same formulas as the other kids in the class (They were Nerds, I was a Geek
Ok, so I may have actually stunted my growth in mathematics and developed bad programming habits (I dont need no stinkin XOR, I'll do it the hard way) but today I'm working as a web developer and use PHP all the time without problems (and yes I turned globals off, use sessions, and actually think the security through when doing DB stuff).
Just my $0.02
Im dreaming ofa big bndwdth, That can resist the
Try "Binary-digits-are-best".
Inorder to do anything useful with 3D graphics, you will definitely need knowledge of linear algebra. Whats important for CS students is the application only, but understanding the theory is always a definite plus. Also, an aptitude for physics is also very important inorder to simulate reality. You may want to check out 3D Math Primer for Graphics and Game Development by Fletcher Dunn.
Wow, are you sure about this tough guy? If you want to be a programmer that does nothing but hack java code for your run of the mill application, sure you don't need any math. But if you want to do somthing USEFUL in the CS field (research, grad work, etc.) you cannot DO WITHOUT the math.
College is not a vocational school, although that many would argue that DeVry is a vocation school.
College is supposed to teach you how to think & learn... it's become a necessity since US secondary schools are so malfunctional. Your college classes should give you a base of knowledge about whatever you are studying, and the rest is up to you.
The reason that top schools like MIT are top schools is that they force their students to explore and learn new things. If you are a serious student, you can come away with a good education from almost any school.
Conformity is the jailer of freedom and enemy of growth. -JFK
If they don't know math how could they 5p34k 1n uB3r |33t 53|\|t3n[35.
Unless you are doing stuff with finance, you will almost never encounter any 'higher' math if you end up doing programming in the business environment.
If you want to use your head get involved with actuarial science or with bioinformatics. I am sure that there are other fields I have missed.
love is just extroverted narcissism
Any CS degree that is worth anything generally requires a math minor as part of the graduation requirements (if your school requires minors, as most do - particularly if you're in the College Arts and Sciences with Math, Meteorology, etc.). If you're going the computer engineering route instead, you can believe you'll have even more math. CS is just that, a 'science' - and the theories are described by and demonstrated with math.
Ok, I looked that the course listing, and everything looks ok to me, but chemistry? Can anyone explain why that's in there? Physics, Calc, those make sense...but chemistry?
At UCSB you're required to take 5 quarters of math for Computer Science and 4 quarters for Computer Engineering
I didn't see this mentioned in the article or in the comments so far, but I've found combinatorics to be very applicable to Computer Science. It's even crosslisted with CS at my school, along with discrete math and a few other courses. If taught well, a combinatorics course can give you a lot of insight into why certain problems in CS get approached the way they do.
Many schools such as the one I attended (University) do teach the right things. Such as software archicecture, good programming practices, etc. They give you the skills to get the job done. They may cost more but you get what you pay for.
Evolution or ID?
I find that the math courses I took in college had about as much relevance to the comp sci courses I was taking as the comp sci courses themselves had to the actual work I do as a computer programmer.
On the one end of the spectrum is pure theory, and proof, and on the other hand, we have complete practice, and "get it done now".
Math is a great theoretical background for computing, and made some of the algorithmic courses a breeze.
Ironically, I found the proofs in algorithms classes an attempt by computer scientists to say "see, we are a real discipline, we do proofs too", but I found that I wanted the CS courses to be a counter to all of the proofs and theory I got in my math courses. I wanted some "hands on" learning.
Once I got out in the real world, especially with languages like Java, even the CS theory/practice (this is a hash table, now write one), I found that most of the data structures/algorithmic stuff had been written and I just filled in pieces.
Where am I going with this? I guess basically that math is useful for comprehension in CS classes, but depending on the programming you do, you may not even use the CS you learn in the real world, let alone the math. But understanding is good.
Rhymes that keep their secrets will unfold behind the clouds.There upon the rainbow is the answer to a neverending story
Just like other fields of engineering and science. Sure you can write a program without knowing much math but you can work on a car without knowing how to design and implement an internal combustion engine too. It's kind of like trying to compare the ASE certified tech to the engineer at the car company.
The math requirements to get a B.A. in Computer Science you must take Calculus I and II Linear Algerbra Discrete Structures Algorithms For the B.S. You need those classes plus 2 advanced stats classes.
From the article:
If you have the chance to take calculus in high school, I may surprise you with my advice. I would not automatically jump at the opportunity for a couple reasons. Please forgive me as I climb onto my soapbox, but keep in mind that I am a math teacher and I know a lot of this from experience.
First, high school calculus teachers tend to be the teachers in the math department the longest. The problem with this is that while these teachers are more experienced, they have been away from calculus longer than the other math teachers in most cases. Besides that, these teachers are often near retirement and may not be as motivated as younger teachers.
Second, calculus is the upper-crust of high school math. In college, it's one of the lowest math classes offered. This results in a completely different teacher mentality. A college calculus teacher will be used to working with struggling students because for many of them, that is the toughest class they will ever have to take. But high school calculus teachers will be more used to working with the top students in the school. If you aren't especially gifted in math, you may find that you don't get what you need from these teachers.
Here's the problem with those ideas:
1) In Calc I in HS, you're looking at a class of 30 people. 50, max. In Calc I in college, you'll likely be in a class with something on the order of 100-200 people. See, *everybody* takes Calc I their first year, not just the comp. sci's. All engineering majors, all the math geeks.. Hell, even English majors probably have basic math as a requirement... So most of the time, it's a big class, usually a seminar type of deal. If you're having a hard time with it in there, then you'll also likely need to take another not-for-credit class where they can give individual instruction or take some extra tutoring on the side. Whereas in high school, you've not only got a smaller class, you've got an experienced math teacher, who likely knows his stuff, and you've got a year to learn it as opposed to 1 semester only. Okay, so the HS teacher may be less motivated, but you've got a longer time period, a smaller class, and you're in that class with the top students in the school (who can probably help you out somewhat) instead of in there with everybody in the whole school (who likely need just as much help as you do).
2) Yes, calculus is the upper crust of high school math. It's also a heck of a lot easier than a college level math class. But here's a thought: The high school class doesn't usually count towards your college GPA, while the college level one does. What's so bad about taking it twice? Take the high school calc if you can swing it, then take it again in college. You may still have a hard time in the college calculus, but it'll be somewhat easier because you've got at least some background to it already.
- Give a man a fire and he's warm for a day, but set him on fire and he's warm for the rest of his life.
I think the question that should be asked instead is `Does computer science really have that much to do with programming'? I mean, I'm graduating in EE this year and I sure didn't choose this major because I wanted to learn how to solder -- that's the technician's job, you know.
I repeatedly question the reasoning of others in becoming a CS major if all they want to be is a code monkey.
Join the NFSNET. Our prime goal is making little numbers out of big ones. http://www.nfsnet.org/
I can relate to this question because I graduated in 2001 with a Bach. Mathematics Major: Computer Mathematics. I took almost equal math and CS courses (a few more math of course) and took everything from Calculus to Algebra to Stats...and I can say that you will USE them ALL! I know people will argue that "Unless you are working in field that uses that heavy Calculus stuff etc that you will never use the stuff you learn in those classes" I TOTALLY disagree with that (but I will admit I was thinking that when I'm learning about 4th and nth dimensions in 3rd year Calculus! hehe) but here is my reason for saying you will use them all; the problem solving skills you aquire from doing these subjects is a HUGE asset! Yes you won't use or even remember most of the equations etc but what you do remember is how to solve complicated problems using the skills you learned from each previous problem. If there was one class I would recommend for sure, it would be any class that teaches Algorithim Analysis and also Stats is a big helper too! Just my 2 cents!
To a certain extent you'll use almost any math you take. You probably won't need any of the exact examples, but an understanding of the algorythms and the general concepts are very useful
As far as how much is actually used in programming, I think that depends a lot on what you're writting. I've written some programs that were very math-heavy and some that required almost none. Still, don't skip any math classes just because you don't think you'll need them. The act of learning math is maybe more important than the ability to actually do complicated things with it.
You'll have to excuse me because me degrees are in engineering and physics, but I thought that CS WAS applied math. How can you get a degree in CS without math. No really I want to know!!! How can you do anything (in CS) without linear algebra, calculus, etc., etc. What do you end up programming?
I had to take three semesters of Calculus of which only the last one has ever been really useful in practical ways. The Approximations and simulations have certainly been valuable.
:)
I think the career path you chose will decide if some, all or none of this is useful to you, but a deeper understanding of mathematics is important.
Now the semesters of Biology and Chemistry that were erquire becuase the degree had the word 'Science' in it is another story
Math is useful to CS/programming in two ways.
The first is the obvious practical way that others have covered. Geometry is essential for graphics, programs sometimes contain physical models governed by differrential equations whose strengths and weaknesses you need to understand, and so forth.
The second is more subtle. Set theory and graph theory lie at the heart of computer science, and thinking of computers and computer programs abstractly, in a hardware- and language-independent way, as finite state machines with transition rules, can be enormously helpful in attacking problems. To my mind, this is a fairly natural approach to programming, but the advantage of some mathematical training lies in not having to re-invent the tools.
2*3*3*3*3*11*251
At Millersville University, we were required to take Calculus I and II. Calc II was nearly impossible, it was notorious for stopping CS majors dead in our tracks. I took it 3 times before passing, and knew several other CS majors who had every single requirement filled EXCEPT for that class, and couldn't graduate because of it.
May you be touched by His Noodly Appendage. RAmen.
The math I use the most in my programming is matrix math. You will find this used lots, especially in 3d graphics/physics.
"When life gives you lemons, don't make lemonade. Make life take the lemons back!" -- Cave Johnson
Maybe the real question is: What sort of math are CS majors NOT expected to take?
My university,Worcester Polytechnic Institute required that we take seven (7) math courses to meet the math requirment for a degree. The courses I took are:
Calculus I-IV
Discrete Math (counted as CS credit though)
Linear Algebra and Matrices
Statistics
Probability in Applications
These courses helped out a lot when I took my higher level systems courses, especially networks and distributed computing. I would agree that computer science isn't "all about programming" and someone even equated programming to knowing lab equipment for chemistry, but that's took simple of an analogy because software is one of the main things we produce. A builder needs to know how to use a hammer to build a house, and without that knowledge he's not a builder.
I think that a lot of schools recognize this, such as RIT's college of science. They offer a "Computational Mathematics" degree, a 5-year (ouch!) program that combines their Applied Math (also College of Science) and their College of Applied Science and Technology's Computer Science program.
The enrollment has traditionally been rather small in size; when I started (transferring in with a 2-year degree), there were only 7 people in the program; the Applied math had some 40, the Applied Statistics had some 30 people. When I graduated, there were only 3 of us--some had transferred to Applied Math, or to straight Comp-Sci.
The challenge was that most math people did NOT like computer science; and that most comp sci people took only the required maths, and nothing else. Being able to bridge both worlds did my career a lot of good!
The critical thinking imparted in a Numerical Methods course or an Abstract Algebra course is invaluable to a computer scientist. While you may never have to use the maths presented in a Real Variables course, twisting your brain around the topics really trains you to learn new things.
What did my math degree get me? It taught me how to learn. In any straight comp sci degree, if you learn the technology du jour, it will be good for (insert number) of months. You need to learn how to learn new technology.
RIT's Computational Math program can be found here.
---
wwjd? jwrtfm!
I suggest you read "Introduction to Algorithms, 2nd edition," by Cormen, Leiserson, Rivest and Stein, if you think that order notation is nothing more than estimation, or if you honestly think that algorithms have nothing to do with mathematics. The text, which is used by MIT and other reputable instituations, will show you the error in your posting.
It's about your ability to think nimbly, think critically and absorb information like a sponge. I graduated with a degree in English and fell into the IT industry. I quickly went from HTML programmer to database developer, ASP, PHP, mySQL, Java, etc. I had a good career until I got laid off. So my advice to you is DON'T major in Computer Science at all.
A - Because you probably won't be able to find a job unless they let you move to India and...
B - Because even if you get a CS degree the point is you should be learning what you want to learn in college to prepare you for life, not just a career. Because I and many others know careers can be pulled out from under your feet like a rug. Knowledge is forever. The more specific the knowledge, the worse off you'll be, in my experience.
... just say 'Cal', ok? (ref. last line of 3rd paragraph in article). -k
Generally, bash is superior to python in those environments where python is not installed.
For my degree in CS I had to take loads of math; calc, stats, theory, ... And at my current job I honstly NEVER use ANY of it. Wish I had taken geographic math tho, projections really give me a hard time
Many State universities offer great programs in Computer Science. Plus if you get into one that has a large attendance and people take pride in their schools, the chance to be hired by a former student increases.
I imagine there arent many DeVry managers out there hiring other DeVry students.
I won the lottery
The math involved in robotics was some of the most challenging work I did in school. The non-linear, multi-variable, matrix calculus used for movement control still boggles my mind at times.
I tried and tried to get past some of the math classes with no luck. Some of them I could pass when I finally got a professor that spoke english without a heavy accent.
I ended up dropping out of school and now I script for a living. Is scripting programming? I don't compile things very often.
I think Math is important especially depending on the type of programming you'll be doing (NASA?) but there are a lot of programs that can be written with logic alone.
Consequently, I'm not bad at math, I can figure things out. I just couldn't pass the four tests with high enough scores during the classes I took.
The man who trades freedom for security does not deserve nor will he ever receive either. - Benjamin Franklin
I don't use any advanced math in my day to day programming job, but solving math problems uses the same type of thinking as solving many programming problems.
Basically, if you're having problems solving differential equation problems, you're never going to be able to really conceptualize what
MyClass **p;
means. Its why you see people start to struggle when they try to use STL, and have just memorized the syntax instead of knowing whats it means.
There are several fields of mathematics that apply to CS. Some of these include graph theory, cryptography, linear programming, and vector-based geometry.
I double majored in both Computer Science and Combinatorics and Optimizations (a sub set of the fields described above). I found that a lot of the material was applicable to both majors.
For aspiring CS students, check out Concrete Mathematics by Graham, Knuth, and Patashnik.
It's based on a sort of "essential math for CS majors" course Knuth designed at Stanford when he realized people weren't getting any discrete mathematics preparation in high school.
Given the nature of CS, discrete mathematics are probably the key, though I think a grounding in algebra, the Calculus, and topology is essential too.
As a final plug, I'm fond of Feynman's Lectures on Computation both because I'm a Feynman fan and because I think it's useful to understand the physical basis of what you're doing. Most of his particular examples are dated (at one point he talks about this "revolutionary new technology called CMOS") but the principles and techniques he goes over are evergreen.
All's true that is mistrusted
Excellent article. I like the line, you need to come to grips with one important fact first: computer science has more to do with math than computers. I couldn't agree more, and this is something that many freshman CS majors need to realize quickly.
Heh, I just finished my CS Masters which included a class on Advanced Neural Networks (SVMs and classifiers).
You would not believe how much math is involved! There was one proof in a whitepaper I read that used calculus, algebra, trig, linear algebra, and geometry. In one proof!
My recommendation: take all the math you can. Make sure you take linear algebra (vectors/matrices), trigonometry, calculus, probability, statistics, and anything else that looks interesting.
Why does a CS major need math? Let's see:
Graphics engines - trig, geometry
Physics engines - Calculus, trig
AI - Statistics, probability, calculus, linear algebra
Basic GUIs - Geometry, algebra
Networking - Statistics, linear algebra
And of course, you can't do ANY of the above without algebra.
Another interesting quote: If you have the chance to take calculus in high school, I may surprise you with my advice. I would not automatically jump at the opportunity for a couple reasons. I think I agree on this one. You're going to start at ground zero when you take Calc I in college. So use high school to become badass proficient in algebra and trig.
"You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
Computer Science, in spite of popular opinion, is not programming. It's the science of computation. This is a MAJOR misconception that causes nearly 75% of CS students to drop out in the first year.
At Indiana University (granted it's a liberal arts college), I learned more about theorems, thesis, mathematics and logic than I did any language. For example, I learned the Church-Turing thesis but not how to make a GUI. The first year of my CS degree was spent entirely in Chez Scheme (a derivation of LISP) for the explicit reason to teach us computation, not languages.
If you want to learn how to write something stupid for your enterprise (as Linus says), get a IS or IT degree. If you want to learn what a flip-flop is, how to stack circuits to do multiplication or what recursion is, get a CS degree. Those who detest Von Newman matrices need not apply.
He is absolutely correct that mathematics is at the heart of the many (not all) computer science exercises. And certainly approximation theory is one reason to take calculus classes--it also helps you to understand the nature of floating point calculations which are, in a sense, like series approximations.
But he gives short shrift to high school math teachers, which, I feel is completely unfair. These are professional people; they have university degrees. They volunteered to teach calculus, and many are very good. (Trust me, I know, I was a classroom teacher, and incidentally my HS calculus teacher was outstanding). And the idea that most college teaching assistants (who often teach calculus classes at universities) are any better shows a lack of understanding of the freshman college teaching model (again, trust me, I know, I was a teaching assistant at the University of Texas). Perhaps his HS calculus teacher wasn't the best, but that is no reason to think that calculus classes should be avoided by prospective CS students. I say, get it early and often.
I'm a *scientist*, not a fucking code monkey.
I mean, a B.Sc.? or a B.A.?
Most CS programs are B.Sc. programs, they'll want the same math as somebody studying biology, plus some additional numerical methods specific to CS.
A B.A. program in CS will have very little math. It's kind of sad really... but it gives you the data structures and management techniques which most programming assignments require.
Remember a B.Sc. is about science and furthering the field. If you don't understand the math used to develop computer science, you can't really further the field. Think about proving algorithms, encryption, compression, waveforms, statistics, stuff like that.
Now learning how to develop that database front end for the marketing department has little to do with either... but picking up the programming books and immediately understanding the data structures and methods they use to develop the GUI, interface with the relational database backends, manipulate the relational database backends... know the weaknesses and limitations of relational theory... all that stuff which "teach-yourself programming in 21 days" books tell you how to do, but not why you're doing it is a matter of either the arts or science programs.
If you dump the maths and go for a B.A. in CS, some snobs will laugh at you. Best to take the math if you want to do CS. If you flunk all the maths and have nowhere to go then finish with a B.A.
Taking theoretical computer science classes may seem like a waste of time, but I highly recommend it if for no other reason than because you're not going to learn this stuff on the job or on your own. Taking an extra class on object oriented programming or databases instead may be tempting, but you can teach yourself most of what you need to know about these. Take advantage of the time you have in a university and learn about the logical foundations of your field. For those who love computing, it's an experience which you won't forget!
At my university, there's was (and is) a HUGE emphasis on advanced math for all engineering (including construction, chemistry, mining, etc) degrees and computer science and programming degrees. 10 years after graduation (working as a programmer first, now as a digital chip designer), I have hardly ever used any pure math skills, but that doesn't mean it isn't useful. On the contrary: by studying theorem proofs and solving very mathematical question, you learn a WAY to solve complex problems by reasoning in a very methodical and structured way. This may not be needed for standard 'simple' programming jobs. This is so much more valuable than learning the hot language of the day. This may not be immediately apparent while you're studying at school and, yes, I hated some of those courses as much as anybody else, but I firmly believe that I made me a better engineer.
There is a direct relationship between minimizing equations and writing minimal efficient code. And of course logic is a basis in coding. These must be understood when writing code.
... i'd say the main thing that lets down students is lack of maths knowledge.
i teach mainly in computer networking, and maths is used all over the place:
there are a lot of other fields of maths which are useful too - these are only the ones i use in my teaching
the more maths you know, the more you'll get out of computing science
-d
Though I understand where the math people are coming from, I have to respectfully disagree. While a certain level of math is required for tasks (discrete math for AI, for example), I don't think a computer scientist (at least, one not in academia) has to know them on the level that they recieve taking all these courses from the math major. What the cs person cares about isn't so much how or why certain aspects of the math work out, just that they do work, and can be relied on. In my experience, at least, learning the theory gets in the way of what I find useful, and the non-theory (engineering-oriented, application-only) courses end with the calculus series, at least at OSU.
Perhaps I'm just crazy, but this makes sense to me... it's the only way I can justify the fact that, even in higher-level courses in each, I can do very well in my CIS courses and so abysmally bad in every single math.
If your computer science department is part of the engineering school, be prepared to take fun stuff(really! it is!) like thermodynamics, material sciences, mechanical statics, and other generic engineering courses. This was one route at Ohio State. you could either go throught the business college, arts & sciences, or engineering. i chose engineering, thankfully. But my highschool (actually, I blame my gradeschool) did little to prepare me for college math. So i took a few quarters to ramp up and then start with the actual math requirements.
Assuming someone is out of school and wants to go back and learn/reinforce this type of math auto-didactly, what books/web resources would people recommend?
Syntax error: loose != lose, affect != effect, then!=than
I am a programmer, and I suck at math. I've always been able to get through it but I'm horrible at it, it doesn't "click" with me, and I've had to work hard and long to get through any problems whatsoever.
I took Calculus I through a community college affiliation while a senior in HS. I did all right...B+/A- average. Nothing spectacular, and I had to really bust my butt to get it.
Upon arriving at college I enrolled in CalcII and was blown away within 4 weeks because of the vast chasm between the two classes, let alone how quickly the concepts of CalcI left my mind. I quickly dropped it and was much disheartened.
My advisor said I would need to start over; I had to have higher maths in order to be a computer programmer. I was frustrated and very depressed...computers came extremely easy, maths did not. I felt Very Screwed(tm).
Then I was visiting another CS professor in his office, a brilliant man, and we got talking about it. He said it was bullshit; if you've had algebra and geometry and a basic understanding of trig, unless you were going into game programming, advanced research, or something like AI, you didn't need more than that. Enlightened, I gave up trying to do higher maths and never did another class in them in college.
And you know what? I've never, never needed what I don't have. The concepts and ideas I've retained from algebra, geometry, trig, and basic math have covered my ass more times than I dare say, and concepts in computer science have crossed any gaps that existed (discrete structures, etc.) I have no doubt that if I pursue a higher degree in CS that I'll need to take some or if I decided to get into graphics or such.
Remember: Your education isn't as much as WHAT you know but that you know how to LEARN what you need to know. Develop your skill to be able to figure things out on your own and you'll prosper more than trying to remember vague abstract theories and theorms.
Blog,Twitter
I double-majored in CS and Math.
Here's the story at my University. We have 2 different CS degrees: BS and BA. The BA was a wuss degree. It was much less rigorous for software courses and had a lot of business classes. It was basically an MIS degree. The BS had very rigorous software and math requirements, and had absolutely no business classes. In fact, a BS CS major got you an automatic Math minor. It was 6 more Math classes to get the major, so I got. One extra semester, no biggie.
I don't think that I'll ever use my math degree in industry, but as a person, not just as a software developer, Math is important. We use it everywhere, and its one of the last areas that you can major in that you can take your learned skills and apply them in nearly every industry.
If I wasn't such a great developer and so in love with the field, I'd have no problem applying for almost any entry level position because of my Math background. Math has given me such a broad subject base and good problem solving skills that I'm pretty sure I could be good at just about anything given about 6 months to learn the job.
This is the case for most Math majors I know. Many were supplementing their degree with a Math degree as I had, and they all could probably have gone into any field and been successful.
Computer science is a mathematical discipline. It happens to cross over with engineering in many places, but it is math. Computer Science programs just often have programming and software engineering courses of study as well. While these areas are related to computer science, and are of more immediate use in the business world, they're not the same discipline as computer science.
Computer science: a mathematical discipline with a convenient physical working model. (If computers didn't exist, we could still simulate them on paper. You would have to be crazy to do it of course, but mathematicians are almost by definition crazy.)
Software engineering: an engineering discipline with a large number of ethereal informational aspects.
IT: a support discipline dedicated to understanding the real world implementations of the above two and making them work properly.
If you do most contract programing (i.e. eCommerce style, or business domain problems) the majority of what you do is present information, accept information, and retrieve/store that information to a database. Almost no math is required. However, that isn't very interesting work IMHO.
More interesting things like data-mining or games require advanced math. 3-D graphics requires matrix algebra and AI/mining techniques require some understanding of statistics and calculus. Performance analysis also requires an understanding of statistics. If you're doing modeling or simulation problems then you may need a good grounding in statistics, numerical methods, number theory, and differential equations.
You should also have a course in combinatronics (sometimes called discrete math or graph theory). There are a lot of theorems regarding graphs, their traversal, structure, etc. that are extremely pertinent to computer science.
If you intend to program mostly around business type problems you probably don't need much math although statistics never hurts. In many jobs you won't have to remember what a Taylor series is and what it's used for but you might need to implement some equation in code. Even in more technical jobs you might only have to remember enough linear algebra to make sure you're doing matrix multiplication correctly.
No job I've held to date required me to do much more than addition and its tricky friend - multiplication. However, graph theory has been helpful to some degree. Also the degree of math required for your degree may be dependant on what faculty CS is 'in.' In some cases CS resides within the Math faculty as applied Math. If you wind up working for Wolfram Research, I imagine a mathematician (PhD) will tell you what to code more than you performing your own independant research.
Leave the gun, take the cannoli -- Clemenza, The Godfather
Depending on what your CS program is like, you probably can get a degree without the math. But I'd wager such a program isn't the classical computer science degree.
The classical degree doesn't just cover programming but also includes algorithms, language and automata theory, computability, operating systems, systems programming, compilers, linkers/loaders, and at least a survey of language approaches (procedural, object-oriented, declarative, evaluatative, etc.); bonus courses in graphics, networking, correctness, and software construction are nice, too.
Can you imagine a networking course with a probability and statistics background? There goes queuing theory.
Can you imagine a graphics course without combinatorics? There goes region-coloring.
Can you imagine a computatibilty course without elements of mathematics? There goes proving what you can and cannot do with computers.
Yes, take the math: take at least prob/stat, combinatorics/counting, and basic elements/proof. And there won't be a software development problem you can't tackle---or prove you can't tackle!
Courses topics found most useful: discrete structures (graph theory, number theory, combinatorics), real analysis, differential equations. To become a good programmer, make sure you take classes that require _projects_. Real, term long, projects. If you want to understand how things work, write an OS kernel. Write a compiler. Don't get caught up so much on learning this language or that. I found that as I started working on projects, I picked the language expertise up quickly. Don't be afraid to take graduate classes when you meet the prerequistes. It may not be easy, but force your way in.
As a CS graduate I often wish I had better match
teachers/better focus on math subjects back when I was an undergraduate.
Those who disagree need only browse through Khuth's TAoCP and Hennessy/Patterson's book on Quantitative analysis of computer systems.
Its a powerful tool which opens new vistas, and never goes to waste
What sort of math are CS majors expected to take? Why are these classes useful? Does programming really have that much to do with math?
The fact that the second and third questions are even asked in a serious (or semi-serious) way reflects a sad state. How can you do any "real" programming without knowing Boolean algebra, theory of computation, integer math, algorithms, etc.
Without knowing the underlying math, how can you understand the logical and arithmetic operations that your CPU can perform? How can you understand whether a given task is solvable? How can you understand how much time a solution should take so that you can compare it to how long it is actually taking?
Ok, rant over.
I bet to differ...
:-)
:-/
> CS is about finding algorithms, which has
> more in common with cooking than calculating.
Obviously, you never took courses in
algorithmic and complexity or solvability.
Those are basically applied math.
And as far as your description of the big O,
small o notations are concerned... Well...
I think what you're forgetting is that the biggest thing you take away from a (good) math education isn't a set of equations and formulas, but is an ability to set up structured arguments and proofs.
You say that CS is about finding algorithms. What exactly are you doing with them once you've found them? It sure would be handy if you could, for example, prove that algorithm A is always faster than algorithm B, or demonstrate that algorithm C doesn't handle certain situations, instead of just guessing or trusting your gut. That's exactly where a solid understanding of mathematics comes in.
Math is important for a programmer as it develops our logical thinking ability. There is no sphere in life left untouched by math. Btw, has anyone noticed the connection between Math and classical Music. A friend of mine suggested they are closely interlinked although I cant validate that...but it sounds very interesting..!
~~~~~ rudga ~~~~~
Recently a "nuclear scientist" (the guy was a nut) was rather disparaging of Computer Sciences in an open forum. (Made the standard comments about "not a REAL science", blah, blah). He then went on to claim that in his younger days he had built the earliest computer cluster and that the software he wrote was so powerful that the cluster could have scaled up to infinity.
:-)
Suffice it to say, it felt really good to throw Amdahl's Law at him and call *bullshit*. He didn't talk to me after that.
Javascript + Nintendo DSi = DSiCade
I am a math and computer science professor; I teach both types of classes. And I feel very strongly that computer science majors must learn to do proofs. And not fakey set identity proofs that they teach in Discrete. I mean real proofs from an axiom system like graph theory, abstract algebra, or analysis (pick one).
Why? Because in my experience, exposure to axiomatic systems greatly improves abstraction and critical reasoning. I teach a "bridge class" (what we call them these days since high schoolers are typically unprepared for math beyond calculus these days) which presents an axiomatic approach to linear orders and the topology on that line. Many students take this class before Data Structures and they remark that it makes the distinction between Interface and Implementation much easier for them (especially since search algorithms are all on various linear orders). They also know how to design APIs cleanly without having to write the program first.
The point I am trying to make is that you should not just take math because of the techniques you learn from it. (This is anecdotal, but) When I was at graduate school at Cornell, almost every math major I met who started programming after taking a lot of math classes was a stronger programmer than anyone who started programming first.
Oh god, where do I begin? There is a lot of math in everyday programming. A don't think I ever wrote a program that didn't use it. Graphics, transformation, conversions, periodic processing, signal processing, you name it. Even if you could get by without it *in* the program, what about validation? Rate Monotonic analysis, CPU utilization, throughput. Try doing this without math. As for your comments about Big-O (and there are others, not just O), you have no idea what you are talking about. Big-O bounds the upper limit of an algorithm in time relative the number of elements being processed. If it take constant time regardless of the amount of data (i.e., array indexing) then it is constant time or O(1). If the time grows linearly with the amount of data (sequential search), then it is O(n). If it grows exponentially (brute force matrix multiplicition), it is O(n^2). If it grows logorithmically (binary search), it is O(ln n). You should really take a course in alorithmic analysis. There is a lot more to it than just guessing. It is a mathimatical analysis of how an alorthim will perform.
Anonymous Cowards suck.
My take on discrete math, as a former wannabe mathematician, is that the high school math curriculum is just enough to get you to calculus and all the extra has been squeezed out. Lots of material in the realm of discrete math is accessible to a high school student.
In addition, many of the techniques and methods, like difference equations, parallel those in calculus, so it can reinforce what you've learned in calculus.
Finally, as to the author's point about calculus in high school, I think he's way overgeneralizing about the quality of high school calculus teachers. My cousin, a professional mathematician, recommended that I retake calculus in college. She said that she hadn't really understood calculus until advanced calculus in grad school! Having been down that path myself, I can see this - calculus is such a different way of thinking than its predecessors in the typical high school curriculum.
The fact that this obvious troll is moderated as "interesting", is a little wonder that should be preserved as an example about "how NOT to moderate".
CS is not about finding, but about coming up with these algorithms, and that my friend, takes a lot of math skill.
And your comment about Big O doesn't even merit a response. If you're just happy being a guy who knows how to hack together java or c programs, then great, math isnt necessarily that important for you, but you are merely just a programmer, so don't try to classify yourself as a computer scientist. Computer science is a very theoretical topic and invovles tremendous math knowledge. Remember that not all math is simply 5x=3, solve for x. Math is a problem solving subject. And not just a problem solving subject but find the best solution. Try doing some reading on some very theoretical subjects, heck try just picking up a book about networking (and I'm not talking about configuring networks, I'm talking about how networks are implemented, somthing like "Computer Networking: A Top Dwon Approach Featuring the Internet"), you'll find equations throughout the book, and thats a REALLY bad example.
I'm only paranoid because everyone is against me...
Ya know...maybe it's just my field (computational biology), or the fact that I've been in school for far too long, but the more I code, and the more math that I use, the more I see the two as different faces of the same beast.
You don't have look at much interesting software before you realize that the difficult problems -- the ones that are fun to solve -- are inherently mathematical. And conversely, once you start seeing programming languages as expressions of underlying mathematical forms, they start to become very similar to one another. And I'm not even referring to bleeding-edge research code, either -- look at P2P networking, and you're staring into the eyes of a massive, graph theory problem.
Anyone can write a shell script. Very few people can express mathematical concepts in code.
Let's try not to let fact interfere with our speculation here, OK?
This is all so true. I am a computer science major at the Tufts School of Engineering, and the math requirement is huge. I appreciate it though, and I am seeing all the time that the more comfortable I am with math, the more clever and efficient my solutions to large computing problems becomes. Math is the basis of computer science. It allows us to *compute*, which is the obvious origin of computer science. The function of these machines is to process computative operations, and Math is the tool by which we can understand these things, and engineer new more efficient ways to perform them. CS without math is nonsense, who proposed that anyway???
sigSEGV - doy!
The particular class I took was one of a pair; mine was 2/3 probability and 1/3 statistics. The twin class was 2/3 statistics and 1/3 probability. Either version would have worked in the end, but I suspect most engineers find probability more interesting.
Take them if you can find them, even if you have to go to another school to do so.
sPh
While in undergrad, I though the Math requirements were useless. Programming != Math. But... in Grad School, in order to do any kind of research of consequence, you must characterize a lot of what you do Mathematically. I was amazed at the amount of Math that permeated all tasks. It is amazingly useful to be mathematically skilled when having to deal with real problems, past the simple building of an application.
Throughout my computer "science" career (which now is more business than science), I always felt that I was just more comfortable having the math behind me. I have often heard people in software development lamenting that they never had the hard math - even if they really didn't need it.
So take the math to help your self-esteem.
Open source development is my way of competing with the low-cost programmers in India...
I'm disappointed with what Math is required for CIS majors over CS students. I went to college where it was convenient for me, so I could have cared less about the education. This being said, when someone new came in to head the CIS department at my school, they actually dropped Calculus I as a requirement. I was astonished. Of course, I realize CS and CIS are totally two different things, but what are they telling the students by doing this? That grammar and history are more important parts of IS, then math? I just don't get it. I was amazed that people in my classes had no idea what binary and hexadecimal numbers actually where, forget about actually converting from decimal between the two. I'm still saying maybe 10% of all colleges actually educate their students with useful curriculum.
I'm actually a Math/CS double major at Georgia Tech... The two subjects are so integrated these days - they're completely inseperable. Most Math people work on computers all day, and most CS people deal with Math constantly (unless they're '1337 d00ds 7h47 kn0w ASP and can make a 5h177y website). Even last semester, I had a proofs class which was clearly the domain of Math - but it was taught by the CS department. Additionally, our Intro-to-CS class uses Scheme - which is based on lambda calculus - a mathematical construct.
I think if CS majors stopped bitching about having to learn Math, they'd be much better off. Understanding the connections between the two will only improve your understanding of both.
--Justin Mitchell
"2nd Place is a fancy word for losing" --Bender (Futurama)
Programming is merely a tool we learn to help make use of what we learn in Computer Science. Anyone can learn to program at some level. Just like anyone can learn to use a calculator. Making these tools do something interesting/novel/innovative/useful is another story.
Yes, you need to make use of math.
At least, the ability for some form of math-like reasoning! Granted, some are not great at math, but are great at Computer Science. These people still have a strong mind for math, just not the discipline to work it out on paper formally. They are still great problem solvers. They likely did bad in Trig/Calc, but great in Geometry or Logic.
I think that the main thing that makes a strong Computer Scientist is that they enjoy Computer Science. This is why some do not do well in Math, but excel at CS. It's not the mind, it's the attention span. In fact, many itching to solve a Computer Science problem will figure out the math when they need it. It has become interesting. But, the itch has to be there. The curiosity has to be there. The desire to tinker, rip it apart, and (hopefully) put it back together has to be there. And if learning to program is the the tool to get it done, so be it!
My first year taking CS classes showed this to me. The intro class went from 90 at the beginning of the semester to 40 at the end. Many of those people who decided "Computer Science is a good idea, because it's where the jobs are" (this was five 7 years ago), though smart, didn't have the interest needed. More than half of the class dropped it. Others ( a mix of good and - not as good - students) did very well.
So, yes, you may not need the math, but you need to have the ability to solve the problem. Please, do everyone a favor, and only persue CS if it is interesting to you. I know too many people that know all sorts of languages, and are over-confident, land great jobs and then are not great at their jobs. There's a lot of unemployed or underemplyed IT people out there with a lot of real talent who need a job and will do it well.
This is my third year at University of Texas at Austin and as a dual major and CS and Pure Math, I must say that my mathematical background is more than helping me in CS. IMO to become extremely good at programming, a natural understaning of working of algorithms is essential. It is important to take a theoretical course in analysis of algorithms. Once you formally prove an algorithm and its workings, you gain a natural understanding of its behaviour. Pure math classes give you the requisite mind set to understand and prove the correctness of algorithms and for that matter anything CS related.
Modded "flamebait" but it's a good point. DeVry, ITT Tech, Phoenix U and so on have questionable standards. Why? Because their main purpose is to separate students from money, not teaching. I think that even a more or less unknown state college is better, at least their mandate is to teach, not separate money from the marks. The parent also mentions that he thinks these schools primarily teach management, and that is certainly true of Phoenix, who's primary clientele is management looking for the coveted Masters so as to be able to move on to tenured PHB status.
"Who are in control, they are not in control of anything - they don't even control themselves!" - Glen Beck
Your code needs to be 99.999% reliable. How the heck do you do that? Probability and Statistics.
You want to figure out system load from network usuage; how do you do it? Model network traffic as a laplacian distribution.
I'm not saying you need to calculate the autocorrelation of two random processes, but if you want to prove to others that your design has merit, throw some math at it.
In the future, I would want to not be isolated from my friends in the Space Station.
Big O notation simply isn't intended to be used as an indication of just how fast the algorithm is going to run given a sample data set - there's no point, because different implementations of the same algorithm in different languages using different data structures on different architectures renders any approximation of running time redundant. Big O notation is a guideline to the performance of the algorithm given certain sizes of data set. It's a more abstract concept which goes hand in hand with the abstract concept of algorithmics, but provides some basis in reality for reasoning about the performance of an algorithm.
;)
If you have two sort algorithms, one is O(n^2), another O(n), you'd want to implement/use the O(n) one; you can see at a glance just which algorithm is the better of the two.
It's a tool used in the field of algorithmics, a field which is definately not my speciality, and evidently not yours either
At the University I went to, there is so much math required for a CS degree that you only have to take 1 or 2 more classes, and you can graduate with a Math minor.
:) Maybe I'm not as good at math as I thought. :)
I didn't do that because I hate 'doing' the math. (Failed a couple courses.) I didn't hate the math, and I understand the concepts, and I'd love to put them into an algorythm or program, but I hate DOING the math. I don't like writing it on paper.
Of course, in my graphics class, my atom orbitted the viewpoint rather than the electrons orbitting the nucleus.
--Welcome to the Realm of the Hawke--
If you pick up the Art of Programming series of books by Nuth, you will see that it is ALL math!
Math is essential to CS. Even higher level math
that is used in CS Theory classes that are all
theorems, lemmas, corollaries and their proofs.
People who walk through a CS degree without taking a CS Theory class do not really have an understanding and appreciation for Computational Science which is what Computer Science truly is.
Programming can be done by anyone. Sorry I don't
care how good of a coder you are, your job is going to be outsourced. Unless you learn how to
advance or create new ways of computation at the base level then you are in trouble.
When Daniel Hillis, founder of Thinking Machines, and all around brain-wave, first went to MIT, he asked AI guru Marvin Minsky what he should study. Minsky said, "Study math, because that way, everything you learn will still be true in 10 years." I've been a software engineer for 8 years, and majored in math in college. I had some disadvantages starting off in trying to convince companies to hire me as a programmer, but once I had that critical one year of experience, the math degree has only been an advantage. Moreover, if you are the math guru where you work, you get to be the hero and alpha geek all the time. My sole regret in taking math? That I didn't take more.
I know that a lot of CS majors don't want to get into what's traditionally an EE domain. However, for a lot of companies, EE, CE, CS, Physics and sometimes Math are all more or less equivalent if you have the right course background.
If you want to deal with anything signal processing related, you'll probably need to take a course in complex variable calculus to understand digital filters and the discrete frequency or "z" domain. In my undergrad EE academic stream, that was the sixth and last math course that I took. The courses prior to that were Calculus I, II and III and then Differential Equations I and II. Even then, we had taken another course on signal processing which was mostly math and dealing more in-depth with Fourier series, Fourier/Laplace transforms, sampling rates, and the like. Beware - complex variable calculus is an extremely difficult course to take, though to me not as bad as taking that awful formal proofs class which I thankfully was able to bypass the torture of.
I'm not sure the average CS major wants to take all of that on for DSP, however. In reality, you more or less end up gravitating towards an Electrical/Computer Engineering degree at that point. That's also assuming you can fit all of that into your program.
AMEN. A-freakin-men!
I'm currently in a computer science program, however my emphasis requires less math (only business calc after college algebra) and more business classes.. I will end up taking classes like coporate finance, a couple accounting classes, management, and several BA classes in place of the higher math classes. Of course, I won't be able to take the upper level 3d graphics classes, but other than that, the CS classes are almost exactly the same as the other CS emphases that require more math. I would like to hear the opinions about this from people already working with CS degrees...
"Math is vital to computer science"
Well, it's certainly important sometimes, possibly often. I used a lot of math writing a conversion library for 3D file formats, but not so much writing a user system in php.
Learning to think is what's really important. I got my first software job by explaining at the interview that my skills were in complex problem solving -- skill they had trouble teaching straight CS people they had hired.
"You really dont need much maths to write a shopping cart applications"
Possibly not, but... I taught applied calculus at a university for many years as a grad student and I always loved it when students asked me "When we I ever use this?". A seemingly silly question to ask in an APPLIED Calculus class to be sure, but the most important use was always that if payed attention, the course would give them problem solving and thinking skills that would help them advance in whatever field they chose. Bottom line: After school you may not remember the Fundamental Theorem of Calculus, but the thinking skills will be invaluable.
Math will be very useful when you find out you can't get a job with a CS degree and you wind up working the register at McDonalds.
- discrete mathematics: logic-heavy algorithms (operating systems, databases, compilers, control systems, embedded systems, AI)
- trigonometry: graphics, physical simulations (game engines), mechanical engineering software
- linear algebra: graphics, control systems, optimization software
- calculus and differential equations: physical simulations (game physics engines, analog circuits, heat transfer, etc.), analog control systems
- statistics: finance, scientific programming, enterprise software, optimization software, AI
I'm sure others can think of other mappings (like crypto depends on several different math topics depending on the underlying code scheme). And if you don't know what type of programming you will be doing, then take some of everything. Math really enhances analytic skills and logical thinking.Two wrongs don't make a right, but three lefts do.
I went to a state school, but one that has CASB/ABET accreditation (pretty rare - only one in the state system to have it). Our math requirements are now four classes Calc I or above. So pretty much Calc I and Calc II, and then two more - such as some high level logic courses, discreet stuff, etc. Now... How much Calc have I used? I actually pulled out a Calc book once when I was coding. No lie! But only once. The logic stuff helps, not in a "you will use this" way, but in the "it teachs you to think like... " type of way.
As far as math goes, back in the early 90's I had to have up thru Calculus 3 for a BS in CS (public state university). Careerwise, I rarely use math more advanced than pointer arithmetic and boolean logic ... and when I do dive into the deep end of math, I usually have field-knowledgable professionals at my disposal to verify my logic.
... but in my opinion, exposure to advanced topics in school gives a programmer an edge over folks who may never be exposed to concepts because the workplace never required it. School teaches you how to learn and exposes you to advanced concepts you "may" never need ... but then if you've never been exposed to a concept you sure as hell will never find a case to use it.
I think this question leads straight to the "degree vs no degree" debate in computer science. I've seen many comments about how many computer skills come on-job rather than from the school room, and I tend to agree with that argument up to a point. I know that 90% of my everyday useful computer skills came on the job, HOWEVER, in my work experience I've worked with many degree'd and non-degreed computer folks, and in general the degree'd associates generated better quality of work. This is not to say that there are not many talented non-degree'd programmers
Wash, Rinse, and Repeat for all advanced college courses.
"Glory is fleeting, but obscurity is forever." - Napoleon Bonaparte
I've never worked on a major math project where I didn't have a math major doing all the equation work for me.
The sad truth of it is, Calc II isn't enough math to do most of the things they ask you to do, so unless you pursue extra math on your own, you're going to need help anyway.
It's been my experience that most programmers know something about math, and most math people know something about programming. I've never had much problem working with a math person. Much better than a lot of the other pure science types.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
The University of Minnesota offers Computer Science degrees in its IT (Institute of Technology) department. All IT majors require a complete Calculas course (4 semesters), 2 semesters of Physics (basically more Calc) and Statistics (lots of fun math there, including more calc).
Math is more about learning how to think about problems and solutions than anything else. You'll use that skill every moment of your life.
Apple free since 1990!
The places where Math and (theoretical) Computer Science meet are usually based around logic problems. Having graduated with both Math and CS degrees, I would say that the upper level Math courses (Linear Algebra, Diffy Q, and other semi-grounded math) cooresponded with the Upper Level CS courses (N-notation, and other algorithm study) in their use of "mathematical" logic. It takes a while in most curriculum to see this, but the simularities were evident Junior and Senior years. It depends on the field of CS/Programming that you will go into. Most complex algorithms use plenty of non-number based math (never need to touch a calculator), while many real-life Programming (3d graphics) use plenty of numbers-based math.
Personally I started out as a straight CS major, but I enjoyed the math a great deal, and with the addition of 4 or so extra Math courses, I was able to complete the Double Major. In the real world, I'm currently only interested in the Math angle of things, instead of the CS/Programming.
Hmm... the math courses I must take for my CS degree?
Calculus I
Calculus II
Linear Algebra
I'm at Rutgers University in New Jersey.
If you have two sort algorithms, one is O(n^2), another O(n), you'd want to implement the O(n) one
Really? Even if you could whip up the O(n^2) one in half an hour and have a working product today rather than two weeks from now when the O(n) algorithm's complexity is finally hashed out in code?
There's a lot more to actually engineering software than just "picking the right algorithm". If you think that the fastest algorithm is always the right one, then they've got a teaching post at the local community college for you.
My BSCS is from Georgia Tech; I had to take
And at Tech, the CS department wasn't part of the math department. Expect even more math from a school where they're still closely related.
The comments are again basically composed of a bunch of software engineers shouting "I don't use calculus!" as if becoming exactly like them were the sole purpose of taking a Computer Science degree.
God damn.
Look, a Computer Science degree is an end in itself, and should present a *superset* of skills and knowledge needed to become a software engineer. Maths is super-important. Want to do graphics? Calculus is a big thing if you want to mess with Kajiya's equation. Machine learning? Linear algebra's all important to those embedding linear classifiers like SVMs. Set-theory, predicate calculus, all sorts of symbolic logics and discrete maths are incredibly useful for understanding language theory, algorithms and AI.
For god's sake, view university as more than an exercise in getting a job and getting laid. You might enjoy it more.
Henry
i don't do sigs. oops.
If it grows exponentially (brute force matrix
multiplicition), it is O(n^2).
Sorry bro. O(n^2) is polynomial. see. n^2 is a polynomial. order 2 actually. For what it's worth, the naive matrix multiply algorithm is O(n^3). an exponential algorithm, like writing all the N digit binary numbers would be O(2^n).
Short proof: YES and NO
Here's what I do: Bitty Browser & Andromeda
I am Majoring in Math and people always ask: "What are you going to do with that? Teach?" I quickly reposond: "NO! I am going to become a computer programmer." Then they ask, "How does math relate to computers?" That is the point I role my eyes. Programming is just getting a computer to mimic something in Real Life. Math is Language of how stuff is done (It is hard to describe this to some people - think Physics). As a programmer you plug in the formula and the computer does it. Most computer Programmers get the formulas from books or elsewhere on the Internet (from what I have seen). Where I plan (hopefully) to have a better understanding of the formulas and how to manipulate them into giving us the data we desire. Now... In answer to the question... I would take Calculus 1 and 2, but if you want to go 3D take Calc 3 (at least that is where my College teaches 3D calculus). Number Theory is cool, it helps to show proofs of the basics - how to program division, mod, and other basic math functions. That is my suggestion. My theory - Math is the Interpeting Language between Man and Machine.
- Your stupidity got you into this mess, why can't it get you out? -Will Rogers
I can truthfully say in every programming job I have ever had nothing beyond basic math was needed. Of course the requirements you will need to graduate are usually insane, but that is another story. The way things are going, computer majors will need basic math skills to give correct change when all of their jobs get outsourced and they end up working at McDonalds.
I Am My Own Worst Enemy
If you're traveling into the wilderness (or anyplace similarly interesting), you'd do well to be on speaking terms with both.
Seeing bad movies only encourages them. Watch responsibly
Man I wish somebody had told me this stuff.. As a grad student I'm finding my math sorely lacking. Here are my reccomendations:
1) Of course, calculus. Pay attention to things like area calculations and Taylor approximations.
2) Linear Algebra (!)
3) Abstract algebra and number theory. I can't stress this enough... so many areas in CS these days use concepts from these subjects.
4) Probability
5) Graph theory
Huck a can of spam at me-- s/pikablu/u/
Programming is math. Anyone who tells you different is either lying or doesn't know what he is talking about.
Math was not a problem when I got my BS in Computer Science. It was physics. Actually, it was politics.
I was required to take Calc I and II and two other math courses. I chose Discrete Structures - a great class for Computer Science majors, and Digital Logic (I think it was actually called something like Binary Mathematics). Calc II isn't easy, but it isn't impossible either.
The problem came in with our Science department. They have tons of physics professors but nobody wants to take high level physics courses. So, they talked the Computer Science department into a deal. All science majors (Physics, Biology, etc...) will be required to take an introduction to computers course. In exchange, all Computer Science majors will be required to take a full year of advanced physics courses as well as two 'authorized' science classes. Luckily, one of them was Digital Logic again (I don't remember the real name of that class).
Advanced physics is hard because there are no rules. For instance, I had one test with a guy on a bike coasting up a hill and you had to guess his speed at the top of the hill. I got that correct. A month later, the exact same question was on the test. I gave the exact same answer and got it wrong because now we were using different formulas that give different answers. Apparently, the 'correct' answer in physics depends on which chapter in the book you are in. Needless to say, the second semester of physics busted my 4.0 and I have had a strong distaste for it ever since. Don't get me wrong though - I would have lost that 4.0 anyway. I hadn't taken the required Liberal Arts classes yet. But at least I can comment my code with sonnets now.
The previous comment is purposely vague and generalized, but all of the facts are completely true.
1) Logic. If you read if(a && b & (!c)!=d) you should be able to understand it and also be able to reduce statements, finding i.e. least number of operations necessary to unambigiously distinguish discrete states. :)
2) Learn that friggin' hex, bin, oct at least!
3) Calculus. And above all, understand the basic principles of
lim[h->0](f(x+h)-f(x)/h
and learn to apply that in your programs. It's pretty much essential.
4) Planar geometry, if you plan on any gfx. 3D if you plan any 3D. Understanding basic concepts is important. Also matrices if you plan on any image processing.
5) Numerical methods. Come in handy now and then. Especially optimisation.
6) Basic transformations and other useful equations. No pow() but you have ln and exp? well, how much is x^17?
7) Fourier and family for compression/decompression (lossy) of multimedia.
8) Probability for lossless compression.
9) basic algebra, eh, you won't move far without y=ax^2+bx+c...
10) All the rest, just cuz every nerd should.
45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
You really can't do anything in the field of science without sufficient math skills.
for CS:
Analysis of algorithms and big O type work requires at least some experience with proof by induction, which you encounter in Calculus II in relation to series and sequences. I haven't done anything more advanced (I'm just a freshman) but I would think it starts there. Probability is important too, I would imagine, for analyzing hash codes and cache misses and other random stuff.
(Offtopic: In physics I've learned the almighty powers of integration. Sure, you can learn the pure math, no problem, but when you actually use the stuff...wow. I couldn't imagine a modern-day world coming into existence without calculus to help it along.)
General math rant:
But really, I don't see why math is such a big deal. I accept as a matter of course that I'm required to have Calc I-III, Statistics, Discrete Math, and Linear Algebra, even if I won't use them much. Math is the tool that enables the pursuit of higher knowledge.
People have been intimidated by math for way too long. There's really nothing to be afraid of. If America changed its attitude about math, then it wouldn't have to worry about losing its technological edge.
Descrete math, which deals primarily with sets, set math, and proofs, is very important. At my college, all of the CS majors had to take this, and it was one of the hardest classes for all of them. When you're trying to solve a problem, and you want an algorythmic solution, one that will work every time you use it, you've got to be proving something. Descrete is where you learn to do that.
The US doesn't have as many CS folks around anymore.
I was a CS major for one year back in the Summer 2001 through Spring 2002. It was quite enjoyable, though difficult. I quit because of all of the math classes. I was not looking to be a computer hardware engineer, but in what I want to do (business oriented, non-entertainment software) there is less of a use for advanced mathematics.
Sure, math is still important. I don't deny that. I'm saying that I am not going to be writing the next Photoshop (yay vector manipulation!) or video game with the "most realistic phyics yet."
Maybe it is because I've never ever liked math (except for geometry/trig) but that was my weakness in CS. Now I'm a liberal studies major, though I am a service technician for a major computer company now. Oh, sweet irony!
"Really? Even if you could whip up the O(n^2) one in half an hour and have a working product today rather than two weeks from now when the O(n) algorithm's complexity is finally hashed out in code?"
;)
If it really would take you that much longer to implement the quicker algorithm, you probably shouldn't be in that engineering position you speak of
The discussion is not on real life engineering, however, we're talking about computing science.
Computer Science was actually under the Faculty of Mathematics. So while I was majoring in CS, I had to satisfy all the requirements for a 4 year math degree. I ended up with an Honours Bachelor of Mathematics in Computer Science.
I remember thinking what an odd situation this was in first year. But, as time went on, it made more and more sense. The math turned me into a great problem-solver and honed my analytical skills. When programming tasks were given to me, I didn't think about which lines of code to use, I thought about the problem itself and how best to describe it, simplify it, and abstract it.
I always save my last mod point to mod up a good troll. You people are too serious.
Opps! You are right. I was so annoyed by his incredibly ignorant comment, I guess my mind spent more time ranting than thinking! My bad. Thanks.
Anonymous Cowards suck.
Intro to Algorithms is a great book and is the first thing I thought of when I read the original post. I really think it borders on being a required book for undergrads.
Casual Games/Downloads
Besides the fact that learning Math increases general problem solving skills, there are many CS classes that require Math as pre-requisite to the class.
Just off the top of my head:
Analysis of Algorithms requires knowledge Calculus and Discrete Math.
Computer Graphics requires Linear Algebra.
AI, Machine Learning, Natural Language Processing, require statistics.
In the broader picture, you can say that the field of computer science has its roots in math and logic, with such pioneering figures as Pascal, Babbage, Turing, von Neumann, who were all mathematicians. All their work culminated into physical computing devices which we use today. Many math faculty in universities have joint chair s in both the CS and Math departments.
You copied this strait from the comments below the article's text. You could at least mention this isn't your writing or thoughts or...
A lot of universities also use math courses as "weed-out" courses for their programs.
The discussion is not on real life engineering, however, we're talking about computing science.
I think this is possibly the most relevent quote in this whole discussion.
Current requirements are at http://www.cs.drexel.edu.
Do I use any of it? Not really. But I develop user applications mostly where math is at a minimal and most of the work is more psychology-driven.
(Well, some of them, anyway.) I've been a real-time programmer at NASA for over 20 years. I've never needed any math beyond algebra and geometry, and what I learned in high school was more than sufficient. Now I'm sure my flight dynamics and attitude determination colleagues down the hall would beg to differ, but I think for most computer programming purposes algebra and geometry are sufficient.
There is a difference between writing clean efficient code and sitting down with a slide rule and working out the exact efficiency of 2000 lines of code.
I don't have anywhere near the math skills to do graphic work, so you've got me there, but thats a super specialized field.
Judging by the stuff I see every day, you're unusual. And I've worked on a few shrink-wrappers.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
If you want to be a programmer, a real hardcore programmer, you should major in something other than CS, and then minor, or perhaps double major in computers. I would suggest this to most people. Sure, there are reason to be a pure CS major, but think about the degree you have. Physics, Chemistry, Biology and Mathematics don't change nearly as quickly as Computers do, so your degree will be worth more longer. Plus, once the IT field hits rock bottom, you can simply move into the field of your degree. My cousin is a senior at NJIT, and he told me this straight up. I never went to college for programming, I just kind of picked it up along the way.
Th
One of the reasons(*) I flunked out of uni is because I was double majoring in maths and compsci. Carrying applied maths in second year as well proved just too much and even though i geeking out, i found myself losing interest in ALL my subjects.
(*) the other reason may have had something to do with getting laid a lot. That, and cheap beer at our local pub, the "Verge Inn"
If you drop the coding part of CS and focus exclusively on the theory, then fill in the rest with math and physics, I daresay that the result will be far better coding skills than if you focus on coding and throw in math and physics and theory as an afterthought.
The reason is because math is a formal language, just like any programming language. Except math is far more expressive and complicated than any programming language. We handle the complexity by writing functions and abstractions to simplify it. However, in order to abstract, we have to dot all of our i's and cross all of our t's and lay out the law on when the abstraction will or will not work. Sounds familiar?
The beautiful part is that there is no compiler and no test suite you can run against your "programs". You have to do it all in your head. If programmers were able to better predict the behavior of their programs, or if they were to write their programs in such a way that it could be done, then we would have far fewer bugs, or at least debugging would be easier to do.
So, if you are a pro at math and physics, then programming languages is a toy to you.
Why physics, and not just math? Math is programming for programming's sake. Physics is programming tied to reality in some way. Or in other words, you are practically applying the discoveries mathematicians make, and fudging stuff they haven't discovered yet, all in the interest of getting an answer that agrees with the way stuff really is. Physics adds that dimension of "reality" that is inescapable, just like real programming has the shadow of the "user" or "API" or such that is inescapable and must match what people want to see.
There is one area that math and physics won't teach you, but it is easy enough to pick up as it is a rather simple system compared to, say, Thermodynamics or Quantum Mechanics. That is the way computers really work and the limitations thereof. This is the field of data modelling, data theory, B-Trees, and hashes and stuff, or the details about the various hacks people have come up with to stick mathematics into this system.
The radical sect of Islam would either see you dead or "reverted" to Islam.
The most valuable tool you can ever learn for a long and successful programming career is the efficient use of search engines. That is what you'll be doing more than anything else.
I think you're far better off attending a school that requires a wide range of subject matter, rather than a math-centered curriculum. No class teaches you enough of something to be very useful, but a broad exposure prepares you for the real world where you will be forced to answer scores of non-programming-related questions to accomplish your coding goals. It also helps a great deal in getting jobs when you can actually relate to something beyond the bounds of computer science.
I have a CS degree from a liberal arts college. I was required to take only Calc 1 and Discrete Math. I've been writing code for a decade now and I have had very little problem because of this lack of math in my background. The majority of coding jobs do not require math. I know that's been said before, but it's true. Of all the people I know writing code right now, I can name only one that uses math of any complexity. When I have a problem that requires a complex mathematical solution, I google it. If I want to understand something mathematically complex, I call a math major.
If you think the school was wrong in it's requirements, you can take it up with the Jesuits. I'd stand back, though. I had one of them try to smack me with his crutch once.
"A man talking sense to himself is no madder than a man talking nonsense not to himself."
I'm not talking about computer science, software engineer, or computer science engineer, I'm talking about full fledged computer engineer. It's basically electrical engineering and computer science courses. Here's the math I take:
Calc 1-3
Differential Equations
Advanced Engineering Math
Systems and Signals
and I'm sure some others I haven't taken yet. I'm second year and that's what I've taken so far so you can see that computer engineers require a lot of math. As for computer science majors, they are not required to take nearly as many math courses at my college. From what I've seen, it's probably not nessesary if you're looking to be a programmer. If you're into algorithms, maybe higher level math would be required.
Why hasn't anyone mentioned graph theory yet? I'm A CS major, math minor, and of all the math courses I've taken (Calc,2,3, Linear Algebra, graph theory, abstract algebra, probability theory), graph theory has definitely been the most useful in CS. Graph algorithms are a HUGE area of research, and come up in practice all the time. A good foundation in the thoery helps enormously.
And it's been ten years since I graduated, but my university (Willamette) had math requirements for a CS degree that essentially gave you a free math minor in the process of getting your prereqs taken care of.
Software is like a goldfish - it'll grow to fit the size of it's bowl...
Everyone seems to be repeating the same justifications over and over (3D graphics, signal processing, whatever), but all these things are relatively niche stuff. Anyway chances are in the real world that even if you write an app doing any of these things you'll use an exisiting library (OpenGL etc) otherwise you're just reinventing the wheel.
OK someone had to write the library but there are massively more library users than writers out there.
In my experience (25+ yrs software developer), higher maths was a complete waste of time and I haven't used any of it once. Only relevant maths I've found is boolean algebra/discrete maths.
If you truly love programming; don't take CS.
As many other posters have pointed out, CS is not about programming.
In any event, you don't program in a vaccuum. You are programming for some purpose and you have to deal with customers and cow-irkers. Your programs will have to cope with the real world.
Until you can cope with the above mentioned problems, you will find yourself mysteriously losing jobs to people who are worse programmers.
As for the importance of math: It depends entirely on what job you get. Of course, these days, you don't get to keep a job for thirty years. If you don't have the math, you may not get the next job.
sheesh! i took more math classes than that [quantity and depth] and i walked out of school with a geology degree. i honestly would've thought that CS would involve far more math than a major for guys who hang out on the side of the road licking rocks [it was to test for granularity]...
I'll turn into a supernova and burn up everything. Well I'll turn into a black little hole and you'll turn into string.
I certainly agree that math is critical for CS. But I disagree with the idea of not taking advanced math (like Calculus) in high school.
Quite frankly, the primary and secondary education systems (at least in the US) are horribly broken. There's nothing about calculus that is too hard for high school students - even average ones. But they've been taught math so poorly since the very beginning that they're hopelessly behind.
Teach yourself (and teach your own children), school will not do it for you. Just think of all those years you wasted learning to multiply over and over again when you could have been progressing.
The idea that young minds (say, fifth graders) are incapable of grasping more advanced math is a fallacy. Schools teach badly, then students underperform, then schools say "See, the curriculum is too hard - we need to slow down!" Wash, rinse, and recurse, and you get the abysmal state of education today.
Anyone who wants to understand how the American education system got broken needs to read this.
"The danger is not that a particular class is unfit to govern. Every class is unfit to govern." - Lord Acton
Actually, no. O, Omega, and Theta are asymptotic analysis of function growth. Technically speaking, they have nothing to do with algorithms. But they_are_ useful to compare functions we use to describe the performance of algorithms.
We say that that mergesort is O(n lg n ). What we really mean is that some function f(n) that describes the runtime of merge is O(n lg n). Which means for all input, the f(n) will be within a constant of n lg n. Now this constant can be very large, which is why everybody uses quicksort most of the time.
If you have two sort algorithms, one is O(n^2), another O(n), you'd want to implement/use the O(n) one; you can see at a glance just which algorithm is the better of the two.
Not always. Sometimes the decision whether to use bucket sort (O(n)) of quicksort (O(n^2)) can be very difficult.
Actually there is more to it than that. You can't always arbitrarily pick the one with the "better" notation. First off O(n) sorts only work for a special class of elements. What if--for arguments sake--the O(n) is not a stable sort and you need one? What if the constant is so large that for your small data set, the O(n^2) is actually faster, such that C1*O(n^2) C2*O(n) for your n. What if the data element is large or on a very slow medium and the O(n^2) does significantly less data movement? etc.
Anonymous Cowards suck.
This course load looks more like computer engineering than computer science to me. The comp sci majors at my school do not need all this high level math and physics. They focus more on programming. It's odd to see how one major can vary from school to school.
I was recently reading his biography and in there he has a great quote: "I don't need to know math, I can hire mathematicians."
Now, I totally believe math is important, but I think it's hysterical he said that.
"Hi, my name is clintp. I'm a programmer and I suck at math."
I nearly flunked Calculus (didn't help that it was an 8am class) and linear algebra drove me insane. The basics I have down very well (algebra, statistics, trig, etc..) but the more advanced stuff...yech.
It hasn't seemed to hurt my career in the IT field at all. I'm earning well over $100k/year in the US Midwest (not known for good salaries) doing rather interesting work.
What *did* help a lot was taking some accounting as well as math. In my particular background of business programming, it's been a lot more useful to know how Accounts Receivables aging works than to be able to calculate the area under a curve. And even if you're not writing any accounting related code, it's still useful to know how your business unit works.
Get off my lawn.
Actually the only way an O(n) sort
would work is if you have a very specific and well defined data set (ie. Sort these integers, they are all between 0 and 100 with no duplicates).
FlashSort is an O(n) sort algorithm though that description can be debated. It asssumes you have a uniformly distributed set of numbers to sort which is a pretty big assumption. As it is the best general sorts work in O(nLog(n))
Calculus 1, 2, 3
Statistics 1, 2
Linear Algebra 1
and of course all the lower level math classes in addition (college algebra etc)
How much have I used in the course of my work? Very little - and practically nothing that I could pull off the top of my head. In 99.999% of the cases I ended up doing research to determine the best formula/algorithm for a sticky problem...conversely these instances occurred only about
The level of usage is dependent on your programming tasks; if you develop realtime applications, including games, industrial control applications, or space shuttle reentry control programs, then you might need to be a math wiz. On the other hand, how many of those jobs are out there? Most people will not need such an indepth, tip of the tongue grasp of mathematics to perform admirably. This is why practitioners of computer science, while steeped in mathematics, may find themselves more capable if they have a keener grasp of linguistics (both human and machine varieties), logic, and the underlying capabilities and limitations of computer systems, instead.
The real key is to know where to find formulas and algorithms when you need them (there are various 'recipe' books available - including the seminal collection by Donald Knuth:
- The Art of Computer Programming
'Fundamental Algorithms' - which is well thumbed, on my bookshelf).Lodragan Draoidh
The more you explain it, the more I don't understand it. - Mark Twain
I go to a well known Canadian University for CS and Enginering. I will be going into my 3rd year in the fall. Until recently the only CS degree that was offered was a Bachelor in Mathematics (Major CS) as opposed to just 'Computer Sciences' offered by other schools. We now have two different CS degrees but that is a different story. Our CS degree requires the following math courses: Calc. 1 & 2, Lin. Alg 1 & 2, Classical Algebra, Combinatorics, Probability, Statistics and three other math courses of our choice. Mathematics is useful for a few things. Being able to analyze the performance of algorithms, being able to understand algorithms and being able to cerate new and efficient algorithms. Most advances in computer sciences come from mathematics.
"Below is a sample schedule from the University of Illinois. U of I has a strong and established CS program but isn't going to be as rigorous as an MIT or Berkley, so this should be a realistic example." :)
That's harsh!! Back in the 90's, U of I was ranked higher than Berkley but under MIT. So I suspected that he's from Berkley or MIT - seems wrong. Then I realized: UIUC (U of I) may not be as famous of a CS school anymore!
I'm a grad from UIUC - I need those kids to make me look good. They better whip themself into shape to undo the damage I caused with my low GPA
Foolinator
-- UIUC Grad, home of the first Internet browser
"Why are these classes useful? Does programming really have that much to do with math?"
A better question would be: does programming really have that much to do with Computer Science?
I think this question or point is much more difficult and tricky than it seems at first glance....
First of all I think we have to distinguish between Computer Science (CS) and Information Technology (IT). Long gone are the days when they could be clubbed together. IT is a field of its own. No doubt that the 2 fields overlap often (and the overlap is of varying degrees) but IT has matured enough to be considered separate from CS.
I think math is an essential and invaluble part of CS. You simply cannot be good at CS without being reasonably good at Math. In fact many of the geniuses(/genii) in CS were/are excellent mathematicians in their own right.
Having said that I also believe that an IT professional does need basic knowledge of math but not too much in depth. S/he simply doesn't need it. And in the real world whatever little math is required for IT can be easily picked up on the job. And in domains where IT requires in-depth knowledge of math u usually have 1 or more ppl who are good at math.
But all said and done math also hones ur brain and teaches u to think in a number of ways. And this is a skill that any professional should have. Thus math may help indirectly even though it might not be useful in day-to-day life...
Thanks
"Programming is like sex. Make one mistake and support it for the rest of your life !!"
As an aside to all this talk about the ability to understand math in order to be able to implement some of it in our programs, I feel that in dealing with math we develop the ability for abstract thought which is useful when we are designing and implementing computer programs.
"Does programming really have that much to do with math?"
Does CS really have that much to do with programming?
Sindri Traustason.
Taken any music classes at UT? My dad teaches there. For that matter, are you in Plan II Honors? My mom advises for them.
Hmmm seem we are beating around the bush here. Computers were built from math. They are, in fact, applied math. It is not by chance that the list of names associated with computers have many mathematicians. Pascal, Lovelace, Bryon, Dijkstra - all mathematics. Knowing math helps with computers the same way knowing physics helps with engineering.
Think of it like the human body. The basic block of life is the cell, cells form tissues, the tissues from organs, then organs form systems, and the systems for us. An understanding of the basic building block makes it easier to understand things at a higher level. A doctor would have a harder time understanding how the human body works if he does not understand how a cell works.
You and your new-fangled Cartesian co-ordinate system. Why, back in Euclid's day we just had points, straight lines and circles, and we were grateful!
However much I deteste mathematics, it is important for software development primarilly because it gives you the tools to identify the amount of work required to perform certain tasks and optimize based on different techniques.
Math does not help you "write" the software, but rather design and implement properly and efficiently.
University of Oklahoma CS majors actually graduate with a mathematics minor if they declare it. I took the following mathematics courses while studying CS:
Calculus (I - IV) - 4 semesters worth of calculus, it is probably worth your money and time to CLEP out of the first two years unless you want to pad your GPA with easy As like I did.
Differential Equations - 1 semester - I really don't remember much from this course to be honest, but you must realize the prevalence of this field in computing. A majority of computer functions rely on approximations derived from this field of study. Perhaps someone with a stronger background in this field could explain (Taylor's series, polynomial expansion, etc.)
Linear Algebra (a lot more useful to computer scientists) - 1 semester, this was a godsend for computer graphics, I just don't see how you could be a successful game developer, UI developer, or knowledgable programmer without having a good foundation in Linear Algebra.
Introduction to Applied Statistical Analysis - 1 semester of mind-numbing proofs of the foundation for Statistical Analysis, this course was excruciating and painful at the time, but understanding the background for basic stastical theory has given me an unbelievable edge at my current job.
Statistical Analysis - 1 semester, applying the statistical knowledge to real world problems. Very handy, once again, gave me an edge in the real world.
Then there are two course in combinatorial in discrete mathematics that were hands down the hardest courses I took in my life. Honestly, the truly challenging parts of computer science degree are the most-mathematically bound fields of study within CS. Discrete Mathematics and Algorithm Analysis are incredibly bound to fundamental math concepts.
My advice, take a look at Discrete Mathematics if you can while in HS (do a directed reading or independent study if you can), and get as far through calculus as possible, good luck.
I went through a computer science undergrad which was part of the math faculty. As such, about a third of my courses were in math... not CS, math.
At first, I thought along the same lines as many of you. Unless I got into some hardcore graphics coding, I never thought I'd use half of what I was learning. And you know what? I was right.
However, what took me a while to realize is that this conclusion does not make math courses a waste. Those math courses, full of really tough proofs and theorems, tought me how to think. Every single day I use the thought patterns that I learned in my math courses to perform my programming job much better than if I had not been exposed to those math courses.
Were the math courses hard as hell? Damn straight! Were they worth it? Definitely :)
I had to get through all this stuff, and my solution was the 'warm notebook' method. I stuck a small notebook in my back pocket with a problem on it. When I was waiting in line, riding in the car, etc. I worked. My theory was that if it never cooled off (lost contact with my body heat) I was dead. I developed a love of mathematics out of that stuff. If you are one of the brilliant, arrogant, talented, socially retarded nerds who are thinking about a CS degree, then beware of the math. It will humble you. Also, if you want to program on the big boy computers, learn FORTRAN.
Your Program May Vary, and I studied Computer Science and Mathematics when I was in school, so mine definately varied.
But I imagine many computer science programs would require Discrete Mathematics or its equivalent, since many algorithms such as "shortest path" are based on it. I would not be surprised if Matrix Algebra was required depending on what you study. Number theory is required for Cryptography
Hint: be prepared to do proofs. If your HS program included Euclidean Geometry (prove these two triangles are congruent), be prepared for more of that.
ObLaymans:
Matrix Algebra: doing arithmetic on "grids" of numbers. If Memory Serves Google multiplies gigantic grids of numbers to be Google
Discrete Mathematics: proving things about "discrete" or individual entities, things you can pick up and look at one by one. This includes combinatorics ("if you have eight choices for toppings, how many different pizzas can you make with three or fewer toppings"), and graph theory "here's the map of where Southwest flies to, how many ways are there of flying from NY to LA"
Number Theory: proving things about whole numbers (which numbers multiplied together will give you this number?) Seems dry but RSA and many other encryption techniques are based on it.
I started Algebra in 6th grade, so I was a little SOL for math classes by the time I got to high school. I took the Calculus course as a sophomore (that was half a year), skipped the Statistics half and took Journalism (basically a waste), didn't take math for another year, then took an experimental higher level math course with more calculus, graph theory, and other things more unmemorable.
In college I placed into Honors Calculus II. So there was a lot of sound and fury, signifying nothing, in my high school work.
The moral of the story for me is that there is no room at the top of American (public) high schools for students who can push and excel. My family wasn't rich enough for private school. I wasted a lot of time there.
Q: What did the comedian say to the crowd?
A: If I knew, this joke would be funny.
If you want to be more than a coder, consider some business classes or get a MBA after your CS degree.
I concur that Statistics is the most useful math class. Calc I and II were required by U of Md. While not directly used, being able to think of relationships in terms of a system of equations is useful when developing code.
Again, if you can deal with people and like daylight, consider adding at least Econ and Financial Accounting.
- Calculus and Analytic Geometry
- Calculus of Several Variables
- Linear Algebra and Applications
- Infinite Series and Differential Equations
- Introduction to discrete structures
Most high schools in the U.S. have honors/AP/GATE tracks for match in which you are taking Algebra, Geometry, Advanced Algebra, and Calculus. You will want this to be able to compete for grades at University level.Most colleges will list their requirements on the web. Or you can certainly get them through the mail like in the old days...
In the end, it is up to you to work on your analytical skills, which is really what it comes down to. In the business world you are designing, architecting and thinking. If you are not, your job is outsourced or automated already. If you can go to college and major in basket weaving, but you have strong analytical skills, you will get work. The Comp Sci degree is just 1 line on your resume.
Have you Meta Moderated t
I took Calc I in HS - but took it again in College (I was too...lazy to Ace the AP test - yeah I know...) Anyway, Calc I in College was a breeze (primarily because I was able to understand everything at a much deeper level with taking it before).
/two cents
Now, like all aspiring programmers - I'm wanting to become a video game programmer - and believe it or not I just might be (www.digipen.edu- I recently got accepted here and start this fall)
Anyway, take a look at their course curriculum - and you'll see that the Article was right on the money - the more Math the better - I'll end up taking Calc I, II, III and Advanced something or other before I'm done with my Bachelor's of Science.
And with regard to proofs, one technique that you absolutely must be familiar with is proof by induction--including induction on natural numbers, induction on lists, induction on trees and any other sorts structures that you might see in computer science.
Carnegie Mellon's CS program has a required course called Great Theoretical Ideas in Computer Science I, which is basically a hodge-podge of different forms of mathematics. Mainly discrete math. Basically, it was designed to give CS majors the minimum level of mathematical knowledge they'd need for further majors.
You can check it out at: http://discretemath.com
I agree. Discrete Math is very important. Too bad every discrete math book out there is horrible.
I have never come across a decent discrete math book - they all look great, have nice-looking layouts, but are full of incomplete proofs and examples.
So I'll state you should also learn proper grammar in whatever language your company speaks. Because in addition to writing scads of code, you also need to WRITE DOCUMENTATION, DAMMIT. Or at least COMMENT THE CODE.
The engineering school I graduated from insisted that every senior pass a "report writing" course their senior year (in addition to the usual freshman writing and humanities courses). A different type of business/engineering report every week - and it was 6 credits in a school where most courses maxed out at 4 credits (they emphasized you must pass the course). They insisted that we would find that course immensely valuable when we graduate because, "On some days 80% of your job will be writing requirements, writing memos, writing emails, writing specs, writing documentation and NO coding."
Of all of the courses we took, I have to say that "Senior Lab" has been one of the courses that has set me apart from my peers and helped me the most.
Total aside: one of the programmers I work with didn't realize that -1*-1=+1. His code was, um, suffering as a result. Sad, ain't it?
"Actually there is more to it than that."
:)
Yes, I'm aware that there is a lot more to it than I put forward; it was a general example to the guy who thought that big O notation was a "slipshod manner" of evaluating the performance of an algorithm. As you also made clear with your last point, the line between the Big O notation and where real-life engineering blurs when you start to consider just what an algorithm is working with (your slow-medium example). That was already encapsulated within my comment about different architectures/data types/etc, although the link wasn't entirely clear, I'll admit
The theory and math behind a CS degree help in finding optimized solutions when things go down the drain. To understand state machines and big-O provides insight with creating algorythms as well. To leave out the math in computer science is to ask an engineer to ignore physics when constructing plans for the building of a sky scraper.
In building a structure.... I like to think of the architech as the one who thinks of an idea, and large how-tos. The engineer to understand the workings of what how-tos are possible, resulting in functional plans. Finally with the contractors/builders who actually build the object.
Notice how some architech schools lack DEEP science and physics for the engineers. They spend more time in art.
The same applies to programming. A lead architech figures out the overall interworkings of object communication. Not much science, but patterns of work flow should be needed.
A software engineer, understands the process of creation, what data structures to use, how the objects actually interact. The nitty gritty.
A programmer knows VI and macros (hehe) for generating tons of implementations fast. Including understanding the API's to know how parts fit together.
Computer science generally covers the architech and engineer rolls.
Note, I don't think any jobs are defined this well and most everyone must partially fill each roll.
Being the Other guy who actually knows a little bit about the theory behind parallel processing, your anecdote gave me great pleasure!
I love how management types says "well, we'll give you a 4-processor computer, so your program will run 4 times faster!" [groan]
In the future, I would want to not be isolated from my friends in the Space Station.
There is a reason why "algebra" and "algorithm" have the same root.
For a Bachelor of Arts, expect Calc 1, Calc 2, Discrete Math, maybe stats, probably basic Linear Algebra. For a Bachelor of Science, tack on Calc 3 and Differential Equations. This qualifies you for a math minor at many universities. Also, at many, you can probably take about 3-4 more math classes and have a BA in Math as well.
The use of math depends on the industry and application. Games = lots of math, especially if you want to go into things like collision detection. Optimization also requires analysis and math skills. I work in radiation therapy. We use math. Generally you don't need much upper calculus but you learn more than calculus in calculus, you learn how to analyze and solve problems, and if there's any great lack in modern programmers, it's analytical thinking skills.
I am 31 and my itch to be a game programmer won't go away. What did I graduate with? A degree in English. Why? My English teachers made that subject so much more fun. Way more.
I am now relearning math from elementary algebra and working my way up to trigonometry and maybe calculus. It is only now that I see the practical applications for math and (gasp) the fun it can be to solve problems. At least the ones that have applications. I still shiver when I see someone scrawl complex math symbols on a forum. But I'm getting more and more confortable with the lingo and methods each day.
Problem was I had truly uninspiring and apathetic math and science teachers once I got past the fifth grade. As a whole, their attitude was basically, "If you don't get it or don't care, then oh well." In contrast, my English teachers were like Robin Williams from Dead Poets Society and then some. Really engaging. They connected me to the English language and expression.
You want to know why people wave their hands at people who try to sell math? It's because their teachers did the same to them when it came time to learn it.
As someone who just graduated with both a CS and a Mathematics degree, I would say any (good) CS program is going to require a few semesters of Calculus, a semester of Linear Algebra, some sort of Numerical Analysis class, and a Discrete Math course. Most of these would probably be of the computational/applied variety - e.g., not proof-based. Since I am a Math guy, I would add a second semester of Discrete Math, personally. Maybe one being proof-based and one more applied.
That said, personally I think CS majors should have a strong math background (the Calculus gives you that) but the only relevant Math, unless you are doing something specialized with a specific requirement, is what you learn in a Discrete Math course (what some programs actually call "Math for CS Majors" or similar).
Agreed.
Anonymous Cowards suck.
I think to be a good, well rounded computer scientist, you need to have more than just Math. Knowing the kind of math that is used in algorithm comprehension and performance tuning helps a lot when doing calculation-heavy programming. It's also good to know some physics, and have good language skills, though to really get your head around a lot of the high-level language concepts that are present in really good high-level system design.
Basically, like anything else, you'll be a lot better programmer if you've taken a well rounded set of courses that prepare you for real world understanding.
I have a Bachelor of Science in Math and Computer Science, since my college at the time didn't have a full-time computer professor (a couple of the math professors taught the classes). I took 3 years of Calculus, Linear Algebra, Statistics with Calculus, and Modern Abstract Algegra. I also took BASIC (a requirement, and they wouldn't let me test out of it), Pascal, Assembler, and Machine Logic.
I think I use exactly none of it in my job as a Software Support Specialist.
-jls
Techno-pagan
Personally, I love math. Not everybody feels this way. Some people simply enjoy the machinery of computer science. I think for getting through the CS major program, the importance of math depends on the curriculum of the school. At the University of Texas at Austin mathematics was very important, because the curriculum there was, at the time, rigorous and theoretical. About an hour away is Southwest Texas State University. The curriculum there was totally different and leaned torwards a CIS/MIS type of degree with more stress on a practical situations. So, the importance of mathematics to a CS major depends on where they're going or where they want to go. If you want to get into the theory and algorithms, mathematics is extremely important. In fact, anybody who wants to get into that should take more math classes than the average CS major just to get a good solid feel for discrete math, logic, and general abstract thinking/reasoning. In general, I wish all CS curriculums would stress the importance of such things (math, logic, and abstract reasoning/thinking). Once you're out, 90% of the time, you won't have to break out an infinite series or prove a post condition. However, 100% of the time, I think that your mind will think in a precise, reasonable, logical way that is conducive to programming. Anyways...that's my little seminar on that :p
Our digital computers are pure math and pure logic. If you have a firm grasp of math, you understand the very foundation upon which the computer operates.
Two characters are not alphabetized by a sort algorithm because "B" comes after "A" in the alphabet, rather it is because 66 > 65.
All you need is to know how to use i++ and i--
Unledd, ofcourse, you're using Perl. In that case you should start out by getting a higher degree in abstract, theoretical mathematics.
SIG: TAKE OFF EVERY 'CAPTAIN'!!
I am not a programmer, but I was a bit surprised that the article did not mention formal logic. I would think that courses in mathematical logic would build useful skills. These courses are usually cross-listed in Philosophy and Mathematics, but they're also associated with Computer Science/Electrical Engineering. Also, a certain sort of modal logic (epistemic logic) is actually used by programmers, is it not? This allows you do model and draw inferences from what an 'agent' knows and believes.
It's not a matter of whether or not connecting a front end to a db requires math. Of course it doesn't. But, if you don't take the classes that torture your brain into building new pathways (the way advanced math courses will do), then you really will be a shit programmer and the other programmers you work with will hate you. Take music classes, too. The more ways you learn to integrate information, the better programmer you will be. And, if you find out that programming for a living makes you sick, you'll be well-rounded enough to do something else. Or, if you find yourself laid off, you'll be able to find a job instead of whining about jobs going overseas. So, yeah, take econ courses, too, so you understand why jobs move. It's math with currency units. Also, you'll be less boring when I meet you at the next GeekConfab3000.
Sorry, I've seen too many math pros (particularly in finance) that are terrible at programming to agree with you. Here, there's an easy way to show you why: What's the mathematical equivalent of a for-loop? memcpy? class? I won't even get into databases, disk latency, networking, or dynamic libraries. Complexity of math vs. programming? How about they're both complex enough to be different professions!
While I was an undergraduate I was first a math major and then switched over to computer science. When I got there, I was shocked by how much the other CS majors around me despised mathematics. After observing this behavior for some time and thinking about it, I have realized what the real issue is.
In the past, Computer Scientists really were scientists of computing, but now there is a new niche: commercial programming. Many people who want to be commercial programmers end up in the Computer Science major but have no interest in the theoretical aspects of computing. They just want their degree and their job. I think that the modern trends in commercial programming require a new approach. If you just want to be a programmer, a computer science degree is going to annoy you with lots of math and computing theory.
After working in the commercial programming world I have come up with a new analogy. Programmers are to Computer Scientists as construction workers are to engineers. One is a trade, one is a science, and we should stop lumping them together at the higher education level.
Nearly every CS problem I've seen is some sort of combinatorics problem: You've got all these *things*, see, and you want to know how many ways they can relate to each other and furthermore how long, computationally, it will take to find out. A lot of this is graph theory, and if you think you're going to get away with not knowing at least some basic graph theory and graph-based algorithms, you're in the wrong field.
An understanding of probability is critical both for optimization and for defect avoidance. If you adjust your systems biases (and all systems have biases) toward a certain set of inputs or states, you'd better have a pretty good idea that those are the most common.
Statistics are useful for a lot of things-- statistical analysis (using probability) is central to most self-optimizing algorithms. More importantly, though, an understanding of statistics will help you with your development processes and quality. Is your testing methodology really reducing defects? What happens if you switch to this new-fangled development process, or drop a couple of steps from your current process, or add another person to the team? How long is this project going to take?
As a programmer, you might be able to get away with not knowing any of this stuff. As a software engineer, you'd better have at least the basics down, or your product is going to be crap and it's going to be expensive and you're not going to know why or how to fix it.
I'm way late to post, so this'll probably never get seen, but here's my 2 cents anyway.
At Texas A&M, CS majors are only a class away from a math minor. You might as well pick one up, esp. when 'communications and cryptography' is offered by the math department. Incidentally, that was the most fun class I ever took. We got to do our finals twice, first in class and later at home... The test grade was an average of the two.
Although 3D Graphics was offered by the CS dept, it almost should have been classified a math- we did far more pen-and-paper work than programming.
Austin is more fun than Dallas.
Does programming really have that much to do with math?
I see or hear this question all of the time in relationship to a degree in computer science. The short answer is:
You can make a living at programming without knowing much about math. Most programmers can get along with some basic algebra skills, and understanding boolean logic.
The long answer is that the question asked in the context of a discussion of computer science shows a lack of understanding of what the field of computer science is. Computer science is not about java or c# or sql. Computer science is about understanding and analyzing why a computer acts a certain way given a certain set of conditions. It is about understanding the best way of instructing a computer to perform tasks. Its about knowing that a computer cannot perform certain tasks no matter how well it is programmed. What does this have to do with math. All of the tasks I mentioned are addressable with some mathematical analysis. A computer scientist will write a program to demonstrate a concept or test a theory. A computer scientist will not write a program to do inventory controll for walmart, unless there is some novel or interesting problems in that task that no one has tackled before. In general someone graduating with a cs degree is well versed in theory, and will have to catch up on the practical aspect of the field. For example, I graduated with a CS degree having only seen one Design Specification Document. I now deal with them every day.
There are many trade schools out there that will give you training in a group of technologies (c#, sql, java, html) and call it a computer science degree. The best of these schools turn out software engineers (a very good skillset to have) the worst of these schools turn out people who are capable of passing a cetrification exam and that is it. In general these guys (the software engineers)can jump right into the business of writing software much more easily than someone with a straight cs degree. However the devry graduates tend to have trouble designing and understanding larger systems, and the ramifications of their decisions within those systems. I find this due to the lack of theoretical underpinnings to their education.
Don't get me wrong. I'm not saying every trade school graduate is not capable of dealing with and analyzing large system analysis. I'm just sayind that in my experience that these graduates come out a little less well equiped for the task. And yes I know several CS graduates who are dundering idiots, so you don't have to tell me about your experience with one.
When I want your opinion I will beat it out of you.
Just to know what makes a good program involves quite a bit of math. Nothing made the speed of nested loops clearer to me than this. Basically, it lets us define the best worst and median cases of general types of code with very simplistic functions.
O(1) - loopless program
O(N) - One loop from 0 to N
O(N^2) - One loop from 0 to N with another loop nested in it that is from 0 to N
So, the length and basically anything that is only executed once is considered inconsequential. It also shed light on is a stupid question.
Coincidentally (no it's not a coincidence), the number of CS sutdents that change their majors to something else during the first year is about 40%.
George II -- Spreading Freedom and American values, one bomb at a time.
I don't know about your experience, but I find that post bachelor research in CS to be between 5 and 20 years ahead of industry. Some of the research goes no where, but some becomes the bleeding edge, then the mainstream. Like relational databases. Started (or first written up) as a paper in 1969. If you want to see where theory hits programming, check out game development. That is where most of the new technologies first hit development and get used successfully (the game may suck, but it becomes a showcase for some new techniques). Writing code for the TMS320 (a single chip digital signal processor) is an excercise in math: you spend more time modeling the code in Matlab than you do turning the code into C or assembly.
I am also finding that graphs (not those blasted pie charts) can be useful in solving complicated problems. And some of the tasks to do, can be described with names like traveling salesman problem or minimum spanning tree. One of the first shocks I ever got in a meeting full of programmers was having to spend most of it explaining graphing algorithms and why algorithm X would solve the problem and why the proposed solution in the meeting would be a bad one. It would be hard to correctly, or quickly, solve a minimum spanning tree problem if you could not recognize it, nor understand what the algorithms were trying to solve. Education is about learning to solve problems and recognizing new situations resembling a problem you already know how to solve. Being uneducated is like only having a hammer to solve problems: you can only fix things by bashing them, good for nails, but not a good tool to use to remove screws and bolts.
It is also fun to explain to the PHB why something he asks for is totally impossible. Usually it is headbangingly painful. .1 cannot be represented as a floating point number, but that ended up being a waste of time. Or how, to answer a question he had would require a time machine.
Him: This number must be absolutely accurate, no rounding is allowed.
Me: I can write 2 numbers on your notepad here that cannot be represented the way you describe.
Him: BS, there ain't no such animal.
Me: (writing) e and pi.
Him: (scowling).
I once tried to explain how
Our society does not value intelligence, and has been actively disparaging intellectuals for 200+ years. Our country may have been founded by intellectuals, but de Tocqueville pointed out the disparagement of intellectuals back in 1835 in Democracy in America.
regardless of what your major is, you will be using ninnle linux.
it's Maths --- WITH THE 's'
I took a ton of stat courses, mostly having to do with the economics half of my degree, but there was some (limited) relevancy to CS as well. I suppose the most interesting part was learning SAS and Stata - gives you a feel for what people in the "real world" put up with.
They make you complete linear algebra and stat 400 (which is the first of the "advanced" stats) just for your CS degree, so it's somewhat difficult to get out of CS without knowing some decent math.
-Erwos
Plausible conjecture should not be misrepresented as proof positive.
(1) You can always code better, if you know more about the problem you're coding to.
(2) Every domain will in some ways be impacted by mathematics.
Therefore (by 1 and 2), more math skills will almost always make you better equipped to understand any given problem domain, and will almost always make you a better programmer.
And that's just computer programming; there are parts of Computer Science that have nothing to do with programming computers, but have everything to do with logic and math.
Education is the silver bullet.
Math is essential in a CS major, but how much? That's the question. Discrete, Linear Algebra is good to know but how about Multivariable Analysis?
this is not my signature.
algebra is the most important.
i tem =64
programming is like doing algebra all day long a lot of the time.
calculus and trig etc are not used all that much in reality unless you are doing some crazy shit like this:
http://lucifer.intercosmos.net/?view=SNIP&
but otherwise it is mostly algebra.
anime+manga together at last.. in real time.
I use trigonometry all the time in 3d graphics
work. I don't use calculus much, but I felt it helped me understand a lot of other things I run into. Statistics is very useful for determining
when your processes are 'out of whack' and if
there is a problem. If you're going to be a
professional being as uneducated as you can get
away with is NOT in your best interests.
-- Programming with boost is like building a house with lego. It's a cool but I wouldn't want to live in it
Being a mathematician won't make the switch go off that allows you to expertly use object oriented programming. Nor will it help you create a good GUI. Nor will it help you validate date formats. You need a firm grasp on the math you learned in middle school, but the need to be a mathematician has diminished in many computer science workplaces to the point that the "need" is now a simple "added bonus".
When coding was entirely procedural and focused almost entirely on crunching numbers, well, yes, math was a big deal, but the paradigm's changed greatly now. Now aptitude in pure logic [rather than a broad math bkgd, much less pure calc] is much more important in my experience. Relational database design and object oriented programming require great understanding of set theory, not calculus. I AP'ed into sophomore calculus and had two semesters (plus an audit of DiffEQ) in college, and haven't used that stuff once since entering the workplace (on my sixth year).
When I look to interview and hire new programmers to my team, for pure intellectual skills I'm looking at good coding style, properly factored (as in refactoring) coding examples, and the ability to explain, say, why an example database schema is or isn't in good third normal form. The math I've seen in my tasks is very basic, whether the product I've helped develop was a simple web-based MIS, county-wide tax system, or financial tracker for the largest non-profits.
In fact the only time it's been useful for me to understand mathematical concepts [beyond set theory] was when I thought our resident Geographic Information Systems (GIS) experts weren't considering all the ends and outs of different map projections. Even then, what I was commenting on was well outside of my job description of a database admin.
It's good to know math, all other things equal, but in today's programming workplace, the emphasis on math in CS programs is unfounded. I'll even daresay that's why so mnay people who weren't schooled as programmers do so well -- I know about as many programmers that have impressed me with their proverbial skillz that had a degree in the humanities or no degree at all as I do those with a CS background.
Wake up & catch up, CS programs, and teach what's useful in "the real world"!
It's all 0s and 1s. Or it's not.
Complaining that a CS degree doesn't help you program is like complaining that a history degree doesn't help you with your office clerk job. Computer science can be done without a computer. Universities aren't vocational schools. I would go so far as to say that if you can't program at some level by the time you begin a CS program you shouldn't be a programmer anyways.
Okay. Disclaimer: I have a BSEE and have (last september) gone back to get a CompSci afterdegree. Of course finishing my EE was 4 years ago.
I read the article. I generally agree. BUT.
First things first. TO be a code monkey requires script kiddie abilities, or at worst an MSCE. To be a software engineer or _designer_ requires a little more, namely a lot of abstract thinking abilities: particularly any hard science, math based, abstract college type education. There are exceptions (eg. brilliant people) who are just that, exceptions. Most of the rest of us have to learn to walk before learning to run.
In going back to get a BSCS I've found that the hardest courses are... Wait for it... Math. Though I have EE which, I assure you, is lots and lots of math, the reason I find math hard is that I have not used calculus or statistics on the job _directly_ AT ALL the last 4 years.
Indirectly? Could I have done my job without as much math? No. Taking calculus, statistics and other analytical quantitative courses teaches you (the hard way) to think abstractly and analytically. Not critically (thats what English & arts is for), and not to be an automaton code monkey.
Do you need the math and stats? I don't like it, I don't like re-taking it, but I know I will need it or I would be screwed if I needed to know even a little about set theory, which from time to time is useful.
If you want to learn to design and then implement interesting, challenging projects and you aren't brilliant, I would recommend an effective hard science degree with some coding background mixed in (physics, engineering, CS, math... whatever w/ minor in CS or something).
m
The difference between BS and BA where I went was three Physics courses. I have a BA in both Math and CS, but not a BS because I took extra math instead of Physics.
Unless you love computer programming SO much that you would do it for minimum wage, don't even bother.
In order to be a programmer, you most certianly DO need the degree. They won't hire you otherwise. But in today's market (and the likely future's market) they won't pay programmers what one would expect to be paid for a four-degree. In fact, your pay will be significantly less.
And also, the women don't generally go for programmers.
So there isn't much incentive to be a programmer anymore, unless its what you really, really love doing.
And even still I would advise against it, just because the industry is too darn crowded as it is.
--A/C
cragen
ps. I had an office-mate once who was a research scientist at NIH, researching the AIDS virus's mechanisms of attack in the 90's. I asked him the same question. He reluctantly admitted he never used the Calculus he had to take in undergrad school. He always called it "the initiation process".
Unless you're a complete math geek and want to spend your career doing nothing but writing code, go CIS (Computer Information Systems) instead. Some schools call is Business Information Systems (BIS) or Management Information Systems (MIS). You take classes for computers AND business. You'll have way more options with a business degree. Still though, it just depends on what you want to spend your career doing. As a Computer Science major, if you end up deciding to do something else for a living down the road, it would not be as easy to change careers as it would be with a business degree.
Sure all the extra math classes in the CS major are a pain, but they do help. You get a better understanding about computer science and its fundamentals. With that knowledge, you can do just about anything when it comes to computers.
Using a computer and being able to understand why/what/how a computer does something is completely different. Math helps you understand.
100% Insightful
Engineering universities will most likely require that you complete at least Calculus I, II and III. Also linear algebra, statistics,etc.
Why? Tenured professors who don't want to learn anything new, school's need to keep you busy for 4 years, school's need to make $ or get state funding, etc.
If you went to college that didn't have any engineering or science programs, you would be taking a lot of humanities, writing, literature, business, management and word processing classes. It's whatever they have a lot of.
it wasn't Danny Hillis by any chance?
I graduated Rutgers in 2000 with a degree in Computer and Electrical Engineering. I remember the CS degree as being much less intensive with regards to math. If I recall correctly, schools in the area, including Rutgers, only required up to Calculus 1 or 2 to graduate. That is why many students flocked to the major. Many of the students who could not hack the engineering went that route.
I took CS in college and remain somewhat bitter at the experience. The heavy emphasis on mathematics drove me away after two years.
I have now been professionally writing business software for about eight years, and in that time I have never used mathematics more complex than arithmetic and very basic algebra.
I do, however, use my English skills on a daily basis. I have to write documentation and communicate with clients. I have to explain things to non-programmers and I have to translate business speak to techs.
I have to understand the workings of business. My software exists to make businesses more efficient. If I do not understand the real world processes, I cannot improve them with software.
When I took CS, they acted as if we were scientists and would all get heavily algorithmic signal processing jobs or some such theoretical crap. The reality is that 99% of us end up in the business world helping people make more money.
It sickens me that CS is churning out people who took calculus but know absolutely nothing about the business world in which they will most likely be working.
I had to take:
Calculus I
Calculus II
Calculus III
Discrete Math
Advanced Mathmatics for Engineering
Numerical Analysis I
Numerical Analysis II
Numerical Analysis actually has programming projects and I can see using many of the algorithms in "real-world" situations. Discrete Math obviously has uses. Advanced Mathmatics for Engineering also has obvious CS related topics. The only math courses that I probably won't ever use in programming are my Calculus classes. However, the other math courses listed above are all built off calculus so you had to take them.
P.S. If all you want to do is write average-joe database connections, perhaps CIS would be a better major rather than CS.
All programming is in fact math. Your software, be it written in C, LISP, Java, or whatever, can essentially be thought of as one huge mathematical function. Think lamba calculus.
11*43+456^2
Useful = Grad work? Not sure about that one.
And as for reasearch, you may come up with the idea, but someone who is better at programming and worse at math is the guy who is going to make it work.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
will be mostly based on set theory and discrete math as relational databases are really grounded in that. A study of database languages will also have alot on the automata theory side of things. So do take a database class :)
-
-
90% of the jobs out there are development positions. These require basic programming skills, understanding of the newest buzz technology and an eye for asthetics.
-
10% of the jobs are computer science jobs. These usually entail designing/optimizing algorithms or interfacing with "sciency" types like engineers(gasp), physicists and chemists.
A good COMPUTER SCIENCE degree is designed to prepare you for 10% category. If what you want to do is build java apps and database applications then go to college and learn those skills instead of all of the theory involved in a CS degree.Besides those, you will learn about limits and indeterminate forms, which will allow math to be done that involves infinitely large or small values.
The idea of Cauchy's definition of the limit is to avoid talking about infinitely small values. Only with this definition's discovery (invention?), and the abandoning of the idea of "infinitesimals", did a sound theoretical basis for calculus begin to form.
First, high school calculus teachers tend to be the teachers in the math department the longest. The problem with this is that while these teachers are more experienced, they have been away from calculus longer than the other math teachers in most cases. Besides that, these teachers are often near retirement and may not be as motivated as younger teachers.
I think the author just had a bad experience with an older math teacher. The statement about being away from calculus for a long time is a little strange. Any calculus you're taught in university is going to at least 150 years old.
I took some calc courses at the local community college while in high school. All three together barely reached the first semester.
I was an EE major at MIT, and our core requirements were very similar. In terms of math, Calculus I and II (multivariable) are requried of all students, even the philosophy majors^H. For EECS majors, differential equations and linear algebra are also required, plus an additional math class (for EE it was probabilistic statistical analysis, for CS it was "math for CS majors," basically induction, proofs, etc.) That's about it in terms of the undergrad requirements (and for master's I only needed one additional 'advanced' math class, for which I took complex numbers)... so it seems like the UofI math requirements are more rigorous! Most CS majors also take an algorithms class, but it's not a requirement. (btw at MIT the most basic intro math class is Calculus I, so it's assumed you have a good grasp of algebra, geometry, and trig)
I've got a very strong education in both CS and Math, here are the courses it took to get me to where I am:
..and still I'm writing database-backed web applications...
Undergraduate CS:
-----------------
CS Fundamentals I/II
Numerical Methods
Computer Architecture
Assembly Programming
Operating Systems
Algorithms & Data Structures
Programming Languages
Computational Modeling
Automata Theory
Computer Ethics
Statistics
Linear Programming
Software Engineering
Undergraduate Math:
-------------------
Calculus I, II, III
Differential Equations
Linear Algebra
Abstract Algebra I, II
Advanced Calculus
Engineering Math
Numerical Methods
Financial Derivatives
Graduate CS:
------------
Compiler Construction + lab
Computer Graphics + lab
Information Discovery
Natural Language Processing
Computational Tools / Finance
Machine Vision
Wer mit Ungeheuern kämpft, mag zusehn, dass er nicht dabei zum Ungeheuer wird. --Nietzsche
I'm sorry. But as much as you would like it to be: College is not a career. It is training for a career.
The irony of it all is that I see the folks with the math skills (okay, I'm talking about myself here) get overlooked when there's a task requiring a solid math background. It's very frustrating to have taken all the extra classes for a Math/CS double major and the only math I do is to overcome the lack of unsigned integers and bit-shifts in Visual Basic. I work for a defense contractor whose *specialty* is signal processing and I still don't need to know any math beyond binary operators, no matter how hard I look for SP-related work.
So parent poster: who do you work for?
From the students in the MIS program at my college who usually chose this major because they could not handle the math and associated science classes required for a comp sci degree. Although to do most basic buisness programming I doubt you would need much higher math skills. I imagine that some of the rationale behind these classes is to weed out some of those who are not serious about pursing a comp sci degree. FWIW. I am a chem major...
I took an undergrad degree in theoretical math, and was quite proud of the fact that the highest level of technology I used was a ballpoint pen. I found, however, that all that training in thinking in logical ways helped immensely when I picked up programming.
but most helpful was the experience reading symbols. that first C++ class was a no-brainer for me. while many other students were struggling with basic syntax, I picked it up pretty quickly because I did not fear the odd usage of characters like '*' and "==".
It's not just that it's helped me with the computer science stuff. It has also helped me a lot with "unlikely" fields of study such as law. When I come across a difficult legal problem to solve, I solve that problem a lot faster when I analyze the problem "mathematically." As mentioned many times already, it has to do with thinking, problem solving techniques, etc. It's quite useful for most fields of study, I would think...
People say I'm crazy, I got diamonds on the soles of my shoes...
I did all the calculus classes that they made me do in University. Personally, I think the time should have been spent in several other branches of mathematics.
:P
All CS majors should have to take classes that focus specifically on fairly advanced algebra. I enjoy learning math, but it turns out that I'm not a very good math student. However, my math skills went way up when I started taking algebra courses. Because algebra is the basis of basically all mathematics, it ends up being a serious foundation to programming. As near as I can tell, programming languages are generally no more than fancy algebra.
Secondly, I think that all CS students should have to pick some sort of algorithmic minor. Graph theory, logic theory, automata theory, whatever. By specializing in a branch of algorithmics, I can guarantee that you'll end up a better computing scientist and a better programmer as well.
I guess what I'm saying is that I think calculus is too applied.
Graduated in '96.
Required to have Calc I, II, and III. Already had Diff Eq on top of that b/c I was originally an engineering major.
A Numerical Methods course was very enlightening in explaining how to accomodate rounding/precision problems and other ephemera. Unfortunately, all programming examples relied on coding Calculus equations, which was a bit overkill.
Discrete Math also very interesting from a Von Neuman perspective.
And, of course, the requisite stats course.
Summary: The Calculus seems like it'll kill ya though... it certainly seems overkill to me... and I now work for a statistical s/w company.
--
Break the rules. Keep the faith. Fight for love.
If you get a cs degree, your bound to get some math... calculus and a class in discrete to say the least are prereqs for higher level classes. Yet the math and proofs to me are boring and if you understand them at a higher level then you can get by. Instead of studying more math think of studying something else... sure more math will help the way you think, but equally so a minor in biology, psychology, or even something oddball like english will be a better asset when looking for a job. I found that when i told interviewers that i got a minor in psychology and a major in cs they were much more interested than when i just talked about my cs major. Focusing on something that is less removed from cs gives you a different perspective when approaching problems and is a higly marketable skill. So go ahead, try something else that interests you rather than taking another cs or math course, unless the only thing you like is cs or math. :-D
And of course algebra...
The US students were by far the weakest in mathematics, and alarmingly, didn't seem to appreciate the fact when they were told to buck their ideas up. Many of them took the attitude that top of their class at High School should mean something to me and the world at large. Sadly, this is not the case. I care only for their ability in my classes. I must admit that it was very hard for me to get through to them in this topic, but perhaps that was my failing as teacher and not theirs. To add balance here, I must say that American students were probably the most respectful towards me, so in a way what happened didn't make any sense.
I loved Geometry! And Linear Algebra! I...I understood it, intuitively. Those were the only math courses where my intuitions actually helped me. Calc, even advanced algebra, man I had the worst problems.
I'll tell ya though, it was the Advanced Symbolic Logic (I was a philosophy major as well) that really helped me. All the places were most people fall back on their math, I fall back on my logic.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
Math should be treated more like law. Yes, you need to know or consult about it every now and then, but it is not realistic to keep it in your head for years-and-years IN CASE you may need it. It is more efficient to consult a math expert WHEN you need it. Instead, math courses should focus more on basic concepts rather than bulk and rote. I don't remember the vast majority of the math I took in school, and I doubt most others do also after a few years.
Some say that math teaches "logic and reasoning". To some extent it does, but a lot of it is also mere algorithm implementation. For most of the problems in the books can be automated. Why teach people to do a task that a machine can do? If we want to teach logic and reasoning, then there are better topics than numerical math.
Table-ized A.I.
As far as I ever understood why you need so much math is because you need to think analytically and be able to see and implement things in several different ways.
from there, there're cool things like "modern math", and then you should go deep--way deep: two semesters of linear algebra, graph theory, set theory, algebra, real analysis, numerical methods, mathematical logic, ohh, right, and some more calculus... as a computer science graduate student, I'm hating my self for not taking these classes as undergraduate. (well, or for taking them and not remembering too much) It's all very very useful!!
For my 2 cents, i always regard maths as a tool and while i almost never actually do any calculus, vector calcs or matrix manipulation etc..
It's very reassuring to be able to look at some one elses calcs and think 'that looks about right'. I occasionally prod and poke at someone elses work but rarely have the time or inclanation to duplicate it. But i *could* if necessary.
Admiteddly i'm an elec engineer but i'd guess it must be a similar situation for most CS day to day jobs.
There are things we know we don't know and things we don't know we don't know. - Donald Rumsfeld
Go the CpE Route and take all of your engineering calculus, diff eq, probability, linear algebra, and if you are smart (or foolish as the case may be) you will take a programming course that handles all binary/Hex/Octal math. Mine was Motorola 68000 based microprocessor class. Now some are saying when was the last time you had to think in Octal? My response is, when you have to write an interface to legacy equipment, you never know what the hell you will get into.
There are incredible graduate classes in Fuzzy Logic, Chaos Theory, etc. Don't underestimate the value of background knowledge.
Easiest way to keep your "Programmer Only" job from being outsourced is to be able to do the hardware side (not design, but practical application and interface).
Don't waste your mod points flaming an AC.
The reason for all the math classes is the problem solving skills that high level math uses/teaches.
Math is really just addition and subtraction. High level math is just creative ways of using additional and subtraction.
Opps, missed combinatorics... another one of those things that I forgot after taking it...
;-)
Ohh, and take some English too while you are at it... don't mispell discrete like I did.
You can't get away without the following:
discrete math (combinatorics, graph theory, etc.)
linear algebra
basic probability.
Calculus, I don't think you actually need it to be a programmer.
For Anything AI related, there has been a large migration from symbolic representations to probabilistic representations. Anything in machine learning, computer vision, natural language processing, data mining, even network theory, will require a strong and advanced Statistics and Probability class.
I have found that the fundamentals of computer systems are greatly advanced with a Theory of Computation course, which is basically math, with FSMs through turing machines represented.
Again, the question is one of application. If there is a target in the area you would like to work, make sure to learn about it. Also, more math only helps programming, as far as I'm concerned.
Robo-Blogs of the world: UNITE!
Or.. well, it should not. A lot of the responses here mirror the main conception I came across while in University. "Everyone" wants to go to University, but they really just want to learn skills easily acquired at a trade school (not that there's anything wrong with that.) Engineering or CS (notice, it isn't called Computer Programming) majors should be embarrassed to be heard complaining about learning theory. How do you think people figure out new applications? There are entire countries full of hungry people who technically, know how to program. How are you better if that's all you know, too? My assumption is that the people complaining about theory simply find it too hard to understand. Though, the complainers are right, in a way, we don't need that many folks graduating from University. They should just be in some tech school. Oh, and the more mathematics you know, the better. How come most people don't get the fact that since math is just a big glob of abstract structures, you can take different parts and apply them to any application you want?
p
Yea, so they know Chemistry. How does this help them in Comp Sci?
Physics, I buy. I took two years of physics. Understood why it was a REQUIRMENT, learned a lot.
Requirements for the major that have nothing to do with the major, however, are pointless. You're saying that every programmer needs knowledge of advanced Chemistry, and that is complete crap. Some schools require everyone to take chem, and thats fine with me, but don't add it to CS, because it has no place there.
I've got nothing against people who want to double up with CS and another science, and I bet someone who double majored in CS and Chem would be in high demand. But that shouldn't be shoved down your throat.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
I love it when my country flexes its military muscle.
No question, there is a TON of math required for computer science, but if you're into computers it shouldn't be too difficult, as long as you actual read your assignments, unlike myself who coded until late in the night instead.
The one mistake I felt I've made is not taking enough business courses. I'm not saying to take the CIS route, as that skimps on the math, but now that I'm in the real world I find programmers are often called upon to make real business decisions, even sometimes inappropriate ones for the position.
In a world where many US jobs are being outsourced to India and I'm sure others soon, there will be less/no available junior level jobs that pay anything. I don't have a problem with this, but that means that for a lot of us to maintain our comfortable standard of living, we will need to come up with the ideas and forge business relationships, rather than just implementing the ideas.
As an individual with a B.S. in Computer Science I find all this negativity towards CS Majors absurd. If you are considering a B.S. in Computer Science you have to decide what you enjoy doing. Do you enjoy programming, solving problems, implementing solutions that require in depth technical knowledge of how both hardware and software function, etc? Or are you more of a customer service related, implement technology solutions with knowledge of how hardware and software interact, and want to concentrate on using pre-existing software apps to provdide solutions? Obviously, this is just the tip of the iceberg in deciding MIS and C.S. A lot of my friends from school loved doing web programming (HTML, XML, some applets, and web design), but hated the whole theoretical aspect of computer science. If you can't take the theory and its inter-relation with math then you should go MIS.
Computer Science is itself inherent to math. You can't really separate the two. Sure you can implement all these solutions with A+, Network+, CCNA, MSCE, but how much do you really understand about truly optimizing performance. What about tailoring apps to employers requirements? Cost/benefit analysis of code? Sure, all that helps, but your not really implementing a complete solution just by setting up a network and providing support. There's so much more to it and that's where the theory, programming, and math come in.
Sure you can get by without the math and theory, but how are you going to implement better solutions and design without them? Even with a loose understanding, CS majors have a skillset and problem solving ability that IT majors just don't have. A good question for potential CS majors would be can you make a contribution to the linux development community? If not, maybe you should concentrate on getting an MIS or minoring in IS with a major in business or another field of interest to improve your marketability.
In the end I guess it comes down to each person's ability and interests. Math is inherent to computer science, but focuses on better development and better development techniques while understanding the underlying structure of systems. If you don't want to understand this underlying strucutre and don't care about innovation and theory then stick with IT. IT is innovative, but is more system functionality and maintenance rather than optimization, efficiency, development, and extensibility.
Lots of problems are so parallel that they scale near linearly, and doing it on, say, 512 processors, is 500 times faster than doing it on one.
paintball
An important area for study are numerical methods for solving complex problems. For many years before object oriented programming this was the major method of calculation. It still is the foundation for all of the math libraries. life is short and so is my attention span
None, really.
If you can deal with basic arithmetic you can handle most of CS.
The areas where more sophisticated math is required are usually pretty obvious, just like you'd need to know accounting principles if you wanted to write an accounting package, you'll need to know basic trigonometry to write 2d games, linear algebra if you want to do 3d games, uhm, information theory if you wanted to work on cryptography, and god knows what for AI?
Just a guess.
Ok I will bite... I am graduating with a CE degree and these are the math courses I have had to take.
Discrete, The most relevant course for programmers, involves studying discrete values, probability, some number theory, and lots of logic.
Linear Algebra You don't want to miss out on this one, learning to solve problems using lin alg will make your code work when others won't.
Calculus I took three semesters of this (differential, integral, and multivariable). I would recommend that any CS student take at least two semesters of calculus.
Differential Equations I would not recommend taking Diff Eq to your average code monkey CS student as it is not directly applicable to most coding projects. However solving some Diff Eq problems is a real bear, and very hard to do without the help of a computer.
Cryptology Probably not offered by all math departments, but certainly worth taking if it is. At my school it was roughly half math majors and half cs majors in the course.
Amen
What my professors have been telling me is that majoring in computer science isn't necessarily designed to teach you everything there is to know about computers, but how to think. Math does this as well. By taking math courses you not only learn math, but you learn how to deal with problem solving, and different approaches to problem solving which can be applied to many different things. Math also teaches you to be extremely precise and concise. This can also carry over to many other things as well.
It's a whole thought process you're developing in CS. You should be able to look at something you have never seen before and be able to understand it faster and more completely.
If the dollar is an "I owe you nothing", then the Euro is a "Who owes you nothing." - Doug Casey
A good knowledge of math will augment your skills as a programmer in nearly every type of application. For example, I develop high-level material control systems for a living. Mostly, the system is a complex, distributed state machine. On occasion, we have need for math. Recently, because of a customer requirement, I had to implement a 3-space Euclidean Distance equation to compute priorities on locations.
... so, a lot of time for rust to collect on the math gears, but, I at least had something!
Not sure how the idea would have popped into my head if I had not taken the requisite math classes. I graduated 4 years ago
I always find it strange when people say taking Chem and Calc is worthless, etc, to a programmer because it doesn't teach you how to program.
If you want to be a programmer, save the money and go to a community college, or something. They'll teach you what you want to learn since they tend to be more of a vocational school.
It's a mistake to assume computer science is about becoming a programmer, and I think that's why there's so many, people in CS that shouldn't be. Computer Scientists build the tools programmers use.
At least half of the CS classes were math, or "computer science" if you will rather than programming. Things like logic, complexity theory, algorithms, and AI were taught without the use of computers and are for the most part specialized math. Other courses suchs as compilers, graphics, and operating systems required applying math and theory as well as learning some new math.
Don't be fooled by labels, if you have a real CS degree you mostly took math courses with some programming thrown in.
Lasers Controlled Games!
If you ever want to do graphics programming (2D or 3D) it is all math.
If your goal is to go to grad school and work in the field of CS theory you might want to take:
Combinatorics, probability theory, logic, advanced algorithms courses, numerical analysys, and other electives that you might think are relevant.
If you want to be an efficient programmer (as opposed to working in CS theory) then you should at least take a discrete math course and one computer algorithms course. In addition, if you intend to do programming for numerical computations (almost certainly you will) consider taking at least one numerical analysis course. Take an advanced linear algebra course if you want to do 3D graphics.
I got out of high school in 1987 (meaning, I am approaching or have already gained old fart status). Math topics in high school included:
- Differentiation and integration. (How else do
you do any meaningful physics?)
- Limits. Including epsilon-delta proofs.
- Probability and statistics. Not ground-breaking stuff, but certainly the fundamentals of distributions and tests.
- Differential equations. (Certain simple ones, of course.)
- Matrix calculus. (Restricted to 2x2 matrices.)
Notably absent from that list is complex numbers. That would have been useful in physics for dealing with AC properties of inductors and capacitors, but those can luckily also be dealt with in other ways.Linear algebra would have been very useful, but most of the class would probably have been sitting around with wide open eyes, blinking every few seconds and wondering what was going on, :-/
In fact, linear algebra is probably the single
most useful math topic for science. In computer science it will hit you in optimization (think linear programming), for example.
I graduated with a double major in Computer Science and Math. I now work as a software engineer in a large defense company. Many people interchange the terms Computer Science and programming. These terms are not interchangeable. Computer Science is the theory which provides the building blocks that programmers use (often with no underlying knowledge of what is going on). The act of programming really falls more into the term Software Engineering.
Computer Science is theory. In most fields, the theoretical people make heavy use of math. The same is true in Computer Science. Algorithm and development is inextricably linked dependant on math. So if the question is "Does CS have that much to do with math?", the answer is a resounding yes.
Programming or Software Engineering arguably doesn't have as much to do with math. As other posts mention, there are programming/software engineering jobs that use little to no math. However, there are a very large number of jobs that need math. Whether you have one of these jobs or not, you can still benefit from having taken more math.
The issue is not that you took a class that taught you how to do the math that you need to accomplish the job. The issue is the critical thinking skills that math develops. When I started my software engineering job after graduating, the first project that I was assigned to required lots of math that I had never seen in school even though I was a math major. I was able to do the work not because of something I learned, but because of the critical thinking and logical reasoning skills that my math classes had helped develop. My math background also gave me a familiarity with the basic mathematical tools that I needed.
There will always be new problems that school has not prepared you for. If you go to school to learn how to solve the problems you will encounter in the workplace, then you are in for a big surprise. The important thing to get out of school is the ability to think critically and learn new concepts.
As a Brit - I much prefer "maths" since it is an abbreviation of "Mathematics" not "Mathematic".
Also it sounds better (tounge-firmly-in-cheek)
One of the most important things to remember is that while trig, algebra and calculus are important ways to put math to work, they are not all of math by any means.
I have found that the skills and techniques I learned in Analysis, Number Theory and other areas of mathematics are directly usable in design, systems analysis and programming.
Proving theorems is about thinking, trying multiple approaches (and occassionally being gifted with a flash of insight) and applying logic. What else is there to programming and design?
There are a lot of great threads in this discussion. For the most part I am firmly in the "math is good" part. The more types, the better. The barest, most essential minimum is actually often taught in the Philosophy departments of universities: Logic. A thorough grounding in logic is essential to being a good programmer. And I don't merely mean being able to throw together a chain of ands and ors that work, but being able to optomize logical expressions to find the most compact and efficient expression possible. I can't think of a single kind of programming that doesn't benefit from a fairly deep knowledge of symbolic logic.
Beyond that, various mathematical disciplines have different levels of demand based on the work being done. I'm largely excluded from the world of real-time 3D graphics because I never went beyond the basics of the math that underlies it. (Some of the most terrifying evil geniuses I know are guys who can not only do all the math involved in projections and rotations, but can also implement it using only integer math -- they scare me!)
You'd better have your logic (deep) and at least your algebra, pre-calculus, calculus, geometry (with trig). From there, every bit of math you learn broadens you and gives you the potential to see solutions your competitors (other job applicants) might not see.
This is the value of all education: Having more knowledge at your fingertips is the rich soil that grows insights. I know a lot of people who think they they can use an Internet connection and Google and they are "programmers." To some extent, this is true. But you can't look for things you can't imagine or remember. Information and knowledge are not the same things.
I don't limit this to math education either. Even history, music, literature, biology, chemistry, physics, and philosophy can provide the mind with the possibility of new ideas. Anyone looking for "the easy path" through education to a job is short changing himself. University time is the time to wallow in the sea of human learning. The goal is to be an educated person, not a unit of productivity fitted to a particular cog in the great machine of industry. We make and use machines for our rote tasks. Your goal in education (to me) is to become maximally adaptable: to achieve cerebral fitness.
In other words, I think this question is the wrong question.
I've been going to Northface University for a few weeks now, and they seem to be pretty good about giving you the math, and putting it in the context of programming. I've had up to Calc II and a bit of Discrete at a community college. Both have been very useful to me, but the discrete would have been better it had been put into a CS context. Our Information Modeling class is kind of teaching us Discrete without mentioning that what we're really doing is math. I expect more advanced courses will expand on this.
Darned tropical millipede! What's it doing in our apartment?
I'm finishing up my freshman year in college; unfortunately, mathematics has never been a strong point for me. Sure, I can follow a few simple procedures to do basic algebra, but the complicated steps necessary to differentiate and integrate functions is always a source of errors for me, and these errors cascade. I've always been prone to make stupid little mistakes while doing mathematical calculations, and this does not seem likely to change.
Another problem is that mathematics is incapable of holding my interest. Frankly, I don't see why some people get so excited about proving some formula. I'd rather read philosophy, draw sketches, write satire, or develop my linguistic talent. Say what you will about these hobbies being less applicable to real-life situations; I find them quite enjoyable.
For these reasons, this ultra geek is going to have to pick a new major.
On vit, on code et puis on meurt.
I would say that in order to play Car Wars you need some higher level math skills :) And that's just to figure out how much Coke and popcorn to get so that it will last you until 6 AM (not to mention calculating your to-hit roll for targeting a tire while doing a bootlegger reverse while the other guy is doing his maneuvering :))
Damn, it's been a long time since I thought of that game!
-- The Genesis project? What's that?
We didn't have curves in my day. We had to approximate with an arbitrary number of angles, and WE LIKED IT!!
That's right. All your base.
Big difference IMHO.
I think I can summarise it thus:
"A comp sci graduate is as comfortable in the analogue as with the digital"
What I mean by this is that (say) a web programmer deals generally with flags and conditional constructs. A comp sci on the other hand needs to know about fourier transforms, dsp, trig, calculus , rendering, algorithm efficiency and so on.
The two worlds meet at the level of large systems design where the number of records and permutations of flags and conditionals makes the population of outcomes so large as to seem analogue.
Thats my view anyway, having done all three.
I wish at was Friday, but I dont want to wish my life away. So I wish it was last Friday.
The most rewarding math class I took in college was called "Advanced Calculus" where we basically proved why everything in calculus works, start at a very low level. The thinking required for making proofs is very close to the thinking required for making algorithms...only much more defined. I'd highly recommend getting a background in writing mathematical proofs.
And I think everyone on the planet should take simple probability and estimation courses. People are really clueless when it comes to estimation. Like if I asked how many hairs are on your head...I don't expect the right number...but there are logical ways you could come within an order of magnitude or two. Just simple things like this are useful every day. Estimation is good just for a simple check if your numbers are even in the ballpark. Or just trying to judge how far away something is. People seem to think that a smart person is someone who knows everything..but its more a person who knows how to figure out anything...whether it be by looking in books or asking a friend for help.
-Stype
Bus error -- driver executed.
As a computer programmer, most of the people with doctorates I know (physics, chemical engineering, etc.) are doing the same thing I do. But most of them got into programming because the job prospects were better. I don't know how easy it would be to switch back.
The article says the discrete math isn't on the UIUC schedule, but CS 173 and 273 are discrete math classes. Good classes, depending on the professor. Also, boolean algebra and logic circuits are covered in 231.
because its is being outsourced. Do research, which fields cannot be outsourced, and concentrate on that..
Sure, we use series to describe for loops. We have "classes" or mathematical entities like tensors, operators, and vectors. Databases are based on relational algebra, which is 100% math, and we use relational algebra quite heavily in advanced physics courses. Dynamic libraries are a fraud - if they were written right the first time, they wouldn't be dynamic. But in Physics, we have discoveries and such that render entire branches of the science irrelevant or in need of an overhaul.
The foundation of math and programming is trying to express human thought with formal language. At least the mathematicians have embraced the fact that it can't be done, that there are an infinite number of orthogonal theories out there, and that man could spend an infinite time deriving them and still find no "one theory to bind them all". Many programmers forget that basic fact of formal languages.
Math and programming are both about managing infinitely complex structures and logic trees, and abstracting what can be abstracted, and rendering irrelevant what can't.
The radical sect of Islam would either see you dead or "reverted" to Islam.
We had to have enough math for the CS major that we were 1 class shy of a Math minor. Obviously, most of us took that 1 extra class and got it. The line up for the minor was something like: Calc 1 (4), Calc 2(4), Calc 3(4), Linear Algebra(3), Principles of Math (3) and an elective(3) for 21 total credits. There may have been one more course I'm forgetting as I think we were 2 courses shy of the 30 hours needed for a major. I think you didn't have to take Linear as part of the CS major with no math minor.
As far as usefullness, not at all at my current job. However I would much prefer a job where those skills would be used.
LilMikey.com... I'll stop doing it when you sto
You argue that "every program can be converted to lambda calculus which is a mathematical expression form." I'm not sure what point you are trying to make. If you are so sophisticated as to appreciate Church's thesis, you certainly appreciate that every computable function on the integers can be computed by an infinity of programs, and that there exist no computable basis for determining an optimal or cannonical programs for most ordinary measures on the function space. In other words, selection of a program is certainly, in part, a matter of expression, rather than math, at least from the perspective of the naive correspondence between a space of programs operating on integers and the lambda calculus.
And, I am not entirely satisfied that there is a great (or at least useful) sense in which the correspondence is credible to conclude that programming equates to lambda calculus. I seriously doubt you can produce in your lifetime a lambda expression that adequately models the input-output properties of a modern first-person shooter video game, which is certainly a computer program. It is EASY to show a correspondence between computer programs that compute results of integer functions and lambda expressions on the integers. The correspondence is far more attenuated for video games.
The fact of the model does not mean that the human endeavor in one field is equivalent to the human endeavor in the other. In the early twentieth century, we believed that the capacity to model most things as sets made mathematics set theory, and the capacity to model most proof systems as formal wffs and proofs made mathematics itself a subset of logic. But the fact of the matter is: mathematics IS NOT a subset of logic. While it may be so that all valid theorems can be reduced to a proof in a formal sentential calculus, I can absolutely assure you that almost NO mathematician writing proofs is "doing formal logic." Nor can we have any confidence at all (even taking into account the limitations of Godel and Russell in these models) that "doing formal logic" well could ever give us good results in the other fields.
I'm not sure where I am going with this either. Perhaps something like this: while we can almost assuredly MODEL a computer program in some formal system, this is not the same as saying that programming is the same as working the formal system.
Every novel can be recoded in a mathematical fashion as well, but writing a novel is not math. Likewise, I think, programming.
Mind you, I am NOT asserting that math does not intensely inform the art or science of programming. Indeed, a hold the precise opposite position.
My point is merely that the ability to show correspondence between entities in one arena and the other does not permit you to draw the conclusions you have drawn here, both in terms of the utility of math and the patent system. You may be right on either or both counts (and I may largely agree with you on the conclusions if more precisely stated). But the fact of the correspondence proves nothing, and doesn't really advance the argument at all.
Generally, people who practice math avoidance through school are the ones who are easilly taken to the cleaners when it comes time to finance their car or their house.
There's a view among many that CS is splitting into something akin to mathematics and applied math, or perhaps physics and electrical engineering.
The idea is that many schools are simply training CS students to be 'good employees' which really involves little math at all and lots more focus on classes that teach people how to write web applications or learn many languages or specific APIs. These tend to be schools that measure success through job placement, as these skills are what the market is looking for.
Some people in the CS education community aren't exactly excited about this, and have launched something of a counter-reformation, described here: http://www.math-in-cs.org/.
It is kind of a mystery to me why anyone would go to college for a carreer in IT when there are so many certifications available. Compare these two senarios: a. High Scool Graduate goes to work for a help desk. Gets a year of experience. Gets a MCSA, MCDST and a novel or a linux certificate. Gets a job as an assistant sys admin and puts in a couple of years there. He is a qualified to apply for a full sys admin job and he has some money in the bank. b. High School Graduate goes to college and gets a CS degree. He has $50,000 debt and no work experience. He is desperate for money and I don't think that they will be hired as a sys admin so ... he goes to work at a helpdesk.
Now if you actually want to go into Management or Business administration of IT departments then yes you would need college but then you are not going into the IT field. Management is not a truly geek field of course.
My degree is computer science and engineering. The cs part has a lot of discrete mathematics and linear algebra, which IMO are very useful to programming. The engineering part took me up to differential equations in calculus. I can probably count on one hand the number of times Ive used the advanced calculus in my professional career. The positive thing about that, is that the engineering has opened up doors that normally would not have been there with just a CS degree. I landed a 2 year contract in a manufacturing plant designing algorithms for optimally shaping bottles. You'd be surprised at the amount of math that goes into shaping a beer bottle!
Here is an Keith Devlin article "Do software engineers need mathematics that addresses a number of these issues.
The overall point is that math courses often develop abstract thinking skills, which may be more important for developing efficient, correct code than learning a specific toolset which may not age well. I know Keith Devlin has written other articles about this but this was the only one I could find online.
It's psychosomatic. You need a lobotomy. I'll get a saw.
go crazy.... don't mind if i do!
Remember when Yahoo, Altavista, MSN, etc etc had their crappy search engines running? What did they base their search algorithm on? It was text/string batching mostly...heavily investing in lists and relevance factors. What does Google do differently?
They use advanced mathematics to predict the likelihood of matching. What exactly do they do?
Google represents the Web as a Markov chain, where each website is a node and each link increases the unidirectional transition probability of moving from the origin node to the destination node. You can find the 'limiting probability distribution' of a Markov chain relatively easily, even though Google has billions of nodes and trillions? of links.
The limiting probability distribution gives you the relative probability that, web surfing through the links (ie. performing a random walk on the chain), you will eventually settle on a particular website. This is Google's original innovation and technology.
Unfortunately, this type of mathematics is usually only taught in CS graduate school. It should be taught sooner, but it requires getting into a branch of mathematics called 'stochastic processes'.
Favorite
As a minimum, I would suggest:
- Algebra, Analytic Geometry, & Trigonometry. Know this stuff cold. After 30 years in computing, I still use it every day.
- Logic. Ditto.
- Calculus up to, but not necessarily including Differential Equations.
Very helpful at times:- Linear Algebra
- Probability & Statistics
- Numerical Analysis
- Automata Theory (offered in CS departments)
And if you're really into it:- Number Theory
- Topology & Graph Theory
A good grounding in one of the "hard" sciences like Physics can also be useful. And if you've got an aptitude for music, indulge yourself! Remember, it's not just the content of these discplines that makes them valuable. Each one teaches you to think in different ways. And an agile, flexible mind will make you more valuable to your future employers.Go for an education, not just training!
After Reading some of these post I now understand why computer jobs are being shipped over seas to areas that value education and math skills.
Why should you learn math? The very act of learning calculus, probably one of the great human acheivements, develops analytical skills necessary to solve a universe of problems. The 6 months you would spend learning it is nothing compared to the years of boredom you will encounter refactering you code for the umpteenth time:)
I dunno what it is, but I think this article has really helped me see the light. I am jsut now finishing up my junior year at NCSU, and I have gotten literaly NO WHERE. While I have done well in the programming classes, I have failed almost every math course I've taken at least once. My GPA is about a 2.0, and I haven't matriculated, and it looks like I won't ever be able to. I have registered for summer and fall classes, and was planning to give it "one more year" just to see how things go. But I just realised after reading this, theres no point in it for me. I should just get out NOW. I think I should either go take some CS courses at a community college, or try and figure out what courses I need to take to get into video editing/post-production. I do a lot of work with video as a hobby, so I would probably get some enjoyment out of a job doing that.
Hi, I just thought I'd briefly share my experience concerning Math and CS majors. Most CS/IST Majors here are Math minors, as the Engineering branch requires a minor, and it cannot be IST if you're a CS, which sux. Here, you're required to complete 2 levels of Calculus, just for the Associates Degree. Then for the Bachelors, they require Discrete Mathematics, which is VERY difficult. They should rename this class to "geniuses of the 20th and 19th century", because you essentially learn how to do everything the pioneers did. Also, when doing intensive sort, retrieve functions in programming, you have to take into account how many elements you're working with, and the efficiency/order of your algorithm. This is usually something like 2^n, 3^n, log n, n!, etc..Look up the definition of BigO or BigOh. Anyways, in a nutshell I'd say if you're going to do CS/IST, you'll more than likely be expected to become a Math Master/Genius. After going through most of the courses, I can easily say there's a good reason for making those classes required.
http://shemesh.larc.nasa.gov/fm/fm-what.html
Hmm, don't do much octal myself, but any self-respecting programmer oughta be able to do octal/hex/binary conversions in his (or her) sleep. And as a firmware guy, I would also have to say that decimal is for those who have to count on their fingers :)
Back on topic, I don't do a terrible amount of math. Like I said, I do firmware to drive our particular chips (USB device controllers). The math is trivial. The algorithms themselves are pretty trivial. Now debugging the race conditions...
You will take a lot of math. I am a third-year CS major (and yes, I'm a girl!), and so far I have taken...
1. Trig
2. Calc I/II
3. Linear Algebra
4. Discrete Structures
5. Computer Architecture (which was a boolean logic/circuit theory class... yes, it was math)
All of these fell under the MAT prefix in the school catalog.
Basically, I am two classes away from a Math minor at this point. You probably will be, too!
My experience with borrowing books is that if I renew the book 3 times, I need to go buy it. At one time I was a grad student; and when I checked out a book, I got it for the whole semester. Renewing it twice meant I had it over a year.
Another habit I learned to be somewhat useful was the adjacent shelf technique. Look up in the library catalog what books you are looking for, write down some locations and look at the nearby shelves. Too many times I would find books that weren't in the catalog, or were misfiled, had the wrong/mispelled search terms put in the catalog, or were indexed with words you had not thought of. Learn the indexing system your library uses, whether it is dewey or library of congress. If I found booboos, I tried to get them fixed, so the next guy (probably me) would not get near as lost as I had been. At FAU, sometimes I found books that had not been checked out in 10+ years because they had been misfiled.
The last habit I learned to use in the university library systems was to walk all the aisles at least once per school year with a notebook. Write down the books that catch your eye, look interesting, might have something to do with your classes. Check them out or cross them off as you go back to them later. Best done during breaks or near the beginning of semesters before you get overwhelmed in work, or before gamesmen check out all relevant books for a class to prevent the other students in the class from doing better than themselves. It was impossible to do this when I was at Purdue, where they had 2.5 million books spread over 13(?) different libraries. FAU was more managable with around 1/20th that number of books.
I'll preface this by saying I don't believe there is a fundamental correlation between math and most areas that computer science covers. Higher math is required for some theory and, ironically, mostly game programming.
The computer itself is a poor mathematician. It's excellent at logic and uses this and a few million calculations a second to simulate math prowess.
If you want a computer to solve even the simplest equation you'll often have to roll up your sleeves and force feed it Fermat. However, apply complex logic to a problem, with forked solution trees and heuristics, and it will dance through the xor mine field like a ballet dancer.
When people ask me what programming a computer is most like I immediately liken it to doing proof in geometry. If you can get from point A to point B using nomenclature like "SAS", you're ready for programming.
Calculus is only required because some people like it and math professors get lonely. For 3D coordinate systems you might need it ( though, less than matrix algebra ). However, a solid understanding of logic and diagnostic principals will benefit any programmer.
My brother and I got the idea to have a big rig and up to two escort vehicles drive from one town to another and back( oddly enough the distance between the towns is the exact length of my dining room table). I get as many trikes and cycles as I can afford with the same money($130k), to try to destroy the cargo in the rig. So far we have had two 8 hours days playing, and still have about 8 more to go. We started with 14 vehicles, and about 10 are still moving. :-)
My patented ramplate-wielding, gas powered reverse trikes are taking their toll, but his turreted anti-tank guns are vaporizing my cycles one at a time. And it's fun as hell!
And as was said before, if you don't know math, good luck writing video games. Games like Quake perform tons of mathematical operations every second.
For sure! I don't know Quake personally (I'm not into video games at all), but I assume that it's another one of the 3D videogames where your surroundings change with your perspective.
That requires loads of matrix transformations directly out of linear algebra. It sounds terrifying, but it's just about having a group of numbers called a matrix. By multiplying them with a bunch of (x,y) coordinate in a certain order, you can do all sorts of warps and shrinks and stuff. If those (x,y) coordinates correspond to a bitmap of an object, you've just warped or shrunk the object, exactly as you'd have to do in a 3D maze or similar.
Then, there's calculus. There are two courses *everyone* should have to take in high school - auto mechanics (so you know how to change a tire, among other things) and calculus. Calculus means "small stones", as for counting. It's all about rates of change. You could tell the speed of your car by looking at your odometer and your watch, but that will give you only the average speed over a given time or distance. The speedometer, on the other hand, gives you your instantaneous speed - which is the derivative (calculus term) of your position (odometer) with respect to time. This makes sense when you think about it: speed is the rate of change of position.
(Actually, it's velocity, but that's a whole other kettle of fish if you don't know about vectors from Linear Algebra yet.)
Don't worry about the math. It's usually the easiest course in your university schedule - and I tell you that as someone who failed high school math classes constantly and who dropped out of high school because of math (that's a long story, though). Math *is* your friend. How's that? You can be guaranteed that if you do all your homework, you will get an A+ in the course. That's it. No reading, no stupid assignments which get marked by TAs who know less than you, nothing. It doesn't even matter how good or bad your teacher is. Just do all your homework and you'll get an A+. It's a non-linear relationship, do 50% of your homework (every second assigned problem) and you'll get a B+. Do 25% of your homework and you'll get a C+.
As an EE, I had to take 7 university level math classes.
Fire and Meat. Yummy.
Well, that really depends on what you want to program. For instance, to do probably about 80% of the programs out there, a fundamental knowledge of Algebra is useful - but not even required.
If you want to program video games, you'll need college level algebra just to program the physics, but again, you don't have to be a math wiz.
If you want to do cad/cam/cas programs, your ass better know some calculus and trig.
Point in fact, traditionally you've found that people program as a supplement to their chosen profession - mathematicians use computers to crunch large numbers. Engineers use computers to test and design structures. Biologists use computers to analyze and predict populatons. Chemists use computers to simulate complex chemical reactions.
If you want to get a better picture of where you use math (and a tremendous insight into computing mathematics), check out Wolframs A New Kind of Science. He developed this book while researching computers and mathematics, and its really an interesting read whether you understand wth he's talking about or not.
Let's face it - you are not a geek if you can't prove L'Hopital's Rule.
I am very small, utmostly microscopic.
I don't know about today but, when I took CS in the early '80s at a Top-3 Canadian University, there were more required Math courses than required CS courses, probably because the School of CS was relatively new then and had grown out of the Math Department.
While I probably haven't directly used 99% of the Math that I learned in school, what I believe I gained was the ability to solve problems and to think abstractly, analytically, and rigorously.
The best programmer I have every worked with had a BS in Phys Ed. I got a math degree and have worked in dataproc/IT for over 35 years. Spent several years coding, db admin, now a network engineer. My math degree has not helped a bit. Thats not to say that you never use any math concepts beyond basic algebra writing most apps. But by and large, I coulda had a degree in 17th century french literature and probably done just fine!
We needed two Semesters of Calculus I and II or one Semester of the extended Calculus I class. Then, one Semester of Discrete Math.
Of the two, I see a more direct connection to Discrete Math with courses in CS, than Calculus. However, Calculus has cropped up in some of my books. Usually it has to do with optional, more advanced material that usually isn't covered anyways.
I didn't do so hot in Calculus and wish I had the chance to go back and retake those classes to relearn the material.
Of course that was for a BA in Computer Science, and now they are adding a BS degree which requires more Math electives.
"Hard work never killed anyone." -- Some Dead Guy
I got my CS degree from l33t U.
pwned
One of my best friends at university was also a double major like yourself. And he really, really liked math. To him, there was no such thing as too much math. When he heard that I had signed up to do my Calculus III course (the last math required for CS majors, other than statistics), he asked who the professor was.
I told him.
"Oh," he said, his face going numb, "you don't need that much math."
Turns out this professor was very good at teaching, and a really nice guy, but also strongly believed in getting to the theories that underlie the theories that underlie the more common aspects of everyday math. Where "common everyday math" meant things like "set theory".
On our final exam, we had to derive Kepler's laws of planetary motion. From first principles.
You cannot apply a technological solution to a sociological problem. (Edwards' Law)
Here folks is the perfect example of why today's programmers write bloat-code. You don't need trig to write a BreakOut game. Otherwise it would have been impossible to write BreakOut back in the 70's/80's, running on the 1 mhz 6502 or Z80 processors of the time.
Game coding is all about the art of coming up with tricks and shortcuts that make things LOOK like they are complicated. If you think you need to calculate ball trajectories and line intersections for a game like Breakout you are so not cut out for game programming.
Math and CS are like beer and hot wings (or spagetti and sauce). There is a reason why most univeristies teach mathematics with 'the computer science option' or have departments called 'mathematics and computer science'.
Example:
a = 0
for x = 1 to 10000
for y = 1 to x
for z = 1 to y
a = a + 1
next z
next y
next x
print a
what is the value of a? Ask someone who hasn't taken CS and they won't have the math skills available to tell you (but page 11 of the 900 page math book I used for the first math course I took when getting my CS degree describes the problem (and math solution). People without the math background will want to try and program it. I answer: what would you do if I changed 10000 to 1234567? It isn't that hard to come up with real world situations that need this kind of code. Are you going to wait all day waiting for your pentium 500 to give you an answer? Do you have (any) idea how (in)efficient your code is? The answer for the first is c(10000+3-1,3)=c(10002,3)=166716670000
the answer for the second is c(1234567,3)=3.13611288303E17
I could go on (about say graph theory). Those who shun the math would say "what would you use that yukky theory for?" and I would answer: internet routing applications. The two are inseperable. Those who argue otherwise are low-end hacks.
Guys - I am 36 years old and have made it as far as I can in IT without a real CS degree. I am the "senior architect" for networking and security at a Fortune 100 company. Pays pretty well - about $150k/yr. Alot of work and responsibility. I have a Cisco CCIE and was working on my SANS certification.
I'm stopping to go back and get a M.S. in C.S. from a real university program. At this age, I get to sit in undergrad classes to make up for the fact that my bullshit CIS degree didn't have the proper mathematical foundation classes, like Linear Algebra and Calc IV. because it's a real program, and not some B.S. do-it-from-home program, I leave my wife and kids at home and drag my ass into the 7pm class 3 nights a week, setaed with guys who are nearly half my age. It's a bitch, frankly. Takes your ego down several notches.
I could - maybe - have skated by on certs. I have a good cert to have. Nobody else at my company with my background is doing anything like that. But I want to understand databases, and network programming inside and out. My coding is limited to C, makefiles, shell scripting, and a bunch of Network Perl programming. Basically, junior grade O'Reilly School of Computing stuff. It's time to be a real professional.
If your age still begins with a 2, be smart - get a real CS degree. Get through the entire Calc path & linear algebra. Get a tutor. Use online resources. In the late-80s when I was in school, I was taught math by TAs from China, nearly exclusively. Most of us couldn't understand them. We didn't complain, and we should have. I wish I was a thorn in my alma mater's side, but I was 18-21, I was a sheep. Don't be. Get tutoring.
I should do a public service announcement. "Hi, my name is Dan, and I've been a fake IT employee for 15 years."...."Say hi to Dan, people..."
From my experience as a programmer, I've never had to use anything beyond trigonometry in programming. Of course if you plan on doing scientific computing there would probably be a need for higher level calculus, but I would say 90% of the programming jobs out there make no use of it. A basic understanding of statistics can also be useful.
Now, thats for the actual programming. For being a CS major you will need to be pretty "good at math," whatever that means. I suppose it means be able to learn and have at least a passing interest in the subject. Binary logic is closely tied to what schools teach as "math" (algebra, calculus, set theory), so becoming familiar with these maths will prepare your brain to handle computing theory, which is why I suppose CS majors at my school (UCSB) had to take a lot of it.
I thought
Not trying to troll, but in my school, 90% of the incoming students took advanced calc first semester freshmen year.
Quoting the parent There are mathematicians that couldn't program their way out of a wet paper bag - but all good programmers seem to have some faculty with math.
I've seen this first hand. I've tutored a math student in CS level 1 (programming in Java), and while I've seen her do (complex) integrals in her head, she had a difficult time writting some of the assigned programs. The best way I found to help her was to have her think of the program in a (more) mathematical way... that helped a little.
Accentuate the positive, don't waste your mod points on the negative.
At my school (Cornell), CS majors have to take a LOT of math, because CS is really an extension of mathematics. Expect to take Calc 1, 2, 3 (Vector calculus), Linear Algebra, and something along the lines of probability or number theory. Also don't forget Discrete Math, Algorithms, Scientific Computing, and Theory of Computing. Programming is useful for some math classes like scientific computing, but you really just need to understand math very well to do well in computer science, especially if you're in a theoretical school.
Remember, computer science != programming. You don't pay however many thousands of dollars to learn how to become a programmer. You could pick up any number of books for under a few hundred dollars and be a good programmer in a few weeks. Computer science is about the fundamentals behind what you're doing.
I get this "when are we ever going to use this stuff" schpiel from my lab students on a regular basis (I'm the lab T.A. for sections of CS1 and CS2). My usual response goes along these lines:
What about Discrete Math, and Mathmatical Proof? These are two very important skill sets for a computer scientist. If you want to code or script, little amounts of math are necessary. If you want to prove the efficiency of an algorithm, Hold on to your hat
It's all good.
you're a funny troll.
All those maths that they just listed my high school offers. I have taken all of them already and am about to graduate.... The standards aren't that high......
Discrete maths:
- Simple set theory, boolean logic etc. Computers are binary discrete systems, so this is a must.
- Graph theory, very useful for search problems and a lot in AI.
- Information and coding theory. Used a lot in systems, eg. for checksums, compression and cryptology.
- Group theory. Has some advanced applications in cryptology.
Linear algebra:
- 3d computer graphics is basically all linear algebra. Vectors, Matrixes, quarterions etc.
- Also very useful in signals processing.
Calculus:
- Used a lot in signals processing algorithms, including in neural nets, and hardware engineering/electronics
Formal logic:
- Used a lot in formal systems verification, and compiler theory
While I've heard logicians complain it is the most overused theory in mathematics, I argue Church's Thesis is philosophically the most fundamental. Mathematics is the method of reason applied real world problems. Mathematics is also nothing more than a collection of definitions and step-by-step processes. (I've also recently realized encoding mechanisms are important too.)
Church's Thesis simply stated (perhaps overly so), says that no universal computer is better than another. Thus, math and the computer program are the same. Am I worried, about computer programs eventually replacing mathematicians? No. Canonically logic defines all of mathematics. If I create a computer program that solves math problems in a deterministic fashion, then the computer program becomes mathematics. If I create a computer program that solves math problems in a probabilistic fashion, I will have sufficiently crippled it, so that it will actually solve problem in a rather human-like fashion. In other words, it will not be programmer doing math that is solving problems, it will be some rough statistical approximation of our probabilistic human brains working 'in silico'. (Actually, probability is kind of the black box of human reason. If I state that something has a 1 out of 2 chance of happening [i.e. an event can occur or not occur], then we say it is random. If I say that event A (as opposed to event B) has a 6 out of 10 chance of occurring, we say that event A is more likely, event though we have no real reason of 'knowing' why this event occurs.)
I say all of this to make a point, math and computer science (in the abstract sense) is virtually the same thing. The computer program is becoming math. Logicians are starting to verify (and even prove [see some of Chaitin's work]) quite a bit of their mathematics in code. It has now become en vogue to look at problems in terms of initial configurations and the simple sets of instructions that define how the configurations behave [see Wolfram's work]. Thus, the line between mathematics and computer science are further blurring. Most of the really fascinating work being done in applying K-complexity (algorithmic information theory) to real world problems are being done by computer scientists [quantum information theorists also are doing quite a bit of interesting work as well].
On a personal note, I've returned to school to finish a degree in Math. Previously when I attended school, I studied Computer Science. I decided to take some extra math classes for the heck of it. As a result, the advanced math courses (abstract algebra, non-Euclidean geometry, etc) served as electives in my CS degree. As a whole, I've found most CS departments don't view math classes in this way. The intersection of the two curriculums is very minimal. For instance, if I take a course from the Math department in 'recursive function theory', most CS departments [at least the one's I looked at] wouldn't take the course as an elective. If I take a 'Theory of Computation' as an elective in the CS department, most Math departments won't treat it as an elective either. I'm working my way through school so I couldn't afford to go anywhere but a state school. However, I'm a bit disgusted at this distancing of CS from Math. Most CS departments are becoming part of the School of Engineering so they can be ABET certified. While this seems good, CS is often viewed at 'baby' engineering. "If you can't hack EE, go to the CS department." Even worse most EEs shun pure math (a few brilliant counterexamples exist [Shannon, Zadeh, McCarthy, etc]). With this said, find me an EE who has studied pure math, and I will find you a brilliant computer scientist.
What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
I'm a 2002 graduate of the CS program at the University of Missouri - St. Louis. Math accounted for around 32 hours of my 120 needed for graduation. CS classes were around 33 hours. As you can see, it was pretty much a balance of Math and CS. Over and above all that, I had to take other classes such as Technical Writing, and some various other "related areas." The last few math classes were killers. We had to go up to Calc III and then on to Applied Statistics, Differential Equations, Linear Algebra, and a higher level math class (I chose Numerical Analysis). CS classes were pretty straightforward. They start off with C, then to C++. Electives were available in Java, Visual Basic, and a class that basically surveys many programming languages. The last CS classes were a bit more challenging. In the Program Translation Techniques class, we built a compiler using Lex and Yacc. In the Operating Systems class, we learned about the functions of the OS and used the OSP simulator to write various portions of the Operating System. The degree is very math-intensive, but if you can make it though, it's well worth it. Those that can't make it though the math can go for MIS instead.
it's *how* you learn that matters. First of all, 90% of people commenting here really don't understand math at all. I'm going to sound like a math snob, but trigonometry, geometry, and (American) Algebra are not math at all. As much as you might think they are math, they are in fact just tools. They are tools like your favorite programming languages and operating systems - you can use them accmoplish certain tasks. "Real" math is concerned with a way of thinking - knowing how to see structure in things where structure is not obvious, then translating that structure into symbols through which others can understand it (whoa... I didn't intend it, but doesn't that description sound a lot like what computer scientists do?). Maybe you think I'm full of crap, but "real" math is often better done by people who have backgrounds in History and Literature. You say, "yeah right," but I guarantee you that actual mathematicians are much more verbally (symbolically) inclined than regular tech-savvy people. I've really diverged from the argument here of whether or not math is useful for a computer scientist... but here's what I have to say about that. The best computer scientists will be interested in and excel at "real" mathematics - computer science is just a subset of information science which is math. No, I'm not a mathematician.
Every time you read this, I am going against my principles.
AI = calculus, discreet math and Linear Algebra,statistics Systems and networking= calculus , discreet math, statistics graphics = calculus,linear algebra (lots of fun with matricies!) or you can be a naieve code monkey and just do application leve stuff in which case your job probably doesnt exist anymore ...
Good article.
I went through three years of maths courses at University (linear, calculus, number theory / cryptography...) and it was all very much relevant tomy computing degree.
I would go so far as to say that anyone who hasn't got a good grounding in maths couldn't possibly be effective in a computing degree. Or anything else computer related - try calculating subnet masks without being able to convery decimal to other number systems.
The University I went to (Glasgow) is, I believe, now demanding that *all* Comp. Sci. entrants have a decent grade in maths from their secondary (high) school.
About time too.
C-x C-s C-x k
I completely disagree with the author in this article in not trying to take calculus in highschool. It is the only time that you will get the chance to learn to think in an abstract way at a time when it is good for anyone to do that. Waiting until College is too late. Even if you get a lower score, it is not bad for you to see things more than once. Sometimes it is even better for your self esteem. It is clear that higher math should be part of a computer science (not programming) course. I hope that most people selecting CS don't expect to do web-design. Actually there are nice tools out there to do that and is probably something a person skilled in design (art!) is better apt at doing. Part of your calculus course should include at least precursors to Fourier Transform (image processing anyone?), Wavelet Transforms (compression), Linear Algebra (Optimization algorithms, machine vision!), analytical and projective geometry (3D visualization). It is not bad for anyone, having to use these things to be exposed early on. Choose the path of most resistance (hardest subjects). Stepping down is easier than stepping up
Everyone is talking about CS what about engeneering..? Is it any good??
I think my favorite was my "Computational theory" class where the correct answer was impossible to get. You could get mighty close (think of the little tale where a father has two men stand on the opposite side of the room from his daughter, tells them that each time they move they may cross half the distance remaining between them an his daughter...) and that was good enough. Still, it was always frustrating to figure out if you were indeed close enough or not.
"A coward dies a thousand deaths, the brave but one."
Does a mechanic need calculus? Probably not. The vast majority of computer engineers don't either. The math requirements are a holdover from the early days of computing.
"God fights on the side with the best artillery." - Napoleon, Marshal of France - speaking truth to power
Assuming a competent high school education, for your average CS job, you could replace a collegiate Math curriculum with a Logic one and probably not see a difference in the end result.
(An enterprising person lacking the money for a college class but still wanting to pursue computer science could probably, assuming the high school education again, get by by checking out a few Copi, and then Quine books from his/her local library.)
the whole of what i said sums up to be that people who are both are better. maybe i didnt make that clear enough. in general, math people arent as good as programmers at programming and programmers arent as good as math people at math. IN GENERAL. if you are good at both, you do not fall into the category of people im talking about. my point was that its a matter of specialties. yes, you have to know math if youre a programmer. yes, you (apparently) have to know programming if youre in math. if you are both, you are probably a superior employee. if you dont, you should at least know some of the other to facilitate cooperation on projects. the more you know about both, the better.
use your turn signal! you people act like it's divulging information to the enemy
Prior to my current project there wasn't much math in any of the projects I was doing. Unless you're doing low level graphics, advanced math isn't really needed. Vectors, normals and what not where about the most advanced math I was doing. And you can learn that stuff anywhere. It's just a matter of knowing what you're looking for and being good at research.
Now I'm doing statistics and put to use Linear Algebra before my class got to the same point; least squares. I've also implemented Euler-Mclaurin and converted quadpak over to C# to be able to to integration and summations. The net result is that I'm doing more advanced math than I've covered in college. I'm constantly at Wolfram and other sites or digging through Schaums Outlines looking up equations. And I use Mathematica to check my answers. The only reason I'm doing all this math is because it's a math program I'm working on.
Do you need advanced math? Depends on what you're doing. If you want to make games or apps there's not necessarily a lot of math you need. Do you need a college degree to learn math? Not if you know how to teach yourself. Which you should be able to do. People who can't teach themselves will inevitably fail at computer programming at some point since it's a constantly changing field.
I've become so fed up with the computer science program at Arizona State that I've just switched majors to secondary education to teach math (and possibly computer science) to high schoolers. I've taught myself pretty much everything I know so I might as well put that ability into a career instead of wasting money to not be taught by bad teachers and crappy books.
You can either spend tens of thousands of dollars to be taught or spend a few thousand on books and teach yourself. And you can't avoid teaching yourself.
Ben
Work Safe Porn
Programming is more like a fundamental skill than an end goal. You need to be able to read and write to get along in most environments. But reading and writing in itself is not an end goal. Thus it is with programming. Being able to program is like being able to write in a different context, environment or language. All by itself, it doesn't accomlish anything.
Math is similar. Math in itself does not accomplish too much. When it is applied to other topics, like science, engineering, economics, business, or whatever, then it becomes useful.
I'd say that you need to decide what major area that you would like to work with: Science, engneering (and computer science falls in here), economics, business, or whatever. Then choose the type of math and type of programming that suits those goals. Don't try to think first in terms of programming and math and then go into a field of work.
There is nothing so silly as other peoples traditions, and nothing so sacred as our own.
Traditions enslave your minds. Seducing you, compelling you to bow before the Scarecrows and Cowardly Lions of education. Selling water by the river as if it were snake oil to a mesmerizing tower of flying monkeys.
... or in other words, open source universities would be cool. open source college books. open video lectures, open interactive training, and certifications centers. Turn the real estate into day care centers and gladiator encampments.
Before you very eyes this moment, there is a solution!
Lets dust off the dry bones and give them new life.
If we don't do it the Indians will!!!
Here at the University of South Carolina, the College of Liberal Arts and the college of Science and Mathematics are being merged into a single entity, with only one dean. We're expecting the universe to spontaneously collapse any day now.
> Him: This number must be absolutely accurate, no rounding is allowed.
:)
Assuming no irrational numbers, this is actually completely possible, using fixed point datatypes. You answered your boss like a coder, thinking in terms of float and double. I don't think this was what he was expecting of you in this precise case.
Technically your boss was not wrong, but he was certainly misunderstanding the issues at hand.
An engineer might have answered, "The tools we have to compute floating point numbers use the standard binary approximations that CPUs come with. They allow for very good precision usually, over 10 digits after the point. To do without any rounding at all, we will need to either find and buy custom dedicated tools, or write our own. By when do you want the cost estimate of this approach?"
That's what bosses -- the good ones, anyway -- expect. It comes with their job.
-- B.
This sig does in fact not have the property it claims not to have.
Like everyone else is telling you, the math helps.
I hated it; absolutely hated it. The first time I took Calculus I passed with a 61.
I ended up taking it again and got it right the second time around with a solid B, went down a bit to a C in Calc II, and brought it back up in Linear Algebra with nearly an A.
I HATE math; HATE it. But you need to know these things. I would take Calc I and II again someday just so I could peg it even better than the second (!) time around.
No one ever said it is easy. No one ever said you're gonna like doing it. No one said you are going to use every last piece of it when you get done with the classes. But I'll tell you; once in awhile something pops up, and you're gonna wish you knew a little Linear Algebra....
I'm an assistant professor in a math department.
I'm heading back to school for a BS in CS. I have my AA. I had College Algebra before for my AA and Statistics. I have to take Calc 1, 2 and 3 to get my BS. I never had calc before, and many of my friends tell me I should take a precalc class before jumping into calc 1. I have to admit, it's been 5 years since I graduted college, so my algebra is even a bit rusty. Should I take pre-calc or something else first even if it doesn't count twards my degree?
Programs should be copyrightable, but algorithms shouldn't be patentable. An algorithm in computer science is an algorithm in mathematics.
I should patent long division.
The question may literally convey a concern for whether the math is useful, but it rings in harmony with every other student I ever dealt with who asked the same question: he doesn't _want_ to take the math.
A college will make you take a shitload of general requirements. How useful is Music Appreciation 101 to a Computer Scientist? Not very. But it is 1) part of how you pay your dues - as an employer, I want diverse applicants. Geeks who sit in their office and can't carry on intelligent conversations outside of the work at hand make for intellectually stagnant corporate environments. Also 2) it's how you show that you can apply yourself when you're tasked with something you may not really want to be doing. It's something else I want to see in a potential candidate.
The question clearly reveals that this individual doesn't want to have to take the math. How many people have we all seen like this? He's lazy, he wants to take the shortcut, he wants the quick reward. The fact is that this guy wouldn't survive 5 years of a technical education and I won't be hiring him when he bails with an Associate's degree in Making a Windows Box Look Like it Can Outperform Unix.
True . . . especially that 10%
I had to give one of our interns a 20 minute explanation of Set Theory et alia the other day to explain why doing a query to display a certain cross-section of data can take (literally) longer than the current age of the universe (if by join) or about 6 seconds (in-line sub queries).
One could probably figure that out from a Data Structures class [or wherever you happen to learn your "Big O()" notation] to derive the result of x*n as opposed to x^n! in computation . . . .
However, unless you are truly limiting yourself to that niche, I'd consider Vector Calc to be very important [necessitating Diff Calc, Integ Calc, Series Calc]. Not sure Linear Algebra is really that useful any more--all the libraries are written [unless you're doing compiler work]. Outside of academia [writing simulators/solvers for upper-tier physics projects].
To be honest, though. I don't thing one should be able to receive a college degree without having completed a full year of calculus anyway.
But if you want to be able to work in more than a few niche markets, you'd better have V-Calc, DE, LA, Stat down pat.
Ah, Mathematics, the basis of programming itself!
This might sound a bit odd, but in a way, it is true. The kind of disciplined, structured thinking that goes into mathematics should go into a program. You can write a program without the kinds of process that you use in mathematics, but the end result is never as good as a disciplined structured approach.
Using mathematics skills, it is possible to prove the functionality of a design before the first line of code is ever written. You can reduce the complexity of the logic in a program. You can minimize a program's code to contain ONLY what it needs in order to operate.
Mathematics provides you with the foundation to do that. While you may not be doing a lot of integrals or differentials every day, you can certainly use the same approaches to tackling those problems in any programming task.
Classes in mathematics that are especially helpful would be 3-4 semesters of calculus, 2 of differntial equations, 1 of critical logic and 1 philosophy course in logic and critical thinking.
Try it, I think you will be amazed at how much of a better programmer you can become once your mind is trained to break the complex down into the simple and solve it!
I am the penguin that codes in the night.
A grasp of mathematics is no doubt essential in order to become a competent programmer. As well, methinks, an ideal programmer would also be a circuit slob. Just as important, I'd say.
and you have what every CompSci major should know.
If you're a member of ACM (one of the major professional organizations for CS folks) you can download the articles from the digital library - if you've already done away with your hard copy. Most University libraries should have the journal available for checkout.
Having recently received my PhD in CS, I can tell you that if you're going to pursue an advanced degree - then the math is TRUELY necessary. While I was an undergrad, I never understood the requirement - but once I started working in the 'real' world, a lot of it made sense. I don't necessarily use it on a daily basis - but there are times when I say "yeah, that makes sense now"
"Software is the difference between hardware and reality"
My math skills are week, (I tried doing some 3d stuff but it made me run crying back to windows apps). I would love to learn more, but I don't know where to begin.
Assuming I know how to add, subtract, multiply, and divide (But nothing else) what subjects would I need to learn, and in what order? (I'm guessing that Calculus isn't first)
Mathematics is involved in most aspects of computing, from the complex calculations of modelling and engineering systems (which includes video game models, movement skeletons, and physics models) to the set theory that drives RDBMS coding.
You don't need a math degree to program, but you do need an understanding of set theory, linear algebra, O(n) algorithmic efficiency, and boolean logic transforms.
At very least, you need to have an understanding of O(n) algorithmic efficiency to know when to use a particluar solution for a problem. Just because a hackjob from a coder works doesn't mean it's going to scale to solve the full problem set in production.
Without those basics, you aren't programming, you're just bodging code and probably causing more long-term issues and expense than your salary is worth.
I do not fail; I succeed at finding out what does not work.
- linear algebra
- graph theory
- combinatorics
- logic
- abstract algebra (very cool, and useful in a surprising number of ways)
- multi-variable calculus
- numerical analysis (I found it boring, unlike everything else on this list, but it can end up being useful)
It's likely that you will have to take courses in subjects such as differential equations (either for your school's requirements, or as prerequisites for some of the above classes), but I don't think they're particularly useful to most people in CS.-- Tim Buchheim
I'm planning to gradute with a "magister"(*) in computer science and a bachelor in mathematics. :)
:
:
:D
This is from a swedish university so some things are not the same as for you americans.
Every autumn there is a new bunch of cs-students that either hate mathematics or at least think it's worthless or can't figure out what it has to do with computers. They usually don't believe you when you tell them that cs is more or less mathematics. There are the odd ones that actually know what they are getting them self into, but most don't.
There was even a guy in my class the first year that asked the professor "when we were going to be using Photoshop".
Needless to say almost a lot of those who don't like mathematics drop out after one or maximum two years.
We were about 90 the first year, maybe 50 the second and now in the third year I think we are about 25.
One fault my university does is that they try to ease the new students in to CS by not having any really hard courses in the first year. The only slightly challenging CS-course the first year is "algorithms and datastructures". Well there used to be two math courses that since then has been merged into one since they were to "hard".
The univeristy should start the program really tough so the people that won't make it anyway drop out as soon as possible.
Anyway, the problem this creates is that students are fooled into thinking they can pass three (bachelor) or four years (magister) of computer science when they in fact can't.
Enough ranting now.. back to mathematics.
All courses here are 5 points (not sure how that translates into the american system but it's 7,5 ETCS points I think)
math courses
---------------
Calculus I (derivates, antiderivates, single variable)
Calculus II (two variables)
Numerical analysis
Statistics and probability
Discrete Mathematics I ( elementry discrete math)
Discrete Mathematics II (graphy theory, permutations)
Linear Algebra I (matricies, vectors)
Linear Algebra II (linear transformations)
Abstract Algebra (groups, rings etc)
Logic
Operations analysis
There are also the mixed math/cs courses
Automata theory (PDA, turing machines)
Complexity analysis I
Complexity analysis II
CS-courses that I feel has been the best so for are operating systems and the compiler course and of course automata theory. Nothing is more enlighting that making a turing machine on paper.
I say embrace your inner geek and get knee-deep in maths. It will surely impress the nurses.
(*) This is a swedish degree roughly equivalent with a masters.
I know not what course others may take; but as for me, give me liberty or give me death!
Maths is about building abstract models, and ensuring them some properties through formal proofs.
Therefore if your way of thinking is not mathematically oriented, you are likely to design false algorithms as soon as you will be asked more than building GUI with m$-visual-whatever.
And being exposed to various kind of mathematics is the least unefficient way we know to give one a more mathematically way of thinking.
If you are affraid by maths, chances are that you will be affraid by designing quality software.
I think that for whatever reason, math gets a bad rep. It's routinely passed off by college students as simply "busy work: required for a degree, but I think that any sort of algebra, calculus, or even simple arithmetic at its base form can be helpful to anyone.
Math represents logic at it's purest form. In most situations, you cannot argue math. It is a constant, and an absolute. A+B = C.
Math is not simply "used" by those who learn it in school when they want to perform long division. It's ingrained in the minds of people who practice, and understand it, and it's used in every imaginable instance.
I'm only a college student at the time, and don't have much on-the-job experience, so I'll stay out of the programming talk. I think that math is important for everyone who ever wants to use or understand any sort of absolute logic, or even objective logic, for that matter.
In that respect, I think that math is important to lawyers, programmers, ditch-diggers, aerospace engineers, and the aforementioned people flipping burgers ad McDonalds.
Being a Junior with a CS major and a math minor, I can't help but feel I am the only one forgetting pretty much everything a year ago except for the concepts and the bare basics. I believe college is to learn how to learn. Any math intensive field one might fall in, you WILL need to reference and most likely relearn whatever skills you will need. Perhaps I just have some serious memory loss for wtever reason but I just can't see myself taking wtever math intensive job without having to relearn something I forgot in college.
Crypto is an optional thing, but where I went to school, Math through DiffEq was required. We didn't get a minor, though we had enough credits in Math to do so, because the school didn't want to appear "easy."
Anyway, we had way more math through the CS department than just plain old Calc + Multi Variant Calculus. We had logic! And when we were done with that, we had machines! Grammars, Automata theory, and last but not least, Algorithms. Those are all math courses, but the majority of Math majors didn't take those (unless they had a special interest). I'm sure that the Math department offered something similar, but not in the context and language of computer science.
Anyway, if you get through school and have no problem writing the same program in a functional language and a procedural language, you'll be on your way. The functional languages are really hard to grasp for those hardcore procedural guys, but they are important, and not just for AI. If you are experienced with the lambda calculus, it shows up in the way that you code. Not only does the amount of work that you do decrease (lines of code go way down), you also find yourself thinking in several branches towards a solution to the problem.
A CS degree from a good reputation school should be invaluable to businesses. If you have a grad from one, then it's more than likely that you'll get good quality inventive stuff out of them, even if they suck for the first couple of months (fresh out of college people are like that.)
You need to restart your computer. Hold down the Power button for several seconds or press the Restart button.
"Real" Math and "Pure" Math
Real math is the stuff you can find a use for - engineering, space shuttles, differential equations, calculus, etc.
Pure math is the stuff which doesn't seem to have applicability - non-Euclidean geometry, Galois, and Group theory, etc.
You'll find more people than not take "real" math and the pure math people feel like the real is a matter of plugging parameters into an equation and getting something back. You'd be surprised how many "real" folks believe they are pure until it comes to doing something imaginative.
I have an undergraduate math degree. I also went to Berkeley for grad school, accepted to Math department, passed the Math graduate prelim exam, and took every graduate Theoretical Computer Science class, getting A minuses and As and one A+. I have co-authored in top conferences four articles that were either theory or at least half theory. Three of these papers contained new algorithms that I had done at least half the work in inventing. I have now been a professional programmer for several years, so I am qualified to speak from both perspectives of being educated in both theory and practice.
As measured by ability to produce results in reality, this math/theory stuff is rarely useful and certainly not so in comparison to practice with the reality of the machine. There is something about computer programming that people who have written code for years know that people who took math classes do not know.
The math *may* help, but very rarely; consider the *opportunity* cost: one year spent coding is going to help you much more than one year spent studying math. I *tried* this; this is not just an idea I have. Consider the author of the article; he's a math teacher! Don't take advice from programming from math teachers, take it from programmers!
Mathematicians like to talk about the "unreasonable usefulness of Mathematics". Is that why mathematicians tend to make such poor programmers? What usefulness? When did it help you when your girlfriend was angry? Did it help you debug your Makefile? Can you bench 200 lbs since you took Calculus? Given how much we invest in it and how little of my life it helps, I talk about the unreasonable uselessness of Mathematics.
Unfortunately in English we only have one word for "know", but on other languages there are two words, one for knowing intellectually, such as "savoir" in French, and one for knowing a person intimately, such as "connaitre" in French. People who have written code, especially people who started when they were 12 or so, know intimately, connaitre, software in a way that far exceeds people who took a bunch of theory and only know intellectually, savoir, theorems and algorithms.
My friends who wrote code for years and didn't specialize in theory can pick up enough of the theory they need when they very occasionally need it from, say, Cormen, Leiserson, and Rivest (the white book). Keep a copy of that on your desk and skip the Calculus and all the other stuff. You can learn it if you need to.
Therefore, do not get seduced by the Modernist lie that Mathematics is the highest, greatest, bestest thing. It is not; it is just another thing, and beyond arithmetic and high-school algebra, not often a terribly useful one at that. Modernism is an attempt of Mind to make a tyranny over Body; while Mind has its place, this is too one-sided and becomes painful for Body. As the Buddhists say, "Mind and Body are two, Mind and Body are one" and "Dark is a word for merging upper and lower; Light is a word for distinguishing pure and defiled. Right in Light there is Darkness, but don't confront it as Darkness; Right in Darkness there is Light, but don't see it as Light". You need both Dark and Light.
Larry Wall expresses this pain of Modernism very well in this article on Perl calling it "The Hammer of Modernism": http://www.wall.org/~larry/pm.html : "The funny thing is, Modernism itself was a kind of hammer, and it made everything look like something to be hammered. . . . In fact, at many different levels, Modernism brought us various kinds of dysfunction."
Math wants to tell you that the world is "just" some "details", some constants plugged into the Real Thing, the Equations and Theorems! [said gazing up at the sky with lots of resounding major chords playing in the background], that the Real Thing is ideas which are above the lowly mud of reality.
However, those who deal with reality, scientists, engineers, carpenters, gardeners, moms, etc. soon find out that the world is not dumb and lifele
That said, one of the more useful courses I took in college was the numerical analysis, wherein we studied things like how to figure out the computational magnitude of an algorithm and how to reduce error progagation through an equation or algorithm. If such a course isn't on your school's list of required courses, put it on your own personal one. I've lost count of the times I've used knowledge from that course, and even of the smaller number of times I've had to teach the basics to a coworker so they could understand why it was important to write things "my way".
Welcome to the net of 1000 lies. Upgrades are scheduled soon that should bring us to the 10,000 lies mark.
He writes this regarding multivariate calculus:
"If you are going to program any sort of modern video game, you will likely be using this sort of math for calculations."
I've been programming "modern" video games for ten years (although the modern ones from nine years ago don't seem so modern today), the vast majority of which has been spent in the most difficult, mathematically intense specialization therein: real-time 3D graphics. I have employed multivariate calculus exactly zero times.
Multivariate calculus is quite useful for computing volumes, densities, areas of continuous surfaces, and the like. In video games, however,we have little use for any of those, and when we do need them, there is no calculus involved because all "physical" or rendered objects are either simple bounding volumes (boxes, spheres) or piecewise-linear boundary representations (which is a fancy way of saying triangle meshes) for which there are simple formulas to use.
I'm not discouraging anyone from taking calculus. On the contrary, I whole-heartedly encourage it, but don't expect to make much direct use of the knowledge. On at least two occasions, I have seen enthusiastic young programmers try to employ calculus to solve problems, and do so wrongly. It's a natural tendency to tackle an existing problem with a method of problem-solving with which you are comfortable, but more often than not, calculus isn't the right tool for the job.
Example: This is back in the old, ancient days of about 6-7 years ago, before we had $499 graphics cards to render our triangles for us, so we had to do it the hard way. That meant rasterizing the damned things ourselves (and clipping--yuck!). Texture mapping was the tall order of the day. The easiest way to texture a triangle on the screen was to linearly interpolate the texture coordinates in 2d on the screen, and lookup the texture at every pixel (at least logically, this is how it was done, but in practice it was all done incrementally with gradients and so forth). However, this was not correct, because texture coordinates do not vary linearly on the screen--the perspective projection means there has to be a division by "z" (depth) somewhere. So this young colleague (who was actually older than me) set out to make a perspective-correct texture mapper, and being fresh out of school he naturally chose calculus as his tool. Unfortunately, he overlooked the most basic observation in the formulation of all his fancy integrals--that "z" is not linear in screen space, for the same reason texture coordinates aren't--and his solution was all wrong. It *looked* right (who could argue with all those integrals?), but it was dead wrong. All calculus did was obfuscate the problem.
A discipline that is immediately useful in modern 3d video game programming, however, is that part of physics known as "mechanics"--rigid bodies, velocities, torques, and the like. This is knowledge you'll use on a daily basis whether working on physics code or not, as it will give you a solid grasp on vectors, coordinate frames/transformations, and the like which are essential to most areas of 3d video game programming, including (especially!) graphics. You need a solid grasp on these concepts (and it may take a while--after ten years, new insights are still a regular occurence for me).
I must say, I am truly impressed with the well developed arguments the Computer Scientists of slashdot have given for the superiority of their methodology vis-a-vis that of the mere code monkey. Why, with empirical support such as "IMHO," "Just my $0.02," and "In my experience," I'd say it is obvious beyond a shadow of a doubt that a mere code monkey cannot hold a candle to a true blue Computer Scientist.
It goes without saying that the ability to architect a program of several hundreds of thousands of lines of complexity, a feat which is really no more difficult than the simplest of soldering tasks, is of infinitesimal value compared to the ability to prove an algorithm correct. And we all know that Knuth was really just kidding when he said that "Premature optimization is the root of all evil." What he really meant was that we should hoist high upon our shoulders and cheer onwards those gallant few who devote themselves to making that 5% of a program's code, wherein 95% its execution takes place, run faster; the natural corollary being that the mere code monkeys who design, implement, and debug the other 95% are to be fed gruel and enroll in indentured servitude to their sheepskin bearing overlords.
Throughout the course of history, every great leap in the progress of humanity has, without fail, been initiated by those who embraced the world created for them, and followed the One True Path to enlightement that the intelligentsia (whose motives and methods are obviously pure and beyond question) have laid out for them. That's why you never hear about relatively mediocre students revolutionizing the world of physics while serving as mere clerk monkeys in a patent office. That's why the company that almost single handedly revolutionized the gaming industry was founded by wise and studied sheepskin bearing patrons of the mighty Computer Science. That's why the most popular operating system of our modern age was created under the leadership of one with years of rigorous education and edification. Mere code monkeys amount to little more than a festering pile of monkey feces in this world!
Further, this is why the most popular language in academics is Java. Computer Scientists will settle for nothing more than the fastest language, with bare-metal access beyond compare, when writing their incredible and world definining algorithms and data structures.
When I was in university (UCSD), two years of calculus were required for computer science degrees. Since I was as CS minor I didn't have to do this. That was a good thing because I never was able to wrap my head around integrals.
Now it's twelve years later and I'm a software engineer. I work for a major ultrasound company. For what I do I have never needed any math more complicated than algebra. But that's because I'm a systems programmer. However, I have several coworkers who routinely use higher math. They have to deal with acoustics and waveforms and signal processing. Matlab is more important to them than G++.
So it depends on what you're programming. For most drivers, systems software, databases, and applications, you won't need much math. But for some stuff it's essential. You don't know what you're going to be doing in twelve years, so take the math now while you can.
Don't blame me, I didn't vote for either of them!
I heard many opposing viewpoints. I like both math and computers. I still don't know though why math is needed in programming. I want examples of people doing different things and needing math to solve it. Tell me how being able to differentiate y=x^3+x^2 will help me make a program to enter prices of foobars and sum them up quarterly. I don't understand it.
Why don't you guys have friends or journals?
I'm currently a Computer Programming student at a local community college. I'm about ready to graduate and I am looking to continue my education at another college. I've done very well (I have a 3.95 GPA) but I am ready to move on to other challenges. I only went to Community College because it was handed to me free (awesome scholarship) but now I'm glad I did it. It gave me enough basic programming skills that I understand why more advanced theory is needed.
The amount of math needed for a CS degree has scared me for a long time. I never took calculus in High School and have been worried that it would hurt me ever since. I am however, very good at algebra and geometry was very easy for me. Looking at this encourages me to move forward.
Now if only I could find a way to pay for it all. (My parents have promised zero support...)
I worked freelance for hotels.com and some other big name firms. I am a highschool dropout. The CS grads I worked with were good, but not great. Other than one ex army CS grad I found the inability in my peers to aproach a problem from a new angle to be across the board. Something this new generation seems to be forgetting is that once upoun a time someone that knew ass from a $ prompt and didn't go to school got more credit than ninnies who excel at theory but cant code to save there own life. If you learn deep magic on your own without having it spoon fed to you then in my experience you are someone who really knows what they are doing. Often excelling at real world problem solving above and beyond hothouse flower programmers. Thats the difference between a person that can write a few cotton candy language database connections and someone that writes drivers on the bare metal. You either LUST after computers they consume your life. If you dont live sleep and breathe them for a few years then you can't achieve truly wizardlly status. You cant impart love with a university course. As to math being important to programming, if you cant see that a universe based purely on numbers requires you to be able to manipulate them in order to be really good at what you do, then you have no business in a cs course at all. I went from programming for a living to building harleys and hotrods / programming for fun but I spend just as much time in front of the keyboard now as I did then. A real geek just cant give it up. Sorry for any spelling errors etc. for some reason this thread irritated me and I just had to spout off.
Panel F, Relay #70
If what you want to do is build java apps and database applications then go to college and learn those skills instead of all of the theory involved in a CS degree.
Excuse me, but Java is just a language. As is C, as is Perl, as is Lisp. As is English. You can express and develop theory in any language. You can write grand poetry as well as rank obscenity, in any language.
I agree with your point 100%, but Java has nothing to do with it.
The REAL jabber has the user id: 13196
What you do today will cost you a day of your life
'Being a mathematician won't make the switch go off that allows you to expertly use object oriented programming'
Utter bullshit. Mathematics is all about building abstractions ontop of abstractions, about proving and tidying away the details so that higher-level maths can be done on higher-level concepts. The analogies with OOP are many and should be obvious to anyone who's done any serious University-level maths.
A simple example would be looking at algebraic structures as classes inheriting from eachother.
Hilbert space extends vector space and Metric space
Metric space extends topological space
Vector space extends Module
Module extends Ring
Field extends Integral domain
Integral domain extends commutative ring with unity
Comm. ring with unity extends ring
ring extends group
group extends semi-group
etc etc. And that's an over-simplification of the way these concepts relate to eachother in a very very 'object-oriented' way. Do some category theory
Thought I'd mention that the University of Waterloo Computer Science department is part of the Faculty of Mathematics. Hence, my CS degree is a Bachelor of Mathematics. I always found the math far more useful than say, biology, when related to CS.
What sort of math are CS majors expected to take? Why are these classes useful? Does programming really have that much to do with math?
Employers and society no longer value higher education, so it really makes no difference what math courses one takes. Any subject not understood by the HR drone reading the resume will make no difference in that candidate's "qualificiations."
Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
Everyone seems to be discussing if/when math skills are useful for programming. Since when is programming equivalent to computer science?? Programming is a very useful (maybe even necessary except for theorists) skill for computer scientists, but it is NOT the only thing computer scientists do. If it were, then any hacker (in the classical sense, not the malicious sense) could be called a computer scientist. In my mind, reducing computer science to programming is the same as calling any IT guy who patches/installs/upgrades software a computer scientist. If you REALLY cannot understand what else there could be to computer science other than programming, then I would hesitate to call you a computer scientist.
now that we have established that, where do we find the employers who are intelligent to realize what they need? because they all seem to think that they need coders.
I'm actually a Math/CS major at U of I and the schedule they posted isn't really representative of what I've been doing. Namely, there is not nearly that much science.
h tm l
In fact, I got into the Math/CS program because I didn't want to take any more Chemistry and Physics. The closest thing you have to take to either of these is a Natural Science requirement which is generally a blow-off course.
Here's this year's (Most of the course numbers are bumped up by a hundred for next year) Math/CS curriculum:
http://cs.uiuc.edu/education/undergrad/req_mcs.
- http://pakman.sytes.net/
If you get deeply into the science of Computer Science, you can certainly get into some math. But, it is important to note that practically no one gets employed as a computer scientist (except for people who stay in academe and study and teach Computer Science).
Most people going into CS expect to get jobs as systems developers of some sort. 'Code monkeys' might be the bottom of the pack; frequently they are just trained tool-users who write snippets of code behind buttons.
But to be a great developer is to be a master of a craft, not a scientist. This particular craft is mental - it is, as you imply, a matter of critical thinking and problem solving. It is being able to look at the world in different ways and being able to see how to express an aspect of the world using the tools of your craft. It is a craft with many principles and design patterns and ways of looking at the things.
To be a great developer requires talent. Picking candidates that are strong on math may be a useful way of identifying people with the talent. (This approach screws people like me, however; I believe that I have a great deal of talent in the craft, but my brain crapped-out after basic calculus.)
The vast majority of developers require no more than:
- basic algebra
- basic trig
- basic statistics
Some people need basic geometry.Sure, if you are getting into signal processing or astrophysics or a variety of other areas, you need lots of math. But that isn't where most people are going. If you are, and you are into math, great; otherwise, don't sweat it.
You don't write good SQL because you are good at math (as others have apparently suggested); you write good SQL because
Nothing beats talent plus experience.
"When the going gets weird, the weird turn pro" -- HST
If you think math is not need for a CS degree, I will challenge to read and understand the following
The Art of Computer Programming, Volumes 1-3 Boxed Set
by Donald E. Knuth
An Introduction to the Analysis of Algorithms
by Robert Sedgewick
An Introduction to Formal Languages and Automata
by Peter Linz
Introduction to the Theory of Computation
by Michael Sipser
The Computer Science stuff
kcw,MSCS
"A college calculus teacher will be used to working with struggling students because for many of them, that is the toughest class they will ever have to take. But high school calculus teachers will be more used to working with the top students in the school. If you aren't especially gifted in math, you may find that you don't get what you need from these teachers."
If you are not especially gifted in math, why not take calculus in high school anyway and then retake it in college?
As a current CS Major (3rd year). We're required to take 2 semesters of Calculus, and a Discrete Mathematics course (Boolean Algebra, Algorithms, Big O notation, Logic etc.), in order to complete the CS major. Most students however are suggested to minor in math which ads two semesters of calculus, up to multi-variate, an upper level math course, and linear algebra. Most CS students, however; end up taking Linear Algebra in order to take graphics and robotics classes. I myself think that doing CS at my school without the math minor is not worth it. The math is important, and it gives you a step up on your peers when looking for jobs, and applying to graduate school. This is just my input on the matter.
boring, stupid IT code often does not require much math, although it comes up occasionally. I have run into a few instances where I actually had to think for a minute or two about an equation or solve a problem mathematically. This mostly occured in graphics and statistics (graphing, etc) code. But then, I have been writing mostly boring Java high performance server type stuff (parallel programming, J2ee, network stuff) and complex java clients in swing and Java2D. More useful in this area is good OO design and knowledge of design patterns, along with a good dose of experience. I would say this is the more mundane, common side of computer 'science'. Real science comes into play in Natural Language Processing (NLP), robotics, artificial intelligence and not suprisingly games and graphics. Graphics can be an extremely interesting and wide-reaching field, good math skills are definately required there. AI is getting much more prominent as we develop new techniques and find more applications for it. To make a long answer short, Yes, concentrate on math as much as you can handle, unless you want to write boring IT code for ever and ever (you don't). I have a feeling that IT coders are soon to become the burger flippers of the developed world. I'd like to do something more interesting, but I'm not too strong in the math department.
TallGreen CMS hosting
Programming and mathematical reasoning are one and the same. If you are good at math you have a good shot at being a good programmer. Yes you can be a good programmer without being good at math,but I would argue that you are a closet mathematician.
Math is nothing more than algorithms...programming is all about algorithms.
what?
From what this article suggests for a schedule. It really is stupid. It looks like you waste your time until Junior Year, and then you still waste most of your time. No wonder India programmers are eating American programmer's lunches, Calculus I & II,? Excuse me those are really basic courses. There is a lot more math out there. Also, the course outline that was suggested lacked three other major genre's of classes that any idiot should see is neccessary for a Computer Programming Job.
1) Algorithims: Lecture and Labs, Any idiot can pick up a programming book and learn if-then, switch, and then a couple of coding libraries. That stuff is stupid simple, like I learned that stuff by myself. What needs to be learned is Algorithims and their applications. State-Machine being the most simple of code organization and algorithims. If you don't come out of College being a walking library of effective algorithims, you just wasted four years. The real programming is in how you tackle problems with different code organizations and algorithims. I am going to venture to say is that the reason behind the failure of so many computer game companies attempting to build a game engine is those guys have no idea how to apply algorithims, much more get a bunch of the neccessary algorithims in games to work together. Algorithims should be taught from second semester freshman year in lectures and labs. You just cannot be an effective programmer unless you know that stuff.
2) Memory Management- With the advent of garbage collectors Memory Management is less worried about. However, If you aren't going to program Java or C# you are going to need to program your own memory management. Again, an knowledge of algorithims would be nice, especially in this sub-topic. A programmer needs to create a logical and well thought out way of managing memory in every piece of non-C#/Java code they write. Memory Management is essential to Embedded and EEPROM programming because they can't afford the overhead of garbage collection. AS a CS you don't want these doors closed off to you because embedded's are usually the ones that have to destroy all their software and build a platform from dirt and sweat again. Also, Companies need embedded programmers for everything these days from Microwaves to ovens , to Cars, you name it.
3) Debugging- There have to be more techniques out there than printing strings onto a console. People need to be able to organize their code in such a way that debugging is relatively painless. This debugging should probably be the class you take Senior year that combines all the good Memory Management techniques, good well applied algorithims with a review of large project's code. Primarily Open Source Code (because you can actually look at the code) should be analyzed be these students. Students should poke at all the big Open Source codebases for theil applications of the algorithims that they had been learning the past four years. Their senior project, a project that lasts all Senior Year, should be the application of this debugging class and the computer algorithims, and students should prove their handle on debugging techniques learned in this course in their programming additions to the Open Source Projects.
A Person might argue that most algorithims are only used in one area of programming. However, since Computer Science is not an end all and only a tool, Computer Scientists should be very knowledgeable about the algorithims used in, say calculations of quantum physics. The fact is that those algorithims can very possibly be effectively applied to other areas. Computer Scientists need to be very familiar with almost all areas of science because they really are usually the employees of people with well defined needs in a very vertical market. Those slaves need to be very flexible and knowledgable otherwise they might not be able to adapt to the needs of their employer.
I'm noticing a trend here and I want see if I'm right. Is there anyone here ,willing to defend the strict math requirments, who isn't a grad student/masters holder/PHD? In other words is all this math usefull to us poor bachelors degree holders?
Um. A bit of a generalization? Or maybe grade inflation is even more real than I thought. I am a reasonably intelligent person, and I write good code for a senior CS major, but I have struggled through every pure math class I've ever taken. I have done all the homework and failed the tests. I also spent about 2-4 hours/week in sections with the TA and study sessions outside of class trying to figure it all out. Not to mention looking up formulas and obscure theorms online because our POS $150 textbook is so unclear I can read a paragraph 15 times and still not understand a single sentence. And I am not the only one. Math is tricky, and for some minds it is just plain difficult.
If you take Calculus in high school, you won't need to take Calc 1 in college. You can take the College Board's AP exams and get credit most schools will accept. Even those that don't will accept an exemption. And if you don't do well on the test, you probably
A. Didn't listen/get people's advice.
Or
Have a bad teacher, which if you go to a small school, you should have know about and prepared for in advance.
I intend to take 3 calculuses in highschool. Yes, the NC School of Science and Mathematics offers Calc 3. For free, too.
Simon's Rock College
www.ncssm.edu There are a few others, but they are minor.
I'll be attending Dakota State University next year (it's one of the top computer schools around), and I originally intended to major in Math Information Systems, but my advisor suggested I double major in CS as well since the degrees are only a few credits difference. Has anyone else done this? What benefits (knowledge or career) will this offer besides just a single degree?
"Because so many people here are saying that yes, you need math and problem solving skills."
"No one mentions that being able to communicate effectively...."
If you really want to communicate effectively, you might even want to put a subject and verb in the aforementioned sentence.
Math my dear boy is nothing more than the lesbian sister of biology.
Which one of the two?
=)
Overcaffeinated. Angry geeks.
You are most definitely right, CS is all math. When it comes down to it, all a computer can do is manipulate numbers
I think that's a bit of an oversimplification. It's like saying that sociology is all physics, because the only thing the atoms comprising a population of people can do is obey physical laws.
One year of calculas is a school-wide requirement, even for the 20% who do not major in science or engineering.
In my current project, I've spent the last two months wishing I could remember more of my calculus courses. I never would've thought trying to determine the most effective way to feed farmed fish would be so complicated, and require so much math. I've gone through about half a dozen scratch plans trying to figure formulas and the like out.
On a personal note, I've worked on my own projects that I had to finally take to a former math prof. I simply couldn't figure out how to solve a particular problem. But in this case, I'm probably the exception, not the rule.
If you're just making buttons pretty, you don't need the math. But once you get into the guts of an engine,whether it be graphics or something more specialized (like feeding fish) there's going to be some math in there, somewhere.
From the looks of the code examples in this page,
I feel that Tom Mitchell's Machine Learning book contains more useful/practical AI algorithms.
And yes, you do need to learn math.
Kinshasa, Democratic Republic of the Congo
05 May 2004
Dear Sir,
We vehemently object to your implication that our very important and vital job of connecting servers to databases is not a "serious software engineering and design job".
Connections between servers and databases are vital to our communications infrastructure, and although you treat the job of creating them with disdain, we happen to know that it is a very creative, difficult, and fulfilling job. We have all the Microsoft certifications to prove our skills.
We are not simply cheap labor for outsourcing, but skilled simians who are highly valued for our database-connecting expertise. We command salaries of many bushels of bananas for this fine work. When we are not producing database connections, we are also creating many fine sonnets of Shakespearean origin, a work which also gets us many bushels of bananas.
We urge you to take us seriously, as without us your precious Internet infrastructure would become as foul and mushy as a month-old banana.
Sincerely,
Monkeys of the Congo
I have a BS and MS in computer science and worked for many years in the industry before becoming a doctor and founding Linux Medical News.
I SUCKED at math, working like a dog for C grades in calculus. My miserable performance was highlighted by a D grade in Differential Equations that I worked very hard for. This did not keep me from making straight A's in my programming classes. There is the phenomenon of mathematica 'late bloomers' and I understood it better when I hit 25-27 years old. However, I've never come close to being good or even mediocre at it.
In 20 years, I have yet to do an integral since those awful days and I have worked for IBM as a NASA contractor, the now defunct Compaq and briefly had my own software company. I am now working as a researcher in the highly technical field of functional MRI. I still suck at math. I was regarded by my peers as a good software engineer. Even though I no longer program professionally, I still have a good intuition for software problems and can write quickies without difficulty. I now use a sliver of my ability to make sophisticated spreadsheet models for successful investing. A beautiful benefit indeed.
Do not let lack of math ability deter you from an interesting field that will help you anywhere you go!
-- IV
http://www.LinuxMedNews.com Revolutionizing Medical Education and Practice.
The best example I can think of is trees (any of the decent kinds) vs skiplists in actual code.
Skiplists will always win out in my mind because they are easier to impliment, profile, and maintain.
Also, trees seem to be a topic that confuse a lot of people. Writing code that people can't understand in a professional setting is bad.
I live in a giant bucket.
How much math you need, and what math you need, depends on what sort of code you're doing.
I use arithmetic almost constantly (incrementing loops, avoiding redundant counters). Boolean logic (x&&b)==(!(!x||!b)) is rather common. Basic probability (p(a) > p(b)+p(c)) is required for optimization. I find myself doing proofs in my head for all the code I write to convince myself the code works. Usually really simple proofs, like TRUE works and FALSE works which implies that all cases work. One recent bug involved a count of changes that couldn't exceed 256, yet every increment had to allow a matching decrement. Tricky tricky!
On the other hand, if you ever see a calculator on my desk, you can tell I'm goofing off. (There's a calculator on my desk right now.) That usually requires combinatorics, exponentials, bell curves. Even when goofing off I've very rarely needed calculus.
Not to mention that programmers are more and more the ones who write the documentation for the software; just think about JavaDoc.
"[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz
Let me start by stating that I feel that "CS" should stand for "Computational Science," not "Computer Science." This is because I see CS as a study of the abstract principle of "computation" and not the study of a particular tool used to achieve that computation.
;-)
Note that the "S" in CS stands for science. Science is distinguished from engineering in that it strives to study abstract ideas rather than focusing on particular tools or objects that manifest attributes of those ideas.
In my opinion, most sciences are a tangible subset of mathematics. Math provides the mindset needed to move science beyond the realm of tangible reality into an abstract space where ideas become seperated from a physical medium.
One might call this place "memespace."
It is in this memespace that the notion of a computation resides. To me, computational science is the study of the behavioral mechanics of mathematics. In the past, we've been able to study certain limiting cases of the behaviour of mathematical ideas. (ie, when the behaviour is linear or is easily approximated by such primitives). This really is due to the computational constrains of the human mind.
But due to the glorious age of the computer, we have been liberated from our own weaknesses in this realm. Suddenly, the study of computation has blossomed. We're now able to visualize mathematical behaviour in ways our ancestors could only have dreamed about.
To the modern computational scientist, all the world is aglow with complex behaviour ripe for study. And its no surprise that we are re-visting even the simplest of mathematical primitives, only to discover their behaviour isn't as simple as once thought!
In a sense, CS is a new way to think about mathematics. For everything CS borrows from mathematics, mathematics borrows something from CS. They are really one in the same!
A mindset that thinks CS is just about programming is missing the core of one of the most unifying disciplines in existance today.
At least that's my opinion!
It is what you know that counts.
I took the following math classes in college:
Descrete Math
Calc 1
Calc 2
Calc 3
Linear Algebra
Statistics 1
Statistics 2
Combinatorics
To be honest with you, now I cannot do any math without a book. Sure, I have learned quite a lot of useful stuff, but because I have never had to use it, I forgot most of it. The trick is to learn something and keep using it.
A couple of weeks ago I got back into OpenGL programming and as a result, I had to remember some stuff about multi-variable Calculus. If I had not taken it in school, I would have had problems with it, but because I knew what to look for, I was able to restore my knowledge within several minutes. The point is: learning is good becuase once you learn something, you can fall back on your knowledge if a right time comes. If you haven't learned math, what are you going to do when you need to use it? Learning it from scratch is harder than flipping through a book and remembering what is what.
I think you'll find that anyone who's too sloppy with spelling, syntax, or grammar (except intentionally) will be a pretty piss-poor programmer. Computers sometimes like to crash if you do as little wrong as misspell a variable name (much less misspecify an entire interface). If you can't even get the loose standards of human language right, what chance do you have with a computer?
(Very carefully proofread text...aaaaand submit!)
"A great democracy must be progressive or it will soon cease to be a great democracy." --Theodore Roosevelt
I use computers to solve computationally intransigent problems. I consider myself a mathematician. In my estimation, there is no other choice than to learn everything mathemetics that you can. CS is just a minor footnote.
Sure, taking a quote out of context to make a joke is all well and good, but what about when somebody uses taking-out-of-context for evil? It's a slippery slope!!
hmm... that didn't turn out as funny as I thought it would. Oh well, I'll post it anyway!
"Pushing little children, with their fully automatics, they like to push the weak around"
Arithmetic ends after first year of university in math classes. Pretty much everything you do with computers is covered by first year of math classes. Complex numbers and other nice things are covered in second year, but after that, well, most classes will be pure theory, like functional analysis or metric spaces.
"For the Snark was a Boojum, you see." -From the Hunting of the Snark: An Agony in Eight Fits, by Lewis Carroll
Computer Science is 90% math at the graduate level. Don't skip out on linear algebra if you want to do 3D graphics and pay very close attention to anything involving matrices and vectors.
I passed Calc I the first time I took it in high school with a B grade, but barely.
:)
Now I'm a junior in CS, and it wasn't until the 4th time I took Calculus II in college that I actually passed it instead of dropping it (before failing out) - with a C grade and almost no understanding of the last half of the semester at that (except for series, because those translate so well to CS concepts I already understood easily enough). That's for somebody who got a 23 ACT math score in high school, 26 cumulative (I do much better in English, reading, and science, scoring in the upper 20s).
I haven't taken Calc III, and probably never will. It's not required for my CS emphasis. Same goes for Linear Algebra, Diff. Eq., or other math classes besides my non-calculus Statistics course (although, I now wish I'd taken the calculus-based one, to give me a better idea of practical uses for calc).
Math simply doesn't come easily to me, but what's worst is the fact that I rarely see any useful purpose for it. I have the mind of an engineer, not a scientist - if it's useful, I can learn it, else, I can't. I really do love learning theory (of any kind), but the truth is that I absolutely need to know how I can use theory in practice, otherwise, it's a useless waste of brain space to me. The only reason I passed Calc II the 4th time is because I found examples and ways to somewhat convince myself that certain things I was learning were useful.
I really wish I were innately better at math... My code is decent (A's and B's in nearly all my CS courses), but my math frankly sucks.
If anybody out there in Slashdot-land can suggest a book that teaches Calculus II, III, Diff. Eq., Linear Eq., etc. in a way that practical minds can understand, please, please, reccommend it!
Looking throught the entire book I see a lot of mathematical analysis, linear algrebra, linear systems theory, probability theory, ... My copy of the book was published in 1978! Nowadays thing are worse.
It is easy to understand why a computer science professor once told me that most of his graduate students were poorly prepared in math.
Homework: Study the most recent MPEG specs.
the school I went to required 1 Math course.
now given I had already taken calc I in h.s. so I was better off then most people, but I ended up only having to take 1 math class (calc II ) and a stats class.
personally, I wish we had much higher math requirement. Heck, looking at the math classes I wanted to take, I would almost end up with a math minor.
If you end up in a field having to do with crypto, graphics, or AI you absolutely need a strong math background.
anyhoo... that's my 2 cents.
the real reason math is important for computer science is that fundamentally, science is a branch of human endeavor involved with forming mental models of some system and then exposing that model to Reality to see what jives and what doesn't. with computers, Reality is a bit difficult to find sometimes, but certainly if you go the way of the programmer, the programs you write are codification of your model and the input they handle can be considered the Reality in question.
anyway, everyone who constructs models learns an affinity for the "trueness" of the model (if the model is very true, it jives decently w/ Reality w/o need of hand-waving or too many kludges). math is important for judging trueness of the model, and for extrapolating not only simple truth from the perceived world, but the Ability to Perceive Truth.
many people read orwell's "2 plus 2 makes 5". it's not necessary to study math to appreciate the many levels of this falsehood, but studying math (and henceforth going into computer science) makes it easier to realize even more levels. fiction is a model. of what? society is a model. of what? control / cruelty / repressed-love / tipping-point torture / lies and truths; all are models. of what? all the above, varying over time, are models as well.
in the end, the scientist seeks to understand and change the mental models to be more true. but each scientist is part of the Reality, in Reality. math is essential to bootstrapping the nimble mind.
don't forget about professors who just don't care. the community college that i went to was a joke. on the first day of my discrete math class, the professor walked in and said "this is my last semester here, so i really don't feel like teaching. come if you want, i'll give you all the answers to the tests."
and let's not forget about my engineering physics professor who actually marked me down on my final because i formulated a better method for solving the equation than the one that she used in class. she claimed that it was not fair for her to have to check my formula to make sure that it was ok..which of course it was.
Those who can, do. Those who can't, go into business for themselves.
Ha, I took calc I, II and calc of serveral varibles, along with a course in matrix theory my frist year for ECE. I think that is a little bit out of date, I find myself taking a lot more classes then they have there.
redvsblue.com
::BANG!::
Sarge: Did you just shoot yourself in the foot?
Simmons: Yeah I do that sometimes now..
I love math and I love programming, that's why I decided to get my BS in Computational Science at the only college in North America to offer it as a full department, rather then some track under Computer Science, Mathematics, Physics, Chemisty, etc..
While at SUNY Brockport I've done a great deal of number crunching and thus done most of my programming in FORTRAN. I've learned some C++ where pure number crunching wasn't required, so please don't start flaming me borthering to learn FORTRAN. Currently I am continuing on for my MS there while working on the College's Web site, where I am work PHP and MySQL (yes, I recognize this doesn't relate towards my field, but I *am* still a student and find it a bit more fulfilling then going out to faculty's machines to explain to them that the 400 instances of spyware that I had just cleaned off their machine was what was boggign down their machine).
In my experience, above the 200 level most Computer Science classes deal with theory and involve very little programming. I've seen instances of students forgetting how to code merely because they don't have to do it much. I've seen students waste minutes at a telnet terminal trying to figure out how to compile a C++ program that links to the math library whose output is something besides a.out. The student wasn't an idiot, he just hadn't compiled anywhere besides in Windows. It just sickens me. Honestly, I basically minored in Computer Science so that I would have it on my resume so that future employers would know that there was something different to what I've learned, and might get me an interview to explain it.
Whoever said
I took Pre Cal and got a D despite the fact that I spent so much time studying precal that my grades in history(easy), Intl studies(easy), and sociology(hard) all dropped. Until that Class I was majoring in CIS now I'm Buisness but have no idea what I want to do.
a friend of mine that goes to a college in Macon GA (I don't think it was mercer) Said that they were going to drop most of the Higher Math requirements for computer major's because they weren't needed.
I dropped out of school, but I study and keep on top of new development processes and technologies. I follow what the market wants, while other people waste their time taking Calc II and waiting for their employer to train them. The training never comes, they get outsourced, and I move on to another OOAD gig with a high pay rate. They get raped by corporate America and I send my invoices. In the end it comes down to this: if you want to make money, study what's in demand. Who cares if you don't have the theory so long as you're employable and make lots of money. America is about money and Calc II won't get you anywhere.
I think everything is math. without math, you get nowhere. hell, even english is math, grammar is math, if you formalize it. logical reasoning is math. I think my math sucks too much though. i wish i learn more math.
In 1974, Ted Nelson had some thoughts to share on this very topic in his revolutionary book Computer Lib. As the "crackpot, visionary, gadfly" he calls himself he stated that "Universities require higher math (usually calculus and at minimum linear algebra) before allowing students to program a computer. This is preposterous! This is akin to requiring a PHD in mechanics in order to drive a car down the road! Grade school kids can - and do - learn how to program computers with no math background at all!"
This is a paraphrase, because unfortunately I don't have my copy in front of me at the moment. But I believe I got it pretty close. While I agree with Ted on the whole, I also concede that it entirely depends on what you want to do with your programming projects.
If it's got anything at all to do with breaking apart, twiddling or mangling things like sound and video and many applications of graphics then yes higher math will be a requirement. It will also be useful in helping one think logically enough to handle programmatic tasks more easily.
That being said, there are still many many programmatic tasks you can accomplish...to make your life easier because someone else hasn't in the area you're programming in, or just to learn the internals - the process! - of programming: Ted was dead on (as he was about a lot of things!). No math will be required for a great many tasks!
Quod scripsi, scripsi.
No no no... just get yourself a BA in CS, then get an MBA. This is what i'm doing... I understand CS and IT/IS because i've done it (well ok, so undergrad course work and a couple of internships doesn't constitute "doing it all", but its a good start). Now i'll be managing all of you and making MORE MONEY. Presto! A nerd who understands business and has the competencies to communicate with the rest of the world!
Now... about those loans...
Actually, it has a lot to do with math. I attend Purdue (a CS/Math dual major, ECE minor). Here, CS was a fork from math. In my upcoming CS final, I'm using my descrete math book to study graphs and their traversal.
If you want a job that won't get outsourced, you need to know math; it's required in all the *real* development out there.
I started out thinking it was about programing. (That was silly of me, since I aleady knew how to do that. I guess I just figured I'd spend four years learning more and more languages.)
For a while, I thought Computer Science was an obscure and not terribly useful field of Math. And maybe it once was. When my Algorythems Proff had to spend 2 weeks showing people what a 2-column proof was, that was a good hint that the Computer Scientists in that class had nothing to do with Math beyond Algebra.
So... I have a degree in CS. I don't know what it's about. Maybe I need to go to grad school to learn that?
Not to mention looking up formulas and obscure theorms online because our POS $150 textbook is so unclear I can read a paragraph 15 times and still not understand a single sentence. And I am not the only one. Math is tricky, and for some minds it is just plain difficult.
Oh yeah, I agree; sometimes it *does* take a lot of reading to get your head around something. And other times, you just need to follow through examples until you learn the method because the textbook describes the proof so poorly.
Note also that in my engineering program, our focus wasn't on proofs or theory. It was about practical applications of higher math. The whole idea is that math is a tool for us. Our tests and exams were "Solve this", "Integrate that", "Find the radius of convergence of this series". It was possible to do 100% of the problems on a test correctly, and as such, get an A+. Which is only fair; I don't consider that to be grade inflation. This is not an English Literature class or something else which is only qualitatively correct or incorrect.
I have a collection of Calculus books - over a dozen now, old textbooks from used bookstores. My personal favorite is the 1910 gem, Calculus Made Easy by Silvanus Thompson. Of course, it wasn't helpful beyond Calculus I, but I still refer to it when I've forgotten how to integrate something. It's helpful to have a bunch of different textbooks explaining the same thing; sooner or later you'll find an explanation which just makes things drop into place.
But if you still can't get it, you have to be honest with yourself and ask yourself how much of your homework you've really been doing.
You also have to consider the possibility of attention deficit disorder (ADD). I *couldn't* do math until I got it delt with; now I love math, and there are about 100 other facets of my life which have been improved as a result of diagnosis and treatment. (I think ADD is a different evolutionary behavior rather than a "disorder" as it's called. ADD helps me with a lot of things, coming up with creative and different ways of solving problems. But it does make some aspects of life in today's world tough. I take my Ritalin only when I need to focus.)
But the most important thing is that, in the immortal words of Bernie Perrier (a great high school calculus teacher), "Math is not a spectator sport". You *have to* do the homework. It's that simple.
Fire and Meat. Yummy.
...difference between strings and binary...
Here I mean the difference between the string representation of a number vs the binary representation of it.
- rabs
Theory CS theory consists of a wide range of problems: some very heavily mathematical (Does P = NP?) to the not so mathematical (eg. Theory of Distributed Systems). Although the latter is not "mathematical" in the traditional sense, it still requires strong mathematical reasoning abilities. In any case, needless to say, studying CS theory requires a good foundation in mathematics.
Graphics This one has already been described by other people. No chance in hell you're going to write a kick-ass 3d engine without knowing a lot of linear algebra (i.e. math).
Artificial Intelligence Machine Learning (Neural Nets, Support Vector machines, etc) is all hardcore statistics. You need to have a good knowledge of linear algebra and multivariate calculus to even begin to comprehend this field. At the other end of the spectrum within the AI field is Knowledge Representation; this type of AI is more logic based, and again requires good mathematical reasoning abilities.
Operating Systems Here's a field for which you may argue a minimal amount of math is required. Of all the subdisciplines within CS, this one probably does require the least math. However, that doesn't mean you'll get away without a math background. A lot of research done in this field involves understanding/presenting quantitative results. So you do need some basic knowledge of statistics. Besides that, a lot of OS research also involves proving systems correct; this is very heavily logic based stuff, and again an ability to reason about problems abstractly (mathematically) is extremely useful.
Numerical Analysis Math, math, math, and more math.
Software Engineering Proving systems correct and defining systems using logic -- very mathematical stuff. If on the other hand you get into the more wishy-washy side of SE then you may be able to avoid math.
Anyways, there's probably some sub disciples I missed, but you should get the idea. Math is required in almost all aspects of CS. The only reason it isn't required in the RealWorld(tm) is because most of the stuff done there is grunt work that involves nothing more than reinventing the wheel.
So, if you are really interested in CS, then do it right -- take as much math as you can. If, on the other hand, you are just interested in hacking, then don't go into CS. CS != hacking degree.
Many of the previous posters have cited the importance of math in areas like graphics, databases, etc. I heartily agree. Allow me to cite another example: computational neuroscience.
So I'm in general incredibly interested in various combinations of brain and CS studies, so last year I audited a course on computational neuroscience. This was a course which dealt with understanding neural systems from a computational perspective.
Unfortunately, my math skills are somewhat sub-par for a CS major. I somehow managed to get a 5 on the AP Calc exam, but forgot everything afterwards. This ended up hurting me significantly in the course. Although I could understand the neuroscience concepts, whenever we started with analysis my head started swimming. Modeling things like ion channels require some pretty hardcore understanding of differential equations, which I understood next to nothing about. I learned a bunch of neat facts, but without a strong mathematical background, I wasn't able to fully comprehend what was going on.
There are many other examples of my poor math knowledge causing me pain. As it stands, I'm going to be joining a PhD program to study neuro/CS stuff in the fall. Since I'm going to need to have a good grasp of things like differential equations, I'm going to be spending a lot of quality time with calculus books this summer. Being in a position like this sucks -- I really recommend learning math, regardless of what you want to do. It's amazing how often math comes up, and how much the symbolic processing skills math teaches you helps in other areas.
... you tend to make a fool of yourself on /. a lot, too, when you talk about things that are beyond you, because you "downloaded a Perl module" that did "crypto" one time, yet don't understand what's going on (for example, what the range of a function is and why it is significant). In short, you don't want to appear *that* stupid in public!
There's also the obvious problems with not being able to get or keep a job because all the "web developer" and "GUI" monkey work isn't so hot any more. In short, get your degree, and make sure it contains some actual maths.
CS is problem solving, as is EE, MechE, ChemE, Physics, etc. No matter the problem domain in science and engineering, the solution ends up being mathematical. The Language du Jour might solve a particular problem slightly better today, but fundamentally all languages come down to a combination of sequence - selection - repetition. Even OO languages... they merely encapsulate the logic into "objects" and methods, but the SSR structure remains.
IIRC, my BSEE program, 35 years ago, before there were undergrad CS degrees, was as much math as it was engineering: > 4 semesters of calculus > 2 semesters of advanced calculus > 2 semesters of probability and statistics > 1 semester of linear algebra I don't use any of the above on a daily basis, but the thought processes (the problem solving ability) remain with me. In other courses, I learned Algol and Fortran, but the logic I learned there is still good for C++ and Java.
As an earlier poster noted, an understanding of calculus and physics ought to be required for high school graduation, let alone college.
OK, disclaimer, I haven't even RTFA, but I have quit from a respected CS program (University of Waterloo), and one of the reasons was there was too much math. It just wasn't where my passion lay.
Now, I'm pretty good at math, and truly talented at CS (self-taught coding since age 7, way beyond teachers in high school, etc), but by the time I was getting to things like Calc 2 and Calc 3, I simply wasn't motivated to apply myself to it.
Now, there were other reasons I left... there was the cost factor, and some people I knew were starting a company back in the dot-com days. I tried to go there as a co-op term, but the co-op dept said I had to take another job with a company that indicated they wanted me, and I couldn't work where I wanted to. I told them where to go.
BUT... the fact that the program seemed too math intensive for what I wanted was still a significant factor. I HAVE an excellent foundation in math. I'm great with the CS. But I was still soured away from the CS program at the leading Canadian CS university.
I did get 2 full years in though. I think the most important thing I learned was "big O" notation... analyzing algorithm efficiency. You can apply that to everything.
I think that would be a great hiring test too... show someone a simple algorithm like a nested loop (in anything... even pseudo-code) and ask them what order of efficiency it is. If they don't understand that it's n^2 and the MATH behind what that means, seeya later.
In the years since I left, I've been able to tackle every problem that came my way. And I'm not talking about "connecting web servers to DBs" (although there has been plenty of that, and there is an art to doing it as efficiently as possible). I've written file sharing and communications networks, servers that deal with thousands of simultaneous clients, streaming compression, encryption, you name it. If I can master things like multithreading, advanced networking, cryptography, etc.. what exactly am I missing from something like say, Calc 3?
I do sometimes wish I had opted to stay and finish. There were some interesting CS things in the final years like AI and operating system design (I've heard that one is hell... but then I heard that about 'multithreading' too and it wasn't too hard). But I wonder if I could pick these up too myself anyway with a few books and the 'net.
I understand UW has a new "Software Engineering" program now, with less emphasis on advanced mathematics. Perhaps that's something that is more suited to me.
"Mind, as manifested by the capacity to make choices, is to some extent present in every electron." -Freeman Dyson
Somebody said that what is important when you hire somebody is their ability to think and not the qualification.
I personally know 1 or 2 developers with no formal training but who are excellent developers and thinkers. This is by far not the norm though.
Having said that. Someone with 3 years of University level math behind them has a lot more experience in solving complex problems and using their brains than someone who has done a 6 month course in some arbitrary programming language.
I know that my engineering degree has given me the ability to think and solve complex problems. It has also given me huge amounts of background information and knowledge which normal programmers don't have and as a result I can make informed decisions and focus my attention, compared to just fiddling around until I find something that works and probably won't understand the solution.
The depressing part today is the number of watered down BS degrees you get these days. The trend seems to be to make the subject matter simpler if you cannot find enough people who are smart enough.
I interview BS graduates who took physical education and psych. in their final year! They have perhaps 10% or less of the exposure that a proper degree would give you not even mentioning the depth of the knowledge. Despite this they have 'Computer Science' degrees, and are touted as internationally competitive professionals.
This trend is why programmers are commodities today. The same holds for system admins. There are too many people who have no aptitude or interest in technology, performing tech jobs. Why? Because it (used to) pays well. A programmer or system admin should be someone for whom its not just a way of putting bread on the table, but an addiction, a way of life. Guess how many system admins don't even have a pc at home...
Yes, there are special situations like Games/Graphics, but the average programmer is not likely working on the next FPS game engine. (And even if they were, would DiffEQ be required?)
Personally, I consider myself quite shi*ty at math -- things like advanced calclus or DiffEq (although I start to get nervous when I think about FOIL :). That is one of the reasons I left college in my third year (after relational algebra, I saw no reason to continue further). The most useful math class I ever took was in my first year: Finite Math.
Neither lacking a degree or the math expertise has EVER been a limiting factor in my professional or personal life.
I still produce high quality, high performance software and algorithms, command a six figure salary, and have never had to beg for a job. There is no math problem that I have ever encountered in my career that my trusty TI graphing calculator could not handle.
IMHO, do not give math too much weight. That is just as bad as too little. Some math is important, maybe even required. But, not all of it.
Ask yourself this: how many times last year were you required to use Calculus, DiffEQ, etc. in order to complete a programming related task? And was it something that a calculator could not have done faster (time == $$$) and more accurately?
Just my $.02 (from experience) on it...
-=- James.
to what I said.
Also note, that there are other ways to represent ("store") iteration, for instance it is very common in FP to use tail recursive functions to represent iterations. Note that this works quite well in the absence of assignment (and runs just as fast if you have a language/compiler which can optimize tail recursive calls). There is no need for an "assignment" operation until you look at the assembly/hardware level.
HAND.
Lots, usually.
They generally aren't.
No. Both are derived from logic, neither is derived from the other.
Praps I'll read it if I get bored with taunting trolls.
Already got one, thanks anyway.
Here is the original message: .....skills." in quotes. My point is that one should not correct another's english without checking to make sure his own is correct. (However, this response may have errors.)
[Ok. Let's nitpick: It's not "Here here". It's "Hear, hear". Why do I bring this up? Because so many people here are saying that yes, you need math and problem solving skills. No one mentions that being able to communicate effectively (and correctly) is also very important.]
The phrase starting with 'Because' is not a sentence. It is a response to the question, and as such has an understood "It is" preceeding the word "Because". Of course, I did not mention that the last part of the phrase contains a quote and should have been "Yes, you need
Which brings us to my original point:
"If you really want to communicate effectively, you might even want to put a subject and verb in the aforementioned sentence."
You state that after mentioning two sentences. =)
Overcaffeinated. Angry geeks.
We were having a conversation about ethics in another thread, which I very much enjoyed. It's since been archived, so I can't reply directly, but I wanted to thank you.