Computer Science

  • Overview
  • Undergraduate
  • Graduate
  • Certificates
  • Faculty
  • Courses

Mission Statement

The mission of the Department of Computer Science is to serve the global community by providing high-quality computer science education, research, and professional service and to advance computer technology in areas of selective excellence.

Educational Objectives

The computer science undergraduate program of study has been developed to prepare graduates who, in the years following graduation, will earn an advanced degree in computer science or related disciplines or a professional degree (such as law, business, medicine), or be gainfully employed in the computer or IT industry with the ability to apply skills and knowledge learned while an undergraduate at GW, and who will conduct themselves professionally and ethically, work effectively in teams, and communicate effectively to both technical and non-technical audiences.

Educational Outcomes

By the time of graduation, a computer science student will have:

  1. learned to apply principles from the fundamentals of computer science, including discrete structures, data structures, algorithms, and the theory of computing;
  2. acquired an understanding of the hardware and software architecture of computer systems, including architecture, operating systems, databases, languages, and networks;
  3. participated effectively in team projects and team activities, and acquired an understanding of:
    1. the overall social and professional context in which computing activities take place;
    2. the global and local impact of computing; and
    3. professional, ethical, legal, security, and social issues and responsibilities;
  4. demonstrated an application of software engineering principles through completion of a challenging capstone project requiring specification, design, and implementation; and
  5. conveyed technical knowledge in an effective manner through written and oral communications.

Bachelor's programs

  • Bachelor of Arts with a major in computer science
  • Bachelor of Science with a major in computer science

Master's programs

  • Master of Science in the field of computer science
  • Master of Science in the field of cybersecurity in computer science

Doctoral program

See the School of Engineering and Applied Science for programs leading to the doctoral degree.

  • Certificate in computer security and information assurance

Professors S.Y. Berkovich, R.S. Heller, H.-A. Choi, A. Youssef (Chair), B. Narahari, J.K. Hahn, R. Simha

Associate Professors S. Rotenstreich, A. Bellaachia, X. Cheng, P. Vora, N. Zhang, M. Diab

Assistant Professors G.A. Parmer, E. Drumwright, C. Monteleoni, T. Wood, G. Sibley

Explanation of Course Numbers

  • Courses in the 1000s are primarily introductory undergraduate courses
  • Those in the 2000–4000s are upper-division undergraduate courses that can also be taken for graduate credit with permission and additional work
  • Those in the 6000s and 8000s are for master’s, doctoral, and professional-level students
  • The 6000s are open to advanced undergraduate students with approval of the instructor and the dean or advising office

Note: With the exception of CSCI 1010, CSCI courses numbered CSCI 1041 and below may not normally be counted toward degree requirements for computer science majors, unless approved by a department advisor. Credit may be earned for only one course in each of the following pairs of courses:

CSCI 2441Database Systems and Team Projects
or CSCI 6441 Database Management Systems
CSCI 3362Probability for Computer Science
or CSCI 6362 Probability for Computer Science
CSCI 4223Principles of Programming Languages
or CSCI 6223 Principles of Programming Languages
CSCI 4331Cryptography
or CSCI 6331 Cryptography
CSCI 4341Continuous Algorithms
or CSCI 6341 Continuous Algorithms
CSCI 4364Machine Learning
or CSCI 6364 Machine Learning
CSCI 4431Computer Networks I
or CSCI 6431 Computer Networks
CSCI 4521Introduction to Mobile Robotics
or CSCI 6521 Introduction to Mobile Robotics
CSCI 4525Autonomous Robotics: Manipulation
or CSCI 6525 Autonomous Robotics: Manipulation
CSCI 4527Introduction to Computer Vision
or CSCI 6527 Introduction to Computer Vision
CSCI 4531Computer Security
or CSCI 6531 Computer Security
CSCI 4532Information Policy
or CSCI 6532 Information Policy
CSCI 4541Network Security
or CSCI 6541 Network Security

CSCI 1010. Computer Science Orientation. 1 Credit.

Introduction to the field of computer science. Basic and emerging concepts and applications of computer science. Hands-on experiments and team projects. Technical resources, professional ethics, writing, and presentation.

CSCI 1011. Introduction to Programming with Java. 3 Credits.

