Department of Computer Science

Brooks Computer Science Building, 201 S. Columbia Street,

CB# 3175; (919) 590-6000



The Department of Computer Science offers instruction and performs research in the essential areas of computer science. Majors receive rigorous training in the foundations of computer science and the relevant mathematics, then have ample opportunity to specialize in software systems, programming languages, theoretical computer science, or applications of computing technology.

Majors can receive credit for practical training as a computing professional through an internship with a company or organization in the computing or information technology fields. Internships typically are paid positions and involve the student working off campus. All internships for credit must be approved in advance by the director of undergraduate studies. Students interested in pursuing such an internship should contact the director of undergraduate studies prior to the start of the internship.

Majors who excel in the program also have the opportunity to perform undergraduate research in computer science. Research projects may be pursued in conjunction with an existing graduate research group in the department and/or may be used as a vehicle for graduating with honors as described below.

Students who wish to use computers vocationally and desire a technical introduction to computing should take one or more of the introductory courses, COMP 110, 116, and 401, and one or two more advanced courses such as COMP 410 or 411. Students can minor in computer science with five courses, as described below.

The department offers COMP 101 for all students who wish to develop the ability to use a personal computer for common applications. COMP 380 and COMP 388 are philosophical and moral reasoning Approaches courses that have no programming prerequisite. Many other courses satisfy quantitative General Education requirements.

Students with interests in the cognitive, social, and organizational roles of information should consider the information science major in the School of Information and Library Science. This program is described elsewhere in this bulletin.

Computer Science Major, B.A.

The bachelor of arts degree with a major in computer science is the preferred degree for those whose interests in computing span the boundaries of multiple disciplines and who wish to integrate their study of computing with study in a related discipline. The B.A. degree will prepare the undergraduate student for a career in either a traditional computing field or a field in which computing is a significant enabling technology.

Core Requirements

Additional Requirements

Suggested Plans of Study

The following is a suggested four-year plan of study for B.A. majors.

First Year

Sophomore Year

Junior Year

Senior Year

The following is a suggested plan of study for students initiating coursework for the B.A. major in their junior years. This is an accelerated plan appropriate for students who have already completed most if not all of their general education requirements and COMP 110 or COMP 116 (if needed).

Junior Year

Senior Year

Computer Science Major, B.S.

The bachelor of science with a major in computer science is the preferred degree both for graduate study in computer science and for technical careers in software development, computational science, networking, information systems, and electronic commerce. Graduates of the program are well-suited for professional employment in traditional computer and communications industries, as well as in such diverse industries as financial services and consulting practices in which computing and information management are central to the operation of the enterprise. Students who desire a more in-depth knowledge of computing have the option of receiving a bachelor's degree and a master's degree in as few as five years.

Core Requirements

Additional Requirements

Suggested Plan of Study

The following is a suggested plan of study for B.S. majors.

First Year

Sophomore Year

Junior Year

Senior Year

Notes on the Suggested Plan of Study

A first formal course in computer programming (such as COMP 110 Introduction to Programming) is a prerequisite for COMP 401. Students with no programming experience should begin their program of study with COMP 110. The department assumes (but does not require) that prospective majors will have acquired sufficient knowledge of programming basics prior to enrolling at UNC–Chapel Hill to start with COMP 401. Students who are unsure if their background preparation enables them to begin their studies with COMP 401 are encouraged to consult a departmental advisor.

Students who are able to begin with COMP 401 may take it in their first semester and either advance the suggested program of study by one semester (giving themselves an extra free elective in their junior/senior years) or take another appropriate course such as a first-year seminar as an elective in the first year. In either case, neither COMP 110 nor a first-year seminar is a required course in the major.

This plan of study further assumes that students will place out of foreign language 1. If this is not the case, then the student should start with foreign language 1 (and have one fewer free elective in the senior year).

Dual Bachelor's–Master's Degree Program

Students in the B.S. degree program with a GPA of 3.2 or better after five or more semesters of study have the option of applying to the dual B.S.–M.S. program at UNC–Chapel Hill to pursue graduate coursework leading to the degree of master of science. Such students must complete the requirements for the bachelor of science degree within eight semesters. Upon completion of the B.S. degree, students then enroll as a graduate student to continue work towards the master of science degree.

