The primary purpose of this course has been to get students acquainted to the various reasons people want to model data. I've taught this course, using Python, and doing exercises and projects around population growth, financial models, and studying recursion through fractals. For the 2018 - 2019 school year, we are going to teach the course using the R language. I hope to teach some basic statistics and discuss data science.
I've loved teaching the introductory programming course. One of students' favorite aspects is learning turtle, and using it to get immediate response to the the code they write. It is one of my favorite topics because I get to see student's creativity, and am always excited to see what they create. Turtle can be used to introduce all of the basic constructs in Python, so I tend to make pretty heavy use of turtle. The course ends with an introduction to object-oriented programming. I have also taught an independent study, where we explored advanced topics in Python.
This course differs, from the cryptography course, in emphasis. I usually take a trip through error-correcting codes to get students use to working with matrices and bit sequences. There is also an emphasis on writing, interpreting, and implementing algorithms. Hence, the number theory taught in the course is always done from a computational perspective.
I've been using Haskell to implement the algorithms in this course. Choosing a functional programming language may seem odd, but my desire is to expose students to a different paradigm. It also emphasizes using recursion, list comprehensions, zip, and folds to accomplish iteration. Further, Haskell is a compiled language with a REPL. This allows students the ability to gain some experience with these tools without the overhead of learning a language like C or C++.
Two courses have been developed emphasizing the object-oriented paradigm. One focuses on using OOP as an organizational tool to build games and other projects. The other emphasizes theoretical aspects of the paradigm along with understanding how they've been implemented in Java. These courses are taught in a combination of a seminar and project-based learning.