An introductory course in programming a computer, using the Java language. Object-oriented programming, classes, applets, methods, control structures, inheritance, overriding, GUI widgets, containers, and exceptions.

CSCI 1020. Applications Software. 3 Credits.

Introduction to the use of microcomputer hardware and software for word processing (e.g., Word), spreadsheets (e.g., Excel), and database management (e.g., Access), with emphasis on the use of computers to solve typical problems in academia and business.

CSCI 1021. Introduction to Computers and the Internet. 3 Credits.

Survey of computers and languages. Introduction to computer programming. History of computing and networking. The effects of computing and the Internet on our lives. E-commerce and new technologies. Concepts of web page design.    (Fall and spring).

CSCI 1022. Introduction to Internet Technology. 3 Credits.

An introductory course for non-technical students who wish to obtain a better understanding of the hardware and software that comprise the Internet. Information transfer over fiber, routing and switching of packets, methods of information transfer, protocols, software, ISP, web pages and multimedia.

CSCI 1023. Introduction to Web Software Development. 3 Credits.

Introduction to the Internet. Topics include address and URL to find your way, linking to a URL, HTML and web programming, building a web page, building a home page, client-server techniques.    (Fall and spring).

CSCI 1030. Technology and Society. 3 Credits.

Historical, social, and ethical issues of the technological age. Ethical principles and skills and social analysis skills needed to evaluate the design and implementation of complex computer systems. Privacy, computer crime, equity, intellectual property, professional ethics. Data collection, analysis, and presentation; technical writing and oral communication skills.

CSCI 1030W. Technology and Society. 3 Credits.

Historical, social, and ethical issues of the technological age. Ethical principles and skills and social analysis skills needed to evaluate the design and implementation of complex computer systems. Privacy, computer crime, equity, intellectual property, professional ethics. Data collection, analysis, and presentation; technical writing and oral communication skills.

CSCI 1041. Introduction to FORTRAN Programming. 3 Credits.

Structured programming with high-level language using FORTRAN. Control structures. Different data types with emphasis on real and complex number computations. Arrays used with vector and matrix manipulation to solve simultaneous equations. External subroutines for mathematical and graphical applications. Prerequisite or corequisite: MATH 1220 or MATH 1231.

CSCI 1111. Introduction to Software Development. 3 Credits.

Introduction to the solution of problems on a digital computer using the Java language. Object-oriented programming concepts; documentation techniques; design of test data. Writing, debugging, and running programs in an interactive computing environment.

CSCI 1112. Algorithms and Data Structures. 3 Credits.

Object-oriented software. Inheritance, exceptions, development of classes, event-driven programming. Data structures such as trees, lists, stacks, queues, and strings. Sorting and searching. Introduction to algorithm performance prediction. May be taken for graduate credit by students in fields other than computer science. Prerequisites: CSCI 1111 with a grade of C or higher; and MATH 1220 or MATH 1231.   (Spring).

CSCI 1121. Introduction to C Programming. 3 Credits.

Structured programming with the C language. Control structures. Data types. Use of pointers. Matrix manipulation to solve simultaneous equations. External subroutines for mathematical and graphical applications. Introduction to C> Complex number representation. Corequisite: MATH 1220 or MATH 1231.

CSCI 1131. Introduction to Programming with C. 3 Credits.

Intensive introductory course for students with a science, mathematics, or other quantitative background. Solution of numerical and nonnumerical problems on a digital computer using C programming language in a Unix environment. Recommended for graduate and advanced undergraduate students in other departments. Prerequisite: MATH 1232 .

CSCI 1132. Data Structures and Software Design. 3 Credits.

Data structures such as trees, lists, stacks, queues, and strings. Big-O notation and introduction to algorithm performance analysis. Solutions of numerical and non-numerical problems. Use of I/O libraries. Application development and software testing. Prerequisite: CSCI 1121.

CSCI 1311. Discrete Structures I. 3 Credits.

Mathematics for computer science. Sets, functions, sequences. Propositional and predicate calculus, formal proofs, mathematical induction. Matrices, semigroups, groups, isomorphism. Relations, partitions, equivalence relations, trees, graphs. May be taken for graduate credit by students in fields other than computer science. Prerequisites: MATH 1220 or MATH 1231.    (Fall).

