Math And The Computer Science Major 1203
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."
A Warning (Score:5, Interesting)
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?
HS math question. (Score:5, Interesting)
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.
Math and CS (Score:3, Interesting)
CS has very little to do with math (Score:-1, Interesting)
CS is about finding algorithms, which has more in common with cooking than calculating. Most math classes that CS majors are required to take a pure esoteric fluff that is meant to jack off the math majors while the CS students snooze in the back of the room.
Even the 'mathy' part of CS, the Big O notation, is little more than saying "well, this one takes a long time so let's just say it's O(n^2), this one is fast so it's O(n), and this one is really fast so it's O(1). And this one we can't figure out? O(log n)." It's really no wonder that computer programs suck as much as they do when the entire concept of algorithm performance is measured in such a slipshod manner.
If math majors could get away with estimating their way through to graduation, we'd all be much worse off. But CS majors certainly don't need all that extra crap.
Programs are math (Score:4, Interesting)
18 credits (Score:4, Interesting)
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.
Philosophy also good (Score:2, Interesting)
Short answer: NO (Score:1, Interesting)
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
College (Score:5, Interesting)
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.
Re:Nail on the Head (Score:5, Interesting)
My best suggestion would be to shy away from any school that skips over the theory and math behind computational sciences. I myself ended up skipping the degree all together and picked up the various textbooks and papers necessary to educate myself in the field. That's not the path for everyone (especially if you're not very self-motivated), but for me it was better than trying to sort through which school was teaching the real thing and which one was dumbing it down to improve attendance.
Re:Computer Science != Programming (Score:5, Interesting)
Re:A Warning (Score:5, Interesting)
Re:A Warning (Score:2, Interesting)
To be fair, that does not mean that you are like those people I have worked with and I may have been extremly unlucky in the samples that I have encountered.
Re:College (Score:3, Interesting)
--trb
Amusing Anecdote (Score:4, Interesting)
Suffice it to say, it felt really good to throw Amdahl's Law [wlu.edu] at him and call *bullshit*. He didn't talk to me after that.
You Should Learn How to do Proofs (Score:3, Interesting)
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.
Re:Here it comes ... (Score:5, Interesting)
Computer Science programming - embedded, drivers, algorithms, etc...
Business programming - This involves moving regular data between buckets. Math isn't so important as common sense. Both seem to be in short supply.
It's been my experience that CS majors can perform well doing either. But there are other skills necessary for business programming that will allow a mediocre programmer to produce excellent work (such as knowing the business or being a wiz with SQL).
I speak from the perspective of a math major who does business programming. I work with a lot of other people who do just great but occasionally run into a brick wall when some strange math comes up. These tasks come up only rarely. The most common place to see a math weakness manifest itself is when they foolishly matrix a couple sets of data and everything grinds to a stop. Even that is easily fixed (as long as they tested full sets of data before going into production). The only time I've *had* to be involved was implementing some probability and statistics packages.
All things being equal, I'd take the guy with math. It means he can think, comprehend written works and probably has a good sense of when his numbers add up (very useful in business programming).
Re:Certain types of programming... (Score:3, Interesting)
Having written a simple Breakout clone back in 1990, I can assure you that you need to know little more than basic arithmetic. I wrote several remakes of old arcade games (Breakout, Asteroids, Missile Command, Space Invaders) before I could solve even basic equations.
3D programming, to be sure, is a whole different ball of wax. That absolutely requires excellent Algebra, Trig., and Calculus capabilities to do anything useful.
Marvin Minsky said it best.... (Score:3, Interesting)
Think math (Score:3, Interesting)
"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.
Re:Computer Science != Programming (Score:2, Interesting)
It isn't entirely true that (good!) CS programs aren't for people who want to write code. I went to a University of Wisconsin satellite school for a few years and took courses in their CS department. The CS major had different options for the "emphesis." There was the traditional theory emphesis which is what is being discussed above, but there was also a code-monkey emphesis for those of us who wanted to write code.
in retrospect, though, this might explain why the professors couldn't have coded their way out of a cardboard box.
I think it's a good example as to why.. (Score:2, Interesting)
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!
My experience (Score:3, Interesting)
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.
Re:Computer Science != Programming (Score:3, Interesting)
To explain mysef, relatively new programming languages are all just context-free grammars, and computers are just exceedingly complex Turing machines. Both of these ideas are part of Automata, and part of the deeper understanding of computing science.
Your classmate probably just wanted to learn to code (as in monkey-style), and not do anything more abstract.
You got it backwards (Score:3, Interesting)
Re:Certain types of programming... (Score:5, Interesting)
Re:Discrete mathematics (Score:2, Interesting)
1. Statistics is good, as mentioned elswhere almost everybody in the business word could use a better grounding in statistics. For real world application this will help you from performance maonitoring to coming up with TCO numbers.
2. As mentioned above Discrete/finite mathematics can be usefull. From my experience it helped clarify some approaches to SQL queries... in other words between set theory and symbolic logic, you will get a better grounding on how to deal with large data sets. Plus logic is good for the daily political discussions in the lunch room!
3. Data structures... more abstract but if your a DBA for something like Oracle and decide you want to play with your file structure (e.g. heap versus btree, etc.) This will give you some insight into why one might option might be better than another. As for coding... its nice to know, but as pointed out somewhere else, modern languages take care of a lot of the plumbing for you so you don't really have to know it.
The rest... it's o.k. Out side of that I think, again this has been mentioned before, it depends as to what you intend to do after school. If you end up in the sciences, then you need the math as far as it applies to the area your in.
If you winde up in the business world, logic and stattistics are going to be the two big things you need. Plus, imo, a good grounding in gathering and presenting empirical data (e.g. not just tracking your time, but really looking at how long it takes you to do something or the server to do a batch process and showing to you superiors unrefutable data.)
Re:Certain types of programming... (Score:3, Interesting)
Besides the basic Calculus everyone had to take, I took Discrete Math and Probability and Statistics. Boolean algebra is critical to anyone who programs using "if" and "for" statements, which should be everyone. "if (x == 7)" is easy even for non-programmers to understand, but a formal education in boolean algebra will give you a better insight into how complex conditional expressions work and how to simplify them (e.g. DeMorgan's Law). Statistics has limited direct use in computer science, but understanding it helps one to understand how important algorithmic efficiency can be.
Advanced math (i.e. beyond college algebra) is not critical for programming but it helps.
Re:Everything there is... (Score:3, Interesting)
To be honest, that's just stupid. You should already be badass proficient in basic algebra and trig going into your final year of high school. I am constantly amazed by the poor level of preparation in mathematics of North American, and particularly US students coming in to College. Where I come from introductory calculus was covered in the second to last year of high school, and the only math course going in the final year (I'm counting statistics as its own discipline) was a pure calculus course. Most students didn't seem to have any difficulty with this. It seems to me that the US sets its expectations of students too low with regard to mathematics education at the high school level.
Jedidiah.
Re:Certain types of programming... (Score:5, Interesting)
My view (Score:4, Interesting)
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).
Computer Science vs Programming (Score:2, Interesting)
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.
Three Words (Score:2, Interesting)
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%.
Re:Certain types of programming... (Score:5, Interesting)
See, and that is the problem. Most jobs today in proramming require a BS in CS. Yet the majority of jobs I see have requirments like:
Backend developer -Must have BS in Computer Science -Must have 3-5 years Java experence -Must have experence in Oracle, SQL server, etc -Must be able to write SQL code for enterpise applications.
You don't need uber math skills to write good SQL or Java code for a database application. I found after college that while my math and writing skills had improved since high school, my database knowledge was lacking so I went to a technical school. There really should be some sort of IT degree that has a focus on practical knowledge rather than mathmatics. You will use high level mathmatics if you are working on video games, or CAD applications. But most programmers end up writing database interface tools.
I'd like to see some type of IT degree that taught programming, networking, and troubleshooting. I'd rather hire a programmer that had a strong foundation in networking concepts than one who aced calc 3.
Hell, they should also stress English judging by many of the programmers I've met.
Re:Coding and Math: a short proof... (Score:3, Interesting)
Proof?
For what it's worth, the best software developers I've ever met all had a good math background. The better the background, the better quality work done by the software developer. The worse the background, the worse the quality of the software.
Writing a high quality, very solid program is quite similar to proving a theorem by construction.
A good mathemetician covers every single possibility when proving a theorem and leaves nothing out.
Similarly, a good programmer covers every single contingency in his software. As a result, the software runs and it runs correctly.
Re:Certain types of programming... (Score:5, Interesting)
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. (I remember reading from Michael Abrash that the Quake engine itself used 2 or so FP operations in the inner loop itself.)
Also, the ingenuity that comes with being around elegant mathematics created from crazy equations REALLY helps in writing elegant and efficient algorithms. They are very similar in many regards, and the concepts transfer well.
Re:Certain types of programming... (Score:5, Interesting)
Since we were in the R&D wing, we threw the whole thing over to the operations people about the time I headed back to school.
The next semester in school I had a databases class. I was baffled by the lack of understanding we had of even basic database design.
Later I found out that a single operations guy did a complete rewrite of our code in about a week. He had all that useless math background and database experience. His version ran on a single server and was usually at only 50% load.
There are reasons to hire well trained and experienced programmers even for tasks that seem simple.
Computer Science and Mathematics - Depends (Score:2, Interesting)
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.
My courses (Score:4, Interesting)
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.
Here here (Score:4, Interesting)
Re:Certain types of programming... (Score:5, Interesting)
And if you do not develop the joy of learning while you are in school, most reputable employers will figure that out before you even get finished with interview...they won't be happy you do not wish to learn.
By not getting a well rounded education, your brain as a muscle, will get soft. If you ever find a niche, you will be fed and cared for as a mushroom.
And you might find that the world is a bigger place than what someone will pay you for. Math and science education is central any country's future. You should want to learn it for that reason alone.
Companies run by math and science illiterates are an abomination, and they are no fun to work for either.
Re:Certain types of programming... (Score:2, Interesting)
Most code monkeys think along the lines of: if you can't get it to work right, you need a bigger hammer. I've seen a ton of them like you. While having a CS degree doesn't automatically mean that you know what you are doing (I've seen plenty that don't), the odds are much higher that someone with a degree will be more disciplined than someone who doesn't have a degree. Plenty of folks take the stance: "I don't have a degree and look how great I am" and somehow think that they are the norm when, in fact, they are the exception (or just deluded because they've never been around *really* good programmers, almost all of which have higher eduction) when they are really just the big fish in a small pond.
I agree entirely (Score:1, Interesting)
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.
Re:Certain types of programming... (Score:2, Interesting)
I have to agree with GP more than you. I've got 5 years experience in Major Company's software division AND a Computer Science degree AND the complete math sequence from a Chemical Engineering major. IOW I've got quite A LOT of math background: only one course shy of a math minor and perhaps two courses shy of the Electrical Engineering math requirements (partial differential equations). I've also got: 4+ years DB2 experience (some really complex SQL to virtualize data cubes from a 3N relational schema, for example). I would be certified in both DB2 application and administration but for lack of time to take out of my actual job duties (and lack of my current manager's support for me doing anything new, but that's a personal problem on her part).
Reality check: my math skills are useless in the real world of "computer programming". I've actually gone about THREE YEARS between needing a floating point number at work! Now, if Major Company hadn't REQUIRED a Comp Sci degree to go full-time, I'd agree with you. But all the big employers require far more training in skills and creativity than they ask for.
The math probably DOES make us both better programmers, but its lack does not hinder anyone else from doing our jobs to 95% satisfaction of management.
I can pick up and learn a new language or API given a few months. It would take years of focused study for a random PHP programmer to acquire the knowledge I have.
And at this time in my life I can pick up the critical 70% of a new language/API in about 2-10 days. I'm not knocking you, I'm sure your skills are quite excellent, but they are shared by hundreds of thousands of others--who are paid exactly the same as you or I are--who have no math beyond trigonometry.
University CS isn't a vocational school. (Score:1, Interesting)
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.
Re:Certain types of programming... (Score:2, Interesting)
Can't stress this point enough. I'm pretty tired of cleaning up 20+ line blocks of nested if/else statements--it's unnecessarily complex, bug prone, and impossible to understand.
And then there are the really mysterious things like this (I've actually seen this):
Re:Certain types of programming... (Score:5, Interesting)
I really like the way that sounds, and I agree with you whole-heartedly. Unfortunately, i believe that attitude is completely divorced from the reality of most (but not all) companies.
After 14 years in the industry with a BSEE and MSCS, my company closed it's St. Louis office in late 2001. I was out of work for 7 months in 2002 and underemployed for a year and a half after that. I have you're so-called "wide base of skills," but they weren't the right ones. Companies here in St. Louis were not at all interested in poeople who can "can easily adapt to new problems and environments," they were looking for those specific technologies and if you didn't have those 3 years of J2EE experience, they didn't want to even acknowledge your existence.
Of course I attribute this to the typical HR department, who wouldn't know a good engineer from a hole in the ground. So their method of separating the wheat from the chaff is a score card based on what technologies you have on your resume. So even though I had done Java and was well acquainted with OO through my experience and schooling, they wouldn't even talk to me because I didn't have "work experience" with J2EE.
Some of us who have families to support don't have the option to just walk away or cherry-pick companies. We're forced to take what we can get. This attitude runs rampant through corporate culture. I would love to be less pessimistic, but unless there is some massive groundswell, nothing will change.
Re:A Warning (Score:2, Interesting)
You can make the case that they only want your money, but that's not entirely accurate either. Part of their accreditation process measures their graduation rates and placement rates (placement meaning a student is working in a job in the field for which they were trained). If either of these fall out of norm (which is roughly mid-80% on both measures) the school loses accreditation. Losing accreditation means the school is out of business. So, in order to keep getting your money, there's a _very_ strong incentive to actually get people graduated and out there working.
It also means that technical schools tend to set up strong employer relationships so that their students can get placed. The ones I'm familiar with have an "advisory board" of 50-100 local companies (small business to Fortune 500) who come in regularly, do their own audits and inspections, suggest changes, etc. In return, these companies take graduates from these schools seriously.
You are correct that the standards are very different. Technical schools are interested in one thing only: taking a student and getting them graduated and placed in the field of their training. They're not interested in well-rounded students, they're not interested in teaching English, math, sciences, etc. beyond those required for the job. Their mission is to educate students who aren't well suited to traditional university programs. Most people who _are_ well suited to traditional university programs would feel slighted by a technical school, but that doesn't mean they're not highly valuable to the population who can't handle a university program (due to lack of prerequisite education, life pressures, access, or whatever else).
I have no stake at all in the technical school area -- I just know several people who work in it and have gone over all of this in detail. They're quite sensitive to it, because the common perception of what they do is completely wrong.
Lots of great threads here (Score:4, Interesting)
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.
Re:Certain types of programming... (Score:3, Interesting)
The sad part is, I agree with you, and I am pursuing a related field (Industrial/Organizational Psychology) which is very similar but has one tool that many HR folks lack: We like to do research and find out what makes the best employee. Off the top of my head I believe that cognitive ability (sometimes called IQ) is most important in programming, not a particular skill (although that is helpful too). Trouble is, many HR folks will only look at what skills people are using, and not what is underneath those tasks, which is why they want someone with 15+ years of experience with
Linear Algebra and Calculus (Score:5, Interesting)
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 [falstad.com]. 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.
You Don't Need No Stinking Math (Score:2, Interesting)
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.
More Math than CS (Score:2, Interesting)
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.
Math not needed..... (Score:2, Interesting)
Don't need it that much (Score:2, Interesting)
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.
Re:Certain types of programming... (Score:2, Interesting)
Certainly you want smart people who can find or create solutions to your problems. But that doesn't necessarily mean someone with extensive math skills. Certain areas of compsci/programming will need advanced calculus, probability, etc.... But most CS grads will probably be doing programming or associated work on business apps. Most of the time, that requires little math. Now, tuning those apps (if any tuning is done at all) may call for some math, or not. Most languages and environments have established techniques for improving performance as well as more general methods (e.g. adding or removing an index, removing redundant or extraneous code, etc....) that may be math based but don't really require the programmer to have a detailed understanding of why they work.
If your firm thinks that 3+ years of java experience is the most important quality a new hire can have, then I really don't want to work for them.
Sadly, this is the shortsighted view most hiring managers seem to take. If their requirements say you should have 3 years of Java, you probably won't even get an interview with 2.5 years experience.
Re:Certain types of programming... (Score:3, Interesting)
The sad part is, I agree with you, and I am pursuing a related field (Industrial/Organizational Psychology) which is very similar but has one tool that many HR folks lack: We like to do research and find out what makes the best employee.
You just hit on the most important thing. You do research. Something that seems beyond the ken of most corporate HR departments.
I have absolutely no problem with using reasonable screening tools to help decide which employees will be best, as long as those tools have sound research behind them.
The reason why HR is the punching bag for us "disillusioned" employees is that they are the ones preventing us from getting a fair hearing with the people we would be working with, by using reasons that seem arbitrary and capricious. The perople who get rewarded accoring to typical HR measures are the ones who essential say, "To Hell with what the company needs, I need to use <latest technology buzzword> so I can put it on my resume."
ACM issue dedicated to subject (Score:2, Interesting)
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"
Re:Certain types of programming... (Score:3, Interesting)
I agree. A large part of the reason employers want to see that you have done well at math and computer science in school is that it shows that you are smart and good at solving problmes. This isn't to imply that everyone with a degree fits this description, but you have to play the odds, and someone who has a strong math and cs background and has been successful in those areas is probably going to be better at solving the problems your company needs solved than someone who has read a "how to" book and knows how to copy and paste from code examples.
This is the same as in many other areas. For example, law schools are impressed by students who have done well in their classes in a difficult major, even if this doesn't give them skills directly applicable to the practice of law.
Certain types of jobs... (Score:4, Interesting)
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:
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.
Re:Certain types of programming... (Score:4, Interesting)
Would you want to work with someone so dedicated to a skillset that they would deride your company during an *interview* and was so fanatical about it that he would prefer to burn his savings than be gainfully employed? In my opinion, he was a *coder*, which was my point. He couldn't see past his coding skill set to understand that I didn't need regional failover between sixteen servers, I needed someone who could understand third normal form, write SQL queries and learn our system enough to be a valuable team member.
Re:Certain types of programming... (Score:3, Interesting)
Suffice it to say, there are those with other-than-cs degrees out there that must program as a function of their fields on a daily basis. NO, they're not computer scientists, but it's pretty fscking arrogant to imply that anyone programming a computer that doesn't have a paltry Bachelor's in CS (whoopee) is somehow an undermench incapable of abstract thought.
Get over yourselves...
Re:Certain types of programming... (Score:2, Interesting)
Umm, yeah, right.
OO design? No, not even.
*Maybe* "Distributed services", but only if you go in to analysing the graphs and their nodes, etc.
Security? Again, no. Possibly the math behind encryption and random tcp sequence numbers, but NONE of the policy and application-specific stuff that a user of the technology touches.
Computer Science IS math. The "Science" word is completely misleading on a number of levels. Computer Applied Math would be a better term.
Unless you're formally modelling and / or proving your system (Transactions, Concurrency, delays, etc), you're not doing Computer Science.
I wish I'd have saved some mod points; I don't mind the posts, it's the damnable ludicrous moderation that goes on.
Re:Certain types of programming... (Score:2, Interesting)
-Dijkstra
Comment removed (Score:2, Interesting)
Clear communication as a predictor of skills (Score:3, Interesting)
(Very carefully proofread text...aaaaand submit!)
the real reason (Score:2, Interesting)
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.
Depends on what you want to do (Score:3, Interesting)
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.