Undergraduate Course Descriptions
101. Overview of Computer Science. (4h) Lecture and laboratory. Overview of computer science. Students are introduced to the core areas of computer science. Topics include data representation, logic, computer organization, pseudo-code, machine/assembly code, higher-level language, algorithms, abstract data types, operating systems, and networks. Algorithms and programming are introduced through analysis of existing code. Lab—2 hours. (D, QR)
111. Introduction to Computer Science. (4h) Lecture and laboratory. Introduction to the basic concepts of computer programming and algorithmic problem solving for students with little or no programming experience. Recommended as the first course for students considering a major or minor in computer science; also appropriate for students who want computing experience applicable to other disciplines. Lab—2 hours. (D)
112. Fundamentals of Computer Science. (4h) Lecture and laboratory. Problem solving and program construction using top-down design, data abstraction, and object-oriented programming. Memory addressing, dynamic memory allocation, and linear data structures are introduced. Lab—2 hours. P—CSC 111 or POI. (D)
165. Problem Solving Seminar. (1h) Weekly seminar designed for students to develop their problem solving skills designing and implementing software. Does not count toward the computer science major or minor. May be taken twice. Pass/Fail. P—CSC 112 or POI.
191. Special Topics. (1h-3h) Topics in computer science that are not covered in regular courses or that give special practice in skills used in other courses. Not to be counted toward the bachelor of science in computer science. May be repeated for up to six hours if the topic changes.
192. STEM Incubator. (1h) An engaging and relevant introduction to STEM (science, technology, engineering, and mathematics) through creative exploration, collaboration, and computational problem-solving. Pass/Fail. May be repeated once. 192h. Honors STEM Incubator. (1h) Leadership role in developing STEM (science, technology, engineering, and mathematics) ideas and applications through scientific exploration, creative collaboration, and computational problem-solving. For students with some programming experience. Pass/Fail. May be repeated once. P—POI.
193. Independent Study. (1h-3h) Independent study directed by a faculty adviser, not to be counted toward the bachelor of science in computer science. May be repeated for up to three hours. Enrollment requires prearrangement with a computer science faculty member and departmental approval. P—POI.
211. Computer Organization. (4h) Lecture and laboratory. Computer organization from the perspective of instructions, including the central processor, busses, input and output units, and memory units. Weekly 2-hour laboratory covers combinational logic, loaders and linkers, assembly language, address computation, and other architecture-related functions. Lab—2 hours. P—CSC 111. (D)
221. Data Structures and Algorithms I. (3h) Analysis, implementation, and application of abstract data structures such as lists, stacks, queues, trees, hash tables, heaps, and graphs. Complexity analysis of algorithms that operate upon these structures. P—CSC 112. P or C—MST 117. (D)
222. Data Structures and Algorithms II. (3h) Study of algorithms, algorithm design strategies, and the derivation of time complexity bounds. Case studies illustrate greedy algorithms, divide and conquer, backtracking, and dynamic programming techniques. An introduction to the classes P, NP, NP-complete, and Turing decidability is included. P—CSC 221 and MST 111 or 112. (QR)
231. Programming Languages. (4h) Lecture and laboratory. Comparative study of programming language paradigms, including imperative languages, functional programming, logic programming, and object-oriented programming. Syntax, semantics, parsing, grammars, and issues in language design are covered. Lab—2 hours. P—CSC 112 and MST 117.
241. Computer Systems. (4h) Lecture and laboratory. Introduction to concepts of operating systems and networks including processor and memory management, concurrency, and protocolindependent data communications. Lab—2 hours. P—CSC 112 and MST 117.
331. Software Engineering. (3h) A study of fundamental topics in software engineering including software processes, agile software development and project management, requirements engineering, system modeling, design patterns and implementation, and software testing. Students practice software engineering principles through team projects. P—CSC 221.
311. Computer Architecture. (3h) In-depth study of computer system and architecture design. Topics include processor design, memory hierarchy, external storage devices, interface design, and parallel architectures. P—CSC 211.
321. Database Management Systems. (3h) Introduction to database management systems. Topics include data independence, database models, query languages, security, integrity, and transactions. P—CSC 221.
322. Data Management and Analytics. (3h) Management, analysis, and visualization of largescale data sets. Topics include key-value databases, distributed file systems, map-reduce techniques, similarity measures, link analysis, and clustering. P—CSC 321.
331. Software Engineering. (3h) Study of fundamental topics in software engineering including software processes, agile software development and project management, requirements engineering, system modeling, design patterns and implementation, and software testing. Students practice software engineering principles through team projects. P—CSC 221.
332. Mobile and Pervasive Computing. (3h) Study of the fundamental design concepts and software principles underlying mobile and pervasive computing, including mobile interface design, data management, mobile networks, location aware computing, and mobile security. Involves significant programming on modern mobile platforms. P—CSC 221.
333. Principles of Translators for Compilers and Interpreters. (3h) Study of techniques for translating high-level programming languages to a target language. Typical target languages include Java bytecode and assembly language. Topics include lexical analysis, parsing, intermediate representations, language semantics, code generation, and optimization. P—CSC 211 and 231.
341. Operating Systems. (3h) Study of the different modules that compose a modern operating system. In-depth study of concurrency, processor management, memory management, file management, and security. P—CSC 241.
343. Internet Protocols. (3h) Study of wide area connectivity through interconnection networks. Emphasis is on Internet architecture and protocols. Topics include addressing, routing, multicasting, quality of service, and network security. P—CSC 241.
346. Parallel Computation. (3h) Study of techniques for parallel and high performance computing. Topics include an overview of modern high-performance computer design, pipelining, concurrency, data dependency, shared memory, message passing, and graphics processors. Select parallel algorithms and methods for asymptotic scalability analysis are also presented. Assignments may include coding with OpenMP, MPI, and the CUDA library. P—CSC 221.
347. GPU Programming. (3h) An introduction to general purpose parallel program development on Graphics Processing Units (GPUs). Topics covered will include data parallelism, memory and data locality, parallel algorithm patterns and performance metrics, and application test studies. P—CSC 221 and either MST 121, 205 or 206.
348. Computer Security. (3h) Introduction to computer security concepts and associated theory. Detailed coverage of the core concepts of access control, cryptography, trusted computing bases, digital signatures, authentication, network security, and secure architectures. Legal issues, security policies, risk management, certification and accreditation are covered in their supporting roles. Students will learn to analyze, design, and build secure systems of moderate complexity. P—CSC 241.
352. Numerical Linear Algebra. (3h) Numerical methods for solving matrix and related problems in science and engineering using a high-level matrix-oriented language such as MATLAB. Topics include systems of linear equations, least squares methods, and eigenvalue computations. Special emphasis given to applications. Also listed as MST 326. P—MST 112; and MST 121, 205, or 206. (D)
355. Introduction to Numerical Methods. (3h) Numerical computations on modern computer architectures; floating-point arithmetic and round-off error. Programming in a scientific/engineering language such as MATLAB, C, or FORTRAN. Algorithms and computer techniques for the solution of problems such as roots of functions, approximation, integration, systems of linear equations, and least squares methods. Also listed as MST 355. P—MST 112; and MST 121, 205, or 206. (D)
361. Digital Media. (3h) Study of the mathematics and algorithms underlying digital sound, image, and video manipulation. Topics may include sampling and quantization, resolution, filters, transforms, data encoding and compression, multimedia file types and transmission, 3D printing, and digital media in multimedia and web programming. P—CSC 112 and MST 111 or 112.
363. Computer Graphics. (3h) Study of software and hardware techniques in computer graphics. Topics include line and polygon drawing, hidden line and surface techniques, transformations, and ray tracing. P—CSC 221; and MST 121, 205, or 206.
365. Image Processing Fundamentals. (3h) Study of the basic theory and algorithms for image enhancement, restoration, segmentation, and analysis. P—CSC 112; and MST 121, 205, or 206.
371. Artificial Intelligence. (3h) Introduction to problems in artificial intelligence. Topics may include knowledge representation, heuristic search, formal logic, planning, robotics, machine learning, intelligent agents, and pattern recognition. P—CSC 221.
385. Bioinformatics. (3h) Introduction to computational approaches essential to modern biological inquiry. Approaches may include large biological dataset analyses, sequence similarity and motif searches, and analysis of high-throughput genomic technologies. Emphasizes interdisciplinary interaction and communication. Also listed as PHY 385 and BIO 385. P—CSC 221 or POI.
387. Computational Systems Biology. (3h) Introduction of concepts and development of skills for comprehension of systems biology problems, including both biological and computational aspects. Topics may include genome-wide transcriptomic analysis, protein interaction networks, largescale proteomics experiments, and computational approaches for modeling, storing, and analyzing the resulting data sets. Emphasizes interdisciplinary interaction and communication. P—CSC 221 or POI.
391. Selected Topics. (1h-3h) Topics in computer science that are not studied in regular courses or which further examine topics covered in regular courses. May be repeated if the topic changes. P— any 200-level CSC course and POI.
393. Individual Study. (1h-3h) Independent study directed by a faculty adviser. No more than three hours may be counted toward a computer science major or minor. Enrollment requires prearrangement with a computer science faculty member and departmental approval. P— any 200-level CSC course and POI.
399. Computer Science Mastery Exam. (0h) Evaluation of student mastery of core topics in the computer science discipline through standardized testing. Taken during the senior year. Pass/Fail.