Department of Computer Science

www.cs.unc.edu

JAN F. PRINS, Chair

Professors

James Anderson, Sanjoy K. Baruah, Gary Bishop, Frederick P. Brooks Jr., Prasun Dewan, Henry Fuchs, Guido Gerig, John H. Halton, Kevin Jeffay, Anselmo A. Lastra, Ming C. Lin, Dinesh Manocha, Stephen M. Pizer, David A. Plaisted, Jan F. Prins, Daniel A. Reed, John B. Smith, Jack S. Snoeyink, David Stotts, Stephen F. Weiss.

Associate Professors

Kye S. Hedlund, Ketan Mayer-Patel, Leonard McMillan, Marc Pollefeys, Wei Wang.

Assistant Professors

Jasleen Kaur, Montek Singh.

Research Professors

Diane Pozefsky, F. Donelson Smith, Russell M. Taylor II.

Research Associate Professors

Gregory F. Welch, Mary C. Whitton.

Research Assistant Professors

Michael Rosenthal, Martin Styner.

Lecturers

Timothy L. Quigg, Leandra Vicci, Jeannie M. Walsh.

Adjunct Professors

Elizabeth Bullitt, Robert Fowler, M. Gail Jones, J. Stephen Marron, Andrew B. Nobel, Julian Rosenman, Richard Superfine, Sean Washburn.

Adjunct Associate Professors

Stephen Aylward, Bert Dempsey, Chris Healey, Steven E. Molnar, Frank Mueller, Diane H. Sonnenwald.

Adjunct Assistant Professors

Morgan Giddings, Sarang C. Joshi, Hye-Chung (Monica) Kum, Maria Papadopouli.

Adjunct Research Professors

Nick England, John Poulton.

Adjunct Research Associate Professor

Lars S. Nyland.

Adjunct Research Assistant Professor

Mark Foskey.

Professors Emeriti

Peter Calingaert, Gyula A. Magó, Donald F. Stanat.

Introduction

The Department of Computer Science offers instruction and performs research in the essential areas of computer science, including software, Web and Internet computing, networking, hardware systems, operating systems, compilers, parallel and distributed computing, theory of computing, and computer graphics. The bachelor of science 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.

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 in science, applied mathematics, medicine, or business. (Students whose interests lie more in the area of digital system design should consider the computer engineering track of the Curriculum in Applied and Materials Sciences. 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. Both programs are described elsewhere in this bulletin.)

Students may not declare the computer science major until they have satisfactorily completed a set of nine introductory mathematics, physics, and computer science courses (see "Of special note" below). Until these courses have been completed, prospective computer science students are strongly encouraged to declare the "pre-computer science" major (a formal major available to first-year students and sophomores only). This will ensure that prospective computer science students receive the appropriate advising within the General College until they are able to declare the computer science major.

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, 411, and 416. 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 (Computers and Society) is a philosophical and moral reasoning Approaches course that has no programming prerequisite. Many other courses satisfy General Education quantitative requirements.

Programs of Study

The degree offered is bachelor of science in computer science. A minor in computer science is also offered.

Majoring in Computer Science: Bachelor of Science

B.S. majors in computer science must fulfill all Foundations, Approaches, and Connections requirements and also complete the following courses:

COMP 401, 410, 411, and 550

MATH 231, 232, 233, 381 (or STOR 215), and 547

PHYS 116 and 117

STOR 435

Six courses from the computer science distribution requirement list (see below), with at least one course in each of the programming languages group, systems group, theory group, and applications group, with no more than one course from the interdisciplinary group.

The following courses may be used to satisfy the distribution requirement:

Theory group (at least one course):

MATH 566, COMP 455

Systems group (at least one course):

COMP 431, 530, 541; INLS 578

Programming languages group (at least one course):

COMP 520, 523, 524

Applications group (at least one course):

COMP 416, 426, 521, 575

Interdisciplinary group (at most one course):

Any MATH course numbered greater than 520; STOR 415, 445, 515; LING 540; INLS 510, 512, 509; BMME 410, 430, 440

