3 ms·
You do physics. The fact that you do it by writing software is incidental. Obviously mathematical skill is necessary to write software that models and controls
by superuser2 12y ago
You do physics.
The fact that you do it by writing software is incidental. Obviously mathematical skill is necessary to write software that models and controls complex physical/mechanical systems. No one is saying it isn't. That's a strawman.
Many problem domains, however, are not mathematical in nature. I don't need to know anything about calculus, have accurate hand-computation skills, remember probability formulas, etc. to write a database application, for example.
But then obviously I would need these things to write and validate a financial modeling/risk assessment system.
I (and many others) would argue that when math becomes relevant to programming, it is because math is relevant to the problem domain in which you are working. Programming, by itself, has little to do with math (or, more precisely, skill in computation-based math classes and exams is not a proxy for programming skill.)
- srean 12y agoThere is actually more to it. There are aspects of programming that are no different from procedures in mathematics even if the application area of the code is not 'mathematical'. As has been said in the comments [0], the process of debugging code is really not that different from solving/proving those Euclidean geometry exercises/riders we had in school. Now, the person debugging the code may not be explicitly conscious of this, but if the person is any good, he/she is using the same procedure: assume axioms; make hypothesis; prove or disprove using observations, deduction/induction; repeat till you have reached your goal. [0] https://news.ycombinator.com/item?id=8055845 https://news.ycombinator.com/item?id=8055845
- superuser2 12y ago>he/she is using the same procedure: assume axioms; make hypothesis; prove or disprove using observations, deduction/induction; repeat till you have reached your goal Absolutely! This problem-solving process is very similar to what we were asked to do in physics and chemistry on a nightly/weekly basis. I've found chemistry problem sets to be very similar to programming. However, what you describe is not math, not as it is taught anywhere between first grade and Calc III. Being "good at math" is exactly equal to being good at manipulating symbols (first numbers, then variables) according to a memorized set of rules and procedures. The higher you go, the weirder the rules get. Symbol manipulation and the memorization of probability and geometry formulas are also the entirety of the "skills" represented by standardized tests of mathematics. Programming is about coming up with the rules and procedures by which the computer should manipulate symbols. It's really completely different. Excellent mathematical skills would make me a good compiler. Not a writer of compilers, but a compiler. Of course, that might be useful if I wanted to work on one (I'd be able to check its work by hand), but in practice, I'm that sort of work is done billions of times faster and with much greater accuracy by computers than humans anyway.
- srean 12y ago> However, what you describe is not math, [not as it is taught anywhere between first grade and Calc III] I think this is where we disagree then. That is pretty much what Euclidean geometry is, and I would indeed file that in the 'math' cabinet. Euclidean geometry has very few axioms and all of the theorems are just consequences of those axioms and choosing and applying truth preserving operations on them (in other words, reasoning, or as you called it 'problem solving'). Say you are tasked with deciding whether the angular bisectors of all triangles all meet at a point inside the triangle (In programing you may be asked to find out whether this piece of code will ever crash). You seek out theorems that you think would be useful and then try to prove or disprove them. It might turn out that the theorem wasnt useful after all, then you try to prove another theorem that you now think will be more useful. In debugging that is pretty much exactly what you do, same with ensuring properties of code: the code will not crash, the pointer will not be null etc. I was not schooled in the US but I would guess it is not that different here. > Programming is about coming up with the rules and procedures by which the computer should manipulate symbols. How do you think mathematicians come up with a set of axioms and how to operate on them ? Think about how mathematicians came to use imaginary numbers, it is quintessentially the same process, i.e. "coming up with the rules and procedures ...[to]... manipulate symbols". Is it really as fundamentally different as you make it out to be. I am hesitant to say that programming and math are one and the same, but would claim that their methods are the same, that processes in programming, no matter what application you are programming, is indeed at least a subset of the fundamental processes of mathematics. Furthermore what you are talking about is one aspect of programming, the synthesis part of it. The other is debugging or the deductive aspect of it. It is no less of a part of programming, and again the methods are indeed the same. Whether you call them theorems or not, whether you write them with symbols on paper or not, when you are debugging you are indeed manipulating symbolic objects, and proving or disproving theorems based on rules, exactly like in math, example: "if my assumption about initial conditions and the function foo() is correct then 'a' ought to be 42. If it is not, either my reasoning is wrong or the function implementation or the initial condition is wrong. Ok so it was not 42..." and you keep going like this manipulating your conjectures and observations using rules of mathematics, more precisely logic with '&', '|', 'for all', 'there exists'. Consider writing tests and choosing what tests to write, its the same process. Consider drawing conclusion form the tests, consider using the type-system to encode properties you desire in the code, again its fundamentally the same deal. One may be aware of it, one may be doing it implicitly without being aware of it, but regardless, its still the same process. I would argue the match with math is better than the match with sciences like Chemistry or Physics, because there the rules have been set by nature. In programming you choose the rules and try to do something interesting with those, much like in mathematics. For actual computers you do have to co-opt nature into executing those rules. ============= EDIT: @superuser2 replying here as I dislike heavily nested threads with cramped widths. > I have never been asked to do anything this in a math class. I upvoted your comment and now I understand more of where you are coming from, and it seems that there is a difference in the way math is taught in schools where you are from [I am guessing US]. We would typically do this stuff in grade 7 and it is taught in school, so anyone with a school education would be aware of this (quality of instruction varies of course, in fact varies wildly). > Geometry is an exception, as you state. However, geometry is one year of many, and was extremely easy for me. I'm talking about Algebra, Algebra II/Trig, and Calculus. I think this sheds more light. For me at least the most difficult homeworks and tests were in geometry, also the most gratifying. Most of my schoolmates would agree. I think we had geometry for 3 years (cannot remember) very lightweight compared to Russian schools. I would however encourage you to think about solving simultaneous linear equations, it is again deduction at work, the only difference is that its scope is so narrow and we know the procedure so well that we can do it by rote if we want to. We also had coordinate geometry, which was about proving the same things but with algebra, but we had this much later in grade 11. BTW post high-school 'analysis' is different though, it is not devoid of such logical reasoning but its focus is different. ..and thanks to you I now know a little bit more about the methods of Chemistry.