  Computer programming was once thought of as a skill required only by
professional software developers. But today, given the ubiquitous nature of
computation and data science it is quickly becoming necessary for all
scientists and engineers to have at least a basic knowledge of how to program.
Teaching how to program, particularly to those students with little or no
computing background, is well-known to be a difficult task. However, there is
also a wealth of evidence-based teaching practices for teaching programming
skills which can be applied to greatly improve learning outcomes and the
student experience. Adopting these practices naturally gives rise to greater
learning efficiency - this is critical if programming is to be integrated into
an already busy geoscience curriculum. This paper considers an undergraduate
computer programming course, run during the last 5 years in the Department of
Earth Science and Engineering at Imperial College London. The teaching
methodologies that were used each year are discussed alongside the challenges
that were encountered, and how the methodologies affected student performance.
Anonymised student marks and feedback are used to highlight this, and also how
the adjustments made to the course eventually resulted in a highly effective
learning environment.
