This course is a course in the classic theory of computation. The overall goal of the course is to introduce students to the idea of formalizing computational processes and reasoning about them through mathematical methods such as precise definition and proof. Students will apply their discrete mathematics skills in sets, logic, and proof techniques. Methods of reasoning about formal models introduced in this class include simulation, diagonalization, and reduction.
There are three sections of the course, and each section builds on and is more complicated than the previous. The first part discusses deterministic finite automata, nondeterministic finite automata, and regular expressions. The second part discusses context-free grammars and pushdown automata. The third part discusses Turing machines, decidability, reduction, and NP-completeness. These different models represent different classes of computational complexity. Students will learn about these models and reason about them.
Because the ideas in this course were fundamental in the development of the computer, applications of these ideas include hardware design, natural language processing, compiler design, and software verification, although this class will not directly address those areas.
A strong background in discrete mathematics is needed for this course (data structures and machine organization is helpful, too), and an interest in the mathematical ideas behind the modern computer is certainly helpful. The prerequisite is TCSS 342 (data structures).
TCSS 450 - Mobile Application Programming
Mobile application programming covers application lifecycle, user interfaces, data management, using web services, locations, graphics, and localization focusing on Android devices with some discussion on other platforms. In this course, students propose their own project that meets the different criteria provided by the instructor and develop an app in two phases using software engineering methodologies. 1) Write use cases and design class diagrams 2) Use version control system in a collaborative environment (Git) 3) Java coding conventions and Documentation 4) Testing the apps and using JUnit as well as Automated test tools for Mobile apps 5) Present the final app in class (In person or Video capture)
TCSS 452 - Human Computer Interaction
Interaction design concerns the deliberate shaping of digital tools for use by people to satisfy their needs. Because these tools exist within social settings, they become resources from which people construct their social, political, economic, and moral lives. In this course, we will do interaction design, we will be interaction designers. The basic activities of this enterprise will involve understanding users’ needs, sketching, making design tradeoffs, choosing from among design alternatives, representing, communicating, and critiquing designs, prototyping, usability testing, and reflecting on design activity. More than anything else, undertaking these activities means cultivating the ability to envision. We will envision the design of technologies that do not yet exist but, if realized, will result in net benefits for the people affected.
TCSS 458 - Computer Graphics
This course presents software-based techniques for image creation. Whereas a camera uses light coming from real objects to produce an image, a computer graphics system uses geometrical descriptions of imaginary objects to produce images. These images are more or less photo-realistic (similar to what a camera would produce) but since the objects appearing in them depend only on mathematical descriptions, computer graphics offers creative possibilities that go far beyond a conventional camera. Before you use a computer graphics system to visualize the world, you first have the opportunity to create that world. This involves assembling geometric shapes (e.g. triangles) by magnifying, rotating, and moving them to desired locations. The "picture producing" part of the graphics system (called a renderer) takes this complex description and produces the thousands of colored dots (pixels) that together make up an image. The creation of an image is partly inspired by how light behaves in the real world, therefore a renderer does many geometric calculations that compute the appearance of an object viewed at a particular angle from a given location. These calculations involve some trigonometry and are usually described as a series of matrix operations. In some ways computer graphics is simply the application of programming and algorithms to geometry. The course includes the development of a simple renderer but also introduces an industry standard graphics library such as OpenGL as well as exploring simple animation (a series of images in which objects move and change).
TCSS 461 - Advanced Software Engineering
This course is an introduction to advanced concepts in Software Engineering. Topics include: System Re-engineering, Domain-Specific Languages, Generative Development, System Design and Service-Oriented Architecture. System Re-engineering will teach students how to integrate and maintain new systems with legacy systems. Domain-Specific Languages will use Object Management Group (OMG) standards and the Eclipse Modeling Framework (EMF) to familiarize students with model-driven software development. Generative Development will teach students the role of Unified Modeling Language (UML) modeling in automating code generation. System Design teaches students to understand how models can reflect an abstract architecture of software systems. Service-Oriented Architecture (SOA) will teach students to create and understand descriptions of SOA using both high level UML models and XML-based languages. [Prerequisite: TCSS 360]
TCSS 465 - Embedded Systems
Almost all modern system contain microprocessors that sense the outside work, process that information, and then send control signals out to manage the system. This course is an examination of particular theory and practice in designing software embedded in electronic devices and controllers. Includes clocks, threads, multitasking, critical sections, monitors, scheduling, on chip and external interfacing, communications, and fault tolerance. Many students often use this course as testbed for a subsystem of their senior design project. The course starts out with several demonstrative embedded systems for background and experience. Students then progress towards a team final project. A design contest judged by other faculty is the culminating event.
TCSS 480 - Comparative Programming Languages
This course is a study of three different programming paradigms: imperative, functional, and logic based. In imperative programming, computation is achieved by the sequence of steps that change the state of variables. Functional programming focuses on the more abstract, mathematical notion of a function that takes an argument and returns a value without modifying the state of a variable. As such, computation is expressed as the evaluation of functions and relies on recursion rather than iteration. Logic programming is based on predicate logic and performs computation using facts, rules, and an inference mechanism. Facts and rules express information about some problem domain, while an inference engine deduces the outcomes.
Most of mainstream programming nowadays focuses on the imperative model. However, both functional and logic programming hold a strong position within the field as well, and have influenced mainstream language development over the years. Learning different programming paradigms changes how one thinks about coding and computing in the first place, increases one's ability to express ideas, and in the end results in enhanced problem solving skills.
While the specific languages used in the course vary by instructor, at least three different languages that represent each of the programming paradigms listed above are covered in the course.
TCSS 491 - Computational Worlds
This course introduces the student to concepts necessary in deploying a full-scale virtual world as required in computer animation, gaming and simulation applications. Topics and focus may include: 2D/3D graphics modelling and rendering, discrete and continuous game engine design, multi-user networking, and artificial intelligence for computer controlled agents.