Courses

These are the courses I teach or have taught in the past.

CSC 498/499 and CSC 298 – Mentored Research
Every semester
Projects vary. See the Research page for current projects.

CSC 415 – Software Engineering
Every semester
Course Materials are on Canvas (accessible only by students enrolled in the class for the current semester).

Software products play a central role in almost every aspect of life today, helping people to be more effective and productive in the pursuit of their daily tasks. Billions of dollars are spent on software application development yet there are serious problems in the cost, timeliness, security, and quality of many software products. Software engineering aims to integrate the principles of computer science and other disciplines to develop systematic models and reliable techniques for producing high-quality software. This course introduces students to software engineering with an emphasis on collaborative problem solving and software application development. The Unified Modeling Language is used to describe each stage of application development, particularly analysis and design.

CSC 315 – Database Systems
Every three to four semesters. Last offered in Spring 2018.
Course Materials are on Canvas (accessible only by students enrolled in the class for the current semester).

The importance of database systems has increased dramatically in the last two decades. Databases are crucial to efficient management of data whether in commercial organizations, educational institutions, or non-profit enterprises. They play a central role in almost every aspect of life today, helping people to be more effective and productive in the pursuit of their daily tasks. This course introduces students to the fundamental concepts necessary for designing, using, and implementing database systems and applications. A DBMS like Oracle or PostgreSQL is utilized to underscore concepts learned in class. This course stresses the fundamentals of database modeling and design, the language and facilities provided by database management systems, and system implementation techniques. The Unified Process (UP) is followed for database system development. The Unified Modeling Language (UML) is used to describe each stage of application development, particularly analysis and design. The major topics to be covered include Database Analysis and Design Techniques, the Relational Model and Languages, Methodology, Security, Transaction Management, and Introduction to Distributed DBMSs and Replication.

CSC 435 – Programming Languages
Last taught in Spring 2014
Course Materials are on Canvas (accessible only by students enrolled in the class for the current semester).

Programming languages are the medium through which programmers and computer scientists precisely describe concepts, formulate algorithms, and reason about solutions. In the course of their careers, computer scientists and programmers will work with many different languages and programming styles. A clear understanding of the principles underlying the definition, composition and implementation of programming language features makes it easier to master new languages and programming constructs, and make informed design choices to support multiple complementary approaches to solving complex problems. 

In this course we will examine the principles and practices of programming languages through hands-on experience with a variety of different programming paradigms. Topics include: static and dynamic typing models; object-oriented, procedural, logic, and functional programming models; decision constructs and core data structures; and unique (language specific) high-level constructs.  The emphasis is on language design, use, and implementation. 

CSC 470 – Topics in Computer Science
Occasionally. Last taught in Fall 2012; Topic: Social Computational Systems

There are many scientific problems that computers cannot yet solve despite their ability to handle large computations and data sets. This course investigates the emerging and growing field of social computational systems that enable and support computations carried out by groups of people, leveraging abilities that computers do not yet have but that are innate to humans, such as intuition, superior visual processing, and an understanding of the real world. Students will consider what types of problems are amenable to crowdsourcing approaches and how the “wisdom of crowds” effect can be utilized to accomplish tasks that are easy for human beings but difficult for computers in order to solve large computational problems. They will gain hands-on experience in open source development as they design and implement a module of such a system.

Contextual Background
Social computing has fundamentally changed how people obtain and share information, and perform a variety of tasks. Recent trends including the growing popularity of social software and Web 2.0, increased interest in social network analysis, the rise of open source as a viable method of production, and a growing conviction that all of this can have a profound impact on daily life, are propelling the use of “human computation” and “crowdsourcing” to solve large computational problems. “Crowdsourcing” is increasingly being used to leverage the collective intelligence of large numbers of people, a “crowd” or a community, to solve problems or gather data. It is particularly useful for combining the efforts of crowds to accomplish tasks that are easy for human beings but difficult for computers. For example, Amazon’s Mechanical Turk is an online marketplace for work that requires human intelligence but that is time consuming, expensive, and difficult to scale. Luis von Ahn’s “games with a purpose” get large numbers of computer users to cooperate online, for example to help digitize old library books by typing out difficult-to-read words from scanned books. The field of social computational systems draws on theoretical underpinnings in diverse areas of computer science and social sciences. For example, facilitating social interaction and communication requires applying research in communication, human computer interaction, sociology, psychology, economics, and anthropological studies, while the technological infrastructure is based on theory in artificial intelligence, database systems, multimedia, software engineering, web design and networking.

CSC 230-02 – Computer Science II: Data Structures
Last taught in Spring 2013. 

A second course in computer science in which students learn how the algorithms and structures studied in CSC 220 are implemented. Classic data structures (lists, queues, stacks, trees, and tables) and algorithms (searching and sorting) are considered. Analysis of implementation techniques is addressed by studying the trade-offs between static and dynamic structures. Analysis of complexity of algorithms is studied informally and using formal proof techniques. The implementation of the object-oriented paradigm is also shown via Java. 

CSC 215-03 – CS I For Science/Engineering
Last taught in Spring 2011. 

A first course in computer science for science, mathematics, and engineering science majors. Emphasis is on using computational methods to solve scientific problems. The programming languages C/C++ or Fortran will be used to teach structured programming and algorithm development. Topics include control structures, data typing including structures and arrays, parameterized procedures, and recursion as well as simple I/O control. This course may not be taken by computer science majors without permission of the department, and then only for free elective credit.

FSP – In Pursuit of Innovation
Last taught in Fall 2010.

A current buzzword is ‘innovation’. What does this mean and how does one do it? Technology has revolutionized the landscape, changing where and how innovation happens and who is considered an innovator. This course will examine the emergence of new business models, such as for dissemination of news, fund raising and shopping, that are being triggered by Twitter, Facebook, Netflix, Amazon, etc., and the ‘Google model’ of innovation that is blazing trails in a number of areas. In this context, we will also consider the challenges of maintaining privacy and security of information.