Picture of Mike

Michael Kowalczyk

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.

Research - publications


CS 101 - Web Site Construction

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.

CS 122 - Computer Science II

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.

CS 201 - Programming in C++

This is an introduction to C++, directed towards students with 2 semesters of programming in Java.

CS 222 - Data Structures

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.

CS 345 - Android Programming

This course covers the fundamentals of developing native aps for hand-held devices running Android OS.

CS 365 - Web Programming

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.

CS 422 - Algorithms: Design & Analysis

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.

CS 442 - Advanced Networking

This is an upper-level course in advanced networking and parallel computing

CS 495 - Special Topics in Computer Science (Machine Learning)

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).

CS 520 - Computational Complexity Theory

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.

  • CS 520 Winter 2024

CS 570 - Machine Learning

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.