I'm an undergraduate Physics major. By next semester I'll be three classes away from a Computer Science minor. I've taken a few programming classes and really enjoyed them(java and C#), so I will most likely be going the theoretical/computational route for grad school. I've selected some classes to choose from which seem to me like they would be helpful in the computational field. I would be delighted for anyone with experience in the field of Computational Physics to weigh in on which classes may be the most useful: Numerical Analysis I. Introduction to theory & techniques for computation with digital computers. Topics include: solution of nonlinear equations; interpolation & approximation; solution of systems of linear equations; numerical integration. Students will use MATLAB to study the numerical performance of the algorithms introduced in the course. Introduction to the Design and Analysis of Algorithms. A detailed treatment of the design, analysis, and complexity of algorithms, including greedy algorithms, divide and conquer, dynamic programming, and limitations of algorithms as problems get larger or more complex. Optimization Techniques. Introduction to algorithms for finding extreme values of nonlinear multivariable functions with or without constraints. Topics include: convex sets and functions; the arithmetic-geometric mean inequality; Taylor's theorem for multivariable functions; positive definite, negative definite, and indefinite matrices; iterative methods for unconstrained optimization. Linear Programming. Introduction to finding extreme values of linear functionals subject to linear constraints. Topics include: recognition, formulation, and solution of real problems via the simplex algorithm; development of the simplex algorithm; artificial variables; the dual problem and duality theorem; complementary slackness; sensitivity analysis; and selected applications of linear programming. Linux/UNIX Programming. This course will prepare students to develop software in and for Linux/UNIX environments. Topics to be covered include basic operating system concepts, effective command line usage, shell programming, the C language, programming development tools, system programming, network programming (client-server model and sockets), and GUI programming. Software Engineering. Principles, practices and methodology for development of large software systems. Object-oriented principles, design notations, design patterns and coping with changing requirements in the software process. Experiences with modern development tools and methodologies. A team project is an integral part of this course. Computer Graphics. Principles and techniques of computer graphics. Interactive graphics software development using a modern graphics standard. Topics include: primitives, transforms, clipping, modeling, viewing, rendering, texture, animation and ray tracing. A group project is an integral part of this course. Thank you in advance. I've been trying to decide which three to take from these courses. Or if anyone has any possible suggestions for classes I did not think of, that is perfectly welcome too.