I came across an interesting discussion regarding the role math should in computer science on SIGCSE’s(ACM Special Interest Group on Computer Science Education consisting of CS professors) mailing list. A professor starts the conversation with (I personally bolded the important bits):
“I understand that discussing the role of math in CS is one of those religious war type issues… After 30 years in the field, I still fail to see how calculus and continuous math correlate with one’s ability to succeed in many areas of computer science… I have seen many outstanding programmers who struggled with calculus and never really got it. I also constantly see how what I consider to be excessive continuous math requirements in our program (calculus 1, 2, and 3, plus linear algebra) stops students from entering computer science…”
and goes on to say…:
… if one never goes any further into the field, one can make a huge societal difference in areas that require basic programming skills but nothing more, such as computer-human interaction, social networking, web programming, IT, and many business applications. If one later gets interested in computer graphics, scientific computing, certain aspects of gaming, image processing or many of the other areas of computer science, then by all means one needs to obtain a deeper understanding of math. But I think we kill much of the joy of programming by trying to conflate programming with math. I think we also scare off many students who could make valuable contributions to computer-related areas.
This debate really hits close to home for me and should for any other computer science undergrad who dislikes or has a hard time with math, but should also be of great interest to anyone thinking about majoring in computer science. I have a love-hate relationship with math, I love math for its uncompromising truthfulness and the beautiful way it unravels seemingly impossible problems (I know that sounds really cheesy but it’s the only discipline I can make this statement about) but hate it because I’m terrible at it (it’s really interesting how shocked people are when I tell them that, I’ve really come to enjoy breaking that stereotype).
It’s interesting how the debate centers around the importance calculus, since that’s the class I took the first semester of my freshman year that caused me to promise myself to never take a math class again (Unintentionally broke that promise when I took what I thought was a statistics class but was cross listed as a math class). I can’t explain what happened and it still bothers me to this day, it was the first time that I wanted to be really good at something and failed. Nothing was intuitive or came easily, frustrated and irritated, I didn’t end up understanding much nor did I want to understand about half way through the semester (I paid for that stubbornness with a couple hundred basis points off my GPA). As someone whose first subject of curiosity was the computer and the world wide web when it was introduced to it by his father back in the mid 90′s , whose constant since early childhood (before and after he had friends) was the computer, it is terrifying and shocking to imagine that if it wasn’t for my father I would have easily been the archetypal “programmer who struggled with calculus and never really got it”, someone who may have given up the pursuit of computer science due to fear of math.
Although I was determined to study computer science and pursue it as a career well before college, as a first semester freshman who was also captivated by economics (although to a much lesser degree than computer science), that calculus class made me seriously consider dropping the economics major. My first encounter with economics as a freshman in college left a bad taste in my mouth even though I haven’t even been exposed to the actual subject yet, and I realized that and gave it another shot, the very next semester I cruised through both economics courses for which the calculus class was a perquisite for (thought I’d add I’m doing quite well with my computer science major despite my lack of talent or interest in calculus). And that’s what really bothered me, I felt cheated and bitter because I didn’t end up needing 95% of the content in the calculus prerequisite to excel at either major. Furthermore, the 5% of the course that was relevant to my economics major was not taught using the method that is used in the practice of economics, so I ended up learning the new way anyways (still have yet to figure out why calculus is a requirement in computer science and hoping it will stay that way).
I can understand why the economics department can justify the calculus requirement since there’s an overabundance of students at at my university studying economics(there’s no finance major so it’s the closest there is to studying a subject that’ll get you on Wall Street) and it helps weed out the students who don’t care much for the actual study of economics (which does require a firm understanding of specific subsets of calculus) but I don’t understand why our comparatively tiny computer science department (which can definitely use more enthusiastic computer science undergrads) setting such a useless and intimidating course for many as a major requirement. I am by no means stating that either math or calculus are useless in computer science, just that there is much more computer science than math and that one does not need to be good at math to become a successful or great computer science graduate. Before attempting to support my previous statement I will to present a few excepts from the discussion regarding the relevance of math in the study of computer science to establish some context for me to build off of.
In my opinion, there was only compromising supporter for retaining the emphasis on math in the computer science curriculum and it was in response to another professor’s comment, which I believe was taken out of context:
> Without a mathematical perspective, software development is just throwing code at a problem because it “feels right” and then hoping that eventually the thing works. – source message
Well said Jim, succinct and clear.
If we are simply training web developers, then the math is not needed.
But if we are preparing well rounded, complete, and competent software professionals, or potential grad students, then math is required – both some calc and especially discrete.
I’m trying really hard to refrain myself from jumping in now and tearing this statement apart, but I think it’ll be very helpful to present some more balanced/nuanced views first.There were some very insightful assessments on the relationship between computer science and math, most of which I wholeheartedly agree with. However, I believe there is a much more significant overarching conclusion that can be drawn from the aggregate of these statements, but I’ll present their assessments unmolested first, highlighting (doesn’t count as molesting in my book) the portions that epitomizes the major points the entire thread (definitely worthwhile to glance through on your own):
Note how the this professor was hesitant to outright state the trend of academic to applied computer science (by prefixing his statement with “As I see it”):
I think a fundamental issue here is the difference between computer science as an academic discipline and applied computer science (at least a part of which is sometimes called software engineering) as a profession. As I see it, few applications of computer science and even fewer jobs associated with applying computer science (and thus few software engineers) require much knowledge of continuous math. However, when considered as an academic discipline, many aspects of computer science invoke continuous math. If you are going to be a CS researcher, you need continuous math. If you are going to apply CS, perhaps not.
For too long, we have taught computer science as an academic discipline (as though all of our students willgo on to get PhDs and then become CS faculty members) even though for most of us, our students are overwhelmingly seeking careers in which they apply computer science.
Definitely agree with the importance of knowing how to think mathematically:
The aspect of math that I think is important for all computing professionals is “mathematical thinking”–willingness to see the world and pose questions about it in mathematical terms, willingness and ability to use mathematical models or methods to answer those questions, ability to use logic even if semi-rigorously and only in one’s own mind to convince oneself that an answer is correct (oops, that’s getting awfully close to the “P” word
, etc. These aren’t unique to any subfield of computing, they are elements of rigorous thinking that are tremendously helpful when dealing with any sort of complexity or abstraction (both of which are rife in computing, of course).
There’s nothing inherent in continuous math that makes it the right place to develop these skills; there’s no reason continuous math couldn’t develop them either
Similar idea as above but the point regarding the speed of change of technology is definitely valuable and also really like the seed analogy
We can’t anticipate the domains the students will work in. The world changes too fast for that. None of the technology I see all around me all the time was here for the most part twenty years ago. What was here was much more limited in its abilities. What students gain from both discrete and continuous math from finite state machine theory, etc. is conceptual models of relatively great power which can form a nucleus of tinker-toys to inform their imaginations. Often, the well prepared student can use these as a foundation for his own innovations. Lacking that foundation of mental building blocks he’s at a substantial disadvantage.
The biggest problem is that we don’t do nearly enough to model the usefulness of underlying mental models. A larger emphasis on numerical methods, finite element models, illustrative examples that build on underlying kernels … I suppose I ought not to criticize since I’m as guilty as anyone else of letting someone else do it. But I do think that the functions of many of these topics is to populate the mind with fertile seeds that can grow and for that to work they must be fecund and rich to begin with and the supply of those is rather limited.
Interesting point regarding the ability for the faculty to teach in a non-mathematical manner:
And let’s be honest about another aspect of the problem -what can the faculty teach? For a variety of reasons, a typical CS faculty consists mainly of individuals who specialize in CS as a discipline, often with strong mathematicalbackgrounds. How many of them could teach a good course in cloud computing or multi-core systems or software engineering or any of the many other topics that the graduates will find useful when they graduate? Are such courses always relegated to instructors or adjuncts or other non-tenure-track faculty? (This is what I’ve seen frequently while doing accreditation visits.)
Think it would do the computer science majors to take classes with and associate people whose primary interest is something other than computer science or electrical computer engineering and statement regarding higher level tools is definitely something I want to touch on later:
… not everyone is interested in studying theory, and maybe we should be happy with a smaller group of majors that want to learn/develop the best ways, rather than trying to get more and more not-so-sure students to become CS majors.
In some ways, the success of CS has made computing more available to non-programmers. e.g. Solving problems using spreadsheets and Matlab and other tools that are designed to not require detailed CS knowledge (of say, hash tables, etc.) to use. Students that used to be CS majors because that was needed to compute, can go to other majors, such as Biology, etc. and compute using those higher-level tools.
To summarize the entire thread (I took great care (ok maybe not great but some) to avoid injecting my own opinion, hopefully the list below will be a faithful restatement the fundamental points of the discussion):
- There are ambiguities regarding the definition of computer science. It is no longer clear what it is or what it should be but it does seems that the general consensus on an abstract definition includes applied computer science outside of academia.
- Even though computer science is not just an academic discipline anymore but continues to be taught as one.
- There is a significant difference between applied and academic computer science, there are many applications of computer science that do not require extended mathematical abilities.
- Computer science is a rapidly evolving discipline, much more so than most other disciplines, and special care has to be taken to ensure that education of computer science does not lag behind the field itself as it expands.
- The underlining models of computer science should be the focus of undergrad computer science education since that’s a skill that will continue to be valuable over time.
- Mathematical knowledge or concepts are important for computer scientists not only because of the direct application of math in practicing computer science but more importantly because of the fundamental abstract and analytic thinking skills math provides.
- Although math encompasses many attractive qualities to develop the thought process of a computer scientist, it is by no means the only (or best?) way.
- The well established link between the math and computer science curriculum are intimidating potentially valuable and capable students from entering the field.
Unfortunately I have to end on this note since I really need get back to trying to start on my philosophy paper, it turns out that the introduction to the rant I wanted to write contains quite a few interesting points that deserves some attention before I pollute this clean, orderly discussion with my own opinions. To be continued…
P.S. FYI, this is the first post on my blog in more than a year, hopefully the sheer length of this post makes up for my absence (it’s like a lump sum of 100-200 word blog posts every month for a year)
UPDATE : Received some interesting comments on hackernews that I took some time to respond to in order to better explain what the purpose of this post was.
UPDATE 2 : Slashdotted also… after glancing through the comments it seems that I wasn’t forceful enough in stating the fact that I don’t think math is useless in CS but rather that the way it is being integrated in to the curriculum at most U.S. universities is very flawed. Didn’t really present an argument myself here just some personal anecdotes and my impression on how it is viewed within the C.S. education community (also assuming that most Slashdotters didn’t get far enough where I actually implied it considering that the average time spent on this page is 41 seconds and I can speak from experience being a Slashdot addict myself). Fully intending on following this up with improvements to the C.S. curriculum I think would make the subject more interesting to a wider range of students while also not abridging the development of analytical skills that are fundamental to the development of a computer scientist.
23 Comments
I see no ambiguities with regards to the Applied/Academic dichotomy.
In my mind, CS is and should be an academic pursuit coupled with a strong mathematical background. CS is about understanding the underlying principles of the what, why and how of computation. A couple of kids from Stanford didn’t create Google because they blindly hacked something together. Seriously, check out their paper on PageRank.
A well-understood analogy is the difference between physics and mechanical engineering: the physicist seeks to advance knowledge of the principles that govern our universe, the ME applies that knowledge in practical applications.
A similar comparison should be drawn between Computer Science and Software Engineering.
I’ve always maintained that students solely interested in learning how to program should be enrolled in a Software Engineering associate’s degree program, not 4-year Computer Science. It would be a practical rather than theoretical education.
Just wanted to point out that it was my original intention to express a more nuanced view regarding the role of math in computer science both in industry and academia but decide to save that for another day after I realized the professors’ arguments were very interesting on their own and that they deserve to stand on their own.
Part of the reason I went through such great lengths to analyze the multitude of arguments from the entire thread was to point out that they were missing the bigger picture, which I’m hoping to discuss in a later post.
Also wanted to point out that top U.S. universities do not offer associate degrees in software engineering, in most cases it’s a course or two lumped under cs; if you want to go in to software engineering you must go through the cs curriculum that is related/implied by my last point where the professors were concerned that just the image of computer science as a mathy subject scare students away from participating in the computing industry.
I started out as a mathematician (symbolic logic) but ended up in databases (SQL) by way of expert systems (Prolog). Mostly, I don’t need advanced mathematics to code, but when I do it’s a life-saver.
However, I believe that advanced mathematics encourages better programmer for other reasons:
1. Self-confidence (programming is much easier)
2. Improved coding (eg. more respect for rigor)
3. Appreciation for new approaches (eg. graph theory for integrity checking)
4. Ability to formulate the core problem one needs to solve (ie. distilled to its essence)
A mathematician will always be good at programming, and my advice to students is to avoid CS early in their education (do the hard stuff first).
It has been my observation that strong mathematicians make some of the worst programmers if you actaully have to make them work with other people. The programs work very well but are utterly unreadable. They are so comfortable with compact notation they use meaningless names for functions and variables and little or no commenting. They don’t play well with others.
So far what i’ve seen most math majors are not good programmers. It doesn’t seem to make sense to me but yea. Most CS graduates can do anything you throw at them if they’re sufficiently interested.
If all you are doing is implementing features, cranking out code day to day, then you don’t need the math. However, if you need to understand WHY your program behaves the way it does, what the next batch of scalability issues will be, then you will need the tools provided by calc, stats, linear alg, and theory of computation. From personal experience, using these tools has helped me convince the other members of my team of the severity of the issues we are facing, without the proof to back my statements up, it would have been “I feel” instead of “it is”.
I have a degree in Math, a degree in Economics. I like Math enough to read math books for fun. I also code and do systems adminsitration for a living. I write Ruby for the backend for a large comic strip syndicator.
With my background out of the way, I’m just going to explain how my math background helped me. Going through a math proof is much like reading someone else’s code. Going through the practice of reading lots of proofs, writing lots of proofs and having other people tell you a) how to think about a problem and then b) having people tell you what is wrong with your reasoning/exposition is extremely helpful. In my opinion, the process of writing good code, in so far in terms of style and diction, is not dissimilar with how good proofs are authored.
Now the process of teaching computer programming is much better done, IMHO than the process of teaching mathematics. In undergraduate mathematics, proof orientated classes are few and far in between, especially in state schools, stressing mostly in computation and chugging out numbers. In math and in programming, your exposition is the understanding. In math however, showing your work only goes so far unless your work shows how the results in the classroom are derived. I didn’t start learning how to do mathematics until I ran face first into a graduate math class teaching analysis when i was a junior. I was ahead of my requirements schedule and decided to check out this specific type of math with a friend of mine.
The issue with me, pertaining to mathematics and university education, is that there is both a magnitude element in terms of the allotment of hours that one has to fulfill, as well as a myriad of vector components pertaining to the choice of material, the choice of exposition and the results one hopes to attain after finishing these classes. Calculus’s fundamental idea is the limit. You get the idea of the limit and every other idea within calculus, i.e. continuity, integration and derivatives drops out pretty quickly because they are all expressed in terms of the limit.
However, the mathematical formulation of particular ideas has very little to do what they are used for, in fact, I can do derivatives and follow the product/quotient/product rule all day without really having to know what it actually means, but I can most certainly solve physics one problems if I follow the steps outlined in class. The conflict here is that there is a finite amount of time in America where people want to spend learning the pre-requisites, and there is a tremendous pressure to keep the high school curriculum in public schools to be more difficult and time consuming. There is a push for engineering students to learn certain mathematical computations when they are in the formative years, and since the CS program is now firmly attached to the engineering schools for most universities, CS students have to learn how to do computations that other engineering students do. However, it is probably much more helpful for the average CS student to study more mathematical constructs and learning how to write proofs, such as combinatorics and algebra, before hitting up discrete math and studying data structures. The finding of the curl of a field or being familiar with polar co-ordinates and switiching back forth to the descartean ones or finding volumes of shapes is probably not as important, in fact with a strong background in undergraduate/first year analysis from Rudin. I think it would probably set up a good staging point for students to go on and learn these computations themselves if they choose to. Which is, in the end, what the whole point of the four year degree is about.
Well. Having been a sysadmin, DBA, Data Architect, Systems Engineer, Computer Hardware Engineer (in the supercomputer field) and now a manager of such I can say that the only place I needed any significant math skills was when I did hardware design. Not a CS based profession, that’s pure engineering; research and applied.
I can also tell you how well all of these educated comp sci students that I see can’t figure their way out of a real world problem. Many have no grasp of basic analysis processes, smart guys, completely useless skills. Oh and that is global in nature particularly in countries place all of the emphasis on the academics of how and little on understanding why. Don’t teach me what the solution is tell me how to derive it and I can figure out the solution for any problem.
So tell me again why anyone needs to understand calculus in order to do the job that computer programmers, developers and support need in the REAL WORLD today? I contend that based on decades of real work across global technology companies in the US and abroad that math skill have no purpose to understanding why a program is broken. Systems Analysis, period. (Oh and I’m not talking about the watered down material that goes for systems analysis today)
Mathematics doesn’t tell me how to troubleshoot a program, that would be a different skill set called scientific principle. Troubleshooting skills in any field are not related to how well you can do math it’s how well you can do systems analysis; a course of study that is almost nonexistent today. You want to require math then how about some symbolic logic / boolean math? Thinking math not rote calculator math.
So what use is any significant mathematics coursework for an under graduate student? Based on REAL WORLD applications, little to no use. You want to go into a graduate degree or do research then fine add it then.
If math skills allowed you to troubleshoot why a web page or network is broken then why are so many computer professionals completely undone by basic auto mechanics and home maintenance? Systems Analysis, if I understand how it works then I can figure out why it’s broken. And most jobs don’t require you to redesign a Cisco router or a Sun Server.
The problem is that software development and computer science are huge fields that tackle a wide variety of problems. It happens that in your career path you’ve never needed any terribly advanced mathematics. I ended up in bioinformatics and use linear algebra and calculus frequently. Other folks go into areas like speech recognition and machine learning, both of which require sophisticated mathematical models which you are not going to be able to work with unless you have a background in calculus.
Most programming jobs don’t use much more than business math, but they also really don’t use much from any of the topics covered in the last two years of a CS degree, so why focus on just the math aspect? Your typical DB wrangler is not going to use what they learned in their compiler class, and your typical embedded programmer is never again going to worry about third-normal form. Most folks entering college really have no idea of what kind of job they want to end up in, even if they think they do. The purpose of a college degree isn’t just vocational training, it’s to give you a broad exposure to the field, so you can see the range of possibilities and then make an educated decision about what you want to do with your life.
Exactly! MOST programming and computer software related jobs don’t need any of the material that is required to complete a CompSci degree. Unfortunately they don’t require the material I need to do the jobs I have open (and I believe that goes for the industry as a whole).
What the business world needs is more people who understand software and can think their way through a problem.
If I’m building a system to do machine vision I am not hiring anyone with a BS degree. I’m going straight after post grad education that focuses on much much more than is ever provided in any undergrad program.
And no one is going to come out of school and know what they really want until they’ve actually worked in the field. Why? Because we (universities) don’t expose them to anything real world; unless you consider academia as real world. And I contend that most instructors are trying to justify their own choices and produce more people just like them.
And that is why I end up having to go offshore to find the people who can do the basic jobs that are needed. And that is why if I find someone who did excel they are going to leave in a year, maybe two, because they are bored to tears.
What is the purpose of school if not to prepare you for a way to earn a living doing something you like?
The mathematics courses were the primary reason why I ended up switching from a university and ended up finishing at a trade school.
Had an interest in software development and had been writing programs since my early teens.
In High school math was not my strong point. Did well in Allegra but struggled and barely got by geometry,precalculus. Over the summer took another precalc class a local community college to better prepare myself. Was able to get into a good university that had a great engineering/computer science program. The computer science program courses sounded interesting mainly the higher level courses but never was able to get that far.
At the university retook a precalc class to be sure was able to handle it and passed the class.
Next, came calculus. None of the calculus classes ever clicked with me. Did not do well was able to get a tutor which helped me barely pass the class. After that came Calculus II which was not able to keep up since barely was able to understand the first calculus class. Ended up dropping Calc II and retaking Calc I again.
In the same time was taking Discrete Math. I just found it very abstract and the language and wording used was not able to wrap my mind around it. Had a study group to help with the class and my roommate was in the same class. We both ended up dropping it and then taking again the next semester. I was barely going to pass it the second time. At that point I decided the university was not going to work since it would my hurt GPA and the math courses were going to get more difficult as time went on.
Which was a shame I enjoyed the university, my general classes, and more importantly making connections with other people for projects/ideas etc.
Thinking back if computer science would have been explained a little bit more for me. I more than likely would not have went to the university but at the same time all the real jobs require a four year degree with computer science experience. I mainly wanted to go the University to write better software/programs and gain more structure from having real classes instead of following online code examples/books. I remember going to the Dean saying the reason why I was leaving was I wanted to be a computer programmer and I do not the university think offers me a chance for that and they said that was true. At the university felt it was more for researching/theory/math which I was not into at all and did not really apply for any of the projects I was working on or would work on.
Long story short ended up getting my degree at a trade school which I felt was the best decision that I could make at the time. Had job right after finishing and moved my way up to the lead developer of the system over a period of years. Met all sorts of people over the years in school and at the workplace. Generally grouped into the following: people doing it for the paycheck, people who have no idea what they are doing, people who enjoy writing software.
Group myself in the enjoy writing software category. I go home and enjoying working on projects and solving problems. Contribute to open source projects, develop commercial software, and run a software as a service company. I try to keepup and follow the technology news and not willing to give up until a solution is found.
For people in similar situations do not give up writing software if you enjoy doing it. There are other options and plenty of opportunities out there. We need more people writing software and their more opportunities than ever.
Seriously? All those points are obvious to any CS student after one semester. The only reason this does not change is because professors need to teach. They don’t want to, but they need to.
The reason you still have Calculus is because there is a ton of math teachers who needs to teach classes in order to be able to continue their researches (or just to get pay for those that don’t do research). A very a good portion of those with math degrees end up in academia. How do you feed all those people? By making them teach classes to the most people you can.
Nevermind that a CS student would be a lot better learning calculus from a CS teacher, no, you learn it from a math teacher. He will make you prove that lim (x->0) x/x²= 0 by the definition and make you thank him for it. Why? Because if Newton did it, so should you.
I do think that calculus/math is an important part of CS, but the way they teach it is so completely wrong that passing the class or not it makes absolute zero difference to anyone not going to academia (and even to those only a tiny fraction actually need it). I think I could teach a CS student everything they need to know about calculus in two days, really. Well one more day for a test I guess, add one more day if you want movement physics in to show some application to all that stuff.
This is also impossible to change. Math teachers need to teach someone, if they let a major get away with math classes taught by their own soon everyone will want too and then they will get less funding for their researches, hiring, etc. The math department is fueled by all those “lesser” disciplines that use math someplace, somewhere. The CS department are a bunch of people who liked that math and probably do use it actively and do have a valid reason to want their undergrads to learn it too, that is if the undergrad go to the same career they did (pro tip: they won’t). The system is so rotten that in most countries colleges NEED calculus in the degree somewhere to be able to grant people with CS diplomas.
In my college (University of São Paulo, São Paulo, Brazil, campus São Carlos), in special we have a very strong (read unforgiving) math CS course. For the first 2 years we have more math than other stuff. The main reason? The CS department is part of the math department. The main complaint of my fellow undergrads? They spend so much time studying math that they can’t even enjoy all the CS stuff, if they need to skip a class to go to the doctor they will do it on the data structures class, not the calculus. If they need to study for the discrete math class they will make their digital logic work the fastest possible (or leave it to someone else of the group). This is so widespread here that one of the main reasons that employers like people from my college is because we survived all the math which means we are at least smart enough to pass and not lazy enough to quit.
Now if you excuse me I have some integrals to calculate on my saturday night, I have a test monday.
I see the issue as being divisible along maybe 3 dimensions:
1) Computer science is a big subject, but to earn a BS in the major, you must demonstrate competency in the central threads, which are invariably conceptual, theoretical, and yes, mathematical. Thus while mathematical rigor should then be part of any computational scholar’s development; the question remains: what form of math?
2) The theory of computing generally falls neatly into one of two domains: continuous quantities which are digitized and then number crunched, or categorical abstractions which are represented as discrete symbols and compared, resolved, or stored/retrieved. Continuous vs discrete math are respectively used to model these domains, but in my experience, seldom do they intersect, nor do the practitioners of either domain often interact. It’s problematic then to imagine that both of these goals can or should be served by the exclusion of either forms of math. But it’s equally unproductive and unfair to the students to compel both of these camps to satisfy the same theoretical and mathematical prerequisites.
3) If someone earns a BS in CS, and masters only the discrete theory, they will be professionally less competitive with others who were not so limited. This is likely to become increasingly an issue as more and more professional programmers arise offshore and absorb the less demanding jobs. Likewise, I’ve seen a rising trend in the software profession toward jobs that use or soon will use advanced techniques like machine learning, signal processing, statistical analysis, pattern recognition, and so on. To leave yourself unprepared to acquire competency in these subjects is to risk being left behind by the competition.
Perhaps the first step is to define CS more precisely, either as part of an engineering curriculum which includes a grounding in continuous math (perhaps a BS in CSE or EECS), as part of the arts and sciences which stops after discrete math, probability, and perhaps linear algebra (a BA in CS), or part of the business school (a BA in Info Tech).
Interesting topic. I began much as you did Dean. But in recent years, as I wanted to explore new application areas, I found that my math skills were often unequal to the task (scientific computing, image processing, DSP, bioinformatics). It’s been an uphill battle for several years now to correct that oversight. It’s definitely easier to learn theory earlier while a full time student than later, self taught from a textbook. Good luck.
In my opinion the question whether continuous math should be covered in depth in CS courses is too specific. The real question is whether the role of university courses either pre- or post-grad is to prepare students for the job market or to help them advance science.
Exactly!!!
School is where you learn things.
My solid state physics professor considered engineering school to be a place where people not good enough (in whose opinion?) were filtered out. He specifically said that the reason he couldn’t allow time to both comprehend and take notes was that he spent 15 hours a week preparing for out 1 1/2 hour lecture. Hmmm so a Phd spends a factor of 10 in time to instruct an undergrad and considers he is successful if people fail. This has not been an aberration in my experience.
Software engineering is applied mathematics like any other engineering, and so practitioners need a good basis in mathematics. What kind of mathematics is a different story; yes, much more training in discrete mathematics should occur in secondary school and in university. Given that there’s is much more continuous math training, whatever instruction there is, it is also a screening process to see who has general mathematical ability and it’s the current screening process we have. I’d rather have a programer who did well at engineering level calculus, even though calculus itself, is totally irrelevant to computer programming, than someone who could not. As an analogy, I’d rather have a lawyer who did well in their philosophy undergrad classes than some one who did not.
Uhh the topic is Computer Science not Software Engineering. They’re different, and yes an engineering based subject requires mathematics. Computer science is not an engineering subject it’s an exposure to software development and critical thinking.
A university is not a screening tool it’s (historically) where you went to learn something.
So if I need someone to do heavy mathematics based programming should I seek a programmer who knows math or a mathematician who can program? If I feel that I need someone who is the best of both then why would I not look for someone who majored in one and minored in the other?
To paraphrase your words if calculus is irrelevant to computer programming then why not replace it with astrology; another irrelevant subject?
As an analogy I’d rather have a lawyer who did well in their law classes and who could think logically. I could care less if they knew philosophy or basket weaving. I would be hiring them to practice law not sit around and have a conversation over cocktails.
So are we preparing students to compete in the real world where most of what they do is not research based? Or do we bludgeon them into keeping tenured professors fed?
I have been arguing for a non-mathematical approach with my blog for the past year. I believe we need artists in the field to solve the software complexity problem. Math is good for algorithmic development (AD). How many people are doing AD these days? We need people who are good at modeling problem domains.
AMEN!
If the math is not your thing, switch the business college. They have a lot less math than the engineering college. Even if your goal is an engineering Masters, I would urge you to consider another college for your undergrad. The work load and extra time to mature are very import to many people.
Celebrated CompSci majors are mostly those with great ideas, or those credited for the ideas. Being a great programmer is not required or often a quality even present in these people. You will frequently find qualities such as, foresight, persistence, right place at the right time etc.
Programming on the margin is increasing something that is being done in the low cost countries. We should not cheapen college education into low wage vocational education. Some day the Von Nuemann architecture / Turing Machine may not be the most appropriate model for CompSci major to study. Today however, especially if your goal is to be a programmer, it is.
Calculus is just not that hard. Put in your work. Get an A if you can. Otherwise, a B should be possible for most with appropriate effort and work habits. Then move on and find a great idea.
Oh your so right. I had to do that even though I never use it so you should too.
I’ve got news for you the low cost countries make their CompSci undergrads learn math too. They should be spending their time learning something more useful to the average business. Maybe some architecture and theory rather than mathematics that almost none of them will ever use.
Again I have to ask. what are we training these new undergrads for? What kind of jobs? The bulk of the work skills needed can be done with a little tweak to CompSci. Give up the high level math and get on with analysis. Leave the heavy lifting for Software Engineering where it should be. After all we do just fine with Physicians Assistants, not everyone needs to be a doctor and few of them need to do research (at least they better not be when I’m the patient).
Thanks, you have a great blog here! I’m definitely going to bookmark you!
I found a Autism App site. It pretty much covers tech. related topic.
Come and check it out if you get time.
that for must is educational in the word
MTECH COMPUTER
One Trackback
[...] want to subscribe to the RSS feed for updates on this topic. theodp writes “Worried that his love-hate relationship with math might force him to give up the pursuit of computer science, CS student Dean Chen finds comfort from an unlikely source — the postings of CS professors [...]