Which courses should I take? (comp. science)

In summary, the conversation discusses the selection of courses for a student interested in pursuing work in computational science. The student mentions having a limited number of elective spaces and has identified several potential courses related to computational work. They are seeking advice on which courses would be best as core courses. The conversation then goes on to list various courses related to computational mathematics and physics, including algorithms, parallel programming, linear algebra, optimization, and computational methods for differential and partial differential equations. The student also mentions their interest in physics and suggests taking physics courses 239 and 339, as well as CS 341 for algorithm design and CS 371 for an introduction to computational mathematics.
  • #1
cscott
782
1
Hi,

I'm trying to figure out which courses I should be taking if I want to do work in computational science. I'm in honours physics so my elective space is pretty limited (maybe two electives per year until year 4). I've gone through the math/computer science/physics sections of our undergraduate calendar and picked out courses on anything to do with computational work. There's no way I can take even half of them and some are perhaps geared towards one area of interest or are too "pure" in one area, but I want to know which ones would be the best "core" courses.

Any help would be appreciated.

The first two are offered by the physics department and are exactly what I'm looking for so I'm pretty much certain I'm taking these two:

PHYS 239 LEC 0.50 Course ID: 007408
Scientific Computation 1
Numerical analysis in electrostatics, mechanics and quantum mechanics with emphasis on finite difference and finite element solution methods.

PHYS 339 LEC 0.50 Course ID: 007435
Scientific Computation 2
Application of numerical computation to basic topics in chemical physics, statistical mechanics and biophysics. Solution methods will include topics such as Monte Carlo and molecular dynamics methods and numerical optimization techniques. Now for the rest:

CS 341 LAB,LEC 0.50 Course ID: 004392
Algorithms
The study of efficient algorithms and effective algorithm design techniques. Program design with emphasis on pragmatic and mathematical aspects of program efficiency. Topics include divide and conquer algorithms, recurrences, greedy algorithms, dynamic programming, graph search and backtrack, problems without algorithms, NP-completeness and its implications.

CS 343 LAB,LEC 0.50 Course ID: 011417
Concurrent and Parallel Programming
An introduction to concurrent and parallel programming, with an emphasis on language constructs. Major topics include: exceptions, coroutines, atomic operations, critical sections, mutual exclusion, semaphores, high-level concurrency, deadlock, interprocess communication, process structuring, shared memory and distributed architectures. Students will learn how to structure, implement and debug concurrent programs.

CS 372 LAB,LEC 0.50 Course ID: 011444
Computational Linear Algebra
Basic error analysis and estimation of errors in solving linear equations. Special methods for solving systems having special features. Computing and using orthogonal factorizations of matrices. The QR algorithms for solving the algebraic eigenvalue problem. Computation and uses of the singular value decomposition (SVD).

CS 466 LEC 0.50 Course ID: 004426
Algorithm Design and Analysis
Algorithmic approaches and methods of assessment that reflect a broad spectrum of criteria, including randomized algorithms, amortized analysis, lower bounds, approximation algorithms, and on-line algorithms. Particular examples will be chosen from different areas of active research and application.

CS 472 LAB,LEC 0.50 Course ID: 004428
Numerical Solution of Large Sparse Systems of Equations
Introduction, example applications from finite element analysis, optimization. Data structures, basic graph theory. Direct methods: symmetric, non-symmetric structures, ordering methods: RCM, minimum degree, nested dissection. Iterative methods: steepest descent, conjugate gradient, GMRES, CGSTAB. Preconditioning methods: level of fill, drop tolerance. Methods for high performance architectures.

CS 371 LAB,LEC 0.50 Course ID: 011363
Introduction to Computational Mathematics
A rigorous introduction to the field of computational mathematics. The focus is on the interplay between continuous models and their solution via discrete processes. Topics include: pitfalls in computation, solution of linear systems, interpolation, discrete Fourier transforms and numerical integration. Applications are used as motivation.

CS 437 LAB,LEC 0.50 Course ID: 004408
Computer Simulation of Complex Systems
Building and validation of stochastic simulation models useful in computing, operations research, engineering and science. Related design and estimation problems. Variance reduction. The implementation and analysis of simulation results. [Offered: W,S]

CS 466 LEC 0.50 Course ID: 004426
Algorithm Design and Analysis
Algorithmic approaches and methods of assessment that reflect a broad spectrum of criteria, including randomized algorithms, amortized analysis, lower bounds, approximation algorithms, and on-line algorithms. Particular examples will be chosen from different areas of active research and application. [Offered: F,S]

CS 472 LAB,LEC 0.50 Course ID: 004428
Numerical Solution of Large Sparse Systems of Equations
Introduction, example applications from finite element analysis, optimization. Data structures, basic graph theory. Direct methods: symmetric, non-symmetric structures, ordering methods: RCM, minimum degree, nested dissection. Iterative methods: steepest descent, conjugate gradient, GMRES, CGSTAB. Preconditioning methods: level of fill, drop tolerance. Methods for high performance architectures.

