Teaching

Students typically want the highest possible return for the time and energy they invest in coursework. I strive to treat students with respect and provide value for the time that they invest. In return, I expect effort and reciprocal respect. I have found that challenging students to push themselves and each other, while respecting their very personal stake in their education, can produce superior results.

My goal in the classroom is to help students to master core computer science constructs, while establishing a clear connection to current tools and processes. The first step in a new graduate’s career is closely correlated with their eventual success, and the strength of any curriculum will be ultimately determined by the marketplace. The relationship between concept and implementation is especially important in computer science, where basic research often becomes industry practice in the time it takes to earn a degree.

At the same time, it is necessary for students to understand the enduring abstractions of computer science, and the theoretical constructs on which it is founded. Technologies and paradigms change quickly, but ensuring that students understand computer science fundamentals provides them with the tools they need to build rewarding and meaningful careers, and adapt to future changes. It is critical for students to graduate with an understanding of the processes of learning and problem solving that are the fundamental tools – and areas of study – of computer science.

Finally, I believe that independent research should be an integral part of the experience for most undergraduates, not just those bound for graduate school. Computer science graduates in industry are routinely asked to evaluate the impacts of new technologies or processes, and the ability to conduct quality research with a purpose and time limit is invaluable. I continually look for ways to involve classes in research activities, both within and outside of the department.

CS 4101: Programming Languages

Programming languages are more than constructs to specify sequences of machine operations. Programs are executable texts, encompassing the history and intent of a person or group with a point of view and a problem to solve. Like natural languages, programming languages are a means of expression and framework for structuring thought, and each was developed for a purpose. Programming languages are the most intimate of human-computer interfaces, tightly coupled to the forms of computational thought available for a particular purpose.

This course explores fundamental concepts of computer science, including regular and context-free generators (grammars), and the scanners and parsers built to recognize them. These topics form the foundation for a survey of language types, including procedural, object-oriented, functional, logic, declarative, and scripting languages.

The course strives to balance theoretical aspects with hands-on construction of programming language constructs. Assignments cover token scanners, recursive descent parsers, parse trees and other language structures, culminating with a working interpreter of a simple Scheme dialect. During the semester, students will write programs in Java or C++, Prolog, Scheme, Prolog, Javascript, and Python.

SYLLABUS

LR-1 Parser Visualization

 

CS 4243: Interface Design and Technology

Predictions are that sometime in 2014 there will be more computers than humans on the earth. This does not include the supercomputers, game consoles, tablets, thermostats, smart light bulbs and other digital devices proliferating in society. Human-computer interfaces provide the bridges across which humans engage with the digital realm.

This course provides an overview of interaction design plus hands-on experience with the techniques and technology underlying user interfaces, placing equal weight on content and projects. Students complete programming and design projects employing both traditional graphical interfaces; mobile and matrix GUIs (e.g., tablets, smartphones and multi-LCD display arrays); architectural surfaces + tangibles (e.g., the Microsoft Surface and LSU-based technologies); and hands-on electronics.

Programming will engage a subset of Java, Python, JavaScript/HTML5, C++, and C#, with much freedom given to student teams. Some prior programming experience in at least one of these languages is expected.

SYLLABUS