The requirements for the master of science degree can be found in the Graduate Record ( Generally, the master's degree requires 30 additional hours of computer science coursework. Up to nine credit hours of computer science coursework taken while an undergraduate can be applied to the master's degree if the coursework is not also used to satisfy the graduation requirements for the bachelor's degree. The requirements for the master's can be completed in as few as two additional semesters, for a total of 10 semesters of study.

Students interested in the dual-degree program should have completed (or be on track to complete) seven computer science courses at the 400 level or higher by the end of their sixth semester. Students must formally apply for admission to the combined B.S.–M.S. program, and it is expected that the application process would take place in the student's sixth semester. Students applying in their sixth semester of study will be notified of the outcome of their application by the end of their sixth semester.

Students interested in the dual-degree program are strongly advised to consult the director of undergraduate studies in the Department of Computer Science in their sophomore year to discuss eligibility and an appropriate plan of study.

Computer Science Minor

A student may minor in computer science by completing five courses within these restrictions:

A grade of C or better is required in at least 12 hours of the minor courses. Alternatives to these requirements must be approved by the director of undergraduate studies.


All computer science majors and minors are assigned an advisor in Steele building. In addition, all majors and minors are assigned a faculty advisor in the computer science department. Departmental advisors deal with all requirements specific to the major or minor. Beyond course selection, advisors are also available for discussing internships, study abroad in computer science, honors projects, and undergraduate research opportunities.

Special Opportunities in Computer Science

Honors in Computer Science

Students are eligible for graduation with honors if they complete the following requirements:

Students interested in pursuing honors in computer science are encouraged to contact the director of undergraduate studies.

Departmental Involvement

Undergraduates participate in many department and university activities. Department-organized activities, such as the annual ACM programming contest, give students the chance to test their skills and knowledge against their peers at other universities.

Experiential Education

When arranged in advance with a supervising faculty member, COMP 493 can be used to earn credit for appropriate work experience in the summer. COMP 493 satisfies the experiential education requirement. COMP 495 and 691H can also be used to satisfy the experiential education requirement. Another possibility is through study abroad (see below).

Laboratory Teaching Internships and Assistantships

In addition to their classroom experiences, undergraduates may enhance their learning experience as laboratory assistants or teaching assistants for computer science courses. They can gain valuable work experience as assistants on the department's computer services staff. The department also encourages students to pursue internship experiences. Carolina's proximity to Research Triangle Park means that computer science majors have many internship and postgraduation opportunities available in their own backyard.

Study Abroad

Study abroad opportunities with priority for computer science students are offered through University College London (UCL) and the National University of Singapore (NUS) School of Computing.

UCL can accept UNC–Chapel Hill students for either a semester or yearlong exchange. For semester-only programs, UCL recommends registering for spring semester rather than fall as it better matches their academic calendar. Many courses satisfying the computer science B.S. requirements can be completed at UCL. UCL is located in the heart of London and is just a few blocks away from UNC–Chapel Hill's European Study Center in Winston House.

NUS can accept UNC–Chapel Hill students for fall or spring semester, or a yearlong exchange. This exchange allows Carolina students to enroll directly into the NUS School of Computing and choose their courses from among the full offering. On a case-by-case basis, students may also be able to take other courses at NUS outside of the School of Computing. Study abroad at NUS is eligible for the Phillips Ambassadors Scholarship. Please see for more information.

Specific course equivalences for both schools are posted on the department's Web site. Students interested in taking a course not listed should contact the director of undergraduate studies before registering for courses at the school.

Application for both programs is through the University's Study Abroad Office. Application to the UCL programs and the NUS fall and yearlong programs takes place early in the spring of each year. Application for the NUS spring program takes place early in the fall of each year. Applicants for exchange participation must have completed at least one year of study at UNC–Chapel Hill and must have declared a computer science or precomputer science major. Study abroad satisfies the experiential education General Education requirement of the undergraduate curriculum.

Undergraduate Awards

The department awards two yearly prizes to computer science majors. In conjunction with SAS Institute, the department annually presents the Charles H. Dunham Scholarship. The Dunham scholarship includes a cash award to the student and a summer internship at SAS and is awarded in the spring semester to a student in their junior year. The department also annually presents the Stephen F. Weiss Award for Outstanding Achievement in Computer Science, which includes a cash prize. The Weiss award is presented to a student in the fall of the senior year.

Undergraduate Research

Undergraduate students can participate in nationally recognized research programs or use the department's facilities to pursue self-directed research with a faculty member. Much of its research is accessible to undergraduates and focuses on solving real-world problems.


The department maintains a number of computer servers to support programming projects in advanced COMP courses. Within Sitterson Hall and the Brooks Computer Science Building, computer science majors have access to additional facilities, including projection facilities for pair programming and research-computing equipment for students engaged in supervised research projects.

Graduate School and Career Opportunities

The computer science B.S. degree program provides excellent preparation for students interested in advanced study in computing in graduate school. The department's graduates are competitive nationally for admission to the top graduate schools, including UNC–Chapel Hill's graduate program. As described above, a combined B.S.–M.S. degree program in computer science is also an option.

Graduates typically enjoy a range of career opportunities as computing professionals in such diverse fields as software development, information systems management, electronic commerce, education, and financial transaction processing. In addition, computer science majors have consistently ranked at or near the top of recent surveys of starting salary offers.



Stan Ahalt, James Anderson, Sanjoy K. Baruah, Gary Bishop, Frederick P. Brooks Jr., Prasun Dewan, Henry Fuchs, Kevin Jeffay, Anselmo Lastra, Ming C. Lin, Dinesh Manocha, Fabian Monrose, Stephen M. Pizer, David A. Plaisted, Jan F. Prins, Michael K. Reiter, Jack S. Snoeyink, David Stotts.

Associate Professors

Jan-Michael Frahm, Jasleen Kaur, Ketan Mayer-Patel, Leonard McMillan, Marc Niethammer, Montek Singh.

Assistant Professors

Ron Alterovitz, Alex Berg, Tamara Berg, Vladimir Jojic, Cynthia Sturton.

Research Professors

Diane Pozefsky, F. Donelson Smith.

Research Associate Professor

Mary C. Whitton.

Research Assistant Professors

Jay Aikat, Enrique Dunn, Martin Styner.

Adjunct Professors

Robert Fowler, Guido Gerig, J. Stephen Marron, John McHugh, Steven E. Molnar, Marc Pollefeys, John Poulton, Julian Rosenman, Richard Superfine, Russell M. Taylor II, Alexander Tropsha, Wei Wang, Sean Washburn, Gregory F. Welch, Turner Whitted.

Adjunct Associate Professors

Stephen Aylward, Shawn Gomez, Chris Healey, Hye-Chung Kum, Lars Nyland, Dinggang Shen.

Adjunct Assistant Professors

Derek Chiang, Brad Davis, Mark Foskey, Svetlana Lazebnik, Yun Li, Ipek Oguz, Beatriz Paniagua, William Valdar.


Tessa Nicholas, Leandra Vicci.

Professor of the Practice

Michael Fern.

Professors Emeriti

Peter Calingaert, John Halton, Gyula A. Magó, Timothy L. Quigg, John B. Smith, Donald F. Stanat, Stephen Weiss, William A. Wright.

Contact Information

Diane Pozefsky, Director of Undergraduate Studies,, (919) 590-6117.

Jodie Turnbull, Student Services Manager,, (919) 590-6200.


COMP–Computer Science

COMP 60 First-Year Seminar: Robotics with LEGO® (3). This seminar explores the process of design and the nature of computers by designing, building, and programming LEGO® robots. Competitions to evaluate various robots are generally held at the middle and at the end of the semester. Previous programming experience is not required.

COMP 65 First-Year Seminar: Folding, from Paper to Proteins (3). Explore the art of origami, the science of protein, and the mathematics of robotics through lectures, discussions, and projects involving artistic folding, mathematical puzzles, scientific exploration, and research.

COMP 80 First-Year Seminar: Enabling Technology–Computers Helping People (3). Service-learning course exploring issues around computers and people with disabilities. Students work with users and experts to develop ideas and content for new technologies. No previous computer experience required.

COMP 85 First-Year Seminar: The Business of Games (3). This seminar will study the concepts associated with video gaming by having small teams design a game, build a prototype, and put together a business proposal for the game.

COMP 89 First-Year Seminar: Special Topics (3). Content will vary each semester.

COMP 101 Fluency in Information Technology (3). The nature of computers, their capabilities, and limitations. How computers work, popular applications, problem-solving skills, algorithms and programming. Lectures and laboratory assignments.

COMP 110 Introduction to Programming (3). Introduction to computer use. Approaches to problem solving; algorithms and their design; fundamental programming skills. Students can receive credit for only one of COMP 110, 116, or 121.

COMP 116 Introduction to Scientific Programming (3). Prerequisite, MATH 231. An introduction to programming for computationally oriented scientists. Fundamental programming skills, using MATLAB or Python. Problem analysis, algorithm design, plotting and visualizing data, with examples drawn from simple numerical and discrete problems. Students can receive credit for only one of COMP 110, 116, or 121.

COMP 180 Enabling Technologies (3). We will investigate ways computer technology can be used to mitigate the effects of disabilities and the sometimes surprising response of those we intended to help.

COMP 185 Serious Games (3). Concepts of computer game development and their application beyond entertainment to fields such as education, health, and business. Course includes team development of a game. Excludes COMP majors.

COMP 190 Topics in Computing (3). Permission of the instructor. Special topics in computing targeted primarily for students with no computer science background. This course has variable content and may be taken multiple times for credit. As the content will vary with each offering, there are no set prerequisites, but permission of the instructor is required.

COMP 222 ACM Programming Competition Practice (1). Structured practice to develop and refine programming skills in preparation for the ACM programming competition.

COMP 283 Discrete Structures (3). Prerequisite, MATH 231 or 241. Introduces discrete structures (sets, tuples, relations, functions, graphs, trees) and the formal mathematics (logic, proof, induction) used to establish their properties and those of algorithms that work with them. Develops problem-solving skills through puzzles and applications central to computer science.

COMP 380 Computers and Society (3). An introduction to digital technology and computer science issues in society. Topics may include Internet history, privacy, security, usability, graphics, games, computers in the media, development, economics, social media, AI, IP, computer and Internet ethics, global ethics, current legal issues, etc.

COMP 381 Ethics in the Digital Age (3). Prerequisite, COMP 401. Overview of the impact of computers and technology on society's institutions, beliefs, values, tastes, activities, ideals, paradigms, and processes. Programming knowledge assumed, permitting topics beyond COMP 380.

COMP 382 Introduction to Cyberculture (3). Prerequisite, COMP 380. Permission of the instructor for students lacking the prerequisite. Explores cultural and ethical issues arising from individuals' and societies' use of information and computing technologies. Includes computer ethics; Internet history; IP, DRM, social media; gaming, virtual worlds; privacy; security; anonymity; net neutrality; AI, the technological singularity. Lecture and discussion.

COMP 388 Advanced Cyberculture Studies (3). Prerequisite, COMP 380 or 382. Permission of the instructor for students lacking the prerequisite. Explores Internet history and cyberphilosophy; online identify construction, community, communication, creativity; bodies/cyborgs; intelligence and AI. Students perform independent research into and analyze virtual worlds, social media, anonymous bulletin boards, mobile media, and more, and create digital art and literature. Seminar-style; students collaborate on designing and leading class.

COMP 390 Computer Science Elective Topics (3–12). Elective topics in computer science for computer science majors. May not be used to satisfy any degree requirements for a computer science major. This course has variable content and may be taken multiple times for credit.

COMP 393 Software Engineering Practicum (1–3). Students develop a software program for a real client under the supervision of a faculty member. Projects may be proposed by the student but must have real users. Course is intended for students desiring practical experiences in software engineering but lacking the experience required for external opportunities. Majors only. Pass/Fail.

COMP 401 Foundation of Programming (4). Required preparation, a first formal course in computer programming (e.g., COMP 110, COMP 116). Advanced programming: object-oriented design, classes, interfaces, packages, inheritance, delegation, observers, MVC (model view controller), exceptions, assertions.

COMP 410 Data Structures (3). Prerequisite, COMP 401. The analysis of data structures and their associated algorithms. Abstract data types, lists, stacks, queues, trees, and graphs. Sorting, searching, hashing.

COMP 411 Computer Organization (4). Prerequisite, COMP 401. Digital logic, circuit components. Data representation, computer architecture and implementation, assembly language programming.

COMP 416 Introduction to WWW Programming (3). Prerequisite, COMP 401. Developing browser-based applications for the World Wide Web. Introduction to XHTML, CSS, HTTP, and client-side programming. This course is intended for nonmajors and prospective minors and does not count toward the major.

COMP 426 Advanced WWW Programming (3). Prerequisite, COMP 410. Developing applications for the World Wide Web including both client-side and server-side programming. Emphasis on Model-View-Controller architecture, AJAX, RESTful Web services, and database interaction.

COMP 431 Internet Services and Protocols (3). Prerequisites, COMP 410 and 411. Application-level protocols HTTP, SMTP, FTP, transport protocols TCP and UDP, and the network-level protocol IP. Internet architecture, naming, addressing, routing, and DNS. Sockets programming. Physical-layer technologies. Ethernet, ATM, and wireless.

COMP 455 Models of Languages and Computation (3). Prerequisites, COMP 110 or 401, and COMP 283 or MATH 381. Introduction to the theory of computation. Finite automata, regular languages, pushdown automata, context-free languages, and Turing machines. Undecidable problems.

COMP 486 Applications of Natural Language Processing (INLS 512) (3). See INLS 512 for description.

COMP 487 Information Retrieval (INLS 509) (3). See INLS 509 for description.

COMP 493 Computer Science Internship (3). Prerequisites, COMP 410 and 411. Permission of the director of undergraduate studies. Computer science majors only. Work experience in nonelementary computer science. May be repeated for up to six credits.

COMP 495 Mentored Research in Computer Science (3). Independent research conducted under the direct mentorship of a computer science faculty member. This course cannot be counted toward the completion of the major or minor. For computer science majors only.

COMP 496 Independent Study in Computer Science (1–3). Permission of the director of undergraduate studies. Computer science majors only. For advanced majors in computer science who wish to conduct an independent study or research project with a faculty supervisor. May be taken repeatedly for up to a total of six credit hours.

COMP 520 Compilers (3). Prerequisites, COMP 410, 411, and 455. Design and construction of compilers. Theory and pragmatics of lexical, syntactic, and semantic analysis. Interpretation. Code generation for a modern architecture. Run-time environments. Includes a large compiler implementation project.

COMP 521 Files and Databases (3). Prerequisites, COMP 410 and 411, and COMP 283 or MATH 381. Placement of data on secondary storage. File organization. Database history, practice, major models, system structure and design.

COMP 523 Software Engineering Laboratory (4). Prerequisites, COMP 410, 411, and at least two three-credit COMP courses numbered 426 or higher. Organization and scheduling of software engineering projects, structured programming, and design. Each team designs, codes, and debugs program components and synthesizes them into a tested, documented program product.

COMP 524 Programming Language Concepts (3). Prerequisite, COMP 410. Concepts of high-level programming and their realization in specific languages. Data types, scope, control structures, procedural abstraction, classes, concurrency. Run-time implementation.

COMP 530 Operating Systems (3). Prerequisites, COMP 410 and 411. Types of operating systems. Concurrent programming. Management of storage, processes, devices. Scheduling, protection. Case study. Course includes a programming laboratory.

COMP 533 Distributed Systems (3). Prerequisite, COMP 431 or 530. Permission of the instructor for students lacking the prerequisite. Distributed systems and their goals; resource naming, synchronization of distributed processes; consistency and replication; fault tolerance; security and trust; distributed object-based systems; distributed file systems; distributed Web-based systems; and peer-to-peer systems.

COMP 535 Introduction to Computer Security (3). Prerequisites, COMP 410, and COMP 283 or MATH 381. Principles of securing the creation, storage, and transmission of data and ensuring its integrity, confidentiality, and availability. Topics include access control, cryptography and cryptographic protocols, network security, and online privacy.

COMP 541 Digital Logic and Computer Design (4). Prerequisite, COMP 411. This course is an introduction to digital logic as well as the structure and electronic design of modern processors. Students will implement a working computer during the laboratory sessions.

COMP 550 Algorithms and Analysis (3). Prerequisites, COMP 410, and COMP 283 or MATH 381. Formal specification and verification of programs. Techniques of algorithm analysis. Problem-solving paradigms. Survey of selected algorithms.

COMP 555 Bioalgorithms (3). Prerequisites, COMP 410, and COMP 283 or MATH 381. Bioinformatics algorithms. Topics include DNA restriction mapping, finding regulatory motifs, genome rearrangements, sequence alignments, gene prediction, graph algorithms, DNA sequencing, protein sequencing, combinatorial pattern matching, approximate pattern matching, clustering and evolution, tree construction, hidden Markov models, randomized algorithms.

COMP 560 Artificial Intelligence (3). Prerequisites, COMP 410 and MATH 231. Introduction to techniques and applications of modern artificial intelligence. Combinatorial search, probabilistic models and reasoning, and applications to natural language understanding, robotics, and computer vision.

COMP 562 Introduction to Machine Learning (3). Prerequisites, COMP 410, MATH 233, and STOR 435. Permission of the instructor for students lacking the prerequisites. Machine learning as applied to speech recognition, tracking, collaborative filtering and recommendation systems. Classification, regression, support vector machines, hidden Markov models, principal component analysis, and deep learning.

COMP 575 Introduction to Computer Graphics (3). Prerequisites, COMP 410 and MATH 547. Hardware, software, and algorithms for computer graphics. Scan conversion, two-dimensional and three-dimensional transformations, object hierarchies. Hidden surface removal, clipping, shading, and antialiasing. Not for graduate computer science credit.

COMP 576 Mathematics for Image Computing (BMME 576) (3). Prerequisites, COMP 116 or 401, and MATH 233. Mathematics relevant to image processing and analysis using real image computing objectives and provided by computer implementations.

COMP 580 Enabling Technologies (3). Prerequisite, COMP 410. We will investigate ways computer technology can be used to mitigate the effects of disabilities and the sometimes surprising response of those we intended to help.

COMP 581 Introduction to Robotics (4). Prerequisites, COMP 401 and 410. Permission of the instructor for students lacking the prerequisites. Hands-on introduction to robotics with a focus on the computational aspects. Students will build and program mobile robots. Topics include kinematics, actuation, sensing, configuration spaces, control, and motion planning. Applications include industrial, mobile, personal, and medical robots.

COMP 585 Serious Games (3). Prerequisite, COMP 410 or 411. Concepts of computer game development and their application beyond entertainment to fields such as education, health, and business. Course includes team development of a game.

COMP 590 Topics in Computer Science (3). Permission of the instructor. This course has variable content and may be taken multiple times for credit.

COMP 631 Computer Networks (3). Required preparation, a first course in operating systems, a first course in networking (e.g., COMP 431 and 530), and knowledge of probability and statistics. Topics in computer networks, including link layer protocols, switching, IP, TCP, and congestion control. Additional topics may include peer-to-peer infrastructures, network security, and multimedia applications.

COMP 633 Parallel and Distributed Computing (3). Required preparation, a first course in operating systems and a first course in algorithms (e.g., COMP 530 and 550). Principles and practices of parallel and distributed computing. Models of computation. Concurrent programming languages and systems. Architectures. Algorithms and applications. Practicum.

COMP 651 Computational Geometry (3). Required preparation, a first course in algorithms (e.g., 550). Design and analysis of algorithms and data structures for geometric problems. Applications in graphics, CAD/CAM, robotics, GIS, and molecular biology.

COMP 655 Cryptography (3). Prerequisites, COMP 455 and STOR 435. Permission of the instructor for students lacking the prerequisites. Introduction to the design and analysis of cryptographic algorithms. Topics include basis of abstract algebra and number theory, symmetric and asymmetric encryption algorithms, cryptographic hash functions, message authentication codes, digital signature schemes, elliptic curve algorithms, side-channel attacks, and selected advanced topics.

COMP 662 Scientific Computation II (ENVR 662, MATH 662) (3). See MATH 662 for description.

COMP 665 Images, Graphics, and Vision (3). Required preparation, a first course in data structures and a first course in discrete mathematics (e.g., COMP 410 and MATH 383). Display devices and procedures. Scan conversion. Matrix algebra supporting viewing transformations in computer graphics. Basic differential geometry. Coordinate systems, Fourier analysis, FDFT algorithm. Human visual system, psychophysics, scale in vision.

COMP 691H Honors Thesis in Computer Science (3). For computer science majors only and by permission of the department. Individual student research for students pursuing an honors thesis in computer science under the supervision of a departmental faculty advisor.

COMP 692H Honors Thesis in Computer Science (3). Permission of the department. Required of all students in the honors program in computer science. The construction of a written honors thesis and an oral public presentation of the thesis are required.