Computing-related courses other than those listed in the interdisciplinary group may be counted as interdisciplinary courses, with the advance approval of the director of undergraduate studies. Note that students are not required to take a course from the interdisciplinary group.

Of special note are the following requirements:

Completion of PHYS 116 and 117; MATH 231, 232, 233, and 381 (or STOR 215); COMP 401, 410, and 411, with a grade of C or better in each course is required for admittance into the computer science major.

In order to graduate, students must earn a GPA of 2.0 or higher and receive no grade lower than a C- in the nine required junior/senior courses: COMP 550, MATH 547, STOR 435, and the six required distribution courses.

The following is a suggested plan of study for B.S. majors. The nine required first-year/sophomore courses must be taken no later than the year listed, or students will be unable to declare the computer science major during the nominal major declaration period in the second semester of their sophomore year.

First year:

ENGL 101, 102 (composition and rhetoric Foundations); foreign language level 2 and 3 (Foundations); MATH 231, 232 (quantitative reasoning Foundations and quantitative intensive Connections courses); first-year seminar or COMP 110; COMP 401

Sophomore year:

Foreign language 4 (if needed); PHYS 116, 117 (physical and life sciences Approaches course); MATH 233, 381 (or STOR 215); COMP 410, 411; three additional Approaches and Connections courses

Junior year:

Non-computer science elective (one course); MATH 547; COMP 550; computer science distribution requirement (four courses); three additional Approaches and Connections courses

Senior year:

Non-computer science elective (three courses); STOR 435; computer science distribution requirement (two courses); Connections and free elective courses (four courses)

Notes on the Suggested Plan of Study

COMP 110 (Introduction to Programming) is a required 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 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.)

"Non-computer science electives" refer to a set of four courses taken outside of computer science. The four courses are selected according to the following general requirements:

Humanities/fine arts, one course

Social and behavioral sciences, one course

Natural sciences, one course

Elective, one course

The fourth elective can be any non-computing related course taken outside of computer science, mathematics, applied math, and statistics and operations research. None of these electives may be taken pass/fail.

Minoring in Computer Science

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

COMP 401

COMP 410 or COMP 411

Any three additional COMP courses above COMP 400

Students with the appropriate prerequisites (for example, from a mathematics major) may include MATH 381/STOR 215 and MATH 566 in their selection of courses. A grade of C or better is required in at least 12 hours of the minor courses. Including "Topics" courses, such as COMP 590 and 390, requires approval of the undergraduate studies committee in the computer science department. Alternatives to these requirements must be approved by the undergraduate studies committee. No course may be counted for both the computer science minor and any major.

Honors in Computer Science

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

Accumulation of a 3.2 or better cumulative GPA.

Accumulation of a 3.2 or better GPA from among the set of COMP/MATH/PHYS/STOR courses taken to fulfill the graduation requirements for the major.

Successful completion of an honors independent study or research project.

Successful completion of an honors independent study or research project requires completion of one or two sections of COMP 396, the construction of a written honors thesis, and a presentation of the thesis.

Students interested in pursuing honors in computer science are encouraged to contact the director of undergraduate studies to arrange an independent study or research project.

Graduation with highest honors in computer science is possible for those students who accumulate GPA of 3.6 or higher both overall and in the major and write an honors thesis that is acceptable for graduation with highest honors.

Special Opportunities in Computer Science

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 392 can be used to get credit for appropriate work experience in the summer. COMP 392 satisfies 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 lab 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 internships and summer co-op experiences. Carolina's proximity to Research Triangle Park means that computer science majors have many internship and post-graduation opportunities in their own backyard.

Study Abroad

A study abroad opportunity with priority for computer science (CS) students is offered through University College London (UCL). UCL can accept UNC-Chapel Hill students for either spring semester or yearlong exchange. 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. Application is through the University's Study Abroad Office and takes place early in the spring 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 pre-computer science major. Study abroad satisfies the experiential education requirement of the undergraduate curriculum.

Undergraduate Awards

