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 ...


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 ...


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, ...


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 ...


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.


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 ...


4

While I have never actually taught pseudocode, my experience as a math teacher and a computer science student might provide some insight. On the exam for an object oriented programming courses the prof asked us to write a piece of pseudocode, and was chagrined that most students (including myself) chose to write out the full C++ code, since he, like you, ...


4

Something which I don't see mentioned here so far is mathematics in non-base 10. there are legitimate situations where bit shifting, binary algebra and hexadecimal are quite a benefit to coding. For example, if the device you're developing for has limited resources (embedded systems, legacy programs), using a bit shift can sometimes save precious memoryspace ...


4

These two references might help. Neither is aimed at industry needs specifically, but undergraduate computer science curricula are partially driven by industry job market needs. The first is aimed specifically at liberal arts colleges: (1) "A 2007 Model Curriculum for a Liberal Arts Degree in Computer Science," Liberal Arts Computer Science Consortium,...


4

They need at least a passing acquaintance with both aspects. There are many practical uses (regular expressions for patterns, context free grammars revolutionized programming languages in ways that are hard to appreciate unless you learned classic BASIC or early FORTRAN and later saw Algol or Pascal for the first time) to highlight. The limits of computation ...


4

This same question has arisen at my current institution even earlier (i.e., after AP Calculus AB). The traditional next course after the Calculus is Real Analysis (constructing the real numbers in one of the four ways - Dedekind cuts, infinite decimal expansions, rational sequences modulo Cauchy, or with the axiom of completeness: usually via one of the last ...


4

Admittedly, students will find it easy to believe that computers will take longer to solve a given problem if the input size grows. However, this is also true for problems which can be solved in polynomial time on a deterministic machine and completely misses the focus on NP-hardness and NP-completeness. This is an important point which is often neglected ...


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