Computer Science

  • Department Information

    Computer Science

    Department of Mathematics and Computer Science

    Joanna Wares, Chair
    Professors Caudill, Charlesworth, Davis, Dumbaugh, K. Hoke, Kvam, Nall, Ross
    Associate Professors Arnold, Denny, Kerckhove, LeCrone, Russell, Szajda, Wares
    Assistant Professors Bhakta, Jiang, Park, Ware
    Directors H. Hoke, Torres

  • Major

    The Computer Science Major

    Note: The grade point average of the coursework comprising the major must be no less than 2.00 with no computer science course grade below C- (1.70). Students are strongly advised to consult with faculty in planning their major curriculum.

    For the Bachelor of Arts degree

    11.5 units, including:

    CMSC 150 Introduction to Computing

    CMSC 221 Data Structures with Lab

    CMSC 222 Discrete Structures for Computing

    CMSC 240 Software Systems Development

    CMSC 301 Computer Organization

    CMSC 315 Algorithms

    CMSC 323 Design and Implementation of Programming Languages

    Three additional 1-unit CMSC electives at the 300 level. Without departmental approval, no more than one of these courses can be an Independent Study course.

    MATH 211 Calculus I

    MATH 245 Linear Algebra

    For the Bachelor of Science degree

    14.5 units, including:

    CMSC 150 Introduction to Computing

    CMSC 221 Data Structures with Lab

    CMSC 222 Discrete Structures for Computing

    CMSC 240 Software Systems Development

    CMSC 301 Computer Organization

    CMSC 315 Algorithms

    CMSC 323 Design and Implementation of Programming Languages

    Three additional 1-unit CMSC electives at the 300 level. Without departmental approval, no more than one of these courses can be an Independent Study course.

    MATH 211 Calculus I

    MATH 212 Calculus II

    MATH 245 Linear Algebra

    Two units at the 300 level or above in mathematics or two units (or more) beyond the introductory level in one of the following fields: physics (200 level or above), chemistry (200 level or above), or biology (beyond 205).

    MATH 300 may not be used to meet the 300-level MATH option for the BS degree

    Note: Any MATH and CMSC double-major, or MATH major with CMSC minor, having earned at least an A- in MATH 300 may exempt from CMSC 222 but is required to complete an additional CMSC 300-level elective to complete the CMSC major or minor.

  • Minor

    The Computer Science Minor

    Note: The grade point average of the coursework comprising the minor must be no less than 2.00 with no computer science course grade below C- (1.70). Students are strongly advised to consult with faculty in planning their minor curriculum.

    Five and a half units, including:

    CMSC 150 Introduction to Computing

    CMSC 221 Data Structures with Lab

    CMSC 222 Discrete Structures for Computing

    CMSC 240 Software Systems Development

    CMSC 301 Computer Organization or CMSC 315 Algorithms

    One elective unit chosen from:

    A 1-unit 300-level Computer Science elective or

    A 1-unit computationally intensive upper level course from another department approved by the computer science faculty.

  • Data Science and Statistics Concentration

    The Data Science and Statistics Concentration

    The concentration in data science and statistics with a major in computer science requires six units (where applicable, these may also count for major requirements).

    CMSC 327 Machine Learning (may replace with MATH 389 Statistical Learning)

    MATH 235 Multivariate Calculus

    MATH 289 Introduction to Data Science

    MATH 329 Probability


    Two units, chosen from: 

    CMSC 325 Database Systems

    CMSC 326 Simulation

    CMSC 395 Selected Topics (with approval)

    ECON 270 Introductory Econometrics

    MATH 330 Mathematical Statistics

    MATH 396 Selected Topics in Mathematics

    Note: Students completing a concentration in data science and statistics may not minor in mathematics or computer science.

  • Honors

    Honors Program

    Students invited into the honors program may earn honors in computer science by completing the following requirements:
    1. Two 300-level courses for honors credit (one of which has a 300-level prereq: 321, 322, 323, 326, 330, 331, 332, 333, 334, 335);
    2. Two semesters of directed independent study (CMSC 340) for a total of two units. The independent study courses counting for honors credit must be taken after the student has been accepted into the honors program and chosen in consultation with the honors coordinator.
    3. Honors paper

