Hi Monks,

Just a couple of thoughts...

Why is it that most books on algorithms use mathematics to explain the underlying concepts? Are there no other way of explaining the concepts?

A while ago, I saw a job ad in the paper looking for a Programmer with Perl and MySQL experience. A couple of weeks later, the same ad appeared but this time round, the requirements say: Degree in Computer Science or Mathematics.

Any thoughts?

Update: Thanks to all for the sharing :)

Replies are listed 'Best First'.
Re: Mathematics eq CompSci
by tilly (Archbishop) on May 02, 2005 at 05:20 UTC
To understand the performance of algorithms, you need to count how many steps the algorithm will take to come up with an answer. People tend to think of that kind of counting operation as math.

There is no way to convey the concept of how to calculate the efficiency of an algorithm without actually going through how to count operations. In that sense the concepts are math.

That said, you certainly do not need to master all kinds of advanced math to be able to handle this kind of counting. For instance expertise in differential equations will not prepare you to understand why a quicksort is on average better than a bubblesort, and why a mergesort has better performance guarantees than quicksort, even though its average performance is worse (if all memory is equally fast to access).

That said, you certainly do not need to master all kinds of advanced math to be able to handle this kind of counting. For instance expertise in differential equations will not prepare you to understand why a quicksort is on average better than a bubblesort, and why a mergesort has better performance guarantees than quicksort, even though its average performance is worse (if all memory is equally fast to access).

Indeed. One might even go so far as to say that what most programmers do does not require this math at all as one is mostly selecting from a set of prewritten libraries (and thus algorithms) whose properties are reasonable well known and documented. For instance those writing software that is heavily DB based probably will never consider what sort algorithms are in use as its handled by the DB. And those that do need to use sorting algorithms rarely need to self-determine the algorithms performance as some clever math type already did it and wrote it down in such a way that we can make educated choices without requiring the math skills. Of course if you dont understandthe underlying principles you end up making bad decisions.... (Like maybe there are circumstances where its better to use bubble sort, or where using splays is extremely inefficient....)

---
demerphq

One might go so far, but I think that one would be wrong.

I've solved enough real-world performance problems due to subtle algorithm issues that I firmly believe that there is real value in being able to estimate scaleability. Furthermore if you ever want to have hope of treating databases as more than magic black boxes, you'll need an understanding of algorithms to see how they work.

Re: Mathematics eq CompSci
by Zaxo (Archbishop) on May 02, 2005 at 05:30 UTC

A survey of research papers in computer science will pretty quickly show that formal computer science is high mathematics. The methods and standards of proof are identical, modulo the techniques and concerns which distinguish C.S. as a seperate branch of mathematics.

Many of the courses for an undergraduate degree are likely to concentrate on the results and applications of research rather than the higher formalism. That is the advantage of those courses for programmers and designers.

Either degree allows one to assume a competence in formal logic, which is IMO the essential skill for programming.

I imagine that the change in requirements was forced by getting no educated applicants with the original tight buzzwords on their resume.

After Compline,
Zaxo

Either degree allows one to assume a competence in formal logic, which is IMO the essential skill for programming.

I learnt formal logic (and used it a lot) in philosophy at uni; half of epistemology courses were actually formal logic courses. Though we never did anything computer-related...

CS isn't the only way! :)

Re: Mathematics eq CompSci
by BrowserUk (Pope) on May 02, 2005 at 07:15 UTC

I think that the mathematical symbolism used in the description, exploration and characterisation of algorithms from a formal CS perspective is frequently unhelpful.

Besides that characterising one algorithm as O(log n) and another as O(n) often completely obscures that the former must be implemented at a higher, less efficient level than the latter, such characterisations often have unwritten (or legalpoint) riders like "in the general case", "given equal speed memory access", or "ignoring cache coherency".

They also almost always assume unbounded, constant performance, memory; generalised (often properly random) datasets; and idealised, uniform, single-tasking operating environments. The real-world constraints often include bounded-RAM with much slower secondary storage sourcing and spillage; biased datasets with reducable, non-influencing commonalities; and pre-emptive, multi-tasking (and multiplicitous) operating environments with unquantifiable coexisting & competing demands.

