Syllabus: Open source tools in geoscience | Jonathan Perry-Houts
Jonathan Perry-Houts

Syllabus: Open source tools in geoscience

I wrote this syllabus for a hypothetical undergraduate class on open source tools for geosciences. It's written as a 10-week 2-credit class, but feels very time-constrained. I might eventually extend it into a 4-credit class, or adapt it for a 15-week semester, depending on my needs in the future.

If you use any of this in your own course design, I'd be interested to hear feedback on it!


Open Source Tools for Geosciences

2 Credits. Meets 1x/week
Instructor: Jonathan Perry-Houts
Office Hours: TBA

Course Description
Earth sciences are moving towards increased use of computational methods. Whether it be traditional data analysis, numerical modleing, GIS, mapping, determining metamorphic phase equilibria, or otherwise, computational skills are necessary in all subfields of Earth science. Some existing tools in common use, including Matlab, ArcGIS, and Comsol, come with restrictive and expensive licenses which limit their accessibility and restrict the spread of quality, reproducible science. Fortunately, through contributions from academic researchers, companies, and individuals, all of the important functions of these commercial software packages are possible with Free and Open Source Software (FOSS).

In this course we will cover basic usage and capabilities of many open source tools for geosciences. Although terse, we will touch on the capabilities of many tools, and explore available resources for deeper involvement with each tool. The culmination of these efforts will be a whole-class collaborative project, in which we contribute to the development of a FOSS project.

Course Objectives
This course is intended to familiarize students with the capabilities of free software tools for Earth sciences, and with the process by which free software is developed. By the end of the term, students will be able to:

Prerequisites
Students will need a basic background in computing, equivalent to the introductory computer science course sequence. Exceptions can be made for anyone who feels comfortable with the fundamentals of programming such as loops, conditionals, and functions. Contact me for registration approval if you have not met the specific prerequisites. Also, feel free to contact me if you’re unsure whether you are prepared for this class. Chances are, the answer will be a tentative yes.

Course Materials
No paper books are necessary, but many online resources will be discussed throughout the class. Access to computers is provided in the computer lab, and in the library, but having a personal computer on which you may install software is helpful. Most of the programming assignments in this class will be done in the Python programming language. Students will have access to a “JupyterHub” server on which they can complete their assignments. JupyterHub is accessed through a web browser, and no special software is technically necessary. Contact me if any of this presents a challenge to you because of technical or accessibility reasons.

Term projects
The culmination of this class involves a class-wide collaboration which will result in a patch for widely used open source software package. The exact project will be announced at the beginning of the term.

Expectations and Grading
Students are expected to attend every lecture period. There will be in-class activities almost every day, for which you will forfeit points if not in attendance. I will do my best to make rubrics available ahead of time for all assignments to make my grading methods as transparent as possible. Grades will be divided as follows:

50% In-class participation
25% Weekly homework assignments
25% Contributions to class project

Diversity
Open inquiry and freedom of expression are fundamental to higher education. As an institution, we are committed to encouraging exploration of divergent perspectives and diverse identities. For that reason, and many others, all students are expected to respect one another. Harassment or bullying will not be tolerated, and will lead to disciplinary action to the extent permitted by institutional policies.

Academic Integrity
All students are expected to complete assignments in a manner consistent with the spirit in which they were assigned. Group work is encouraged on most assignments, and I will make it clear when it is not allowed on a per-assignment basis. Individual submissions based on group assignments are expected to be each individual's own work. Sources for quotations, paraphrases, and very specific ideas are to be acknowledged (style of attribution doesn't matter to me — just be consistent). Academic dishonesty will be dealt with following all applicable institutional policies.

Students with Disabilities
I strive wherever possible to make my courses inclusive of all students. If there are aspects of the instruction or design of this course that create barriers to your participation, please notify me as soon as possible. I always encourage you to discuss concerns with me during office hours, so that we can strategize ways for you to get the most out of the course.

Additionally, I encourage you to take advantage of the resources on campus for accessible education. They can provide services beyond this particular course to help you get the most of your college experience.

Tentative Course Outline (subject to change, depending on student interests)

Week Topics
1 Intro:
course overview
technical setup / orientation
discuss final project topic and mechanics
2 Intro to Python:
capabilities
packages
"Hello World"
3 Resources:
community documentation (forums, wikis, etc.)
API references
accessing the source code, reading comments
4 GIS:
intro to qGIS / GRASS
scripting (python interface)
5 Data manipulation and visualization pt 1:
types of data
numpy, scipy, pandas, etc.
methods of data representation
graphical representation best practices:
axes, colormaps, hillshade, contours, etc.
tools overview: matplotlib, mostly.
6 Numerical modeling pt 1.:
partial differential equation primer
into to numerical methods
finite difference method (how it works, strengths, limitations)
7 Contributing to open source projects:
common software project layouts
version control
code peer review
programming stylistic best practices
8 Numerical modeling pt 2. (existing tools)
PDE modeling packages
phase equilibrium modeling tools
overview of other modeling techniques (finite element, finite volume, etc.)
9 Visualization pt 2 (complex multidimensional data)
overview of available tools
intro to Paraview + VisIt
use cases for various tools and methods
10 Wrapping up term project, and exam review
Written on November 28th, 2018 by JPH