46

TL;DR 2-semester course is not enough. Disclaimer: I write this as a computer-scientist that uses math a lot in his work (I'm a research assistant at a university). Introduction: There are three (overlapping) aspects of math in computer science: Math that is actually useful. Math that you can run into, and is generally good to know. Math that lets you ...


25

Perhaps emphasize to students the spirit of equivalence relations. They partitions sets into equivalence classes--cutting down the amount of cases necessary to prove something. To illustrate this, take a geometry example first. "Is similar to" is an equivalence relation on the set of regular polygons (I'll omit a proof here). Now say I need to ...


16

After reading the previous answers, I'd add logic and proofs. To reason about a program's (in)correctness is proofs, even if you don't go to the length of proving correctness formally. Many students struggle with the idea of recursion, recursively defined functions/data structures, and the related proofs by induction. More on the soft side, being able to ...


16

In general, all applications are going to be more of the "here is what we have to check to make sure that our algorithm/theory/definitions work". We don't usually encounter practical problems where we're given a completely arbitrary relation and have to check if it's an equivalence relation. Here are some of the more common equivalence relations ...


13

From the article: For example, the student who wrote the program in the section “Source Code for a Modular Arithmetic Package in Scheme” had to have complete understanding of the Chinese Remainder Theorem, and his program is the Chinese Remainder Theorem in that, given some quantities satisfying the hypotheses of the theorem, it never fails to ...


12

(By the way, I am in considerable agreement with Igor Rivin's premises and observations in that essay, and many of the in-principle conclusions, but might tend to doubt that the course of the juggernaut that is American culture and the concommitant educational system can be altered by the actions of a few quasi-rogue mathematicians in universities...) So, ...


11

Equality vs. Identity Alexei touched on this topic by mentioning hash tables, but I would like to spell it out more explicitly, because this is a critical and fundamental topic in software engineering, and essential for every programmer to know and understand. Every high level programming language has a mechanism for comparing two values for "equality&...


10

Given the student's computer science background, I'd draw a programming analogy. Consider the example here: You start with this: <p> <label for="field">My field</label> <input type="text" id="field"> </p> then you get rid of all that annoying boilerplate and put it in a function: createFieldHtml( id, label ) ...


10

Take your time Andrew, don't worry so much about classes. Learn Python and solve your calculus problems with it. Learn R and solve your Stats problems with it. If you can do this by the end of your freshman year you've accomplished an incredible amount. Next year, if you can take a discrete class that includes some basic work with matrices this would be ...


9

Here are a few ideas, which may or may not fit into your course. To start with, would it be possible to build an explicit pseudo-library of black box pseudo-functions and pseudo-operators that they should feel comfortable using? After they have used this library for a few assignments, they may feel more comfortable creating their own black-boxes. I ...


9

I'm surprised not to see any mention yet of constructive type theory and computer proof assistants, in which a computer program is literally a proof and vice versa. For instance, if you wrote a program to compute the result of the Collatz function in a verified and termination-checked programming language like Coq or Agda, then it would be a proof of the ...


8

It's definitely possible to flip the class you're mentioning here. Certainly the fact it's a graduate class makes it a good candidate for flipping since those students can and should be responsible for more of the learning. As for the size, there are two main areas you'll need to think carefully about: the logistics of the pre-class work, and what you will ...


8

I'm not a professional programmer, but I worked in scientific programming for a couple years. Here are my picks. Basic calculus I agree that calculus is overemphasized in many programs, but we can distill the useful parts. (And to study most higher level math, we need to.) Teach what limits, derivatives, and integrals are. The most important thing would ...


7

I think the situation is tricky. Without knowing more about the actual problem it may well be that this proof by patchwork will be finished after a few iterations. This happens when every counterexample you give has another new "component" that the earlier ones did not have. So every new $x$ can handle a new case and there are only finitely many of these ...


7

The first poster said that it's maybe not that a program is a proof, but the demonstration of correctness of an algorithm certainly is. I would modify this slightly (although I agree with the content of that claim). I think the phrase, in the context of the article, can be written as Writing a program is equivalent to a proof. In what sense? In the ...


7

Another thing worth noting is often times computers can only provide "approximations" of pure mathematical concepts and objects, simply due to the nature of the technology. For example, in C and many other languages, a statement such as: (1e200 + 1.0) == (1e200) Will evaluate to true, simply due to precision loss in floating-point numbers. Did we just ...


7

dtldarek's answer is excellent. The only thing I would add to it is a good foundation in proofs. While I don't run into proofs on the job, I've seen a tremendous number of proofs in my CS classes. Experience with rigorous proofs also helps with logic and algorithms -- have you covered all the bases? Are there any places where this falls apart? Have you ...


7

I have been a professional programmer since I graduated in 2000. My degree is an MMath. I never studied CS. I will accept your premise of a single course, not give you a bucket list of everything potentially useful that adds up to at least a 1-year full-time syllabus. I have used very close to none of the material from my degree in my professional work: ...


7

I think the general trend is that computer science initially was a subfield of mathematics, and has grown more and more apart from mathematics, to the point that there are universities that offer computer science programs without any math courses at all, my home university being one of them. As a side note, I think this development is very bad, as ...


7

"Computer programmers" is a bit broad, and I think the answer to this question depends on what exactly your university teaches in its own CS or Software Engineering department but doesn't technically label "math". One thing to keep in mind is that Computer Science (and by extension anything in programming that's not engineering best practices, code ...


6

If you have looked at modular arithmetic, then one possibility is: Give/recall some example of an algebraic argument in modular arithmetic; then point out that the argument is implicitly relying on the fact that congruence is an equivalence relation. So then you can explain: equivalence relations are designed to axiomatise what’s needed for these kinds of ...


6

The notion of equivalence relation is one of the basic building blocks out of which all mathematical thought is constructed. (Paul Halmos) What's the point of learning equivalence relations? The concept of equivalence relation is a generalization of the concept of equality. Why is it good to know that $a$ is equal to $b$? Because, in this case, all we ...


5

Disclaimer: My answer is based on me being a computer science major, with an obscene interest in mathematics, to the point that I teach it, both on my own, and as a TA. During regular programming, one thing I always come across, is the need to do some basic "regression". In quotation marks because really, it all comes down to, "I have n points, and need to ...


5

You might take this in stages. One of our Chemistry professors, Kevin Shea, is using Learning Catalytics in his 75-student Organic Chemistry class, a comparable enrollment and complexity of material to your situation. This enables him to pose a question at the very start of the class that was supposed to be explored the night before, and receive overlaid and ...


5

None of the other answers have mentioned it thus far, so I'll add that lambda calculus would be a useful field to include. In particular, several programming languages have introduced lambda functions to their syntax in the past several years. Java 8 was just released last month, introducing the concept to Java; C# added lambda functions in .Net 3.5(?) in ...


5

One of the challenges here is that there is a big difference between software engineering and computer science. The latter has very rigorous mathematical underpinnings, whereas the former can often get away with very little math, depending on what area of industry you wind up working in. I'm assuming this is a program that is geared toward engineering. ...


5

I agree that the emphasis on calculation instead of understanding is a crime, and that skills in "liberal arts" areas (writing down a coherent description of a procedure, be it a recipe for jambalaya or pseudocode to compute the greatest common divisor) are extremely important, perhaps even more in technical areas (which tend to attract people who shy away ...


5

Instead of providing your student a counter-example, you could try to ask her or him about its faulty proof. Justifying every step until the faulty one is identified by the student herself might trigger some more understanding.


5

Dictionary/hash table relies on equivalence to bucketize items. So knowing that one would never try to build a hashtable by a distance between cities (objects on a plane): distance is not transitive. In real programming there is another common way to violate equivalence which is sort of implied in pure math/CS: "a == b hence in 5 minutes a == b too"...


4

I think one should consider two domains in parallel: writing programs, and writing test cases. If students became marginally proficient at both, I believe it would help crystallize their thinking mechanically. (It would also make them much better programmers.) Unfortunately, it would not lend itself to the other kinds of thinking that should be present ...


Only top voted, non community-wiki answers of a minimum length are eligible