2020-2021 University Catalog 
    
    May 01, 2024  
2020-2021 University Catalog archived

Computer Science (CSCI)


Honors: An Honors Program in computer science is offered for qualified students; see the department head for details.

Department Head: Kenneth A. Lambert
           Sara E. Sprenkle, Winter 2021, interim                          

Faculty

First date is the year in which the faculty member began service as regular faculty at the University. Second date is the year of appointment to the present rank.

Mohamed Taha Khan, Ph.D.—(2020)-2020
Assistant Professor of Computer Science
Ph.D., University of Illinois at Chicago

Kenneth A. Lambert, Ph.D.—(1985)-1997
Professor of Computer Science
Ph.D., Rutgers University

Simon D. Levy, Ph.D.—(2002)-2015
Professor of Computer Science
Ph.D., Brandeis University

Kefu Lu, Ph.D.—(2019)-2019
Assistant Professor of Computer Science
Ph.D., Washington University in St. Louis

Elizabeth Matthews, Ph.D.—(2018)-2018
Assistant Professor of Computer Science
Ph.D., University of Florida

Sara E. Sprenkle, Ph.D.—(2007)-2013
Associate Professor of Computer Science
Ph.D., University of Delaware
Cody Watson, Ph.D.—(2019)-2019
Assistant Professor of Computer Science
Ph.D., College of William and Mary

Degrees/Majors/Minors

Major

Minor

