I have been wondering how to come up with good calculus problems. Well, a mathematical exercise in general is either (a) proof based, or (b) calculation based. Sadly calculus is a calculation based subject. So it requires producing a larger quantity of problems rather than higher quality problems.
But such a thing could be automated, couldn't it? Why not?
After reading Stefan Weinzierl's "Computer Algebra in Particle Physics" (arXiv:hep-ph/0209234v1) which documents the construction of a toy computer algebra system, it seems quite easy to come up with a program that would generate functions the student is expected to differentiate.
Conversely, by coming up with a method to carry out differentiation, it seems equally trivial to come up with such a problem, differentiate, then ask the student to integrate.
Lets not get caught up with the particular Computer Algebra implementation details. I just wish to sketch some ideas.
We could then consider constructing a function in some manner. E.g., we allot some "weight" to a function depending on how time intensive it would be to calculate it.
The heavier a function is, the longer it takes to compute its derivative. So composing functions results in a heavier function than adding functions. The trick is to relate the weight to the number of operations it would take, and make certain that it is "reasonable" for undergraduates to do.
So a polynomial with k terms in it would be weight k, special functions would have a weight of wt(function)·wt(argument of special function) which depends on the function and its argument. Composing functions would just multiply their weight.
So the program would take in some positive integer, and return a function the student should differentiate. The bigger the integer, the harder the problem.
Conversely, if we can symbolically take derivatives, then we can present integration exercises by taking a derivative problem, take its derivative, and give that to the student to integrate. I think there should be a better way to come up with integration exercises though...
There are a number of wonderful resources on the internet with excellent problems, I'll just note a few of them: