Approved CSS Electives - Extended Course Descriptions
Check prerequisites in the UWT Course Catalog.
Computer networks are behind many of the recent technological revolutions, particularly the Internet. In this course you will learn how to design and analyze computer networks. You will learn how the Internet is organized and how it works, what are its limitations, bottlenecks and possible future developments.
You will be introduced to the layered architecture for studying computer networks and the TCP/IP stack of protocols. The topics covered include: the most common application level protocols (HTTP,FTP, SMTP, etc), transport layer protocols, error control, congestion and flow control, routing, link layer protocols, wireless networks, multimedia, network security and network management. The course will also deal with computer network application development (socket programming) and network simulations.
The prerequisites are: TCSS 422. The operating systems course provides an introduction to the concept of concurrency. The robotics course will expand upon this basic understanding. TCSS 360. This course provides practical experience working on software development in small groups. All projects in the robotics course are done in small groups.
Other courses which could help to build a good foundation prior to TCSS 437 are Embedded Systems and Artificial Intelligence. These courses are not required prerequisites; however, student who do have this background will be able to use that background in the robotics course.
Topics covered / aspects of the course • principles of behavior-based robotics and autonomous agents • real-time motor control, real-time signal processing (from noisy sensor input) • options for the physical design of mobile robotics (wheels, tracks, legs, other options) • deliberative control versus reactive control systems • schemes for arbitration among multiple concurrent behaviors • concepts relevant to robotic navigation (mapping, localization, obstacle avoidance, etc.) • concepts of intelligent behavior applied to robots • creative problem solving in teams.
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.
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.
No more than 10 credits of TCSS 497 (Internship), TCSS 498 (Directed Reading), and TCSS 499 (Undergraduate Research) may be used to satisfy the elective requirement.
Students may also take up to 5 credits of a 400-level School of Engineering and Technology course (TEE, TCES, TINFO, TINST) and/or 5 credits of a 500-level TCSS course to count towards the elective requirement.