CSIT University of the District of Columbia School of Engineering and Applied Sciences Dept. of Comptuer Science and Information Technology

Course Description

Graduate Courses (MSCS)

Course Number

Course Title


CSCI 500*

Discrete Mathematics

This course emphasizes the relationships between certain mathematical structures and various topics in computer science. Topics include set theory, graphs and trees, algorithms, propositional calculus, logic and induction, functions, relational algebra, and matrix algebra. Prerequisites: none.

NOTE: This course DOES NOT count toward the Master of Science in computer science degree.

CSCI 501A*

Introduction to Java Programming

The course is designed to facilitate students without a background in computer programming to become proficient Java programmers. Topics include language syntax, data typing, control constructs, arithmetic, logical and string expressions, elementary and composite data structures, methods, and exception handling. Object oriented classes, polymorphism and inheritance. Prerequisites: none.

NOTE:This course DOES NOT count toward the Master of Science in computer science degree.

CSCI 501B*

Object-Oriented Programming with C++

This course introduces the fundamental principles and technology of object-oriented programming, with emphasis on the C++ programming language. Topics include data abstraction, information hiding, encapsulation, inheritance, polymorphism, templates, exceptions, and object-oriented considerations for software design and reuse. Prerequisites: none.

NOTE:This course DOES NOT count toward the Master of Science in computer science degree.

CSCI 502*

Introduction to Systems Software

This course provides a fundamental understanding of the design and structure of system programs such as assemblers, compilers, interpreters, linkers, loaders, and operating systems. The compilation of blockstructured languages is used as a basis for understanding lexical, syntactic, and semantic analysis as well as code generation and optimization. The course concludes with a study of operating system topics such as process scheduling, memory management, and file systems.Prerequisites: none.

NOTE: This course DOES NOT count toward the Master of Science in computer science degree.

CSCI 503*

Data Structures

 Topics include dynamic allocation, recursion, the implementation of stacks, queues, linked lists, and trees, as well as algorithms for sorting and searching. The emphasis is on the trade-offs associated with the use of alternative data structures. This course includes several significant programming assignments. Prerequisites: CSCI 500.

NOTE: This course DOES NOT count toward the Master of Science in computer science degree.

CSCI 504

Design and Analysis of Algorithms

This course focuses on the design and analysis of algorithms to solve various classes of computational problems. Algorithmic techniques to be studied include divide-and-conquer, dynamic programming, greedy methods, amortized analysis, branch-and-bound, randomizing, and backtracking. Prerequisites: CSCI 500, 503.

CSCI 505

Foundations of Computer Architecture

The internal structure and operation of modern computer systems is examined in this course. Topics to be discussed include the design and operation of the ALU, FPU, and CPU; micro programmed control vs. hardwired control, pipelining, RISC vs. CISC machines, and various memory systems including caches and virtual memory; An introduction to parallel and vector processing, multiprocessor systems and interconnection networks will also be presented. System performance will also be addressed.Prerequisites: CSCI 502.

CSCI 506

Principles of Operating Systems

In this course theoretical and implementation aspects of operating system design are presented from both developer and user perspectives. Parallelism or concurrency aspects are explained using the concepts of process management, synchronization, deadlocks, job and process scheduling. Detailed techniques of real and virtual storage management are discussed for a variety of processing environments such as multiprogramming, multi-processing, etc. Students will be designing simulated operating system components and implementing them using a high-level language. Prerequisites: CSCI 502.

CSCI 507

Principles of Database Systems

This course focuses on theoretical and design aspects of database management system software. Topics include the entity-relationship model, database system architectures, data models, and file organization and access methods. A variety of database models including the relational, object-oriented and network modelswill be discussed. Other topics include normal forms, concurrency management, query languages and query optimization. Prerequisites: CSCI 503.

CSCI 508

Principles of Data Communications Networks

This course provides a unified treatment of data communications networks from the perspective of data communication principle, components and services, line control techniques and network requirements and design. Topics include transmission principles and media, data encoding and channel capacity, modems and modulation techniques, error and line control techniques, protocols, data compression techniques, switching technologies, common carriers' services and facilities and regulatory requirements Prerequisites: graduate student standing with no deficiencies.

CSCI 509

Foundations of Software Engineering

Fundamental software engineering techniques and methodologies commonly used during software development are studied. Topics include various life cycle models, project planning and estimation, requirements analysis, program design, construction, testing, maintenance and implementation, software measurement, and software quality. Prerequisites: CSCI 501A or 501B, 503.

CSCI 510

