Now, I have just read this article on the Orielly web site. And I have to say, I disagree. And for several reasons.

As my post to the article states, in the business world Math is a requirement. Everything from knowing various accounting principles(its math) to being able to understand the equations of some statistical requirement(insurance). Continuing this further, when working for a workers compensation state agency. We calculated the amount we would pay on any medical procedures based on a percentage of Medicare with this figure being worked off the last years percentage if I remember correctly.

In my experience, if you could not understand various equations. You could not fulfill the requirements of the task. This does not take into account where a person may come out of school and go into various other programming backgrounds(science, graphical).

I don't understand how math should not be a requirement. A schools job is to broadly prepare you for as many possible work environment as possible. If they do not provide a math background to your education, they severely limit your possibilities in what backgrounds you may want to choose.

Edited to add: If you read any of georges columns, you will notice he does statistics constantly on the various hardware/software that he tests. I don't know how reliant it is anymore, but I use to read application dumps when being on call at 3am. Not being able to convert hex to decimal and vice versa would have been an issue. I have also seen db admins use math to find the position of a record within a database when their was integrity problems. How can a Computer science major not have a math background>

Dan

This conversation is currently closed to new comments.

My "code" days go back to something called a IBM 2500, patch boards, 16 "drives", slave printers and such.. early 1970's. I since then have kept current but do not cut code of program, etc..Let others do that in various programs I ran.. NOTE "Programs" as in HW and such as I had the budgets and schedules. I am still mildly amused at when the SW folks come in and brag.. "We got it to run"... before during or after crashes, start up, etc as that is what they were paid to do,.. as they are not on a journey of discovery.. which they sometimes forgot.' But way back dealt with data that had actual VALUES of ZERO.. and the more math we had, them less things crashed when "ZERO plus say plus five added and result was 2.5 not zero plus any nr is zero.. and such things. Same today.. the better program types have a good math understanding..and background. I have seen time after time.. "well we just imported that routine and we finally found the issue was a fault in sub-routines, etc. I have a friend in IT in money area and he shudders at what he hears from non-math types as they can only speak IT, not math or stat or such. Given druthers I will take the well "mathed" type every time, as I feel the others simply dodged the hard stuff.. there are code cutters and there are programmers...and there are very good IT types...I simply worry when I find no strong math....and I do not mean to insult..but no math and do not want any is kind of doing but not really knowing.. an assembly of routines..not a knowledge of functions..

There are multiple paths towards developing analysis skills and I am not convinced that mathematics provides the best alternative.

Requirements analysis lives in the world of human ambiguities, contradictions, rules and exceptions. These things are not handled well in mathematics, outside of specialized areas such as probability and fuzzy logic. These analysis skills are better honed through language such as doing analysis in a good literature course.

Set theory is an interesting proposal, because the set-like objects in programming do not map particularly well in mathematical sets. An inner join is a straight-forward concept easily understood by developers working with databases. It is quite complex to represent this based upon sets. The inner join provides an intersection based upon keys, a union based upon columns, and a relationship (1 to 1, 1 to N, M to N) among elements. I can't see how understanding sets provides enlightenment concerning database operations.

Concerning algorithm development, software is the act of automating manual activities. Software developers implement algorithms; this allows the implementation to be validated. Are there algorithms created by programmers? An algorithm to generate user recommended pages might be an example. Is the result of the algorithm valid? That is simply unknowable.

I am assuming that the reference to "RAD" actually is in regard to the practice of iterative development. Iterative development is actually based upon the engineering concept of feedback and successive approximation. Feedback loops are difficult to handle mathematics and usually avoided. The ability to track and reproduce a highly unpredictable input stream is a wonderful model for software development, but one that is not going to come out of the study of mathematics.

Is the study of mathematics a good thing in general? Yes, though I would put statistics at the top of the list. Mathematics, however, is not fundamental to software development, nor does it provide any unique insights.

Relational databases came out of the work of Edgar Codd, who laid down the mathematical framework upon which they are built. ANSI SQL is a set-oriented language, among other things. SQL has solid mathematical underpinnings and could not have been developed without math.

A software module can be represented as a strongly connected directed graph. The number of basis paths, and therefore the number of test cases required to exercise all the logic in a module, is defined with mathematical precision by its cyclomatic complexity metric. This is a direct application of graph theory to testing software.

I have both created and implemented algorithms. Inductive logic can be used to prove the validity of algorithms. Inductive proofs are taught in discrete math courses.

It is not possible to write device drivers without knowing math. It is not possible to understand UNIX permissions without understanding bit fields and binary arithmetic. It is not possible to use the bit operators that are part of almost every programminglanguage without knowing math. It is not possible to write hardware abstraction layers without knowing math. It is not possible to model systems such as weather or routing without math. It is not possible to write control software for machinery without math. It is not possible to write operating systems without math.

Without math there would be no computers and no programming languages. To say mathematics is not fundamental to software development and provides no unique insights borders on absurd.

There is a difference in saying programmers use concepts that have also been described mathematically and saying that a mathematical course of study is fundamental to programming.

