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
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?
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.
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.
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.
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.
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...).
> we have to know math because the math majors cant program, usually
Conversely this is the very reason why physicists and mathematicians have good job opportunities in IT, consulting or banking. In many cases it's easier to teach a physicist programming (or economics) than to teach a programmer the relevant understanding of mathematics.
Of course it depends on what you're progrogramming and of course a programmer who is good at the kind of maths required for the job will have the edge anyway...
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
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
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.
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
It really depends on what you're doing. I tend to think of programming as split into two groups:
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).
t
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!
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
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.
I beg to differ. I am majoring in Mathematics, and have had to take a year and a half of programming. I am fluent in Java and C++, and I use them both on a regular basis in my course study and research.
In a Linear Algebra class, it is useful to check yourself by computer, and you can really get a good understanding of operations like inversion, Gaussian reduction, and determinanat computation by writing the algorithms.
Moving on to a course in Nonlinear Dynamics, a computer is almost an essential tool for modeling dynamical systems that can't be solved in closed form. I had to write my own methods in Mathematica to model these sytems, seek out points of equilbria, and examine their stability. Want a hard core programming exercise? Write a program that will attempt to find Lyapunov functions for a given dynamical system - that will really test your self-worth as a programmer.
Even in a course like Abstract Algebra, you're going to need a grip on programming to get a deep understanding it, for example, reducing polynomials in GF(256), as is done in Rijndael. You can sit there and mechanically do it out by hand if you like, but if you want to get anywhere, use a computer. Write it in C++, another good programming exercise if you want to link mathematics and computer science.
Most math majors in their time will need to take a numerical analysis course, which will include most of what I have previously mentioned. Numerical Linear Algebra, root-finding, interpolation, and differential equation solving. It's a much larger challenge to write an RK4 solver for a given differential equation than it is to move information from a database to the web. You'd have alot more self-respect as the 'computer guy' if you wrote a program to fit an optimal Bezier curve or cubic spline to a set of points, instead of simply hitting 'smoothe curve' in Excel. You'd also understand why the 'smooth curve' function doesn't work so well sometimes.
just my $.02.
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.
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.
-
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.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
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!
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.
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