Principles of Artificial Intelligence

In this course, the highly diverse field of artificial intelligence is explored from a theoretical and practical perspective. A variety of schemes for representation and reasoning will be discussed. Topics focusing on representation include symbolic, rule-based, frame-based, object, and semantic net systems. Topics focusing on reasoning include inductive, abductive and deductive systems, non-monotonic reasoning, temporal reasoning, model-based reasoning, and planning. Common LISP and Prolog will also be briefly discussed. Prerequisites: CSCI 503.

CSCI 511

Automata Theory and Formal Languages

This course covers finite state machines and their limitations, tape automata and their limitations, Turing machines and basics of recursive functions, Post and Thue systems, word problems, phrase-structure grammars, and the different versions of the halting problem.Prerequisites: CSCI 504.

CSCI 512

Computational Complexity

Computational complexity and its applications in computer science and cryptography are explored. Basic concepts of polynomial, NP, and NP-Complete problems are developed in both intuitive and rigorous forms. Methods for determining the tractability of problems, the polynomial hierarchy, techniques and complexity of approximation algorithms, and current topics in complexity are also covered. The course also covers complexity topics in cryptography. Prerequisites: CSCI 511

CSCI 513

Parallel Algorithms

This course introduces students to parallel computation and algorithm design for parallel machines. Topics include adapting conventional algorithms to fit parallel execution models and stochastic methods suitable for massively parallel machines. Selected readings from the literature will be required. Prerequisites: CSCI 504

CSCI 518

Topics in Theoretical Computer Science


CSCI 521

Advanced Computer Architectures

In this course novel computer architectures are explored. Topics include parallel machines, multiprocessor and multi computer machines, dataflow machines, biologically inspired architectures, quantum computers and various interconnection structures. Performance evaluation aspects will also be considered. Selected readings from the literature will be required. Prerequisites: CSCI 505

CSCI 522

Advanced Operating Systems

This course presents the design principles and applications of advanced operating systems. Topics include communications in distributed systems based on layered protocols, asynchronous transfer mode networks, the client-server model, remote procedure call, synchronization and deadlock in distributed systems; Various concurrency algorithms will also be presented. Prerequisites: CSCI 506

CSCI 523

Advanced Database Systems

This course investigates the principles of object-oriented and distributed database systems, with an emphasis on algorithms and protocols for handling the complexity of managing data in a distributed environment. Topics include object-oriented and extended relational data models, object identity and persistence, replication, distributed concurrency control, distributed query processing and optimization, data security, semantic integrity control, optimal resource allocation, reliability, and failure recovery. Prerequisites: CSCI 507

CSCI 524

Human-Computer Interfaces

This course covers the principles, concepts, and objectives of human engineering for interactive systems. Topics include definition of human factors, syntactic and semantic models of user behavior, design principles for user interfaces, interface presentation techniques, and evaluation methods. Selected readings from current research literature will be assigned. Prerequisites: CSCI 509

CSCI 525

Compiler Design

This course explores the principles, algorithms, and data structures involved in the design and construction of compilers. Topics include context-free grammars, lexical analysis, parsing techniques, symbol tables, error recovery, code generation, and code optimization. Each student will implement a compiler for a small programming language. Prerequisites: CSCI 502

CSCI 531

Principles of Computer Graphics

Techniques and algorithms for creating and displaying a variety of 2-d and 3-d objects on raster-scan devices are discussed. The mathematics underlying 2-d and 3-d rotations, reflections, scaling and perspective transformations will be presented. Algorithms for clipping lines and polygons, curve fitting, surface rendering, etc. will also be presented. Prerequisites: CSCI 503

CSCI 532

Image Processing

Fundamentals of image processing are covered, with an emphasis on digital techniques. Topics include digitization, enhancement, segmentation, the Fourier transform, filtering, restoration, reconstruction from projections, and image analysis including computer vision. Concepts are illustrated by laboratory sessions in which these techniques are applied to practical situations, including examples from biomedical image processing. Prerequisites: CSCI 531

CSCI 533

Computational Geometry

Computational Geometry is used to developing algorithms for solving geometric problems in continuous spaces. It has deep connections to classical mathematics, theoretical computer science, and practical applications such as computer vision, graphics, and engineering such as CAD. The problems dealt with are typically posed as spatial decompositions such as polygon partitioning and triangulation, convex hulls, Voronoi diagrams and Delaunay triangulations, geometric search, and curves and surfaces. Prerequisites: CSCI 504, 531

CSCI 534