Whilst some of the more CS-favoured algorithms (sorts, shuffles, searches etc.) have been studied in depth for the influence of things like cache coherency, these studies again often make the preassumption that the hardware running the algorithm is entirely dedicated to the running of the algorithm. Once you place that algorithm onto hardware that can, at any given point in the algorithm, completely destroy the cache conherency by task switching to an entirely different process, most of the benefits extractable by tailoring the algorithm to maximise cache coherency go out of the window.

Even when programming at a level where the effects of machine level "built-in" routines versus high-level user-coded algorithms does not mean a ratio of 10s or 100s to 1 performance advantage of the former over the latter (Perl), the percentage of code written that actually fits into that set of well-analysed algorithms is very small, maybe 10% to 20% at best.

Most real-world code is dominated by interactions with external events. User inputs, shared devices and databases, chaotic networks and the omnipresent contention for cpu and other resources. Whilst we all benefit from highly tuned sorts and tree-traversal algorithms when we need them, the benefits derived from their tuning, in the reality of our tasks spending 50%, 70% or even 90% of their time task-swapped or waiting on IO, is usually much less than those ascribed to them via intensive studies performed under idealised conditions.

And to answer your question. Yes, it is possible to describe algorithms without formal mathematic notation, though these tend to require much more careful, wordful construction. One of the benefits of such wordful, less specialist construction is that more minds are likely to see the flaws. The problem with formal symbolisms is that they tend to become more and more specialist as they evolve to deal with higher and higher levels of abstraction.

Whilst many thousands, maybe 100s of 1000s have read much of Knuth's tomes, the percentage of those that really understood his notations is much less, and many of those that did are only writing code in academia.

Just as there are only a handful of people in the world that will ever see the flaw in Wiles proof---if there is one. It falls to a pretty select group of people to find the limits, flaws and constraints on Knuth's work. Beyond the typos that he pays a peice rate for, I wouldn't mind betting that he personally has made more corrections to his own work than all the informal users of it combined.

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about question the status quo. Questioning authority".
The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
I've seen plenty of mathsy comp sci that was very much rooted in reality. A good example was a graph search algortihm for searching graphs which require 10 of gigs to store (DNA matching is one practical example). This algorithm took into account disk speed, memory speed, cache speed etc.

Many researchers developing these algorithms are also using them too. They can't ignore reality.

As for using symbolism. It's quite like the difference between talking about writing a complex program and actually writing one. It all seems so simple when you start but when you get right down to the details of what do I need to pass to ths function and where will I get it, you start to hit problems that you didn't see before. Similarly, analysing an algorithm mathematically and symbolically (hopefully) prevents you from skipping any details so although less people will understand it, those that do will be able to poke holes and find mistakes much more easily than if they had to perform all the analysis independently themselves.

Of course it's also a good idea to describe the algorithm well in a natural language but we'd all be sitting in the dark if Maxwell had just said "we have these waves, electric and magnetic and they go up and down and they're always perpendiular to each other..."

• Algorithms coming out of active, front-line research are a quite different animal to the "classical" algorithms taught in CS classes at BSc. and even MSc. level, especially where the the CS is just one component of a combined disciplines degree.
• Of course, formal symbolic descriptions have their place and are extremely useful for those exploring the field from that perspective, but given the need to implement an algorithm, which do you prefer to work from?

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about question the status quo. Questioning authority".
The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
Most real-world code is dominated by interactions with external events.
We're painting with pretty broad strokes there aren't we? Maybe that would be better phrased as "In my limited experience, I find a lot of code is dominated by interactions with external events. Although I've heard rumors of old fogies using C and Fortran and running compute intensive simulations for hours and days and months. But its just a rumor, so you can safely discount it."

Hmmm. Let's see software that deals with external devices and events:

Browsers, compilers, operating systems, databases, communications systems, radar system, weapons systems, guidance systems, mp3 sofware, windtunnel software, engine management systems, video games, avionics, disk/tape/display/CD/DVD/USB/Printer/Network card/etc. device drivers, camera software, picture editing software, spreadsheets, editors, interpreters, Genome analysis, web servers, ftp, network OS, viruses, trojans, XML, stock control, calculators, phone software, microwaves, washing machines, accounting software, central heating controllers, tills, atms, petrol pumps, clocks, satellites ....

Although I've heard rumors of old fogies using C and Fortran and running compute intensive simulations for hours and days and months. But its just a rumor, so you can safely discount it.

Counterpoint?

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
Re: Mathematics eq CompSci
by spurperl (Priest) on May 02, 2005 at 05:17 UTC
While a defree in CS or Math isn't required to be a successful programmer, it often helps.

