We have added a computing requirement for physics majors in my department. Physics is about observing and describing the world around us and
this often requires many widely applicable skills (analytical,
computational, electronics, mechanical, plumbing, you name it,...).
I see graduate students starting out with a wide range of these axillary
skills and students with broad practical experience become more effective
and valuable collaborators much faster. This isn't about finding
"lab minions". Students are expected to pick up a lot of practical
experience in the lab and an undergraduate education that ignores
commonly required skills is lacking, if that gets in the way of doing the
physics. Any sentiments about getting others to do the grunt work is
a fantasy. Most research really is a lean operation with a lot of DIY
expected of everyone involved. Furthermore, a good technical knowledge
is still required in the cases where we collaborate with experts to
build specific devices or software systems.
Around my department I have encountered a variety of comments on
computing ranging from those can get along using something like Excel
to those of us who code frequently and might even need to hack a kernel
on occasion. But the pervasive feeling is that programming literacy should
be expected of a physics major. In my research work (HEP) a strong
computational background is really indispensable for students wishing
to participate in research. I expect the same to be true for many
research areas involving large data sets and complex modeling problems.
I have developed and taught an introductory course in computational physics
for a number of years. The course is technically in C++, but we primarily
restrict things to the C-language features with a procedural programming
model. We cover pretty much all of C, talk about how computers work, discuss
memory usage, binary operations, creation and use of libraries, etc.
What makes this class different from a CS class is that we require a semester
of calculus and a semester of introductory physics and while about half of the
class is devoted to programming, the rest is used to cover some statistical
concepts, illustrate the applications of some common numerical methods,
fitting/parameter extraction, data visualization, and some open ended
problems where students are expected to simulate and study some scenario
with simple Monte Carlo approach. Basically this is an introduction to
skills a working researcher will find valuable in the lab. We then offer
a couple of optional classes appropriate for advanced undergraduates
or graduate students that focus on various computation methods and topics.
Of course your friendly CS or engineering department may offer a perfectly
reasonable course to teach programming to science majors as was the case in my
undergraduate days. You'll have to decide if they have a service course
that covers enough for majors who may be likely to be doing scientific
computing in the near future.
I mainly teach physics and other STEM majors and find that about half
of the students I encounter have no previous programing experience.
Every year I hear from students who find they can immediately apply this
new experience to summer lab jobs, work in REU programs, etc. and as a result
get to participate more fully in the research projects. I choose C/C++,
because I want them to use a compiled language and one that is low-level
enough to allow for some discussion about what the hardware does. We
concentrate on general programming concepts, and avoid unnecessary
learning curves of complex libraries, heavyweight IDEs, etc. We use
g++ on a Linux cluster, gnuplot, a simplified plotting library,
and ddd (introduced about the time we start dealing with pointers!).
Fairly barebones, but it helps us to cover a lot of ground in a semester.
IMHO this has been a very well useful and well regarded addition to
our curriculum.
Around my department I have encountered a variety of comments on computing ranging from those can get along using something like Excel to those of us who code frequently and might even need to hack a kernel on occasion. But the pervasive feeling is that programming literacy should be expected of a physics major. In my research work (HEP) a strong computational background is really indispensable for students wishing to participate in research. I expect the same to be true for many research areas involving large data sets and complex modeling problems.
I have developed and taught an introductory course in computational physics for a number of years. The course is technically in C++, but we primarily restrict things to the C-language features with a procedural programming model. We cover pretty much all of C, talk about how computers work, discuss memory usage, binary operations, creation and use of libraries, etc. What makes this class different from a CS class is that we require a semester of calculus and a semester of introductory physics and while about half of the class is devoted to programming, the rest is used to cover some statistical concepts, illustrate the applications of some common numerical methods, fitting/parameter extraction, data visualization, and some open ended problems where students are expected to simulate and study some scenario with simple Monte Carlo approach. Basically this is an introduction to skills a working researcher will find valuable in the lab. We then offer a couple of optional classes appropriate for advanced undergraduates or graduate students that focus on various computation methods and topics. Of course your friendly CS or engineering department may offer a perfectly reasonable course to teach programming to science majors as was the case in my undergraduate days. You'll have to decide if they have a service course that covers enough for majors who may be likely to be doing scientific computing in the near future.
I mainly teach physics and other STEM majors and find that about half of the students I encounter have no previous programing experience. Every year I hear from students who find they can immediately apply this new experience to summer lab jobs, work in REU programs, etc. and as a result get to participate more fully in the research projects. I choose C/C++, because I want them to use a compiled language and one that is low-level enough to allow for some discussion about what the hardware does. We concentrate on general programming concepts, and avoid unnecessary learning curves of complex libraries, heavyweight IDEs, etc. We use g++ on a Linux cluster, gnuplot, a simplified plotting library, and ddd (introduced about the time we start dealing with pointers!). Fairly barebones, but it helps us to cover a lot of ground in a semester. IMHO this has been a very well useful and well regarded addition to our curriculum.