Using and Learning Matlab in Geomorphology of Rivers: Experiences with Advanced Students and ResearchAndrew Darling, Geosciences, Colorado State University
The situation in which I think about teaching computation in science classes parallels the teaching activity I have uploaded. As is often the case, relatively advanced scientific work and course materials often have to be introduced with basic, even elementary scripting discussion. This odd juxtaposition of potentially middle or high-school level coding with current research topics in a scientific field highlights a certain need for including and improving coding instruction earlier in educational careers. For my students, senior undergraduates and graduates, the main goal is to develop scientific understanding, and along the way modeling can be learned to help augment that development. The converse relationship is also likely to be true, and I suggest some ways in which it could be useful: for students with much coding experience, the geosciences in general and river forms more specifically can provide a new way of learning about science through their computational lens.
The importance of modeling in earth sciences in general audiences can be discussed in the context of the Grand Canyon, and how it has been carved out by the Colorado River over long periods of time. I model how rivers behave with complex driving mechanisms. Given several possible combinations in driving variables, it can be possible to produce indistinguishable landscape forms (like a canyon). One of my research projects showed, using landscape evolution models written in Matlab, that the general form of the Grand Canyon could be produced through 2 or more possible mechanisms. Field evidence existed for both mechanisms being influential on canyon development, but the models showed us a plausible means of testing which control on canyon formation was most influential in the Grand Canyon. After extensive work our data and models support a relatively recent (5 or 6 million years ago) increase in incision rate formed Grand Canyon (published in Geosphere, 2015).
To further the example for how this research is done, the modeling is somewhat complex to learn for new users, but the implications of the models are straight forward. This fact allowed us to spend time learning what others had done with models and further develop the numerical simulations, and then use the model outputs to justify the project. It turned out that some of the results from geologic work (obtaining erosion rates and other measurements), were exactly as predicted by the models, but others were more complicated. We had to go back to the models and think about what was happening, re-evaluate our model inputs and then we were able to produce model outputs that matched the field data. For a period of time, we were comparing the more complicated geologic results to models that weren't appropriate, and it wasn't until another colleague, working on a related problem but with a lot more coding experience, helped show us a piece we were missing.
From basic questions about geosciences, like how old is the Grand Canyon, can be approached by relatively simple simulations, if the grad students and researchers involved have some working knowledge of coding to accompany their geologic expertise. From my experience, it is clear that most geology students could use more mathematical and computational training to help move the field forward.
However, improving the supporting connections between computation and math to research in the geosciences is not solely for research goals. This connection is a two-way street, because for some people, the context and concepts that can be modeled can improve the motivational and conceptual development of coding practices and procedures. Thus, things we've learned from research about geology can be used to help develop teaching coding by providing interesting context and unique problems to solve.
In pursuing deeper understanding of computation for my students, the projects are generally deeply involved with some geologic or geomorphic problem. Thus, we usually discuss river behavior conceptually to a large degree, spend time developing mathematical theory and then eventually translating that into coded computation. Since the matlab codes we use are relatively simple, for scientific codes, we typically show them simplified versions that are complete and ask them to parse the code into ideas and computations and try to explain each part, with some help. As the coding ideas are developed and the ideas connecting output responses to altering variables (sometimes requiring code modification) are developed, students eventually begin to be more comfortable using existing codes.
An additional problem of course, is that coding new and unique computations is not developed in this context. Many of the problems with people learning to code are with fundamental issues like syntax, constructing useful loops, keeping track of accuracy, precision and computation time. These of course are always plagued by trouble shooting, which can be very frustrating for students (and all of us).
I am interested in learning more about evidence-based education research that can help to improve the comfort and competence of users in coding scientific problems through improvements in instruction. I have experience working with math and science education researchers. A few general hypotheses can be drawn from this foundation: discussion of mathematics (and computation) that is highly conceptual and contextual can help improve understanding of what codes are doing, and so I try to incorporate this in my teaching. For general math classes that are traditionally procedural, the conceptual understanding is often neglected. In computation, it seems there may be further complications because coded language tends to seem even more abstract and can involve more complicated procedures than say, integrating by hand.
While I have some experience in learning and teaching computation in a relatively narrow range of experience, as well as a broad foundation for thinking about learning, I have little to offer how to teach computation. My experience shows that advanced students can usually learn basic coding with instruction that is not well directed, but that experience is frustrating and probably less efficient than it could be.