If you want a very simplified and non-controversial look at this: think of a degree as another few years of experience. A student in a demanding Uni spends most of his day studying, solving complex problems, thinking in and out of the box, measuring tradeoffs, exercises his logical and methodical thinking, etc. In programming courses, the student also designs, writes and debugs code, learns to use various tools (algorithms, formulae, data structures) to solve problems.

So yes, it helps. But no, it's not an only way. While a fresh person with a degree on the paper looks better than one without, he doesn't necessarily look better than one without but with 3 years of real experience.

Re: Mathematics eq CompSci
by ambrus (Abbot) on May 02, 2005 at 05:33 UTC

Because Knuth is a mathematician :)

Anyway, Mathematics ne CompSci, rather CompSci is a proper subset of Mathematics.

I do not believe that computer science is a proper subset of mathematics. Instead I agree with Paul Graham that computer science is a meeting point of several very different groups.

One of those groups is really doing math. The others are not.

(A lot of the algorithms folks are really doing math.)

Re: Mathematics eq CompSci
by zentara (Archbishop) on May 02, 2005 at 12:54 UTC
Why is it that most books on algorithms use mathematics to explain the underlying concepts? Are there on other way of explaining the concepts?

This reminds me of the book "Zen and the Art of Motorcycle Maintenance?. There ARE other ways of "knowing", besides logic and mathematics. However, you still need to know what the words mean, even if you are not expert at the underlying theory. For instance, as a programmer, you probably should have a good idea what the difference is between an integer and a real number( even if it is as simple as one has a decimal point and one dosn't).

I have been fortunate to have been given the chance to become well aquainted with math and engineering, even though I'm not an expert at it. Sometimes this makes me question whether my "view of reality" has been "comprimised", for instance is the "real world" really a base10 system? We have grown so accustommed to counting in 10's, but maybe it's all just a human illusion.( There is some wild philosophical thought, that humans are a "reflection" of the universe, so maybe there is something to having 10 toes and fingers? :-) )

So how would you grasp the functioning of systems, whithout a mathematical knowledge of it's engineering? You can "feel it". Like the "zen mechanic", who can feel the power generated in the engine, and observe that so much power, will break a small transmission chain, and conclude the chain must be "stronger". So he goes and buys a bigger chain.

Everything in the material world can be thought of in terms of "energy and time". Power is the amount of energy flowing per unit of time.

In computing, you add "patterns" to the energy, we call it "information". Networking just is the art of transferring those "energy patterns" from point A to point B.

So if you look at programs like little black boxes, where information(of one energy pattern) is fed in, and energy of a different pattern flows out, you could be just as good as a programmer who describes the actual bit values in 1's and 0's.

Anyways.....yes there are other ways of looking at computing, but "managers" play the odds....they know that someone with a math background will "probably" have an easier time understanding what is actually happening, but it is not always the case. Look at autistic genius sees numbers as shapes

I would just love to see how this guy sees a program in his head. But managers are not going to hire on the basis of "promised genius"...they want people who will "toe the line"...be organized and part of a regimented team etc.

I'm not really a human, but I play one on earth. flash japh
Re: Mathematics eq CompSci
by demerphq (Chancellor) on May 02, 2005 at 15:15 UTC

Id just like to mention that you are basically begging the question by using the term compsci in the first place. CompSci is more or less defined as being the mathematics of computing so by that it would seem you have your answer.

But I dont think you meant to ask that question, mostly as it isnt that interesting a question. The question i suspect you really are asking is whether we consider math and programming to be the same thing. And i think the answer is quite clearly not at all.

Most programming tasks that I see require almost no advanced mathematical skills, instead they require a wide range of other skills and knowledge that are specific to the world of programming. For instance having an intimate knowledge of SQL syntax for various DB's is not a skill that almost any CS or Math course is going to impart on you. Having experience in coding means that you will implicitly make design decisions about your code that are superior to what a less experienced but better educated Math type would do. You can almost guarantee that the code quality from a 17 year old whos been programming open source C for two years will be superior to a PHD Math graduate whos primary programming experience is Fortran and Maple.

