Hi! I'm a professor here at NMU. My current primary research interest is holographic algorithms. Other interests include algorithms, computational complexity, software engineering, graphics, and pretty much any kind of mathematics.
This is an intro course to HTML and CSS. It is primarily intended for non-majors, although some CS students take the course and some non-majors decide to change to CS after taking it.
This is an intro course in programming (using Java). This is the first course most CS majors take, but many non-majors also find it interesting and broadens their perspectives on computers and computation.
This course is a continuation of CS120. Incoming CS majors with significant programming backgrounds sometimes take this as their first CS course. We focus on topics such as string handling, algorithm analysis, recursion, data structures, interfaces, inheritance, and threading, all the while reinforcing CS120 topics and further honing programming skills.
This is an introduction to C++, directed towards students with 2 semesters of programming in Java.
This course covers both implementation and application of data structures, while giving students an opportunity to hone their C++ skills, especially pointer manipulation and recursion.
This course covers the fundamentals of developing native aps for hand-held devices running Android OS.
This course teaches how to make fully interactive websites and web applications, targeted to multiple platforms - including mobile devices. Topics include HTML5, CSS3, JavaScript, jQuery, and Node.js. This course is aimed towards Computer Science and Mobile and Web App Development majors who are at least halfway through the sophomore year of their respective programs. It forms part of the core for the Mobile and Web App Development major, but also serves as a CS elective for Computer Science majors.
This is an upper-level course in algorithm design and analysis, i.e. how to design efficient algorithms and figure out how much time and/or space they need to run. Topics include asymptotic notation, greedy algorithms, divide-and-conquer, dynamic programming, and NP-completeness.
This is an upper-level course in advanced networking and parallel computing
In this course, we study strategies for writing computer programs that improve with experience. The basic theory of machine learning is covered, including concepts such as hypothesis space, bias, overfitting, training sets, and testing sets. These concepts will be applied to specific learning techniques, such as decision trees, bayesian classifiers, belief networks, instance-based learning, neural networks, and support vector machines (selection depending somewhat on time and interests of the class).
This course is an introduction to software engineering, which is defined by the IEEE as: “The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software...”. Essentially, in this course we focus on all of those aspects of developing and maintaining software other than how to write code.
A graduate-level introduction to complexity theory, which is mainly concerned with the time and space resources (i.e. CPU cycles and memory) required to solve computational problems. Topics include deterministic and nondeterministic Turing machines, diagonalization, simulation, decidable and undecidable languages, DTIME, NTIME, P, NP, and coNP complexity classes, reductions, NP-hard and NP-complete problems, space complexity, the polynomial hierarchy, Boolean circuits, non-uniform complexity, and randomized computation.
The graduate version of the machine learning course. Similar material, but more intensity and depth.
Students can generate unofficial degree evaluations through mynmu.nmu.edu. This is highly recommended as a tool to help plan your progress.