Courses

Expand All
  • CMSC 101 Minds and Machines

    Units: 1

    Fulfills General Education Requirement (FSSR)

    Description

    Formal deduction in propositional logic. The fundamentals of computer architecture. An elementary exploration of the extent to which symbolic reasoning can be automated, including a consideration of related results in fields such as neuroscience and artificial intelligence. Three lecture hours and one laboratory hour per week.

  • CMSC 105 Elementary Programming with Lab

    Units: 1

    Fulfills General Education Requirement (FSSR)

    Description

    Solving problems by writing computer programs. Introduction to computer architecture. Emphasis on symbolic reasoning using examples from a particular computing context. For non-majors. Not open to students who have completed any computer science course that fulfills major requirements. Three lecture hours and one laboratory hour per week.

  • CMSC 150 Introduction to Computing

    Units: 1

    Fulfills General Education Requirement (FSSR)

    Description

    Techniques for writing computer programs to solve problems. Topics include elementary computer organization, object-oriented programming, control structures, arrays, methods and parameter passing, recursion, searching, sorting, and file I/O. Three lecture hours and two laboratory hours per week. Students who have received credit for courses numbered CMSC 221 or higher may not take CMSC 150 for credit. Note: Knowledge of the topic of CMSC 150 is a prerequisite to all higher numbered Computer Science courses.

  • CMSC 195 Special Topics

    Units: .25-1

    Description

    Special topics satisfying neither major nor minor requirements.

  • CMSC 221 Data Structures with Lab

    Units: 1

    Fulfills General Education Requirement (FSSR)

    Description

    Introduction to data structures, including stacks, queues, linked lists, and binary trees. Topics include abstraction, object-oriented programming, recursion, and computational complexity. Three lecture hours and two laboratory hours per week.

    Prerequisites

    CMSC 150.

  • CMSC 222 Discrete Structures for Computing with Lab

    Units: 1

    Description

    Sets, functions, elementary propositional and predicate logic, elementary graph theory, recurrence relations, proof techniques (including mathematical induction and proof by contradiction), combinatorics, probability, and random numbers, with applications to computing. Three hours lecture and one hour lab per week.

    Prerequisites

    CMSC 150.

  • CMSC 240 Software Systems Development

    Units: 1

    Description

    Introduction to techniques necessary for development of large-scale software systems. Topics include the development life cycle; design considerations including OOP, patterns, reuse, and usability; repository management; testing, debugging, and static/dynamic analysis; and group work. Also includes introduction to Unix/Linux environments, and to the C++ programming language, including classes, inheritance, and polymorphism; pointers and dynamic memory allocation; and the C++ Standard Template Library (STL). Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 221.

  • CMSC 288 Computer Science Apprenticeship

    Units: .25-.5

    Description

    Participation in development of software, with supervision of computer science faculty. Does not count for computer science major or minor. No more than a total of 1.5 units of CMSC 288 may count toward the total number of units required for a degree.

  • CMSC 301 Computer Organization

    Units: 1

    Description

    Fundamentals of computer organization. Topics include instruction and, data representations, assembly language, processor data path design, memory systems and I/O. Also includes examination of how software characteristics impact hardware design and optimization. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 221 and CMSC 240 (CMSC 240 may be taken concurrently)

  • CMSC 315 Algorithms

    Units: 1

    Description

    Design, analysis, and implementation of advanced computer algorithms. Emphasis is given to problem-solving techniques, including the greedy method, divide-and-conquer, and dynamic programming. Specific problem domains vary. Topics may include sorting, graphs, networks, computational geometry, NP-completeness, approximation algorithms, text processing, distributed systems, and numerical algorithms. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMCS 221 and CMSC 222.

  • CMSC 321 Operating Systems

    Units: 1

    Description

    Structure of operating systems, process management, memory management, file systems, and case studies. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 222 and CMSC 301.

  • CMSC 322 Software Engineering Practicum

    Units: 1

    Description

    Project-oriented course. Principles of software engineering will be emphasized throughout. Three lecture hours and one laboratory hour per week.

    Prerequisites

    Two courses at the 300 level that have CMSC 301 or CMSC 315 as a prerequisite, or permission of instructor.

  • CMSC 323 Design and Implementation of Programming Languages

    Units: 1

    Description

    Concepts in design and implementation of programming languages, including compile-time and run-time issues. Support for block-structured procedural languages, object-oriented languages, and functional languages. Three lecture hours and one laboratory hour per week.

    Prerequisites

    Senior standing and CMSC 301 and CMSC 315, or permission of instructor.

  • CMSC 325 Database Systems

    Units: 1

    Description

    Introduction to systematic management of data: design and implementation of relational databases, data modeling, normalization, indexing, relational algebra, query processing, and transaction management. Programming projects include substantial use of SQL and its extensions. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 221 and CMSC 222.

  • CMSC 326 Simulation

    Units: 1

    Description

    Introduction to simulation. Discrete-event simulation, Monte Carlo simulation, simulation of queuing and inventory systems, random number generation, discrete and continuous stochastic models, elementary statistics, point and interval parameter estimation, and input modeling techniques. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 222 and CMSC 240.

  • CMSC 327 Machine Learning

    Units: 1

    Description

    The mathematics and computer programming underlying practical machine learning applications, and how to construct and evaluate the quality of such systems. Linear and logistic regression, artificial neural networks, support vector machines, K-means clustering. Other topics within Artificial Intelligence as time permits. Programming projects. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 221, MATH 211 or MATH 212 or MATH 235, and MATH 245.

  • CMSC 328 Numerical Analysis

    Units: 1

    Description

    (See MATH 328.)

  • CMSC 330 Theory of Computation

    Units: 1

    Description

    Finite state machines, regular languages, push-down automata, and context-free languages. Turing machines, recursive functions, and related topics. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 315.

  • CMSC 331 Introduction to Compiler Construction

    Units: 1

    Description

    Regular languages, context-free languages, finite automata, push-down automata, lexical analysis, parsing, intermediate representation, and code generation. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 222 and CMSC 301.

  • CMSC 332 Computer Networks

    Units: 1

    Description

    Principles and techniques for data communication between computers. Topics include design and analysis of communication protocols, routing, congestion control, network-centric applications, and recent advances. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 301.

  • CMSC 333 Parallel Programming

    Units: 1

    Description

    Principles and techniques for programming computers that have multiple processors. Writing programs for parallel computers that enhance run-time efficiency, portability, correctness, and software modifiability. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 222 and CMSC 301.

  • CMSC 334 Computer Security

    Units: 1

    Description

    Theory, mechanisms, and implementation of computer security and data protection. Topics include encryption and authentication, program and language security, operating system security, and network security. Three lecture hours and one laboratory hour per week.

    Prerequisites

    CMSC 301 , or permission of instructor.

  • CMSC 335 Computer Graphics

    Units: 1

    Description

    Device independent two- and three-dimensional computer graphics, interactive graphics, user interfaces, and human factors. Consideration of advanced modeling and rendering. Three lecture hours and one laboratory hour per week.

    Prerequisites

    MATH 245 and CMSC 222 and CMSC 301.

  • CMSC 340 Directed Independent Study

    Units: .25-1

    Description

    To enable well-qualified students who have completed basic requirements for major to work independently in areas not included in curriculum.

    Prerequisites

    Permission of department chair and instructor.

  • CMSC 388 Individual Internship

    Units: .25-1

    Description

    No more than 1.5 units of internship in any one department and 3.5 units of internship overall may be counted toward required degree units.

    Prerequisites

    Permission of department chair.

  • CMSC 395 Selected Topics

    Units: .5-1

    Description

    Selected topics in Computer Science

    Prerequisites

    Permission of instructor.

  • CMSC 406 Summer Undergraduate Research

    Units: 0

    Description

    Documentation of the work of students who receive summer fellowships to conduct research [or produce a creative arts project] in the summer. The work must take place over a minimum of 8 weeks, the student must engage in the project full-time (at least 40 hours per week) during this period, and the student must be the recipient of a fellowship through the university. Graded S/U.

    Prerequisites

    Approval for summer Arts and Sciences fellowship by faculty mentor.