An analagy with automobiles that has been made elsewhere feels apropriate to this thread: in the automobile business you have three groups of people involved in the process of making cars (leaving out the management/marketers :-), Engineers, Assembly Workers and Mechanics. The Engineers are responsible for a lot of things. Designing the parts, the assmebly line, selecting materials, studying the system, and etc. IOW they do all that highbrow stuff. The Assembly workers generally require minimal skills, the engineers should have already solved most of the issues involved in the manufacturing process. That leaves the mechanics. Now these folks are responsible for fixing your car when it breaks. They need sufficient skills to read the tech-specs on the parts they work on. They need to know how to use the appropriate diagnostics equipement and the like. But they definately dont need to be engineers. They almost certainly will never have to select the exact alloy that will be used in an engine block.

To bring this back to programming, the point is that most programmers are mechanics. We reuse libraries that others have written, we know about the resources available to us, we know that despite the advertisments using product A with product B is a bad call. We know how to read the abstracts of the papers that the CS folks write, Etc etc.

Now the mathematicians will say that they are the most important part of the pie. But the fact is that it isnt true. There just arent that many places to get a job being an algorithm researcher. There arent that many places in R&D in computing in general. But there is an awful lot of call for mechanics that can change the spark plugs and put on a new muffler. IMO a lot of math types get upset by the fact that many non-math types can outcode them with their eyes closed. The reason of course is the same reason that a kitchen assistant can often chop vegtables faster than the chef. (Recent experiece.) Writing code and doing mathematical analysis and proofs are two different things that only rarely occur in the same job or project at the same time.

---
demerphq

Id just like to mention that you are basically begging the question by using the term compsci in the first place. CompSci is more or less defined as being the mathematics of computing so by that it would seem you have your answer.

There's also the issue that we're talking about CS degrees - not CS in the abstract. There's an enormous variation in subject matter in CS degrees - from the ones that are just a sideline of a pure maths department (and would prefer that those messy lumps of silicon didn't get in the way of all the nice theory), to those that are almost vocational training (and think big-O notation is a bit highfaluting).

An analagy with automobiles that has been made elsewhere feels apropriate to this thread

I can feel my pathological hatred of software development analogy/metaphor coming on :-)

There's also the issue that we're talking about CS degrees - not CS in the abstract.

Agreed.

I can feel my pathological hatred of software development analogy/metaphor coming on :-)

Yeah, i can understand that. I hope the analogy worked for you more or less. All I was trying to get at is that not knowing the algortihm to calculate sin() correctly and efficiently on my favourite CPU doesnt stop me from using the function when its provided by the standard libraries to solve simpler problems like whether that tree in the back yard will fall on my house when it gets cut down.

As an aside does anybody know if Shell sort has been fully analysed yet? I recall reading Knuth where he said that Shell Sort has stubbornly resisted complete analysis. (IE its not know what the optimal intervals are for the different passes over different data sizes etc....)

---
\$world=~s/war/peace/g

Re: Mathematics eq CompSci
by samizdat (Vicar) on May 02, 2005 at 13:31 UTC
<rant>
I cannot emphasize enough that most programming jobs depend far more on the ability to listen to and interpret user requests and unstated wishes than they do on algorithmic competency. Those of you who do not have CS degrees should not hesitate to put your non-mathematical skills forward as equally valuable to your prospective employer.
</rant>
Hm...I think the reality is such that if the person doesn't have a degree in CS or Mathematics, chances of her being shortlisted for an interview aren't going to be high.

What might happen, though, is that the person develops considerable experience and expertise in programming whilst holding a job that isn't about programming. For example, the person could be doing some research work but makes use of programming to solve the problems at hand. Provided she has become competent in programming as a by-product, she can then market herself as a Programmer even though she doesn't have the background in CS or Mathematics.

I think two factors are at work here. Because of the availability of overseas coders, native coders are being expected to meet higher standards. I also think that CYA principles are being applied by HR personnel and managers, i.e. bureaucrats. If they can point to a degree, they can't be faulted. It is rarer and rarer that a boss is a programmer.

That said, I have never had a problem getting a job in either EE or CS-related fields in spite of the fact that my academic career stopped with a BA in Sociology from a mid-range state university. I have been denied the chance a number of times, so degree-consciousness IS a factor at many companies. What I am ranting about is that it should never be a reason not to be proud of one's abilities or to try for a position. IMNSHO, the companies that have hired me have been far better off for doing so, and, yes, I have taken jobs away from degreed programmers several times.
The question was about Mathematics and CompSci. Not about programming. Mathematics and CompSci are closely related - in many universities, CompSci is a subdivision of the Mathematics departement, or it used to be a subdivision.

