Courses
CS 101: Computer Science for All
2021 Spring, 2020 Fall
The first course in computer science is an introduction to algorithmic problem-solving using the Python programming language. Topics include primitive data types, mathematical operations, structured programming with conditional and iterative idioms, functional abstraction, and objects. Students apply these skills in writing programs to solve problems in domains across the liberal arts. No previous programming experience necessary.
CS 110: Introduction to Computer Science
2020 Spring, 2019 Spring, 2017 Fall
The goal of this course is to introduce you to two important elements of computer science: algorithmic problem solving and program design. Although courses such as this one are often characterized as "computer programming" courses, the primary focus of this course will not be on the skill of computer programming, but rather on the art of problem solving using a computer. While developing your ability to eloquently state solutions to problems, you will become familiar with the Python programming language.
CS 210: Applied Theory
2020 Spring, 2018 Fall, 2017 Winter (WLU), 2016 Winter (WLU)
This class will address some of the fundamental questions of theoretical computer science. Are there problems that cannot be computed, and if so, what are they? Do different abstract models of computation differ in what they can compute? What problems are computationally feasible to solve in reasonable amounts of time? In order to approach these questions, we will start by exploring a series of abstract models of computing machines, noting their abilities and limitations. This will lead us to discussions of abstract languages, or sets of strings, whose members can be recognized by specific machines. We will see how each language can be generated by a set of rules, or a grammar for the language. While much of this class will remain theoretical in nature, we will discuss ties to real-world computing where appropriate. The concepts you will learn in this course have relevance in areas ranging from compilers to cryptography.
CS 220: Principles of Programming Languages
2018 Fall, 2018 Spring, 2016 Fall (WLU), 2015 Fall (WLU), 2013 Spring (Hampshire College)
Why are there so many programming languages and how do they differ? What is an appropriate programming paradigm to solve a particular task? In this course, we will learn about common programming paradigms, such as object-oriented programming, functional programming, and logic programming, while using different languages that demonstrate these paradigms. We will also discuss core programming languages concepts such as syntax and semantics, typing, compiling versus interpreting, and context-free grammars. Students will be expected to write programs in a variety of languages, complete a small number of other problem sets, and conduct a final project in which they research and present a language of their choice not covered in class.
CS 307: Genetic Programming
2020 Fall, 2017 Fall, 2016 Spring (WLU)
Genetic programming borrows concepts from biological evolution in order to evolve populations of computer programs. In this course, students will learn the genetic programming algorithm, implement it in Clojure, and conduct term projects to add functionality to their implementations. Students will read and review recent research articles in the field. Students are not expected to know Clojure prior to the course, and will gain a deeper understanding about the functional programming paradigm during the course.
CS 375: Artificial Intelligence
2021 Spring, 2020 Spring, 2019 Spring
This course provides an introduction to the field of artificial intelligence. Topics will include agents and environments, heuristic search, game playing, formal logic and inference, evolutionary computation, and machine learning.
Fundamentals of Programming I
2016 Fall (WLU), 2015 Fall (WLU)
A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Topics include:
- the design and implementation of algorithms for solving problems;
- an introduction to syntax, semantics, and pragmatics of the Python programming language;
- a survey of various types of programming applications such as numerical computation, text processing, graphics, image processing, and networking.
Algorithm Design and Analysis
2017 Winter (WLU)
Designing and implementing efficient algorithms plays a large role in all computer science. This class focuses on designing and analyzing algorithm s to solve a variety of problems. We will discuss both running time and memory complexity analysis of algorithms, in both the worst case and average case settings. Many efficient algorithms will require advanced data structures such as heaps and graphs. We will cover widely useful algorithms such as greedy algorithms, divide and conquer, dynamic programming, and network flow. Finally, we will consider how to prove that a problem has no efficient solution.