CS 467 LEC 0.50 Course ID: 011497
Introduction to Quantum Information Processing
Basics of computational complexity; basics of quantum information; quantum phenomena; quantum circuits and universality; relationship between quantum and classical complexity classes; simple quantum algorithms; quantum Fourier transform; Shor factoring algorithm; Grover search algorithm; physical realization of quantum computation; error-correction and fault-tolerance; quantum key distribution.
CO 352 LAB,LEC 0.50

Course ID: 011440
Computational Optimization
A first course in computational optimization. Linear optimization, the simplex method, implementation issues, duality theory. Introduction to computational discrete and continuous optimization.

CO 367 LAB,LEC 0.50
Course ID: 003898
Nonlinear Optimization
A course on the fundamentals of nonlinear optimization, including both the mathematical and the computational aspects. Necessary and sufficient optimality conditions for unconstrained and constrained problems. Convexity and its applications. Computational techniques and their analysis.

AMATH 342 LAB,LEC 0.50 Course ID: 011451
Computational Methods for Differential Equations
Modelling of systems which lead to differential equations (examples include vibrations, population dynamics, and mixing processes). Scalar first order differential equations, second-order differential equations, systems of differential equations. Stability and qualitative analysis. Implicit and explicit time-stepping. Comparision of different methods. Stiffness. Linearization and the role of the Jacobian. [Offered: F,S]

AMATH 452 LAB,LEC 0.50 Course ID: 011448
Computational Methods for Partial Differential Equations
This course studies basic methods for the numerical solution of partial differential equations. Emphasis is placed on regarding the discretized equations as discrete models of the system being studied. Basic discretization methods on structured and unstructured grids. Boundary conditions. Implicit/explicit timestepping. Stability, consistency and convergence. Non-conservative versus conservative systems. Nonlinearities. [Offered: F]

AMATH 454 LAB,LEC 0.50 Course ID: 011443
Applications of Computational Differential Equations
This course will present two major applications of differential equations based modeling, and focus on the specific problems encountered in each application area. The areas may vary from year to year. Students will gain some understanding of the steps involved in carrying out a realistic numerical modelling exercise. Possible areas include: Fluid Dynamics, Finance, Control, Acoustics, Fate and Transport of Environmental Contaminants. [Offered: W]
 
Physics news on Phys.org
  • #2
If you are interested in computational math and physics, I would recommend both physics classes you listed 239 and 339, as well as CS 341 for algorithm design, CS 371, and all three of those AMATH courses. Those all seem to relate well to one another as far as computational math and physics techniques go. The Algorithm design class will help you with any of those classes in my opinion
 
  • #3
I would choose: 343,437,452 for sure, but that's just me o:)
 
  • #4
Definitely 452. This will help you a lot in your physics career.
 
  • #5
I don't think you can call yourself a real true computer scientist unless you know the stuff in CS 341, that's really the fundamentals of theoretical computer science.
 
  • #6
I'm almost thinking a double-majoring in computer science and physics with an overall emphasis in computational science in physics, but it'd be nice to do some other stuff as well. I just don't think I can take up all the prereqs to take certain CS classes (like the algorithms class) that I want to along with numerical stuff from the science and amath department. Even if they did let me take them I don't know if I'd drown or not (I didn't take algebra like cs/math students do here or two core second year courses). I do have a pretty strong CS background though.

Is a double degree like valuable in the industry? Could I do stuff with the CS background or would it help me at all in science research? What a good route to quantum information theory? I always had an interest in that as well.

Thanks for the recommendations so far.
 

1. What are the core courses I should take in computer science?

The core courses in computer science typically include programming, data structures, algorithms, computer architecture, and computer organization. These courses provide a strong foundation in computer science principles and skills.

2. Are there any recommended electives for computer science?

Some recommended electives for computer science include artificial intelligence, database systems, human-computer interaction, and software engineering. It is important to choose electives that align with your interests and career goals.

3. How important is it to take math courses for computer science?

Math is a crucial component of computer science. Courses in calculus, discrete mathematics, and linear algebra are especially important for understanding algorithms and data structures. It is recommended to take as many math courses as possible.

4. Are there any programming languages I should focus on?

The most commonly used programming languages in computer science are Java, Python, C++, and JavaScript. It is beneficial to have knowledge and experience in multiple languages, but it is important to focus on mastering at least one language.

5. Should I take any courses outside of computer science?

Taking courses outside of computer science can provide valuable knowledge and skills that can be applied in the field. Courses in statistics, psychology, and business can be particularly beneficial for a career in computer science.

Similar threads

  • STEM Academic Advising
Replies
12
Views
1K
  • STEM Academic Advising
Replies
5
Views
857
  • STEM Academic Advising
Replies
11
Views
668
  • STEM Academic Advising
Replies
21
Views
2K
Replies
26
Views
2K
  • STEM Academic Advising
Replies
2
Views
858
  • STEM Academic Advising
Replies
6
Views
1K
  • STEM Academic Advising
Replies
2
Views
999
  • STEM Academic Advising
Replies
8
Views
2K
  • STEM Academic Advising
Replies
7
Views
2K
Back
Top