I have great respect for database programmers, but few have the need nor skills to define the mathematics behind something like a database. The "set theory" required is no more detailed than is typically covered in the first two years of grade school. Given the difficulty inherent in describing a basic concept like an inner join using a Venn diagram, I would find it hard to conclude that detailed knowledge of set theory is fundamental to database development.

Thomas McCabe developed Cyclomatic Complexity Metric and a description can be downloaded from http://www.itl.nist.gov/div897/sqg/pubs/publications.htm listed under the title, "Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric". The mathematics that validate McCabe's rules are complex, but applying the rules requires counting, addition, and subtraction - basic arithmetic.

The keys to writing device drivers is understanding critical areas and response times. The mathematics needed is limited to counting, addition, and perhaps multiplication.

The knowledge needed to understand Unix permissions is that of Yes and No, concepts most children have mastered by the time they reach grade school. George Boole was a mathematician and study of his mathematics is a very advanced topic. To say that this makes mathematics fundamental to programming is the same as saying mathematics are fundamental to an electrician because he can wire a three-way light switch.

Mathematics are a mechanism with which to describe the physical world. The concepts described by mathematics are not unique to mathematics; they can be learned by other means. If the concepts of computer programming can (and usually are) learned by means other than the study of mathematics, it is not possible to say that this is fundamental to programming / software development.

For most people in programing the level of abstraction is great enough to isolate them from the underlying mathematics. I never had to work out how to ramp up a motor, I just popped a rate into the controller that was bolted on the side of it.

Mathematics alone would not have helped me work out how to ramp the motor up either. A sizable dollop of electrical and mechanical engineering would also be a pre-requisite.

If you wanted to rotate an image 30 degrees at most you might have to remember pi = 180 and then discover you really wanted -30.

I enjoy maths, I use it quite often, but I do/did a lot of 'low level' stuff.

Then there are other problems. Do you say the customers are in customer number order or start looking for predicate calculus symbols with charmap?

Do you implement a recursive algorithm for finding the nth sentence in a document or do you count full stops like a sensible person?

If it was like you say learning maths = learning programing. Nothing could be further from the truth.

Logical reasoning is an important aspect of mathematics. There does not need to be a one to one correlation for mathematics to be useful to programming. I would say that the mathematics that has proved most useful to me in programming has been Euclid Geometry. I do not know how it is taught currently, but when I was in school over 20 years ago, we had to write proofs for various theorems. I have yet had to code those proofs, but the concepts I learned from doing the proofs help me immensely in coding.

as far as Im concerned that's advocating an invisible listBox control because of an inability to generate a basic list class.

That's a brute force approch as well.

I don't see any of the math 99.999% of us do as developers as difficult at all, most of it is application of a technique, an algorithm, should be able to manage that shouldn't we?

Collapse -

My nearly 50 years of experience tell me otherwise.

Without a sufficient understanding of the underlying mathematical concepts involved in a particular task, one cannot be assured of selecting either the correct, or best, formula(e) and/or data, let alone validate the results.

It's the sliderule vs the calculator mindset. With the former, one needed a thorough understanding of the problem in order, for example, to determine the numeric magnitude of the computed result; with a calculator, one can mis-key by orders of magnitude and be oblivious to the fact that the result is erroneous.

I had been thinking about awareness of sine waves as useful in thinking of things like selecting the tape channel number in 3 tape sorts: The old trick of making a switch / oscilator with "s = 3 - s" where "s" starts out as 1 or 2.

Sure, anyone who had been told about that would probably remember the trick, but not the reason for it.

I had forgotten the lessons learned from using a sliderule; and they are significant! Not just magnitude (as you point out), but an understanding of precision as well. I have seen too many times when people (especially in financial areas) will try to get numbers beyond 7 digits of precision when several of the values in the equation are "floats".

Remembering that you really can't go beyond 3 digits with a sliderule drives that home every day, even without remembering that the sliderule is why I remember it! :)

If you're asking for technical help, please be sure to include all your system info, including operating system, model number, and any other specifics related to the problem. Also please exercise your best judgment when posting in the forums--revealing personal information such as your e-mail address, telephone number, and address is not recommended.

## I Just Want to Program! Don't Make Me Learn Math!

Now, I have just read this article on the Orielly web site. And I have to say, I disagree. And for several reasons.

As my post to the article states, in the business world Math is a requirement. Everything from knowing various accounting principles(its math) to being able to understand the equations of some statistical requirement(insurance). Continuing this further, when working for a workers compensation state agency. We calculated the amount we would pay on any medical procedures based on a percentage of Medicare with this figure being worked off the last years percentage if I remember correctly.

In my experience, if you could not understand various equations. You could not fulfill the requirements of the task. This does not take into account where a person may come out of school and go into various other programming backgrounds(science, graphical).

I don't understand how math should not be a requirement. A schools job is to broadly prepare you for as many possible work environment as possible. If they do not provide a math background to your education, they severely limit your possibilities in what backgrounds you may want to choose.

Edited to add:If you read any of georges columns, you will notice he does statistics constantly on the various hardware/software that he tests. I don't know how reliant it is anymore, but I use to read application dumps when being on call at 3am. Not being able to convert hex to decimal and vice versa would have been an issue. I have also seen db admins use math to find the position of a record within a database when their was integrity problems. How can a Computer science major not have a math background>Dan