If you look at the curricula for mathematics majors in most colleges, you’ll find among the requirements some kind of introductory computer programming course. At our place, math majors (and math ed majors) have to take a one-semester C++ programming course and a general-audience “Introduction to Computing” course. So there is some implicit message being sent that math majors need to know some things about computers in general, and programming in particular.
But I’ve been wondering if an implicit message is good enough. I’d like to be able to go into a sophomore- (or even freshman-) level course and assign a problem that requires computers for the solution — like numerical approximations to eigenvalues or a simple Newton’s Method problem — and students have to use their computing skills to cook up that solution in an appropriate context, whether it’s a spreadsheet or a C++ program or an applet written in Maple. (And not just mindlessly use a pre-packaged specialized computer program that came with the book to do it.)
The ability to handle such a problem is really important for graduates with math degrees in their jobs. But as it is, even the best students who take their computing courses early on struggle to solve problems like this simply because they don’t have the practice. We see problems like this in a few places in the math major program, but they are a long way from being as common in our curriculum as they are in the real world. And then there are students who have little to no computing skills coming in to college (even though they are supposed to be digital natives) and don’t take those computing courses until they’re juniors or seniors, because those courses aren’t prerequisites for anything.
So I’m wondering how to make computing in general, and programming in particular, a lot more explicit and a lot more prominent in the math major (and minor) curricula, starting as early as possible. And I have the following question: What should math majors know about computing, and when should they know it?
Here are my initial answers:
- By the end of year 1: Skilled use of end-user office applications including email, word processing, databases, spreadsheets, and presentation software; skilled use of at least two different web browsers and basic web applications; basic programming skill in a high-level language; ability to carry out common calculus and algebra tasks in a computer algebra system; knowledge of differences between file formats and ability to convert one file format to another.
- By the end of year 2: Ability to implement mathematical algorithms using existing technological knowledge, including programming; experience with at least two distinct operating systems; ability to typeset a technical document in LaTeX; working knowledge of computer networks and Internet protocols.
- By the end of year 3: Ability to construct creative solutions to problems using computer programs or applications; ability to write programs appropriate for advanced upper-division mathematics courses (e.g. real analysis, abstract algebra, etc.); advanced knowledge of LaTeX; experience with an open-source operating system and/or open source software; for preservice math teachers, advanced skill in creating computer presentations as well as skill in Geometers Sketchpad and other common classroom technologies other than calculators.
- By the end of year 4 ( = graduation): Knowledge of programming in at least two different languages; experience with at least two computer algebra systems; skill in finding or creating multimedia content and assembling it into an intelligently-designed presentation.
Any thoughts on that, or additions, deletions, etc.?