WAKE FOREST UNIVERSITY DEPARTMENT OF COMPUTER SCIENCE

Course Descriptions

DEPT. OF COMPUTER SCIENCE

Undergraduate Course Descriptions

101. Overview of Computer Science. (3h)
An introduction to fundamental principles of computer science including abstraction, data and information, the World Wide Web, algorithms, programs, creative computer use, and the global impact of computing. Students cultivate their understanding by working with data, logically solving problems individually and collaboratively, and writing simple computer programs. May not be counted towards the computer science major or minor.
(D)

102. Problem Solving with Python. (3h)
An introduction to fundamental principles of computer science including abstraction, data and information, algorithm development, and computer programming. Students apply computational problem solving skills to representative problems from a range of domains using the Python programming language. Appropriate for students who want computing experience applicable to other disciplines. May not be counted towards the computer science major or minor.
(D)

111. Introduction to Computer Science. (4h)
Introduction to computer programming and algorithmic problem solving in an object-oriented programming language. Topics include basic control structures, methods, parameters, objects, classes, arrays, and program testing and debugging. Recommended as the first course for students considering a major or minor in computer science.
(D)

112. Fundamentals of Computer Science. (4h)
A study of algorithm development and problem solving using top-down design, data abstraction, object-oriented programming, and program debugging and testing. Topics include memory allocation, recursion, data structures such as arrays, lists, stacks, queues, and trees, simple sorting and searching algorithms, and algorithm complexity.
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.

191. (Fall 2020) Special Topics: The Ethics of Emerging Technology. (3h)
Students will develop a toolkit to diagnose the moral and social ramifications of several emerging technologies and seek ways to craft a more ethical future. Focus will be on the technologies that are likely to further entangle philosophy, computer science, and humanity in the years ahead.

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

201. Data Structures and Algorithms. (3h)
A study of fundamental data structures and the algorithms that act upon them. Data structure topics include the application, implementation, and complexity analysis of trees, hash tables, heaps, maps, sets, and graphs. Algorithmic topics include advanced sorting and searching methods and an introduction to divide-and-conquer and greedy techniques, graph algorithms, backtracking, and dynamic programming.
P—CSC 112 and MST 117 (D)

211. Computer Organization. (4h) – REPLACED BY CSC 250 IN FALL 2020
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) – REPLACED BY CSC 201 IN FALL 2020
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) – REPLACED BY CSC 301 IN FALL 2020
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. (3h)
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.
P—CSC 112 and MST 117

241. Computer Systems. (4h) – REPLACED BY CSC 251 IN SPRING 2021
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

250. Computer Systems I. (4h)
Study of computer system mechanisms supporting program execution, with a focus on mapping programs to underlying hardware. Topics include data representation, assembly language, processor architecture, and the memory system, with an introduction to system-level programming.
P—CSC 112 and MST 117 (D)

251. Computer Systems II. (3h)
Study of computer system mechanisms supporting program execution, with a focus on process and resource management. Topics include process control, virtual memory, concurrency, parallelism, file-based and network-based I/O, and additional coverage of system-level programming.
P—CSC 250

301. Algorithm Design and Analysis. (3h)
A study of techniques for designing algorithms, analyzing their time and space complexity, and demonstrating their correctness. The algorithm design techniques include divide-and-conquer, greedy algorithms, dynamic programming, randomized algorithms, string processing algorithms, and parallel algorithms. The algorithm analysis includes computational models, best/average/worst case analysis, and computational complexity (including lower bounds and NP-completeness).
P—CSC 201 and MST 112

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 or 250

321. Database Management Systems. (3h)
Introduction to database management systems. Topics include data independence, database models, query languages, security, integrity, and transactions.
P—CSC 201 or 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 201 or 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 201 or 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—Either CSC 211 or 250 and CSC 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 or 251

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 or 251

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 201 or 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 201 or 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 or 251

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 201 or 221, and either 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 201 or 221, and either 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)
An overview of areas of study in artificial intelligence. Topics are chosen from among knowledge representation, formal logic, fuzzy logic, intelligent agents, expert systems, machine learning, robotics, and natural language processing
P—CSC 201 or 221

373. Data Mining. (3h)
An overview of data mining methods and algorithms for classification, association analysis, clustering,and anomaly detection. A major focus will be on the implementation of algorithms for and design and construction of solutions to data mining problems. Applications and ethical considerations of data mining in humanities, arts, and healthcare are discussed.
P—CSC 201 or 221

374. Machine Learning. (3h)
An introduction to concepts and application of machine learning algorithms and techniques, focusing on supervised and unsupervised learning. Students learn the theoretical concepts behind several types of machine learning algorithms and gain practical experience applying them. Algorithms covered could include logistic regression, support vector machines, regularization, dimensional reduction, clustering, and neural networks.
P—CSC 201 or 221, MST 112, and MST 121, 205, or 206

375. Neural Networks and Deep Learning. (3h)
An introduction to concepts and applications of neural networks and deep learning, a branch of machine learning that uses additional layers of high-level representations of data to maximize performance on a given task. The topics covered may include basic neural networks, deep neural networks, and convolutional and recurrent neural networks. Students learn the theoretical concepts behind several types of neural network algorithms and gain practical experience applying them.
P—CSC 201 or 221, MST 112, and MST 121, 205, or 206

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 201 or 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 201 or 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

391. (Fall 2020, Spring 2021). Programming Languages Practicum. (1h)
Additional practical application of topics and skills covered in CSC 231.
C— concurrent enrollment in CSC 231 and POI

391. (Spring 2021). Cloud Computing Platforms and Services (1h)
Examination of major cloud computing providers, such as Amazon, Google, and Microsoft. Hands-on examples and exercises cover virtual machines, containers, and serverless technologies. Students will build and leverage cloud native applications and services using Amazon Web Services and Google Cloud Platform.
P— any 200-level CSC course and POI

391. (Spring 2021). Security and Trustworthiness of AI (3h)

AI is the most global controversial & successful field of research in the 20th century. Specifically, Deep Learning (DL) and Reinforcement Learning (RL) have enabled magnificent progress in many domains including computer vision, autonomous cars, NLP, robotics, network security etc. This class will help students develop a deeper understanding of the security and privacy implications of DL and RL and explore new research directions and applications of AI/DL in the cybersecurity field. It assumes that students already have a basic understanding of DL either through CSC375/675 or by doing research/projects using DL or RL. This class, in particular, will focus on the trustworthiness of DL, exploring a selected list of new, cutting-edge topics including security and privacy issues in DL, explainability, generalization, reliability and robustness, and fairness. This class will be a research-based class meaning that the students will read/present research papers, implement models and techniques from recent research papers, and finally propose their own novel research ideas in formal proposals as their final projects.

P– CSC375  or Prior Research Experience

391. (Spring 2021). Ethical Leadership in Computer Science (3h)

The shape of our future depends on the character and leadership of the people who work in Computer Science. This course aims to help students develop the knowledge, skills, and virtues of character required to become ethical leaders in their field.

P–CSC112

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.