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."
oh good lord yes (Score:3, Insightful)
Computer Science != Programming (Score:5, Insightful)
Why is maths useful for computer scientists? (Score:5, Insightful)
Only a Mickey Mouse comp sci course would not require maths to quite a high standard.
lots of math (Score:2, Insightful)
Heh. Try Neural Networks without linear algebra (Score:3, Insightful)
All you can get (Score:1, Insightful)
Different applications (Score:1, Insightful)
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.
co-workers without a good math base... (Score:3, Insightful)
Statistics also important (Score:5, Insightful)
Double Major (Score:5, Insightful)
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.
The reason we take math... (Score:4, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
CS = Math (Score:3, Insightful)
Re:A Warning (Score:5, Insightful)
This is pretty much the case no matter where you go to school. A good school will only give you the tools and understanding to be more efficient at acquiring and utilizing the skills. A good school will not be teaching you those skills.
Think!!! (Score:2, Insightful)
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.
Re:oh good lord yes (Score:5, Insightful)
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...
Computer Science AND (Score:3, Insightful)
Re:CS has very little to do with math (Score:2, Insightful)
Re:Computer Science != Programming (Score:5, Insightful)
Speaking as a Math and Comp Sci double major (Score:5, Insightful)
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.
Re:Computer Science != Programming (Score:3, Insightful)
Re:Why is maths useful for computer scientists? (Score:1, Insightful)
Well, I for one have designed, written, and implemented several large software solutions & websites for a number of growing ($1M+) small businesses, and I've never needed a single bit of the matrix algebra or trig stuff I was often forced to digest in college. But maybe I'm the minority here.
*puts on a pair of huge round black ears*
Only one problem with that article: (Score:5, Insightful)
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.
Wrong question (Score:3, Insightful)
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.
Re:Certain types of programming... (Score:5, Insightful)
Re:oh good lord yes (Score:3, Insightful)
I don't use the advanced math itself, but (Score:3, Insightful)
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.
Re:Certain types of programming... (Score:5, Insightful)
Other programming...calculating and distributing load, memory management, all math based. If you ever write anything with sound or electricity (lots of embedded stuff), it's all math based.
Many CS majors will enter the work force only to do data moving programming (ie, take form input, store, retrieve, repeat). However, even those sytems have to have somebody load balancing them which gets into timing and...well, we all know how it goes. Math isn't just a filler class in a CS majors curriculum.
--trb
Everything there is... (Score:5, Insightful)
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.
CS is NOT programming! (Score:2, Insightful)
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.
Discrete mathematics (Score:4, Insightful)
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!
The Question Is Sad (Score:2, Insightful)
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.
Re:Certain types of programming... (Score:2, Insightful)
Re:Statistics also important (Score:4, Insightful)
Such behavior is incredibly prevalent in all fields and industries. I've been in meetings and seen analyses that make my skin crawl because people make fundamental mistakes when using statistics. Part of it is due to the fact that it's not something that's integrated into any cirriculum when it should be. Another part is due to the age-old problem of using a hammer on screws because all you were ever taught was using a hammer.
The final part is a basic misunderstanding of probability, statistics, and math. I've actually had a customer want me to guarantee no failures by developing test results and analyzing them with statistics to "prove" no failures before a certain point. I tried explaining how one can never absolutely rule out such things with stats and prob. There's always a chance, no matter how small.
Re:Speaking as a Math and Comp Sci double major (Score:4, Insightful)
Computer Science is about researching and developing the mathematical theories behind the code. Why are certaing queing algorithms or sorting algorithms "better" than others? What is the "best" way to implement a neural network for a k-class classifier? What is the fastest way to get a packet from point a to point b? These problems have more to do with math, and almost nothing to do with if, switch, and for.
Coding IS math. (Score:5, Insightful)
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.
Computer Science Engineer (Score:4, Insightful)
Engineering Probability/Statistics (Score:3, Insightful)
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
Re:HS math question. (Score:5, Insightful)
I'm amazed these days at what kids use calculators for. My buddies fiance is student teaching a class of 8th graders and says that for simple *addition*, kids are breaking out their TI's. Really, if you can't add 96 + 48 within a few seconds in your head, you've got issues. Graph paper is going the way of the dodo, unless you're an electrical/computer engineer, then you take stock in engineering pad companies.
--trb
Good point. (Score:5, Insightful)
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.
Re:Short answer: NO (Score:2, Insightful)
What does any of that have to do with Computer Science?
Re:Computer Science != Programming (Score:5, Insightful)
MANY CS majors become coders, and it is a perfectly acceptable outlet for the skills, knowledge and wisdom gleaned from a good CS degree program.
Just because some people are fortunate enough to be able to pursue a career in academe or in bleeding edge R&D or other theoretical pursuits, does not mean that good programming is not applied computer science.
If anyone believes otherwise, have another gander at the standard courses in a modern CS degree at any reputable university. You'll find tons of software design theory that can be DIRECTLY applied to writing software.
Re:Certain types of programming... (Score:3, Insightful)
Certainly not games, and almost certainly not commercial shrinkwrap products.
I work out the algorithmic efficiency of every piece of code I write. If I didn't, my games would get bupkis for framerate.
Re:A Warning (Score:5, Insightful)
Re:The reason we take math... (Score:3, Insightful)
That's always the excuse for any subject that gets criticised as a timewaster. Once it gets hard to defend it's always really about something else.
If the point really is to teach thinking, why not develop teaching methods and subjects that would be far more efficient at teaching that? Why not teach 'critical thinking', 'memorization techniques', 'problem solving', 'logic' and other general approaches instead of subjecting the impressionable young minds to subjects that many find boring and pointless (critiques with a certain level of validity too), and are likely to turn them off from learning at all?
Teaching kids to think by teaching them math is like teaching them to cook by setting fire to them. It may get the general concept of crisping meat across, but it's a bit painful and not quite to the point.
Re:Certain types of programming... (Score:3, Insightful)
And you will learn it, and employers will not give a shit, because they just want to connect a webserver to a database, which is not science, and when you realize that your ego about your science knowledge has prevented you from finding a job anywhere but McDonald's, you will realize the error of your ways, and you will want to connect a webserver to a database.
All Math / Physics and No CS Makes a Good Coder (Score:5, Insightful)
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.
Re:Certain types of programming... (Score:4, Insightful)
Not to defend the guy, but sometimes people use their knowledge unconsciously. For example, when I worked out a new collision detection algorithm for 2D games, I didn't need to write down the Big-O formula because it was straightforward enough for me to visualize the equation in my head. It took me a lot of time to realize that I did that,
One has to wonder how many CompSci majors have claimed that it was a waste of time, then went off to use their education in the back of their head.
You're absolutely right ... but (Score:1, Insightful)
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.
Re:oh good lord yes (Score:2, Insightful)
Is this your opinion, or do you have some sort of factual evidence to back up this claim? I have a math degree and can program quite well, thankyouverymuch. I know two PhD's in math who can sling code better than most CS majors ever will. I know other math degree holders in the programming field who are extremely competent. While I have no actual statistics to back up my observations, at least I have anecdotal evidence gained over my 25+ years in the IT field, and I find your statement to run counter to my observations.
To relate this to the original article: the article is dead on, but I'd take it a step further. Ditch the CS degree. Get a math degree and use your electives to learn about computers, programming, databases, and software engineering, the emphasis being on practical rather than theoretical. This approach will likely gain you a minor in CS as well, an impressive 1-2 combination. By the time you complete the CS degree in the article, you're 2/3 the way to a math degree anyway. Want to distinguish yourself from the crowd? The math degree folks hold an edge over CS degree folks in this regard. If you can do math, you can do anything you set your mind to.
That said, I'm not slamming CS majors. I know several of them, too, who are all quite proficient at their careers. IME, the book on CS majors is that too many of them don't pay enough attention to the math side.
Re:Computer Science != Programming (Score:2, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
-Because that person might be writing your SQL queries too.
-Because elegant and reusable code usually comes from the minds of people interested in solving problems.
-Because that person might be able to understand the problem domain better than some I-don't-give-a-shit-about-anything-other-than-code programmer.
-Because that person might work in other areas of development eventually. Did you hire the person for ONLY their database-to-webserver knowledge? Was that shortsighted? Maybe you'd rather have a well-rounded and generally smart person to solve those new problems.
We have a very rigorous hiring program at the firm I work for. We look for intelligent people with a wide base of skills who we think can easily adapt to new problems and environments. We DON'T look for specific knowledge in anything but our most senior positions. We have had wild success in finding very talented people because we are not looking for a person with skill A. How long will skill A be relevant for anyway? Will the person with skill A be able to do good work if we try to teach him skill B later? That seems pretty important to me.
So the question is really: what are the most valuable qualities that a new hire can have? 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. I have over 3 years of java experience, but I in no way consider that my most valuable quality as an employee.
Taft
Re:oh good lord yes (Score:5, Insightful)
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.
Re:Certain types of programming... (Score:4, Insightful)
Many of the things that programmers take for granted as 'baby slobber trivial' are actually applications of advanced math - stuff like boolean operations, one to many relationships, many to many relationships, arrays with more than 3 dimensions, shortest path, sorting routines, loops, recursion, different types of conditionals, etc. These are simply part of our thought processes, an extension of how we think - but we were not born with this knowledge. Anybody that has spent time reviewing code from a 'self taught coder' knows what I'm talking about (no offense to the self taught coders.)
What is computer science? (Score:5, Insightful)
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.
Math for CS (Score:3, Insightful)
(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.
Coding ain't math, not any more (Score:5, Insightful)
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 [refactoring.com]) 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 [state.ga.us]. 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"!
Re:Certain types of programming... (Score:1, Insightful)
I did enjoy earning my degree, and I do appreciate the business background it gave me. In fact, that was the biggest reason I took that route, since I knew math would be easier for me to understand than business. If I could do it again, though, I would have taken all those math courses anyway as electives. Not only is learning it on my own more difficult than it would have been with a good teacher*, but without the necessary math background I can't go on to earn a Master's degree in my chosen field! Not to mention that it would help immensely to have a stronger math background at my job, which is at a company with a lot of engineers.
*If anyone has recommendations of books and other resources to self-teach math, I'd love to hear them.
Re:Certain types of programming... (Score:4, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
I agree with you, but only to a point. In most cases, your employers will just care that it's done on time and under budget. But what happens when system performance is not acceptable? That's when you've got to figure some things out. Look for performance bottlenecks, etc. Times like this are when a math background (and I consider algorithms to be math) will be a life-saver.
Just looking at my co-workers, there are some who have strong math backgrounds. There are others with pretty minimal backgrounds, and it really shows in their code and problem-solving abilities. And guess who my boss has more faith in?
As a side note, I'm not saying that any of this requires formal education. You can learn a lot of this stuff on your own, if need be. It's just that if you've been to school, there's a hope you had to get through these classes and at least some of it stuck.
Re:Certain types of programming... (Score:5, Insightful)
On the other hand, when your job of just connecting a server to a database gets outsourced to monkeys in the congo, the person who learned the math and the science will be getting a serious software engineering and design job.
Jedidiah.
Re:oh good lord yes (Score:2, Insightful)
Re:Certain types of programming... (Score:4, Insightful)
* Object oriented design
* Reusable components
* Disconnect clients
* Distributed services
* Application integration
* Replication
* Remote objects
Web applications raise the bar when you start talking about issues such as:
* Transactions
* Concurrency control
* Unpredictable user interactions
* Browser incompatibilities
* Security
Even if you don't use the computational aspects of math it doesn't mean you aren't using math or that math isn't necessary for certain CS fields. Math is the basis of all CS. Without a good understanding of math and the critical thinking skills that go along with it a person in CS becomes the type that just gets the job done. A person with strong math skills is much more valuable.
Re:College (Score:3, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
Anyone who thinks programming is "wiring front ends to databases" is probably a coder. Yes, there is quite a bit of that kind of work in the business space, but a programmer will not wire your database to a GUI: they will come up with tools to do so more effectively. Similarly, anyone who thinks "skill X" is the be all and end all of programming is probably a coder. (I once interviewed a guy who was pretty good with Oracle. Commanded a six figure income. When he found out that the offered project used SQL server 2000, he mocked our company, to our face and to the niche community we work for. In a bit of "the best revenge is success", he solicited *us* for work after the dot com crash. Seems he was out of work for over a year due to his disdain for anything but his tiny niche skill, and our project was looking pretty good.
Re:Computer Science != Programming (Score:2, Insightful)
Re:Certain types of programming... (Score:3, Insightful)
might want to go to India to speak with someone smarter than you with a better grasp on mathe and science than you'll ever have - more than likely he'll do better work for less.
Re:Certain types of programming... (Score:2, Insightful)
In fact most of the info you'd need for any type of programming is available in the internet. You won't get a degree that way but it's nearly instantaneous and won't cost you several thousand dollars.
You'll need the math, but that's not all (Score:2, Insightful)
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.
OMFG! (Score:3, Insightful)
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.
Re:Certain types of programming... (Score:2, Insightful)
I would say that Computer Science is an applied Math degree...
Re:Certain types of programming... (Score:5, Insightful)
Re:Amusing Anecdote (Score:3, Insightful)
Our ability to scale the speed of serial computations is primarily limited by the physical constraints of the universe. e.g. Light travels at a set speed. In order to make a computation happen faster, you have to make a more dense processor. As you start bumping up against the next limitation (e.g. computing at the molecular level) you have to get more clever about how you perform computations (e.g. Quantum computing.) Getting more clever requires application of new physics to computational sciences.
Scaled to infinity? Not likely. He would eventually ran into 'transmisions' problems where he did not have the bw to even feed the nodes or have them return the results somewhere meaningfull.
That was basically my point. He claimed he was using a super-powerful cluster to do exhaust modeling for a nuclear rocket. While he may have done such a thing (probably with incorrect assumptions in the physics model), he certainly did not do it on a cluster of the size he had claimed. Alternatively, he may have made up the performance numbers because he didn't know what the hell he was doing.
Re:Here it comes ... (Score:2, Insightful)
There is math in carpentry too, but you don't need to attend college to be a brilliant carpenter.
SQL is all about learning the constraints of data i/o and organization. Claiming it is steeped in Set Theory makes it sound a lot more complicated than it is. Sure there are aspects of it that will help, but you could learn all of Set Theory or just learn the one specific instance of that database. Practical experience and common sense will help you more than Set Theory.
Of course, I'm talking about SQL from a programmer's point of view. This usually assumes the database is already made. In this situation I'll take the person with industry experience and SQL skills over the person with SQL skills and Set Theory (Learning Set Theory does have an opportunity cost, you know).
Anyhow, my point was that there are vast areas where very mundane programming is done that don't require real math (good math skills always help though). So much of business programming fits into the business way of doing things. Like running something once a day that looks up a list of data and sends notifications to the people on that list. Simple, simple stuff that needs tobe done and can be done well by a plain coder. It is the coder that understands the business logic (hey, they don't need a notification *every* day, except in California where it is required by law, unless they are a private entity) that will excel. There are numerous positions for whole careers for these kinds of programmers. I tend to think of this kind of position as a translator, where his foreign language is "computer".
One little caveat to what I'm saying. I'm saying there is room for programmers who don't have formal math skills. I'm not saying having no math skills is beneficial. The fact is that the people who have what it takes to be good at programming tend to gravitate toward college and formal math. This means that it is uncommon for a really skilled person not to have pursued math. There is a glut of people without a clue doing the job right now that would disprove my point, if my point was "people without math skills make good programmers".
Re:Certain types of programming... (Score:5, Insightful)
I do enterprise Capacity Planning and Performance Tuning for big databases. (Anywhere from 100 to 1000 Gb) I cannot tell you how often poorly designed application architecture causes nasty performance problems, precisely because management thinks that anyone can connect a web front end to a database. Our typical developer has no idea how to optimize for db performance. The application owners don't like hearing you need to re-design your application, because we can't tune it any further. I am tired of telling them that throwing faster hardware at the problem will not help, as a faster machine will only choke the database harder. It is obvious to me that these "developers" do not have adequate problem solving skills to effectively do their jobs. Their code may be clean, but the application design is so poor that its performance will always suck.
Math (and all problem solving skills)are very important for a developer, otherwise one is just a code monkey.
Re:Certain types of programming... (Score:5, Insightful)
I don't completely disagree but there are a lot of issues; it's not just that there are professors who aren't interested in teaching. I'm an assistant professor in a math department. I teach numerical analysis to classes comprised of about 75% computer science majors and the rest math majors. There are several things beyond the control of a professor that can impact the quality of instruction. One of the biggest is that many of the students are not interested in the topic; they just want to pass to meet their departmental requirement for a numerical analysis course. Hence I get students trying to copy homework or codes. Just last week I had two students turn in spline code that was a bad C translation of Fortran code. I haven't hunted down the source but their codes were identical and neither student knew Fortran. Having to check for this sort of thing takes time and does not make it easy to teach.
To make matters even worse, the students put off taking numerical analysis until they are about ready to graduate by which time they have forgotten much of the calculus they learned in their first two years. In less mathematical disciplines, many students put off taking calculus and end up forgetting their high school math. And that's assuming the high schools did an adequate job preparing them for calculus in the first place.
And then there are teaching load issues. Math departments generally teach more courses than any other department with the exception of English. Everyone has to take some math. Proportionally we are overloaded with classes to teach. Further university guidelines on tenure are often not written to take this into account. Mathematicians at many universities are expected to write as many papers, get as many grants and supervise as many graduate students as computer science professors while teaching more courses. For some reason this doesn't always work even when the professor has the best of intentions.
The closest thing to a solution that I know of is to hire non-tenure-track lecturers to specialize in teaching calculus, college algebra, etc. That is already done at most schools but often there are rules about retaining such faculty. Even when they are doing a great job (and many do---teaching is what they do and they take it seriously) university policy can prohibit renewing their contracts past an arbitrary time (e.g. 3 years). This makes it difficult to maintain a staff of good teachers.
There may be professors slacking off but in my (possibly biased) opinion the institutional problems are more common. Students shouldn't be able to put off taking math. The universities should hire some portion of permanent faculty that is dedicated to teaching. And promotion guidelines should be written to reflect what the university realistically expects from both tenure-track and non-tenure track faculty in each department.
Possibly that's more griping than you wanted to hear about university politics...
Re:Here here (Score:2, Insightful)
Good point, although I'd say that a good portion of that 10% are engineers, physicist and chemists, who teach themselves how to code a fuzzy controller by starting from scratch (and being forced to interface with (gasp) computer science people to get it to work right. )
Re:Certain types of programming... (Score:5, Insightful)
Any programming at all involves math. The better you are at math, the better a programmer you will be. If you are not good with math, you will not be a good programmer. HTML and what most people do with PHP et al. is not programming - it is markup.
My CS degree required that I take Calculus I & II, discrete math, a statistics course (I took the harder of the two accepted for this, a 400-level math), and a math elective or two. I took a graduate-level cryptology special topics class for one of the electives - it was three CS students and about 6 math graduate students. At the end of the semester, the professor wrote a list of 3-digit numbers, most of them on the range [400,599], and said "This is a list of math courses we've covered at least half of in this class. Take them if you want to know more." There were about a dozen numbers on the list. My other elective was Calculus III, which I took concurrently with Crypto, across the hall, from the same professor. That was a challenge, as he made it extra hard on me in both classes (both because I'm good but also because I'm a smartass). He threatened to encrypt my Calc final.
At the very least, a programmer should have discrete math, multi-dimensional Calculus including working with series and sequences, number theory, linear algebra, and diff-eq (I regret not finding time for the last two).
Like I said - your abilities as a programmer are directly proportional to your abilities as a mathemetician. There's not a science you can study properly without using math.
Critical Thinking (Score:3, Insightful)
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.
Re:Coding ain't math, not any more (Score:2, Insightful)
However, I do think that the emphasis on Calc I,II, III and Diff-EQ should be dropped down to just Calc I and maybe Calc II. Like someone said "its the initiaition." The math from high school will help but if you are going to be an creative, innovative, and do I dare use it, efficient, programmer (not this dumb-downed Visual Basic crap), you need the Math theory. It may not be used much in today's realm but if you're doing challenging work in the game industry or getting paid for scientific research for instance then you definitely need that math.
I hate to say it, but the higher-level math (the Calcs) is like a preliminary for Grad School. If you do well there, then your school or others might want you to go to grad school if you did well in CompSci overall.
Sorry to digress, but yes, logic, intellectual skills, communication, attitude, and coding styles/examples/techniques are the key factors today. You can teach a humanities or arts individual to be an excellent programmer, but you shouldn't discount the "comp-math" (discrete, etc.) from the equation in the long run as it is an invaluable asset. Anyone can be a programmer, but very few are excellent "programmers" (developers) without the "comp-math" theory.
Try proof theory (Score:3, Insightful)
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.
Re:Certain types of programming... (Score:3, Insightful)
Are we talking about implementing database engines, or using them?
If the latter, then ideally the query writer should not have to worry about efficiency in execution. One of the alleged advantages of relational algebra is that the machine decides the optimal path, not the query writer. Queries ideally define WHAT you want, not HOW to get it. However, in practice the vendors bastardized relational theory and query languages. But working around these bastardizations is mostly learning the tweak patterns of specific vendors rather than any universal math. In other words, needed is a swamp-guide more than an engineer or raw math genius.
Re:Coding ain't math, not any more (Score:3, Insightful)
Coding may not be math, and Computer Science (which is what this is about, isn't it?) certainly isn't coding, but math *is* useful in the real world. If you don't understand that, you'll be doomed to never realize why some of the projects you manage fail.
Google vs. the Others (Real Math vs. Crapola) (Score:3, Insightful)
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'.
If you can't stand the math, get out of CS. (Score:5, Insightful)
As a minimum, I would suggest:
Go for an education, not just training!
Re:Certain types of programming... (Score:3, Insightful)
In the start-up that I am part of, we have had a BS-CS (me), a BS-EE, a BS-CIS and a CISCO/Novell/MS certified person. So what happened with all of these?
The certified person produced NOTHING. He was able to handle netwwork questions
able to tell about all the cisco equipment, buit nothing about juniper, dlink, or linksys (certified 5 years ago). Knew network protocols, but could not apply it. He is gone.
The CIS produced nothing. He was suppose to do DB (postgres) and code in perl/C/C++. He was absolutely worthless. He never produced one thing and never was able to learn anything new, even he attended several top classes paid by our company.
The EE produce about 100-200 LOCs that was directly relevant, but the code was sloppy.
He had great ideas and was able to discuss them, but could not (perhaps would not is a batter choice of words). He was awesome in a sale support position, but failed in a tech position. I would say that his math and personality helped him, but his understanding of software engineering was a disaster.
I just got done hiring several others. One was a certificate-based person, but we needed him only as a network admin/network sales support/lightweight sysad.
The other person that we selected was a CS who just got out of college several years ago. We hired him over a 15 year BS-EE becuase the EE lied about his background/knowledge.
He claimed that he was a embedded Linux person with years of experience, but did not know any shell or scripting language.
When asked about C/C++, he said that fork will (singlular) return a handle to a child process, but did not know what exec was for.
He only knew about ext2/ext3 FS and NTFS. Never heard of any other FSs (including reiserfs, xfs, jfs, cramfs, and amazingly nfs).
In his knowledge of IPC, he had no idea what signals, named pipes, pipes, semaphores, or unix sockets were, only FIFOs, shared memory, general sockets, and mutexes.
He failed big time.
Had he had a CS background, he would have at least had enough knowledge to fake it well. At best, this guy is a MS coder, but I think that he had been a manager for some time.
Re:Certain types of programming... (Score:4, Insightful)
And that's all bullshit. Believe me. I'm a computer science major, and I connect web sites to databases. Everything that you do in the business world (business apps, yada) has very little to do with pure computer science.
The closest thing to it is probably doing the DB work itself, and making sure that your tables are normalized, and that you have the keys / indices done correctly. Sorry, but everything in your list is basically just a concept in programming, which you can learn outside of the realm of computer science.
Re:Explain to me how thats relevant. (Score:3, Insightful)
Surely you can come up with at least three reasons why knowledge of (chemistry/biology/women's studies/poly sci) could possibly be imporant to a student working towards his degree in CompSci?
Real Geeks love math...posers hate it. (Score:2, Insightful)
Let's face it - you are not a geek if you can't prove L'Hopital's Rule.
Re:Certain types of programming... (Score:1, Insightful)
I'd rather hire the college-failure, too. You can pay him less for doing the job of a code monkey.
Re:Why is maths useful for computer scientists? (Score:2, Insightful)
Oh, by the way, any logic(ands, ors, or nots) appear anywhere in your code?
It's not *what* you learn... (Score:2, Insightful)
Re:Certain types of programming... (Score:5, Insightful)
If you can publish something you developed in a scientific peer-reviewed journal, it's computer science. If you simply put together something from prefab pieces, it is NOT computer science.
Anyway, saying that you need to know computer science to program a frontend to a database is like saying you need a degree in electrical engineering to wire up a house. The truth is, there are way too many people with CS degrees and not enough CS positions. But don't mix CS with coding. They are very far apart.
Re:Certain types of programming... (Score:5, Insightful)
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.
I think the new tendency in the IT industry is to have well-rounded people who can do a good technical job, but still perform passably at the graphic design and copy writing stages. I'm not just talking about Web Development here. Every area of IT is approaching this point.
As deadlines and Time-to-shipment get smaller, programmers are getting thrown more to the forefront of the development cycle. This means dealing with humans, whether it be through well structured language, fanciful graphic design or good interface design. A lot of people are still stuck in the "I'm a rilly good coder, I don need that language stuff aniways" attitude, and I believe that is detrimental to the industry as a whole.
Re:Certain types of programming... (Score:4, Insightful)
I once interviewed a guy who was pretty good with Oracle. Commanded a six figure income. When he found out that the offered project used SQL server 2000, he mocked our company, to our face and to the niche community we work for.
That's nothing to do with the point you were making.. he was just a vendor/method snob. Most Linux/BSD/*NIX people would similarly mock a company who used 100% Microsoft solutions. Most C++ programmers mock Visual Basic programmers. Most Oracle geeks would mock a company who relied on mySQL, and so on.
Come on, if you're suggesting SQL Server 2000 is in the same league as Oracle, that's just plain wrong. He shouldn't have been bagging on your company, that's unprofessional, but the fact he thought SQL Server 2000 was stupid was hardly an indication he was a moron.
Re:Coding ain't math, not any more (Score:1, Insightful)
The calculus based continous mathematics is a historical foundation of mathematics that flows naturally from algebra and geometry. But the more modern and less developed fields of discrete mathematics are far more important in computer science. Many math programs place the calculus sequence as in introduction to mathematics to force a mathematical way of thinking, but a discrete math sequence could serve the same purpose.
In fact, a sequence of discrete mathematics courses could easily serve as the introduction to mathematical thinking and calculus could be summarized into one or two courses later in the curriculum. Unfortunately, I don't know of any school, including my own, that does it. It's a matter of tradition and a desire to not be too radical that maintains the status quo.
Re:Linear Algebra and Calculus (Score:3, Insightful)
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+.
I wish that were true. I did all my homework for my math classes and really studied my ass off, and the best I could do in some of them was a C. I'm no math expert, but I guess it depends on where you went to school at and who your professors are/were.
Statisitics: Ugh. Mostly just plug numbers into equations and know what they mean. Not difficult, just boring.
Again, it depends on what you took. I had to take two high level statistics classes for my Systems Analysis degree, and I must say those were my favorite math classes by far. I called it "Applied Calculus". The first class covered probability, and the second class actually covered statistics. What I had thought about statistics before I took the class was more along the line of means and averages. Those topics were covered on the first page of the first chapter, then it took off. Really, I learned more about calc in that class than in my calc classes because suddenly calc became useful.
If I were to ever go back to school and get a different degree, I would major in Statistics.
Just my 2 cents worth.
Set theory is still needed for RDBMS coding (Score:3, Insightful)
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.
Re:Certain types of programming... (Score:3, Insightful)
Pretty much.
When it comes down to it, all a computer can do is manipulate numbers.
Here you haven't thought it through far enough. All a computer can do is manipulate phenomenon that we identify as electrons and through that manipulation cause a variety of other physically observable events. It is your mind that makes the numbers.
Computer science is about math yes, but it's not about computers, really. Those particular machines are studied more intently in computer engineering and software engineering.
It should be noted that most CS degrees do teach a lot of software engineering classes, there is a large intersection of material amoung the various computer oriented degrees.
not a troll but an opinion (Score:3, Insightful)
Disagree with Calculus Advice (Score:3, Insightful)
If you are not especially gifted in math, why not take calculus in high school anyway and then retake it in college?
Re:Linear Algebra and Calculus (Score:1, Insightful)
I don't have a car, why should I learn how to change a tire?
Why do you want to force me to learn something which is a total waste of my time?
And, I suppose, other people would have similar ideas about calculus.
Moral: Don't try and force your priorities upon others.
CS: The Slacker Course (Score:2, Insightful)
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.
Re:Requirements at some places go beyond that. (Score:3, Insightful)
Another required course is Programming Languages, which didn't go into enough depth but still required you to write functional programs (in Lisp), logical programs (in Prolog), and concurrent programs (in your choice of languages; I used C++ to save time).
Will you use most of these skills daily in a programming job? Not consciously, but they pervade your thoughts and you write better-informed code as a result.
Computer Lib (Score:4, Insightful)
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 [kenmusgrave.com] 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!
Re:Certain types of jobs... (Score:2, Insightful)
To be a good developer requires mastery of Junior High math.
You know about set theory (as did Dr. Codd), and you use it when you think about SQL. I don't know about set theory but I have a talent for looking at the world in the right way.
I agree that passion, dedication, [and] determination in relation to a scientific view of the world is required. But I had that when I was ten; it certainly does not take university level math to achieve that.