Programming stands much further away from CompSci than Mathematics. Programming has as much to do with CompSci as building telescopes has to do with astronomy.

"... looking for a Programmer with Perl and MySQL experience"

??? Funny how people see different questions. Do I detect a bit of nose-in-the-air, Mr. A-M?

At any rate, abstraction is a discipline in itself, whatever framework/notation one uses.

I was in a 'gifted' program in high school ('73) where I visited with a junior math professor at the university, and we spent Monday afternoons discussing equations and their solutions from both mathematical and algorithmic perspectives. You're correct in that it wasn't about programming.

A more pertinent question would be, "was it useful?" Since the OP's specifics were about a job requiring a degree, it would seem to me that that would be the question to ask. It was useful in that it stretched my brain, but I wouldn't say that I have ever gotten close to that kind of algorithmic expression again.

Which is not to say that I don't value the fields of computer science or math... if you look at my posts, I've repeatedly stated that I have read gobs of both, among other things. What I object to is the blind assumption that someone with an undergrad degree in CS or math (or anything else except perhaps an engineering degree) is going to be better at a {name your specialty} computer-related job than a non-degreed person.
I cannot emphasize enough that most programming jobs ...

That's why we have two separate words for CS and programming.

To be fair, we have two separate words just for Computer Science.

Yoda would agree with Perl design: there is no try{}

Re: Mathematics eq CompSci
by cosimo (Hermit) on May 02, 2005 at 05:40 UTC

I've found myself asking quite the same questions. Most of the algorithm books you can find are full of math, and you can't read them as an Asimov novel.

But there are some rare jewels that explain you also the algorithm ideas in clear words. I've found so few of them. That is very difficult, because explaining such algorithm often requires abstract concepts based on others, which in turn, ...

Nevertheless, I think the math part is important to catch the algorithm performance, complexity, "degree of fit" (can't find a better english expression for this, sorry) for your application, etc ...

Re: Mathematics eq CompSci
by dragonchild (Archbishop) on May 02, 2005 at 12:49 UTC
I have a degree in both. Did the math side help? Yes, it did. Could I do what I do without it? Yeah ...

Now, here's the question - if you could get a CS degree'd person, that would be preferable. However, if you couldn't, what's the degree you'd take as a substitute? Art? Philosophy? French Literature?

No - you'd take Math.

The Perfect is the Enemy of the Good.

Could I do what I do without it? Yeah ...

One little disagreement: you couldn't do it without math...

At this point I am being deliberately general and by 'math' mean "...the study of patterns of structure, change, and space" as it is defined somewhere on the Net. In this definition math, as logical thinking, is the basis for the 'intelligent' life. You cannot make an informed decision in life without reviewing gathered data, searching for patterns, comparing them, and choosing between them based on some criteria. And that is math! So, it is needed not just for programming

I realize my opinion might be somewhat biased, but too often I see people who did NOT take math in school trying to become programmers because they want to be well paid. Their behaviour makes me want to say 'those who cannot work with their heads shalt work with their hands'...

P.S. If I couldn't get a CS degreed person, I would choose Physics as a substitute - they know math and they can apply it...

--------------------------------
An idea is not responsible for the people who believe in it...

"Math", in your somewhat expansive definition, is the "study of patterns". I certainly don't have to study them in order to apply them. You don't have to understand the structure of plant DNA in order to create hybrids. Heck, the most comprehensive plant modification is teosinte to maize (corn) and it was completed within a generation around 5000 years ago. I think that's before Gregor Mendel cross-bred peas.

The point is that some of the best programmers I've ever met had little to no formal training in Math or similar topics. Plus, your definition of Math is better as a definition of Philosophy. :-)

The Perfect is the Enemy of the Good.

I don't quite consider myself a programmer per se, but I write Perl scripts to do certain tasks. That said, my degree is actually in English/Lit. I maintain that for undergrad degrees - a good solid liberal arts degree is very helpful since it quite ofen (not always mind you) teaches you more about how to think around problems (not saying Math/CS couldn't do that as well :-)
Now, here's the question - if you could get a CS degree'd person, that would be preferable. However, if you couldn't, what's the degree you'd take as a substitute? Art? Philosophy? French Literature?

I dunno about that. I've come across a lot of mathematicians who really suck at programming. That step from the abstract to the concrete can be a doosy.

I've also come across a lot of good programmers with a philosophy & psychology background - but that may be a biased finding on my part since I spent a chunk of my early years around AI folk.

Personally I'd pick any engineering or physics degree before maths :-)

Re: Mathematics eq CompSci
by samizdat (Vicar) on May 02, 2005 at 13:04 UTC
Most of the "other ways" of describing algorithms or data structures are really math in disguise, and it's easier to make the connection than it is to try to disguise it. I have only a little formal math training, but gobs of math book absorbtion. About the only things in CS that aren't really math-oriented are things such as Backus-Naur grammar descriptions for parsing, but that's only because they are application of simple declarative principles (i.e., 'formal logic') carried to a high level. Likewise, logic programming such as Prolog is very far removed from math, but only because it depends on math for its underpinnings.

As to whether a degree is a necessary thing, the answer is 'very rarely', unless your employer's customer is degree conscious, in which case it's the paper, not the understanding, that matters.
Conflation of Two Subjects [was: Mathematics eq CompSci]
by Anonymous Monk on May 02, 2005 at 15:27 UTC
The main problem as I see it is that computer science is so new (relatively speaking) that it is easily confused with unrelated subjects that bear a superficial resemblance. Writing CGI scripts is not computer science, no matter that it does involve computers. Novelists and librarians both require literacy, but nobody would suggest that both endevors are essentially equal. Same is true between programmers and computer scientists.
Re: Mathematics eq CompSci
by Tanktalus (Canon) on May 02, 2005 at 14:07 UTC

Just as a side note, in some universities, Computer Science is merely a department of the faculty of Mathematics. Thus, you can't get a "BSc in Computer Science". You can only get a "BSc in Mathematics" specialising in Computer Science.

Re: Mathematics eq CompSci
by tlm (Prior) on May 02, 2005 at 22:20 UTC

Mathematics is the universal solvent.

the lowliest monk

"I often say that when you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meagre and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be." --Lord Kelvin

I wonder if he could express that sentiment in numbers?

And if he couldn't, would that mean he didn't know what he was talking about?

Re: Mathematics eq CompSci
by dfaure (Chaplain) on May 03, 2005 at 00:03 UTC

Practically speaking, the job ad degree requirements (particularly math) are inversally proportional to the experience years expected for the candidates. It denotes easily the volatile nature of theorical notions.

In fact, using math and weird notations is often an easier way of teaching algorithm concepts.

____
HTH, Dominique
My two favorites:
If the only tool you have is a hammer, you will see every problem as a nail. --Abraham Maslow
Bien faire, et le faire savoir...

Re: Mathematics eq CompSci
by adrianh (Chancellor) on May 03, 2005 at 15:18 UTC
A while ago, I saw a job ad in the paper looking for a Programmer with Perl and MySQL experience. A couple of weeks later, the same ad appeared but this time round, the requirements say: Degree in Computer Science or Mathematics.

I would imagine this has almost nothing to do with a CS or Mathematics degree being necessary for the job in question. Instead it has everything to do with filtering out the incompetents in the big pile of CVs that the first job advert produced.

What they really need is somebody better at writing job adverts.

Not sure of the big piles of CVs, it could be the opposite...

But they were very specific when they asked for Perl and MySQL skills, which suggested that they knew what they were looking for.

The second ad (requiring a degree in Computer Science or Mathematics) gave the impression that only persons having one of those qualify for the job.

But if it's a programming job and it could be done with Perl and MySQL, it puzzles me that they should specifically seek persons with a degree in CS or Mathematics.

From the general reading I get from the above, while a degree in CS or Mathematics certainly helps, it's not a prerequisite in some areas of programming.

But they were very specific when they asked for Perl and MySQL skills, which suggested that they knew what they were looking for.

To me "Perl and MySQL skills" isn't very specific. What kind of MySQL experience? What kind of Perl experience? What kind of application needs to be developed? What kind of other skills need to be developed? Etc.

This could be anything from moving a bunch of data from some Excel files to a MySQL table all the way up to building something like Amazon.

But if it's a programming job and it could be done with Perl and MySQL, it puzzles me that they should specifically seek persons with a degree in CS or Mathematics.

I don't know for sure - we'd have to ask to be certain :-) It could be something as simple as a degree-only hiring policy.