CSCI 2113. Software Engineering. 3 Credits.

Programming techniques and software development in one or more programming languages. Application development with GUIs, database access, threads, Web programming. Prerequisites: CSCI 1112 with a grade of C or higher; MATH 1231. (Fall).

CSCI 2312. Discrete Structures II. 3 Credits.

Basic discrete techniques in computer science. Proofs, algebraic structures, number theory, graph theory, (coloring and planar graphs, communication networks), advanced recurrences, advanced sums, approximations and asymptotics. Prerequisites: CSCI 1311 with a grade of C or higher; MATH 1231. (Fall).

CSCI 2441. Database Systems and Team Projects. 3 Credits.

Design of relational database systems, relational query languages, normal forms, design of database applications. Team software development, integration, and testing. Professional code of ethics, intellectual property, privacy, software copyrights. Corequisite: CSCI 2113.

CSCI 2441W. Database Systems and Team Projects. 3 Credits.

Design of relational database systems, relational query languages, normal forms, and design of database applications. Team software development, integration, and testing. Professional code of ethics, intellectual property, privacy, and software copyrights. Corequisite: CSCI 2113.   (Spring).

CSCI 2461. Computer Architecture I. 3 Credits.

Number representation, computer arithmetic, digital logic and circuit design. Computer organization, micro-architecture and processor datapath, assembly and machine language programming. Introduction to memory organization and the hardware–software interface. Implementation of high-level language constructs. Prerequisites: CSCI 1112 with a grade of C or higher; CSCI 1311.    (Fall).

CSCI 3212. Algorithms. 4 Credits.

Core concepts in design and analysis of algorithms, data structures, and problem-solving techniques. Hashing, heaps, trees. Graph algorithms, searching, sorting, graph algorithms, dynamic programming, greedy algorithms, divide and conquer, backtracking. Combinatorial optimization techniques. NP-completeness. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 3221. Programming Languages. 3 Credits.

Programming language and software design fundamentals. Writing programs in a non-procedural programming language. Closures; procedure and data abstraction; object-oriented, procedural, and declarative programming; continuation compilation and interpretation, and syntactic extension. Advanced control structures appropriate for parallel programming. Prerequisite: CSCI 2113.

CSCI 3240. Pre-Senior Design with Research. 3 Credits.

For students who wish to combine a research project with their Senior Design project. The goal is to complete the research, under a faculty mentor, within three semesters. Prerequisite: CSCI 3212, CSCI 3313, CSCI 3411, and permission of instructor.

CSCI 3313. Foundations of Computing. 4 Credits.

Theoretical foundations. Formal languages and automata; regular expressions, context-free languages; finite state automata and pushdown automata; Turing machines and computability, recursive function theory, undecidability. Compiler construction. Lexical and syntax analysis; parsing and parsing techniques; lexical and parsing tools. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3362. Probability for Computer Science. 3 Credits.

Introduction to probability and statistics for computer scientists. Random variables. Conditional probability, independence, correlation. Applications to computer science, including information theory, data compression, coding, inference, Markov chains, introduction to randomized algorithms. Prerequisite: MATH 1232, CSCI 1311; or permission of instructor.

CSCI 3410. Systems Programming. 3 Credits.

Concepts underlying all computer systems. Processor operation, hierarchical memory systems, embedded boards, data acquisition, actuation, and systems software such as compilers, linkers, and operating systems from the programmer’s perspective. Use of embedded platforms to examine how programs interact with and are constrained by hardware. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3411. Operating Systems. 4 Credits.

Process management, process state, concurrent processing, synchronization, events. Operating system structure, the kernel approach, processor scheduling, task switching, monitors, threads. System management, memory management, process loading, communication with peripherals. File systems. Socket programming, packets, Internet protocols. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3462. Computer Architecture II. 3 Credits.

Computer organization. Design of computer components and of a simple computer. Instruction set and assembly language of a pipelined RISC processor. Introduction to high-performance processors. Design of cache, main memory, and virtual memory systems. Program performance models and system performance. The I/O structure and peripherals. Prerequisite: CSCI 2461, CSCI 2113.

CSCI 3571. Introduction to Bioinformatics. 3 Credits.

Same as BISC 2584.

CSCI 3907. Special Topics. 1-3 Credits.

