Computer Science Course Descriptions
Foundations of Computer Science
Logic, Sets, functions, relations, asymptotic notation, proof techniques, induction,
combinatorics, discrete probability, recurrences, graphs, trees, mathematical models
of computation, undecidability.
Introduction to Programming
An introduction to computer programming and problem
solving. General topics covered include the fundamentals of programming, good software
development practices and solving problems using computer programming. Specific
topics include compiling, running and debugging a program, program testing, documentation,
variables and data types, assignments, arithmetic expressions, input and output,
top-down design and procedures, the random number generator, conditionals and loops
functions, arrays, and an introduction to classes and object oriented programming.
Object-Oriented Programming
An intermediate-level programming course teaching
object-oriented programming in C++. Pointers, dynamic memory allocation, and recursion.
Classes and objects including constructors, destructors, methods (member functions)
and data members. Access and the interface to relationships of classes including
composition, association, and inheritance. Polymorphism through function overloading
operators. Inheritance and templates. The standard template library will be used
to introduce elementary data structures and their use.
Data Structures and Algorithms
Abstract data types and the implementation and use of standard data structures.
Fundamental algorithms and the basics of algorithm analysis.
Digital Logic and State Machine Design
Combinational and sequential digital circuits. An introduction
to digital systems. Number systems and binary arithmetic. Switching algebra and
logic design. Error detection and correction. Combinational integrated circuits,
including adders. Timing hazards. Sequential circuits, flip-flops, state diagrams
and synchronous machine synthesis. Programmable Logic Devices, PLA, PAL and FPGA.
Finite-state machine design. Memory elements.
Computer Architecture and Organization
A top-down approach to computer design. Computer architecture: introduction to
assembly language programming and machine language set design. Computer organization:
logical modules; CPU, memory and I/O units. Instruction cycles, the data-path and
control unit. Hardwiring and microprogramming. The memory subsystem and timing.
I/O interface, interrupts, programmed I/O and DMA. Introduction to pipelining and
memory hierarchies. Fundamentals of computer networks.
Operating Systems
Fundamental
concepts and principles of operating systems. Batch, spooling, and multiprogramming
systems are introduced. The parts of an operating system are described in terms
of their functions, structure and implementation. Basic policies for allocating
resources are also discussed.
Introduction to Parallel and Distributed Systems
Basic issues and techniques of parallel and distributed computing. The material
we cover will cover the spectrum from theoretical models of parallel and distributed
systems to actual programming assignments.
Design and Implementation of Programming Languages
The design of high-level programming languages, along with elements
of the compiler technology used to translate those languages into executable code.
Formal description of language syntax, parsing, memory management attributes of
variables and their binding times, control and data abstraction mechanisms and object-oriented
language features. Imperative and object-oriented languages, with brief introduction
to functional and logic programming paradigms.
Design and Analysis of Algorithms
Fundamental principles of the design and analysis of algorithms. Asymptotic notation,
recurrences, randomized algorithms, sorting and selection, balanced binary search
trees, augmented data structures, advanced data structures, algorithms on strings,
graph algorithms, geometric algorithms, greedy algorithms, dynamic programming,
and NP completeness.
Software Engineering
Software engineering techniques to
specify, design, test and document medium and large software systems. Design techniques
include information engineering, object-oriented, and complexity measures. Testing
methods such as path testing, exhaustive test models, and construction of test data.
An introduction to software tools and project management techniques is presented.
Scientific and Engineering Computing
Using programming skills to exploit the
broad power of modern computing related to science and engineering disciplines.
Computational techniques are taught in parallel with programming and problem solving
methodologies. Students learn how to recognize a good or bad formulation of a problem,
select the proper algorithm to solve a given computational problem and interpret
the results; thus, learning to become intelligent users, rather than creators, of
computational software. Computational developments that have the greatest influence
on the development and practice of science and engineering in the last century.
Course draws upon a variety of computational problems from the breadth of science
and engineering to interest students and establishes the relevance of the computational
problem solving approach.
Secure Information Systems Engineering
An approach
to secure information systems engineering is developed consistent with today’s vulnerabilities,
threats and risks. Grounding is established in the basic security technologies and
strategies in use today. A concept of security engineering is constructed for whole
elements of the critical infrastructure (e.g., utilities, government services, financial
services, etc.) including legacy environments, the Internet, wireless and the coming
evolution of “ubiquitous computing.” Specifically.
UNIX System Programming
Programming
and system administration of UNIX systems. Covers Shell programming, special purpose
languages, UNIX utilities, UNIX programming tools, systems programming and system
administration.
Assembly Language and Systems Programming
Internal representation
of numeric and character data. Machine organization and machine language programming.
Assembly language, assemblers. Assembly language programming: branching, arrays,
lists, arithmetic and bit manipulation, macros, stacks, subroutines, parameter passing,
recursion. Linking and loading, position-independent and reentrant code. Traps and
interrupts.
Introduction to Databases
Introduction to database systems and database
approach as a mechanism for modeling the real world. The course will cover data
models (relational, object-oriented), physical database design, query languages,
query processing and optimization, as well as transaction management techniques.
Implementation issues, object-oriented and distributed databases will also be introduced.
Algorithms for Parallel and Distributed Systems
Covers the design, implementation
and evaluation of algorithms for parallel and distributed systems. Scheduling and
load balancing, parallel and distributed information retrieval and database operations,
parallel scientific algorithms. Concurrency control. Security in distributed systems.
Java and Web Design
Programmers familiar with C or C++ will learn how to develop
Java applications and applets. Syntax of the Java language, object-oriented programming
in Java, creating graphical user interfaces (GIU) using the Java 2 Platform technology
event model, Java exceptions, file input/output (I/O) using Java Foundation Class
threads and networking.
Design and Analysis of Algorithms
Review of basic data
structures and mathematical tools. Data structures: priority queues, binary search
trees, balanced search trees. B-trees. Algorithm design and analysis techniques
illustrated in searching and sorting: heap-sort, quick-sort, sorting in linear time,
medians and order statistics. Design and analysis techniques: dynamic programming,
greedy algorithms. Graph algorithms: elementary graph algorithms (breadth-first
search, depth-first search, topological sort, connected components, strongly connected
components), minimum spanning tree, shortest path. String algorithms. Geometric
algorithms. Linear programming. Brief introduction to NP-completeness. Advanced
design and analysis techniques: amortized analysis of algorithms. Advanced data-structures:
binomial heaps, Fibonacci heaps, data structures for disjoint sets, analysis of
union by rank with path compression. Graph algorithms: elementary graph algorithms,
maximum flow, matching algorithms. Randomized algorithms. Theory of NP completeness
and approach to finding (approximate) solutions to NP-complete problems.
Go to the top | Contact us