However my bet would be that when they wrote "Perl and MySQL skills" what they got was a bunch of CVs from people who didn't have the necessary experience for the task at hand. So they chose the shortcut of specifying a degree as a quick way to winnow some wheat from the chaff. Of course by doing this (and sticking to it) they'll also throw away a lot of wheat and keep some chaff - but they only need one good grain so they don't care.

From the general reading I get from the above, while a degree in CS or Mathematics certainly helps, it's not a prerequisite in some areas of programming.

Oh I agree completely. But just because it's not a prerequisite for doing the job doesn't mean it won't be a prerequisite for getting the job. Sad, but true.

Re: Mathematics eq CompSci
by TedPride (Priest) on May 03, 2005 at 16:56 UTC
Algorithms are just number manipulation. While not all mathematics is algorithms, it could be debated that all algorithms are math - and people who are strong in one subject are usually strong in both, since mathematics and programming draw upon the same talents of logic and spatial thinking.

I'm sure anyone with a degree in mathematics would be able to learn Perl and mySQL to an adequate level within a week or two. Perl isn't really a difficult language to program in, as long as you aren't trying to write CPAN-level modules.

Re: Mathematics eq CompSci
by Anonymous Monk on May 04, 2005 at 18:08 UTC
Why is it that most books on algorithms use mathematics to explain the underlying concepts? Are there no other way of explaining the concepts?

