Scientific programming has become increasingly essential for
manipulating, visualizing, and interpreting the large volumes of data
acquired in earth science research. Yet few domain-specific
instructional approaches have been documented and assessed for their
effectiveness in equipping geoscience undergraduate students with coding
and data literacy skills. Here we report on an evidence-based redesign
of an introductory Python programming course, taught fully remotely in
2020 in the School of Oceanography at the University of Washington. Key
components included a flipped structure, activities infused with active
learning, an individualized final research project, and a focus on
creating an accessible learning environment. Cloud-based notebooks were
used to teach fundamental Python syntax as well as functions from
packages widely used in climate-related disciplines. By analyzing
quantitative and qualitative student metrics from online learning
platforms, surveys, assignments, and a student focus group, we conclude
that the instructional design facilitated student learning and supported
self-guided scientific inquiry. Students with less or no prior exposure
to coding achieved similar success to peers with more previous
experience, an outcome likely mediated by high engagement with course
resources. We believe that the constructivist approach to teaching
introductory programming and data analysis that we present could be
broadly applicable across the earth sciences and in other scientific
domains.