Many scientific and engineering numerical optimization problems are both computationally expensive and difficult to solve for analytical reasons. Not surprisingly, for such problems there are also significant issues in the integration of the software that describes the system being optimized. These difficulties are often intertwined. The research that will be done will look at analytical and algorithmic issues that arise in the solution of such difficult numerical optimization problems. Specifically, the work will evolve along two complementary lines: the further development and analysis of pattern search methods for nonlinear optimization, and the design and analysis of techniques for using approximation models to optimize systems defined by computationally expensive functions. Both these lines of research include a strong effort in software development and experimentation. Practical experience working on numerical optimization problems from science and engineering reveals issues and techniques that are not covered well in the current computer science curriculum and yet would serve students well in any multidisciplinary computational setting. The course development will draw upon existing knowledge and software tools in computer science and computational mathematics to design new courses---practicums, in effect---that will teach students more about how to understand, maintain, enhance, and optimize existing scientific software. The emphasis will be on systematic analysis and testing with an eye toward performance programming. Fundamental to this approach is the belief that students should be taught how to experiment in a systematic, scientific fashion to analyze and reason about extant, complex computer programs.