This page lists the classes that I used to teach in the Department of Computer Science and Engineering at Washington University in St. Louis. For the classes that I teach in the School of Mechanical, Industrial, and Manufacturing Engineering at Oregon State University, you should click here.

## CSE 200: Engineering And Scientific Computing

This class is intended to introduce students to the MATLAB programming environment, and to show them how to solve problems in science and engineering using it. The class assumes no prior knowledge of computer programming. One of the major goals of the class is to show students how they can solve some of the problems they will encounter as scientists and engineers using computational tools. Last taught in the spring of 2009.From the course catalog:

Formerly CS 265. This course provides an introduction to numerical methods for scientific computation which are relevant to engineering problems. Topics addressed include interpolation, integration, linear systems, least-squares fitting, nonlinear equations and optimization and initial value problems. Basic procedural programming concepts (procedural and data abstraction, iteration, recursion) will be covered using MATLAB. C will be briefly covered so the students understand that the algorithms and programming concepts apply in both. Corequisite: Math 217.

## CSE 232: Programming Skills Workshop

This is a short class designed to show students some tricks to make them more efficient C++ programmers. It doesn't teach teach C++ programming and syntax, so if you can't write, compile, and run C++ programs already, you're not going to get much out of this class. However, if you do know some C++ and would like to learn some practical ways to reduce the amount of time you spend programming (and debugging) your code, you might find this class interesting. Last taught in the spring of 2006.From the course catalog:

Formerly CS 242N. Provides an overview of practical implementation skills to help beginning C++ programmers. Topics include compilation and linking, memory management, pointers and references, using code libraries, testing and debugging. The course is offered as a series of four workshops on the first four weeks of the semester. Prerequisites: CSE 132/CS 102.

## CSE 332: Object-Oriented Software Development Laboratory

This is our introductory C++ programming class, and covers the basics of the language and the Standard Template Library. We assume that you can already program in some object-oriented language, which will often be Java. If you don't already know an object-oriented language, then you will have a hard time keeping up with the class. If you have never programmed a computer at all, you will most likely be totally lost. We also assume that you know some of the basic data structures, and are familiar with "big-O" notation. Last taught in the spring of 2008.From the course catalog:

Formerly CS 342S. Intensive focus on practical aspects of designing, implementing and debugging object-oriented software. Topics covered include developing, documenting, and testing representative applications using object-oriented frameworks and C++. Design and implementation based on frameworks are central themes to enable the construction of reusable, extensible, efficient, and maintainable software. Prerequisites: CSE 132/CS 102G and 241.

## CSE 517: Machine Learning

This class is a broad introduction to the field of machine learning. It covers the main sub-fields and algorithms,and gives students practical experience of applying machine learning techniques to real problems. Machine learning is a very active research area, and is starting to have an impact in the "real world". Companies like Google make exensive use of machine learning algorithms in their systems. The class covers many of the common algorithms and techniques from the field, and shows you how to design your own machine learning systems. Some of the material is quite mathematical, so you should be comfortable with basic calculus and linear algebra before taking this class. Last taught in the spring of 2007.From the course catalog:

Formerly CS 527A. The field of machine learning is concerned with the question of how to construct computer programs that automatically improve with experience. Recently, many successful machine learning applications have been developed, ranging from data-mining programs that learn to detect fraudulent credit card transactions, to information-filtering systems that learn usersÃ‚Â´ reading preferences, to autonomous vehicles that learn to drive. There have also been important advances in the theory and algorithms that form the foundation of this field. This course will provide a broad introduction to the field of machine learning.

## CSE 550: Mobile Robotics

This is the introductory mobile robotics class. The class is a broad introduction to mobile robotics, covering a lot of material from power sources and gear trains, up to high-level control and sensor-interpretation algorithms. Students in the class get the chance to program both simulated and real robots, using the ROS robot middleware. To take this class, you need to be able to write code in either Python or C++ (and preferably both). We will not teach any programming during the class, and you're going to be miserable if you don't already know it. To get the most out of the class, you will also need some mathematical skills. We use some calculus, some linear algebra, and some probability in the techniques and algorithms that we cover. If you don't have some background in each of these, then you will not be able to follow a lot of the material. Last taught in the fall of 2011. [web page]From the course catalog:

An introduction to the design and implementation of intelligent mobile robot systems. This course will cover the fundamental elements of mobile robot systems from a computational standpoint. Issues such as software control architectures, sensor interpretation, map building and navigation will be covered, drawing from current research in the field. Students will also design and build a small mobile robot and program it to perform simple tasks in real-world environments. Class size limited to 20. Prerequisites: CSE 131/CS 101G, SSM 326A, Math 320 or permission of instructor.

## CSE 553: Advanced Mobile Robotics

This class follows on from CSE 550, and looks at some of the most recent work in the field of mobile robotics. Lecture material is taken from current research papers, often less than a year old. Students work on individual or small-group projects that implement the key elements of the papers that we cover in class. Since we're covering advanced material in this class, we assume that you already know the basic algorithms and techniques of mobile robotics. If you have not taken CSE 550, or an equivalent class, you're going to be hopelessly lost. We also go into more mathematical detail in the class, so you should be comfortable with calculus, linear algebra, and probability theory. Since much of the grade for this class is based on your project, you should be very comfortable writing and debugging code in C++ or Python (and preferably both). Class projects for CSE 553 will use our research robot platforms. Last taught in the spring of 2012. [web page]From the course catalog:

This course covers advanced topics from the theory and practice of mobile robotics. Students will read, present and discuss papers from the current research literature. There will be a substantial programming project, in which students implement and test ideas from the current research literature on one of the departmentÃ‚Â´s research robot platforms. Prerequisites: CSE 550A and strong programming skills (preferably in C++).