Topic to be announced in the Schedule of Classes.    (Fall and spring).

CSCI 3908. Research. 1-3 Credits.

Applied research and experimentation projects, as arranged. Prerequisite: junior or senior status.

CSCI 4222. Theory of Computer Translators. 3 Credits.

Lexical and syntax analysis, regular expressions, context-free grammars, parsing techniques, top-down parsing, efficient parsing, syntax-directed translation, intermediate formats, flow of control, block structures, procedure calls, symbol tables, run-time storage, error-detection and recovery, code optimization, code generation. Prerequisite: CSCI 3462, CSCI 3313.

CSCI 4223. Principles of Programming Languages. 3 Credits.

Fundamental concepts underlying design of programming languages. Detailed study of functional and object-oriented computational models. Types, evaluation, abstraction, control flow, modules, mutation, laziness, polymorphism, subtyping, inheritance. Practice learning new languages. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 4235. Development of Open-Source Software. 3 Credits.

Design, process, tools, and culture of open-source software development. Cross-platform development and testing. Geographic dispersal, social and team dynamics, licenses (GPL, BSD, other); code reuse (modular code, shared libraries); very-large-scale distributed development techniques (CVS, Bugzilla, release-management, mailing-lists). May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4237. Software Design for Handheld Devices. 3 Credits.

Design of interactive software for handheld devices. Event driven programming, user interface design practices, memory management, handheld debugging techniques. May be taken for graduate credit. Prerequisite: CSCI 2113 or CSCI 6221.

CSCI 4243. Capstone Design Project I. 3 Credits.

Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4243W. Capstone Design Project I. 4 Credits.

Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4244. Capstone Design Project II. 4 Credits.

Continuation of CSCI 4243. Planning, design, and construction of the capstone project. Economic analysis of the project. Application of software engineering principles, including software requirements, specification, requirements engineering, reuse, documentation, verification/validation, testing, configuration management. Report writing and presentations. Prerequisite: senior status.

CSCI 4314. Discrete Analysis-Computer Sci. 3 Credits.

Combinatorial theory: permutations and combinations, generating functions, recurrence relations, the principle of inclusion and exclusion. Block designs. Applications to the analysis of algorithms, computer organization, VLSI placement, coding theory, simulation, and other problems. May be taken for graduate credit. Prerequisite: CSCI 1311 or permission of instructor.

CSCI 4331. Cryptography. 3 Credits.

Algorithmic principles of cryptography from Julius Caesar to public key cryptography. Key management problems and solutions. Cryptographic systems and applications. Prerequisite: CSCI 2312, CSCI 3313, CSCI 3212.

CSCI 4341. Continuous Algorithms. 3 Credits.

Overview of structures in continuous mathematics from a computational viewpoint. Main topics include continuous system simulation, computational modeling, probability, statistical techniques, next-event simulation, algorithms for continuous optimization, machine learning, neural networks, statistical language processing, robot control algorithms. Prerequisite: CSCI 1311, CSCI 2113.

CSCI 4342. Computational Linear Algebra and Applications. 3 Credits.

Application of linear algebra to computer science and engineering, with a computational perspective. Topics include points, vectors, matrices, and their programming representations; algorithms for 3D transformations, pose and viewpoint estimation; linear equations, independence, rank; algorithms for matrix decompositions, reduction of dimension; computation with large matrices, under and over-determined systems; applications to large data, computer vision, text processing. Prerequisite: CSCI 2113.

CSCI 4361. Simulation Methods. 3 Credits.

Computational methods for continuous and discrete system simulation. Effects of computer software and hardware architectures on computational precision and accuracy requirements. Random-number generation and testing. Calibration and scaling technique. Verification and validation technique. May be taken for graduate credit. Prerequisite: CSCI 2113.

CSCI 4364. Machine Learning. 3 Credits.

Overview of core machine learning techniques: nearest-neighbor, regression, classification, perceptron, kernel methods, support vector machine (SVM), logistic regression, ensemble methods, hidden Markov models (HMM), non-parametrics, online learning, active learning, clustering, feature selection, parameter tuning, and cross-validation.

CSCI 4415. Real-Time and Embedded Systems. 3 Credits.

Development of software for real-time control of physical systems. Reliability and fault tolerance, exceptions and e