A variety of algorithms for the representation and visualization of genetic data will be presented in this course. Appropriate material drawn from the fields of biology, physics and chemistry will also be presented so that the nature of genetic data can be understood. Extensive readings will be required. Prerequisites: CSCI 531. May be taken concurrently.

CSCI 538

Topics in Specialized Applications


CSCI 551

Computer Network Architectures and Protocols

This course covers the architecture and principles of operation of integrated broadband networks particularly those capable of supporting different types of traffic (voice, video, data, graphics) over local and wide area networks. The focus in this course is on high-speed networks (LANs, WANs), switching designs and architectures, router designs and routing protocols, MPLS, IPv6, optical networking, satellite communications, and network performance evaluation. Hands-on practical projects are an integral part of the course. Prerequisites: CSCI 505

CSCI 552

Network Programming

This course provides programming skills useful for network designers and network application developers. It first covers a brief introduction to networking concepts and protocols. The course then covers topics including: the UNIX model, socket programming (TCP/UDP/raw sockets) for client-server systems, Internet addressing, application protocols (SMTP, DNS, Telnet, ftp), Remote Procedure Calls (RPCs), multicasting, secure protocols (e.g. IPSec). The course places a strong emphasis on the completion of hands-on projects. Prerequisites: CSCI 508

CSCI 553

Network Security

This course provides students with a comprehensive overview of fundamental network security concepts, techniques, and issues. The course covers topics including: security basics and fundamentals, attackers and their attacks, secure data transmission protocols, cryptography, key management, security management, intruders and intrusion detection, operational security policies and procedures. This course also covers security approaches deployed in local and wide area networks. Hands-on practical projects are an integral part of the course. Prerequisites: CSCI 551

CSCI 554

Wireless and Mobile Computing

Ubiquitous access of information anywhere, anytime, from any device is being made possible to a large extent by wireless and mobile computing technologies. This course discusses key concepts of wireless communications, wireless networks including WiFi, Bluetooth, WiMax, ad hoc networks, cellular technologies (CDMA, UMTS, etc), mobility protocols (including mobile IP, SIP, SCTP), internetworking design architectures for heterogeneous wireless networks, mobility management techniques (handoff and location management), wireless Web (WAP), energy management algorithms, and sensor networks. The course places a strong emphasis on the completion of hands-on projects. Prerequisites: CSCI 551

CSC 558

Special Topics in Network Security


CSCI 571

Logic Programming

This course provides an introduction to Prolog, the theoretical foundations of logic programming, and current research on applications of logic within artificial intelligence. Topics include a review of first-order logic, the resolution principle, semantics of logic programs and alternative proof procedures. Alternatives to first-order logic such as modal logics for representing and reasoning about knowledge and belief, and non monotonic and default logics will also be discussed. Assignments include problem sets and a number of Prolog programs. Prerequisites: CSCI 510

CSCI 572

Evolutionary Computation

This course focuses on concepts and techniques from genetic algorithms, genetic programming, and artificial life for modeling and developing software agents capable of solving problems as individuals and as members of a larger "community" of agents. Algorithms for solving optimization and learning problems will be stressed. Prerequisites: CSCI 510. Some background in probability and statistics.

CSCI 573

Neural Networks

This course provides an introduction to concepts in neural networks and connectionist models. Topics include parallel distributed processing, learning algorithms and applications. Specific networks discussed include Hopfield networks, bidirectional associative memories, perceptrons, feed forward networks with back propagation, and competitive learning networks, including Kohonen and Grossberg networks. Prerequisites: CSCI 510. Good mathematical background in calculus and differential equations.

CSCI 574

Natural Language Processing

This course covers the concepts and methods for the automated processing of natural language. Topics include pattern matching, parsing, dictionary and lexical acquisition, semantic interpretation, anaphoric reference, discourse analysis, and text generation and understanding. Prerequisites: CSCI 510. CSCI 525 highly recommended. Prior exposure to linguistics would be helpful.

CSCI 575

Speech-based Computing

Topics addressed in detail in this course include the anatomy, physiology and physics of speech generation and reception, speech signal analysis/synthesis and computer representations of spoken data. Systems to be discussed include text-to-speech, speech to text, multilingual speech software and speaker identification/verification. Prerequisites: CSCI 574

CSCI 578

Special Topics in Intelligent Systems


CSC 598

Master's Project


CSCI 600

Master's Thesis

3 credits/term; 6 credits maximum

*This course is no longer available. If the student does not have any undergraduate CS background knowledge, she/he needs to take a similar undergraduate-level course. For more detail, please consult with the MSCS program director.