A minimum GPA of 2.0 in the computer science courses that comprise a major or minor in the department is required for graduation.
Students who are enrolled at Wake Forest University may not take courses in computer science at other institutions to satisfy divisional requirements.
Students with a special interest in multidisciplinary work should consider a program of study that combines computer science with another discipline through either a double major or a minor.
Planning for a Major or Minor in Computer Science
Students do not need prior computer science experience to major in computer science. While not required, students interested in the major are encouraged to:
- take CSC 111 and MTH 117 in their freshman year. Students with AP scores of 4 or 5 may receive credit for CSC 111 and begin the computer science curriculum with CSC 112.
- take CSC 112 and CSC 201 as early as feasible. Completing these courses in the sophomore year provides the most flexibility in scheduling other required courses and electives. While not necessary, completing CSC 111, CSC 112, CSC 201, and MTH 117 by the end of the fall semester of the sophomore year provides the best flexibility, especially for the BS.
- consider taking another 200-level course in the sophomore year. Reviewing prerequisites for the 300-level electives may help in the decision regarding which 200-level courses to take early. For example, CSC 250 and CSC 251 are prerequisites for CSC 348.
To declare a major or minor in computer science, the student must have a minimum 2.0 GPA in computer science courses required for the major or minor including CSC 112. Students choosing to double major where one of the majors is housed in the Department of Computer Science may count any course required by both majors as fulfilling the requirements of both majors. If a course is an elective for either of the majors, then it may only count for one of those majors.
Transfer Credit
A maximum of 7 hours at the 200-level or above may be transferred toward the BA or BS in computer science, with a maximum of 3 hours at the 300 level. For the computer science minor, all computer science electives at 193-level and above must be taken at Wake Forest.
Program of Study GPA Calculation
All courses that could potentially fulfill a program of study requirement will be utilized in the calculation of the student’s program of study GPA.
Contact Information
Department of Computer Science
Manchester Hall 233, Box 7311
Phone 336-758-4982
Computer Science (CSC)
CSC 101. Overview of Computer Science. (3 h)
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)
CSC 102. Problem Solving with Python. (3 h)
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)
CSC 103. Introduction to Web and Mobile Applications. (3 h)
An overview of the key concepts and practical skills required to build computer applications, including mobile and web development. Topics include web technology, design thinking, prototyping, application architecture, and utilizing low-code and no-code platforms. The course also includes an introductory look at artificial intelligence with a focus on large language models. No programming or other computer science experience needed. May not be counted towards a computer science major or minor.
CSC 111. Introduction to Computer Science. (4 h)
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)
CSC 112. Fundamentals of Computer Science. (4 h)
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 prerequisite override required. (D)
CSC 165. Problem Solving Seminar. (1 h)
A weekly seminar designed for students to develop their problem solving skills designing and implementing software. Does not count towards the computer science major or minor. May be taken twice. Pass/Fail. P-CSC 112 or prerequisite override required.
CSC 181. Introduction to Computer Science Research. (3 h)
Introduction to concepts, conventions, and techniques used in computer science research. Students will learn research methods, evaluation of data, the presentation and dissemination of results, and research ethics within the context of computer science. Students interested in the Honors in Computer Science program are encouraged to take this course. Does not count towards the computer science major or minor. Pass/Fail only. P-CSC 201 or prerequisite override required.
CSC 191. Special Topics. (1-3 h)
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 6 hours if the topic changes.
CSC 193. Independent Study. (1-3 h)
A course of independent study directed by a faculty advisor, not to be counted toward the bachelor of science in computer science. May be repeated for up to 3 hours. Enrollment requires prearrangement with a computer science faculty member and departmental approval P-Prerequisite override required.
CSC 195. Data Visualization. (3 h)
Study of the fundamentals of data visualization, its applications and limitations, and potential security and ethical concerns. Students will learn the complete pipeline for conducting business intelligence and producing polished reports and dashboards while gaining exposure to contemporary business intelligence software tools. (QDA)
CSC 196. Introduction To High Performance Computing. (3 h)
Introduction to the foundations of interconnected systems and parallel computing. Students will gain hands-on experience using WFU’s own supercomputer, DEAC. Topics covered include the architecture of supercomputing clusters, job scheduling, data management, parallel frameworks, and GPU computing. Topics are approached at a level that is accessible to students across multiple disciplines.
CSC 201. Data Structures and Algorithms. (3 h)
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 MTH 117. (D)
CSC 231. Programming Languages. (3 h)
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 MTH 117.
CSC 250. Computer Systems I. (4 h)
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 MTH 117.
CSC 251. Computer Systems II. (3 h)
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.
CSC 270. Foundations of Artificial Intelligence. (3 h)
Introduction to the foundational concepts, techniques, and applications of artificial intelligence with special focus on machine learning. Students will explore, through both theory and hands-on implementation, problem-solving strategies, supervised and unsupervised learning methods, basic neural networks, and optimization techniques. Ethical considerations, including fairness, transparency, and societal impacts of AI, will also be addressed. P - CSC 112 and MTH 117.
CSC 280. Computing Ethics. (3 h)
Prepares students to identify, analyze, and address the ethical implications of computing technologies in the service of human flourishing. P - CSC 112.
CSC 301. Algorithm Design and Analysis. (3 h)
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 MTH 112. (QR)
CSC 311. Computer Architecture. (3 h)
An 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 250.
CSC 321. Database Management Systems. (3 h)
Introduction to database management systems. Topics include data independence, database models, query languages, security, integrity, and transactions. P-CSC 201.
CSC 322. Data Management and Analytics. (3 h)
Management, analysis, and visualization of large-scale data sets. Topics includes key-value databases, distributed file systems, map-reduce techniques, similarity measures, link analysis, and clustering. P - CSC 321.
CSC 331. Software Engineering. (3 h)
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.
CSC 332. Mobile and Pervasive Computing. (3 h)
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.
CSC 333. Principles of Translators for Compilers and Interpreters. (3 h)
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 231 and 250.
CSC 341. Operating Systems. (3 h)
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 251.
CSC 343. Internet Protocols. (3 h)
Study of wide area connectivity through interconnection networks. Emphasis is placed on Internet architecture and protocols. Topics include addressing, routing, multicasting, quality of service, and network security. P-CSC 251.
CSC 345. Cloud Platforms and Services. (3 h)
Study of cloud computing platforms and services. Emphasis is on infrastructure, platforms, and software as a service models on contemporary cloud platforms. Topics include delivery and deployment models, virtual machines, containers, serverless, clustering, Kubernetes, operations, and security. P - CSC 201.
CSC 346. Parallel Computation. (3 h)
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 and 251.
CSC 347. GPU Programming. (3 h)
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 and MTH 121 or 205.
CSC 348. Computer Security. (3 h)
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 251.
CSC 352. Numerical Linear Algebra. (3 h)
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. Credit not allowed for both CSC 352 and MTH 326. P-MTH 112; and MTH 121 or 205.
CSC 355. Introduction to Numerical Methods. (3 h)
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. Credit not allowed for both CSC 355 and MTH 355. P-MTH 112; and MTH 121 or 205.
CSC 371. Artificial Intelligence. (3 h)
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 and CSC 270.
CSC 373. Data Mining. (3 h)
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 and 270.
CSC 374. Machine Learning. (3 h)
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 and 270, MTH 112 and MTH 121 or 205.
CSC 375. Neural Networks and Deep Learning. (3 h)
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 and 270, MTH 112, and MTH 121 or 205.
CSC 376. Reinforcement Learning. (3 h)
Introduction to reinforcement learning concepts and applications, including single-agent and multi-agent settings. Topics may cover value- and policy-based methods, temporal-difference learning, exploration strategies, explainability, and safety of learned agents. Students gain theoretical understanding and practical experience applying reinforcement learning techniques. P - CSC 270.
CSC 385. Bioinformatics. (3 h)
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. Credit not allowed for both CSC 385 and BIO 385 or PHY 385. P-CSC 201 (and BIO 150, 150L, 160, and BIO 160L if taken as BIO 385) or prerequisite override required.
CSC 387. Computational Systems Biology. (3 h)
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, large-scale proteomics experiments, and computational approaches for modeling, storing, and analyzing the resulting data sets. Emphasizes interdisciplinary interaction and communication. Credit not allowed for both CSC 387 and BIO 387. P-CSC 201 (also requires BIO 150, 150L, 160, and BIO 160L if taken as BIO 387) or prerequisite override required.
CSC 391. Selected Topics. (1-3 h)
Topics in computer science that are not studied in regular courses or which further examine topics covered in regular courses. May be repeated if topic changes. P - any 200-level CSC course and prerequisite override required.
CSC 393. Individual Study. (1-3 h)
Independent study directed by a faculty advisor. By prearrangement. 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. May be repeated for credit. P-any 200-level CSC course and prerequisite override required.
CSC 399. Computer Science Mastery Exam. (0 h)
Evaluation of student mastery of core topics in the computer science discipline through standardized testing. Taken during the senior year. Pass/Fail.
Chair Peter Santago
Professors Errin Fulp, V. Paúl Pauca, Peter Santago
Professors Emeritus Jennifer J. Burg, David John
Associate Professors Sarra Alqahtani, Grey Ballard, Minghan Chen, Daniel Cañas, Natalia Khuri, William Turkett
Associate Professor Emeritus Stan Thomas
Assistant Professors Aditya Devarakonda, Fan Yang, Ying Zhang
Assistant Teaching Professor William Cochran, Alex Hicks
Assistant Professor of the Practice Sarah Parsons
Katherine and Dickerson Wright Presidential Chair in Computer Science and Entrepreneurship Ron Doyle
Affiliate Professor Jennifer Erway
Affiliate Associate Professor Samuel Cho
Affiliate Assistant Professor Hussein Abdeltawab
Visiting Assistant Professor Rob Robless
Adjunct Professors Adam Carlson, Kelly Kuykendall, Cody Stevens, Bhisham Dev Verma