The department, in conjunction with SAS Institute, annually awards the Charles H. Dunham Scholarship to an outstanding computer science major. The scholarship includes a cash award to the student and a summer internship at SAS.

Undergraduate Research

Undergraduates can participate in nationally recognized research programs or use the department's facilities to pursue self-directed research with a faculty member. The department has built peaks of excellence in several areas, including computer graphics, distributed and collaborative systems, hardware design, medical imaging, networking, and parallel computing. Much of its research is accessible to undergraduates and focuses on solving real world problems.

Facilities

The department maintains a number of computer servers to support programming projects in advanced COMP courses. Within Sitterson Hall, 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 program provides an 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).

Graduates typically have a wide 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.

Contact Information

For the latest information about the B.S. in computer science and for additional details about requirements, courses, advising, and other relevant information, please see www.cs.unc.edu/Admin/AcademicPrograms/Bachelors; or contact: Director of Undergraduate Studies, CB# 3175, Sitterson Hall, (919) 962-1700.

COMP

050 First-Year Seminar: Computers Make It Possible (3). The goal of this seminar is to teach students how computers have affected society and how those uses have changed computers.

051 First-Year Seminar: Technology and Entrepreneurship: Propitious Partners (3). This course will look at the fundamental technologies important to an entrepreneurial endeavor. The course will include case studies and the design of technology in a new venture.

056 First-Year Seminar: The World Wide Web: What, How, and Why (3). This seminar will explore, use, and ponder the World Wide Web.

060 First-Year Seminar: Robotics with LEGO (3). Prerequisite, knowledge of elementary computer programming. The goal of this seminar is to give students a feel for the physical aspects of computing.

061 First-Year Seminar: 3D Animation with Computers - Your Cinematic Debut (3). This course is designed to combine some math, physical science, and computer graphics with the fun and creative aspects of movie making.

065 [006D] 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.

066 [006D] First-Year Seminar: Random Thoughts (3). Explore in depth notions of randomness and its antithesis, structure. Students will collectively conduct several classic experiments to explore the nature of randomness. Computer programming skills helpful, but not required.

070 First-Year Seminar: Computability, Unsolvability, and Consciousness (3). The course will introduce Turing machines, which have a finite control, can move back and forth on a one dimensional tape, and can read and write on the tape. The students will construct Turing machines to convince themselves that Turing machines are in principle as powerful as any other computer.

071 First-Year Seminar: Problem Solving and the World Wide Web (3). This is not a course in computer programming and credit may be earned for both this course and COMP 14 (Introduction to Programming). Coregistration in ENGL 11 or 12 is required.

072 First-Year Seminar: Introduction to Computers (3). We will explore the process of design, and the nature of computers, by designing, building and programming LEGO robots. Previous programming experience is required.

080 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.

101 [004] Computers: Power Tools for the Mind (3). The nature of computers, their capabilities, and limitations. How computers work; popular applications; problem-solving skills; algorithms and programming; potential use and abuse in society. Lectures, weekly readings, and laboratory assignments. Students can receive credit for only one of COMP 101, 116, or 121.

110 [014] Introduction to Programming (3). Introduction to computer use. Approaches to problem-solving; algorithms and their design; fundamental programming skills.

116 [016] Introduction to Scientific Programming (3). Prerequisite, MATH 231. An introduction to programming for computationally oriented scientists. Fundamental programming skills, using MATLAB and another imperative programming language (such as C). Problem analysis and algorithm design, with examples drawn from simple numerical and discrete problems. Students can receive credit for only one of COMP 101, 116, or 121.

121 [015] Introduction to Functional Programming (3). An introduction to programming in the functional programming style, e.g., using a dialect of LISP. A brief introduction to an imperative language such as Pascal. A first course for prospective majors or students with some programming background. Students can receive credit for only one of COMP 101, 116, or 121.

371 [171] Language and Computers (LING 301) (3). Prerequisite, LING 101. Uses simple linguistic problems to introduce students to the use of programming languages especially suited to analyze and process natural language on the computer. No prior programming knowledge is presupposed.

