Current Teaching Interests


Home

Pedagogy



I like to think of my classes as being more akin to a painting studio experience than to traditional enginerring studies.  I emphasize learning over testing.  I enjoy working with the students to solve problems in class.  I offer time outside the class to make sure every student learns from each assignment and develops problem solving skills.

CS 460 SOftware Engineering



State-of-the-art, industrially tested, specification and design techniques are presented, illustrated on small examples, and applied to realistic problems.  The objective of the course is to develop an understanding of the technical and organizational complexities involved in software development and to teach key concepts and techniques used to manage these complexities.  The students are required to design and build systems through team effort.  Emphasis is placed on emulating the realities of an industrial organization.  The classes are conducted in an intensive workshop atmosphere.  The projects cover the principal system development life-cycle phases from requirements analysis, to software design, and to final implementation.  Issues relating to human factors, dependability, performance, operating costs, maintainability and many others are addressed and resolved in a reasonable manner.

CS 510 Mobile Computing



Internet and wireless communication are two technologies that share the common goal of providing ubiquitous access to distant resources.  Their impact on the social fabric is immediately observable today.  This course is concerned with methods and principles for the development of systems whose components exhibit some form of mobility across networks or within some physical space and require some knowledge about the domain within which the movement takes place.  The course material clusters around several dominant themes:  the delivery of connectivity to mobile nodes, languages that provide facilities for code migration, computational models that include the notion of locality, and design methods that support the development of new kinds of network applications. Since much of the work on mobility has its roots in the networking tradition the class will include topics concerned with communication protocols, application support software, the unique characteristics of the wireless communication medium, security, location aware applications, and algorithms for implementing basic system services.

CS 580 The Specification of Software Systems



Modern software systems exhibit high levels of complexity, are distributed, and support concurrent execution of multiple communicating and coordinating processes.  The challenges facing programmers today are further exacerbated by our limited ability to reason about concurrent computations.  Yet, concurrent algorithms are central to the development of software executing on modern multiprocessors or across computer networks.  This course reviews several important classes of concurrent algorithms and presents a formal method for specifying, reasoning about, verifying, and deriving concurrent algorithms.  The selected algorithms are judged to have made significant contributions to our understanding of concurrency.  Rigorous treatment of the design and programming process is emphasized. 

CS 351 Design of Large Systems



This project-oriented course is intended to help students acquire the design and programming skills needed to perform well in professional settings where they are expected to translate customer needs into functioning code.  The emphasis is on understanding the complexities and subtleties of object-oriented design and on leveraging off object-oriented programming to deliver large complex programs that are elegant, modular, easy to use, and easy to modify while delivering the expected level of performance.  Design and programming concepts are first introduced and illustrated in lectures and later used in the laboratory on a series of projects exhibiting increasing levels of complexity and sophistication.  Sequential, concurrent, and distributed design and programming concepts are introduced in this order with the associated projects matching the increase in complexity.  Depending on the project, students are expected to work alone or in small groups.  Peer reviews are an integral part of the laboratory experience.  (Note: This is a course I originally designed but I no longer teach.)