Teaching

All of my courses for the spring semester are being run in-person at the Eau Claire campus.  The main resource we will use in the courses is Canvas.  All other material will be linked from the Canvas course page and listed in the syllabus.

Spring 2022 Course Schedule

  • CMPS 355-02: Software Engineering I
  • CMPS 491-01: Mobile Robotics

See the syllabus for my office hours and methods of contacting me for all of my courses.

YouTube Channel

This playlist is devoted to programming in C++. I mainly focus on basic and intermediate concepts but will touch on a few advanced topics as well.
C++
The foundation of our field. This playlist will cover the standard material seen in most courses by the same name. Most of the concepts covered will be intermediate to advance.
Welcome to the dark side. These videos introduce the basics and core fundamentals in our field. Many of my introduction students will be using this playlist in joint with the C++ playlist.
Introduction to Computer Science

Courses Developed

Mobile Robotics

This course is a upper-level elective that challenges students with literature reviews and hands-on projects.

Mobile Development

This course was introduced in the summer of 2020 and is in the process of becoming a 200-level course in the Computer Science curriculum.

Ethics of Technology

This course was introduced in Fall 2020 as a part of the new Data Science degree at Ramapo College.

UWEC Courses

Courses I have taught at Ramapo College of New Jersey since joining the faculty in 2015.

Discussion of algorithm design, problem-solving methods. Specific algorithm topics include divide-and-conquer, dynamic programming, and backtracking.

A hands-on experience in software engineering with key aspects of the software development life cycle. Focus is on the application of a high-level development environment to the fulfillment of an object-oriented software design specification. An introduction to modern design patterns.

Investigation of the theories and techniques of knowledge representation and automated reasoning as the foundation of artificial intelligence. Includes the comparative analysis of established theories and the synthesis of automated problem-solving behavior.

Developing software for mobile devices, designing for interruptions, creating service-oriented architectures, and sensing the physical world.

Developing software for mobile devices, designing for interruptions, creating service-oriented architectures, and sensing the physical world.

Ramapo Courses

Courses I have taught at Ramapo College of New Jersey since joining the faculty in 2015.

An introduction to problem-solving using computers, including basic concepts of computer systems, ANSI C++ programming language, algorithm design, program development, debugging, testing and documentation. Variables, data types, expressions, selection, repetition, functions and arrays will be covered in this course.

This course is a continuation of Computer Science I. It will continue the presentation of the programming language “C++” and object-oriented programming. It will further develop the student’s skills in the design, implementation, and testing of programs.

A study of the basic data structures and related algorithms. Stacks, queues, deques, arrays, linked lists, trees, graphs, strings, sorting, searching, and file structures are among the topics presented in this course.

A study of the assembly language of the IBM PC. Using this as a vehicle, the course will provide an introduction to computer architecture.

An introduction to the UNIX/Linux operating environment as seen from both the user’s and programmer’s perspective. The course introduces the common UNIX commands and utilities, the file system and files I/O, and the bash shell, UNIX programming for file control, process control, pipes, message queues, semaphores, shared memory threads, and signals will be presented.

This course focuses on the principles of object-oriented programming: data abstraction, encapsulation, inheritance, and polymorphism. This course will discuss the entire software project life-cycle: the analysis, design, coding, testing, and evaluation of object-oriented software.

This course presents a study of the impact of the computer on modern society. Positive and negative aspects of the use of the computer in such areas as the military, education, medicine, the office, the assembly line, databases, and the computerization of the home will be examined.

Mobile computing devices such as cell phones and smartwatches have become ubiquitous in our everyday lives.  We will explore development of applications for mobile devices.  The course material will focus on mobile device architecture, programming languages specific to mobile development, field-specific software engineering, user interface design, and application maintenance and distribution.  Additionally, we will create mobile solutions for a modern platform and operating systems.

This course is a hands-on introduction to the basic concepts in mobile robotics, focusing on control methodologies and the current state of the art in both research and application. Some of the key topics we will discuss are the history of Robotics, basic concepts of the robot motion, localization, path planning, sensing and perception, control methodologies, human-robot interaction, and robot ethics. At the end of this course, students will have an understanding of the current state of robotics, including open problems that are faced. Additionally, students will gain hands-on experience in programming multiple types of robots for various applications and problems.

A study of the representation and reasoning techniques of Artificial Intelligence. Basic reasoning techniques such as blind searches, heuristic searches, and game-playing will be discussed, along with characteristics of AI solutions. Representation techniques including propositional logic and predicate logic will be discussed, along with issues in the representation of knowledge. In addition, various AI tools and techniques will be discussed, including non-monotonic reasoning, probabilistic reasoning, expert systems, symbolic and connectionist learning, fuzzy logic, and planning.