Courses

  • CSCI 101 - Survey of Computer Science

    Credits: 4 Not open to students with previous credit in computer science. An overview of the discipline of computer science achieved through an introductory-level survey of a number of major areas of computer science. Topics include algorithms used for computer solutions of important practical problems, computer programming, digital logic applied to computer circuitry, computer architecture, data representation and organization, Web page basics, computer networks, and theoretical limits of computation. Lectures and formal laboratories. FDR: FM Staff.
  • CSCI 111 - Fundamentals of Programming I

    Credits: 4 A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories. FDR: FM Staff.
  • CSCI 112 - Fundamentals of Programming II

    Credits: 4 Prerequisite: CSCI 111. A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python. Laboratory course. FDR: SC Staff.
  • CSCI 121 - Scientific Computing

    Credits: 4 Not open to students who have taken CSCI 211 or higher. An introduction to computer programming for scientific applications and a survey of the main methodological areas of scientific computation. The course provides the tools needed for students to use computers effectively in scientific work, whether in physics, chemistry, mathematics, economics, biology, psychology, or any field involving quantitative work. Programming in Matlab, a scientific-computing software package, with a focus on topics relevant to students’ major fields of study. Lectures and formal labs. FDR: FM Levy.
  • CSCI 180 - FS: First-Year Seminar

    Credits: 3 First-year seminar. Prerequisite: First-year standing. First-year seminar. Topics, applicabililty to FDRs, and other requirements vary by term.

      Staff.

  • CSCI 209 - Software Development

    Credits: 3 Prerequisite: CSCI 112. An examination of the theories and design techniques used in software development. Topics include the software life cycle, design patterns, the Unified Modeling Language, unit testing, refactoring, rapid prototyping, and program documentation. Sprenkle.
  • CSCI 210 - Computer Organization

    Credits: 3 Prerequisite or corequisite: CSCI 112. Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language. Staff.
  • CSCI 211 - Algorithm Design and Analysis

    Credits: 3 Prerequisites: CSCI 112 and MATH 121 or MATH 201. Methods for designing efficient algorithms, including divide-and-conquer, dynamic programming, and greedy algorithms. Analysis of algorithms for correctness and estimating running time and space requirements. Topics include advanced data structures, graph theory, network flow, and computational intractability. Staff.
  • CSCI 250 - Introduction to Robotics

    Credits: 4 Prerequisite: CSCI 112. This course combines readings from the contemporary robotics literature with hands-on lab experience building robots (equipment provided) and programming them to do various tasks. The lab experience culminates with a peer-judged competition of robot projects proposed and built during the second half of the term. FDR: SC Levy.
  • CSCI 251 - Android Application Development

    Credits: 4 Prerequisite: CSCI 209. Students learn how to develop programs for mobile Android devices, such as smart phones, tablets, and watches. Classroom lectures on mobile computing and a program-development environment are supplemented by extensive hands-on programming assignments, leading to team application projects. The course culminates with a presentation of each team’s application. Levy.
  • CSCI 252 - Neuromorphic Computing

    Credits: 3 Prerequisite: CSCI 112. An overview of computational methods inspired by the nervous systems of animals. Topics include philosophical foundations of neuromorphic computing, fundamental mathematical concepts, Hopfield nets, Kohonen’s Self-Organizing Map, Sparse Distributed Memory, Latent Semantic Analysis, Tensor Products, and current neuromorphic hardware. Readings come from both popular textbooks and the scholarly literature. A major focus of the course is on writing programs to implement and apply the concepts and algorithms studied in the course.  Levy.
  • CSCI 256 - Modeling and Simulation

    Credits: 3 Prerequisites: CSCI 111 and 112. Standard practices and applications of modeling and simulation. We explore ways to model complex systems that incorporate disciplines of biology, chemistry, and physics. Students learn critical-thinking skills when reading, comprehending, and analyzing real-world systems that they then create models for. Readings are supplemented by projects which reflect scenarios where modeling and simulation would be useful. Students are evaluated on a series of coding projects, class discussion, weekly quizzes, and exams measuring the ability to identify opportunities for application and to simulate models and their environments. A final project focuses on an open-modeling opportunity in biology, chemistry, or physics Watson.
  • CSCI 297 - Topics in Computer Science

    Credits: 3 Prerequisite: CSCI 112. Readings and conferences for a student or students on topics agreed upon by the directing staff. May be repeated for degree credit if the topics are different. A maximum of six credits may be used toward the major requirements. Offered when interest is expressed and departmental resources permit.

    Fall 2020, CSCI 297A-01: Topic: An Exploration of Canonical Machine-Learning Methods (3). Prerequisite: CSCI 112. Analyzing and implementing traditional machine learning models to understand the relationships amongst the features of that data. Students learn the process of feature discovery and engineering, in conjunction with statistical algorithms, to “learn” from the data. These algorithms allow for automatically applying complex mathematical calculations over large datasets. Learning from data affords us the ability to identify patterns and make informed decisions without human intervention. We explore regression algorithms, supervised algorithms, naïve Bayes classifiers, unsupervised algorithms, dimensionality reduction, and clustering algorithms. C. Watson. Staff.

  • CSCI 312 - Programming Language Design

    Credits: 3 Prerequisite: CSCI 209. Formal language description tools, semantic concepts and syntactic constructs appropriate to diverse applications. Comparison of several high-level languages, such as Haskell, Erlang, Java, and PROLOG, and the implementations of these syntactic and semantic elements. Students also learn several programming paradigms, such as the function-oriented, object-oriented, and logic-oriented. Staff.
  • CSCI 313 - Theory of Computation

    Credits: 3 Prerequisites: MATH 121 or MATH 201 or instructor consent. A study of the principles of computer science embodied in formal languages, automata, computability, and computational complexity. Topics include context-free grammars, Turing machines, and the halting problem. Levy.
  • CSCI 315 - Artificial Intelligence

    Credits: 3 Prerequisite: CSCI 209. Basic concepts of heuristic search, game playing, natural language processing, and intelligent systems, with a focus on writing programs in these areas. Course combines a discussion of philosophical issues with hands-on problem solving. Levy.
  • CSCI 316 - Advanced Topics in Robotics

    Credits: 3 Prerequisite: CSCI 209. A review of advanced topics in robotics, including well-established topics like Bayesian filtering and control theory and current trends like intelligent robots and neuromorphic control. Readings in these areas are reinforced by hands-on projects with robot hardware and simulators. Students present their final projects at the culminating annual Spring Term Festival. Each class meeting includes lecture, discussion, and project work done in teams of one to four students, with weekly quizzes on the readings. S. Levy.
  • CSCI 317 - Database Management

    Credits: 3 Prerequisite: CSCI 209. Database design with the entity-relationship model, the relational database model including normal forms and functional dependencies, SQL database query language, server-side scripting for Web access to databases. A major project to design and implement a database using a commercial package. Whaley.
  • CSCI 318 - Mobile-Application Development

    Credits: 3 Prerequisite: CSCI 209. Students learn how to develop programs for mobile devices, such as cell phones and tablets. The target operating system is either Android or iOS, depending on the instructor offering the course. Classroom lectures on mobile computing and a program development environment are supplemented by extensive hands-on programming assignments, leading to an independent application project of the student’s devising. The course culminates with a presentation of each student’s application, and an optional upload to the appropriate site for distribution. FDR: SC Lambert, Levy.
  • CSCI 319 - Video Game Design

    Credits: 3 Prerequisite: CSCI 209. In this course, students learn to design and program video games using Python and the Pygame module. Concepts covered include video game code organization utilizing object-oriented programming, OOP design patterns, 2D animation, artificial intelligence, and responding to user feedback. Matthews.
  • CSCI 320 - Parallel Computing

    Credits: 3 Prerequisites: CSCI 209 and 210. A survey of parallel computing including hardware, parallel algorithms, and parallel programming. The programming projects emphasize the message-passing paradigm. Staff.
  • CSCI 321 - Computer Networks

    Credits: 3 Prerequisite: CSCI 209. Intended as a first course in communication networks for upper-level students. Covers concepts and protocols underlying modern computer networks. Topics include network architecture and layering, routing and switching, the TCP/IP protocol and network applications. Theory and programming. Staff.
  • CSCI 325 - Distributed Systems

    Credits: 4 Prerequisite: CSCI 209 or instructor consent. In this course, students learn to design and develop distributed systems, i.e., collections of independent networked computers that function as single coherent systems. The concepts of communication, synchronization, consistency, replication, fault tolerance, and security are covered. In addition, case studies of real-world distributed systems (e.g., the Internet, distributed file systems, grid computing) are analyzed. Sprenkle.
  • CSCI 330 - Operating Systems

    Credits: 3 Prerequisites: CSCI 209 and 210. Procedure initiation, environment construction, reentrancy, kernel functions, resource management, input/output, file structures, security, process control, semaphores and deadlock, and recovery procedures. The laboratory includes the opportunity to examine and modify the internals of an operating system. Staff.
  • CSCI 332 - Compiler Construction

    Credits: 3 Prerequisites: CSCI 209 and 210. Lexical analysis, parsing, context dependence, translation techniques, optimization. Students are expected to produce a compiler for a suitably restricted language. Staff.
  • CSCI 335 - Software Engineering through Web Applications

    Credits: 4 Prerequisite: CSCI 209. In this course, students learn to develop high-performance software for Web applications using advanced software engineering techniques. The concepts of client-server computing, theories of usable graphical user interfaces, models for Web-based information retrieval and processing, and iterative development are covered. Sprenkle.
  • CSCI 339 - Human-Computer Interaction

    Credits: 3. Prerequisite: CSCI 209. In this course, students learn the basics of Human-Computer Interaction. Students learn to design user studies, conduct user studies ethically, and analyze user feedback with statistics and the programming language R. Concepts covered include analysis of user data, programming in R, user studies, study ethics, UML, user experience design, designing questionnaires, IRB submissions and CITI training, as well as guest lectures in special interest topics. Matthews.
  • CSCI 340 - Interactive Computer Graphics

    Credits: 3 Prerequisite: CSCI 209. In this course we develop, step by step, a reasonably complete 3D computer-graphics system with the ability to generate a photo-realistic image given a specification of shapes, poses, lighting, textures, and material properties, and camera parameters and perspective. Final projects consist of using your system to produce your own computer-animated short. The necessary mathematical background is developed during the course. Staff.
  • CSCI 397 - Seminar

    Credits: 3 Prerequisite: CSCI 112. Readings and conferences for a student or students on topics agreed upon with the directing staff. May be repeated for degree credit if the topics are different. A maximum of six credits may be used toward the major requirements.

     

  • CSCI 401 - Directed Individual Study

    Credits: 1 Prerequisite: Permission of the department. Individual conferences. May be repeated for degree credit if the topics are different. Staff.
  • CSCI 402 - Directed Individual Study

    Credits: 2 Prerequisite: Permission of the department. Individual conferences. May be repeated for degree credit if the topics are different. Staff.
  • CSCI 403 - Directed Individual Study

    Credits: 3 Prerequisite: Permission of the department. Individual conferences. May be repeated for degree credit if the topics are different. Staff.
  • CSCI 493 - Honors Thesis

    Credits: 3-3 Honors Thesis. Staff.


  •