University level mathematics is essentially "the formal study of patterns": "numbers" being one system that have an interesting system of patterns, "graphs" being another, "topologies" being another, and so forth...

"Reasoning" is an underlying patttern that requires internal self-consistancy; it's a very large part of what both mathematicians and computer scientists do.

Any way of "explaining" a concept that is formally accurate and correct is essentially formal mathematics, just with an unconventional notation. The more "handwaving" the explanation requires, the less formal the mathematics is. If the argument becomes logically inconsistant, it's drifted from math to philosophy and/or religion.

Standard mathematical notation is well known by a large group of people who reason carefully about things for a living ("mathematicans"). Computer programmers are a subset of people who reason carefully about things to do with programming for a living: to many authors, it makes sense to follow standards, and use the same notation everyone else does.

Many mathematicans are programmers: in some universities, computer science is a specialization of a math degree. After all, it's easier to tell if you've coded an optimization problem correctly if you understand the underlying calculus; it's easier to tell if your genetic algorithm is working right if you understand the statistical models in use, and it's easier to know if your problem solving algorithm is working as designed if you understand the graph theory algorithm that underlies the search process. If you know enough binary algebra to prove that all logic gates can be build out of NAND gates, but not XOR, you won't bet the business by standardizing on XOR instead of NAND... and so forth...

You can learn many of the specific applications by rote learning; or you can learn the mathematical theory that underlies the specific applications. Which is more useful depends on what your job is, and what you need to know to get the job done. It's generally more useful to know useful theories to try when you're doing something "cutting edge", like researching a new class of program. It's probably just wasted knowledge if you spend your life just editing config files all day...

--
AC

IMO, the OP's exemplar is a valid (albeit likely accidental and/or specious) qualification. As others have pointed out, formal mathematics and computer science are highly overlapping subject areas.

In fact, this discussion resurrects a memory of an essay by Dykstra some 20 years ago (in an ACM mag, IIRC) in which he posited that all computer programs should be mathematically provable, and, in fact, such proofs should be the ultimate and preferred form of software QA. Either the program is provable and consistent, or it is not. Since I've done more than my share of embedded programming with poorly or incorrectly documented chipsets that could produce entirely different results on 2 identical systems due solely to variances in capacitor tolerances, I'd have to take issue w/ Dykstra's opinion from a pragmatic perspective, but the notion does bear some examination.

In that light, since Mathematics is as much about proving as it is about doing, I'd think it would be a good qualification (in general) for a software design/architecture position (tho probably too much for a code monkey level position).

Re: Mathematics eq CompSci
by planetscape (Chancellor) on Jun 20, 2005 at 17:59 UTC
Re: Mathematics eq CompSci
by Eyck (Priest) on May 08, 2005 at 20:06 UTC

Anyone who cannot cope with mathematics is not fully human. At best he is a tolerable subhuman who has learned to wear shoes, bathe, and not make messes in the house. ~Robert Heinlein, Time Enough for Love

And to answer your question - yes, it is typical to hire people without qualifications or training for mysql jobs, so it's rather strange for the company to change their policy from 'mysql experience' to 'Math/CompSci degree wanted'. Maybe they figured out they need someone generally good, and not just for this single task they had in mind.