- Introduction to Problem Solving
- Recursion
- Algorithmic complexity
- Searching and Sorting
- Greedy algorithms
- Use and implementation of data structures for problem solving
- Linear data structures
- Trees and heaps
- Graphs and graph search
- Introduction to Java
- Java Programming Basics
- Inheritance
- Exceptions
- Event Handling
- Input/Output: Files and Streams
- Creational Patterns (examples: Factory, Object Pool, Singleton)
- Structural Pattern (examples: Composite, Decorator, Proxy)
- Behavioral Pattern (examples: Iterator, Observer, Null Object)
- Concurrency Pattern (examples: Thread Pool, Future, Proactor, Active Object)
- Remote Method Invocation Framework
- Collection Class Framework
- Discrete math
- DFAs
- NFAs
- Regular expressions and Kleeneās Theorem
- Pumping Lemma and regular languages review
- CFGs
- PDAs
- CFLs
- Turing machines
- Decidability
- Undecidability
- Tractability
- Intractability

**CSCI 603: Computational Problem Solving**

This course focuses on the application of computational thinking using a
problem-centered approach.
Specific topics include: expression of algorithms in pseudo-code
and a programming language; elementary data structures such as lists,
trees and graphs; problem solving using recursion; and debugging and testing.
Assignments (both in class and homework) requiring a pseudo-code
solution and implementation in a programming language are an integral part of the course.

This is the proposed syllabus of the bridge course. Some details of the course will change over time.

**CSCI 605: Advanced Object-Oriented Programming Concepts**

This course focuses on identifying advanced object-oriented programming
concepts and implementing them in the context of specific problems.
This course covers advanced concepts such as event-driven programming,
design patterns, distributed and concurrent programming, and the use,
design and implementation of applications. Assignments (both in
class and as homework) requiring a solution to a problem and an
implementation in code are an integral part of the course.

This is the proposed syllabus of the bridge course. Some details of the course will change over time.

**CSCI 661: Foundations of Computer Science Theory**

This course provides an introduction to the theory of computation,
including formal languages, grammars, automata theory,
computability, and complexity. This course serves as a bridge
course for graduate students and cannot be taken
by undergraduate students without permission from the CS Undergraduate Program Coordinator.

This is the proposed syllabus of the bridge course. Some details of the course will change over time.