380 [180] Computers and Society (3). Cultural, social, philosophical, technological, and economic effects of information technology on individuals, groups, and society. Risks and controversies. Ethics of technology and computer use.

392 [192] Practicum (1-3). Prerequisites, computer science major and permission of instructor. Work experience in non-elementary computer science. Pass or fail grade depends on a substantial written report by student and evaluation by employer. May be repeated for up to six credits.

396 [196] Independent Study in Computer Science (1-3). For advanced majors in computer science, computer science track of mathematical sciences, or computer engineering track of applied sciences 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.

401 [114] Foundation of Programming (3). Prerequisite, a course in COMP 110-129. Advanced programming. Program specifications, preconditions, postconditions, loop invariants. Linear data structures, searching, and sorting. Algorithm paradigms and analysis.

410 [121] Data Structures (4). The analysis of data structures and their associated algorithms. Abstract data types, lists, stacks, queues, trees, and graphs. Sorting, searching, hashing.

411 [120] Computer Organization (3). Digital logic, circuit components. Data representation, computer architecture and implementation, assembly language programming.

416 [117] Introduction to WWW Programming (3). Client-side programming in Java for the WWW. Introduction to TCP/IP, HTTP, and WWW architecture. Emphasis on applet programming and component programming using threads, simple client-server applications, and XML.

426 [118] Advanced WWW Programming (3). Prerequisite, COMP 416. Server-side programming in Java for the WWW. Emphasis on servlet programming and distributed component programming using APIs for object serialization, remote method invocation, database connectivity, and XML generation.

431 [123] Internet Services and Protocols (3). Prerequisites, COMP 410, 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.

455 [181] Models of Languages and Computation (3). Prerequisites, MATH 381 or other evidence of mathematical maturity, and COMP 110 or equivalent experience. Introduction to the theory of computation. Finite automata, regular languages, pushdown automata, context-free languages, and Turing machines. Undecidable problems.

485 [171] Natural Language Processing (INLS 510) (3). Prerequisite, COMP 110, 116, or 121. See course listings for School of Information and Library Science for details.

486 [170] Applications of Natural Language Processing (INLS 512) (3). Prerequisite, COMP 110, 116, or 121, or graduate standing in information and library science. See course listings for School of Information and Library Science for details.

487 [172] Information Retrieval (INLS 509) (3). Prerequisite, INLS 261, COMP 110, or COMP 121. See course listings for School of Information and Library Science for details.

520 [140] Compilers (3). Prerequisites, COMP 410, 411. 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.

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

523 [145] Software Engineering Laboratory (3). Prerequisites, COMP 410, 411. 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.

524 [144] 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.

530 [142] Operating Systems (3). Prerequisites, COMP 410, 411. Types of operating systems. Concurrent programming. Management of storage, processes, devices. Scheduling, protection. Case study. Students implement significant components of a small operating system.

541 [160] 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.

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

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

590 [190] Topics in Computer Science (1-21). Prerequisite, permission of the instructor. This course has variable content and may be taken multiple times for credit.

631 [234] Computer Networks (3). Prerequisites, COMP 431, COMP 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

633 [203] Parallel and Distributed Computing (3). Prerequisites, COMP 530, 550. Principles and practices of parallel and distributed computing. Models of computation. Concurrent programming languages and systems. Architectures. Algorithms and applications. Practicum.

651 [281] Computational Geometry (3). Prerequisite, undergraduate analysis of algorithms course (e.g., COMP 550) or permission of instructor. Design and analysis of algorithms and data structures for geometric problems. Applications in graphics, CAD/CAM, robotics, GIS, and molecular biology.

662 [250] Scientific Computation (MATH 662) (3). Prerequisites, linear algebra and introductory numerical analysis, or permission of instructor. Direct methods for linear systems. Least squares problems. Iterative methods for linear systems. Direct and iterative methods for eigenvalue problems. The singular value decomposition. Methods for (stiff) systems of ODEs.

665 [235] Images, Graphics, and Vision (3). Prerequisites, COMP 410, 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.

top of page