Computer Science and Systems Elective Course Descriptions
Algorithm design techniques that will be covered in the course include brute force, decrease and conquer, divide and conquer, transform and conquer, dynamic programming, and greedy. In addition, NP-completeness will be briefly introduced. Pseudocode will be the primary way algorithmic ideas will be expressed, but students will implement some of the algorithms discussed in the course. Students will apply their knowledge of data structures and discrete mathematics in this course. By the end of the course, students should be able to take a description of a problem and then formulate it as a computational problem, devise one or more algorithms to solve that problem, and then analyze the algorithms to determine which is best.
- Software lifecycle and process models such as waterfall and agile methods.
- Effective group work practices, such as mutual accountability and public commitments.
- Software development tools such as version control and unit testing frameworks.
- Standard representations for requirements, such as user stories and interaction prototypes.
- Design generation, design representation, and heuristics for good design.
- Dynamic software verification: unit, integration, regression, and acceptance testing.
- Static software verification: reviews, inspections.
The study of operating system internals focuses on how different types of hardware resources are managed, e.g., the CPU, RAM, and storage media. This includes how hardware has progressed over the years to support advanced features such as multitasking and virtualization. The study of application-accessible features focuses on the hardware abstractions available to applications, e.g., processes and threads (abstractions of the CPU), address spaces (abstractions of RAM), and file systems (abstractions of storage media). Students will complete work that spans both facets, e.g., modifying/simulating components of operating systems and utilizing basic multithreaded programming. Use of an alternative operating system, such as GNU/Linux, is commonly required in this course.
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 teamsTCSS 440: Formal Models in Computer Scienc
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).
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.