Department of Computer Science



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, Ketan Mayer-Patel, Leonard McMillan, Marc Niethammer, Jasleen Kaur Sahni, Montek Singh.

Assistant Professors

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

Research Professors

Marc Pollefeys, Diane Pozefsky, F. Donelson Smith, Russell M. Taylor II, Gregory F. Welch.

Research Associate Professor

Mary C. Whitton.

Research Assistant Professors

Jay Aikat, Enrique Dunn, Martin Styner.

Adjunct Professors

Nick England, Robert Fowler, Guido Gerig, M. Gail Jones, J. Stephen Marron, John McHugh, Steven E. Molnar, John Poulton, Julian Rosenman, Diane Sonnenwald, Richard Superfine, Alexander Tropsha, Wei Wang, Sean Washburn, Turner Whitted.

Adjunct Associate Professors

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

Adjunct Assistant Professors

Brad Davis, Mark Foskey, Svetlana Lazebnik, Yun Li, Ipek Oguz, William Valdar.


Tessa Nicholas, Leandra Vicci.

Professors Emeriti

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


The Department of Computer Science offers instruction and performs research in the essential areas of computer science, including software, Web and Internet computing, computer networking, hardware systems, computer and network security, artificial intelligence, robotics, computer vision, bioinformatics, operating systems, compilers, parallel and distributed computing, and computer graphics. 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 starting graduate study as an undergraduate and receiving a bachelor's degree and a master's degree in as few as five years. 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 bachelor of arts 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.

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

Majors also have the opportunity to receive 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 full time for one academic semester and a summer. All internships must be approved in advance by the director of undergraduate studies. Students interested in pursuing an internship should contact the director of undergraduate studies at least one year 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, 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 quantitative General Education requirements.

Programs of Study

The degrees offered are the bachelor of arts and the bachelor of science with a major in computer science. Strong students also can pursue a combined bachelor of science and master of science program of study and receive a bachelor's degree and a master's degree in as few as five years. A minor in computer science is also offered.

Majoring in Computer Science:
Bachelor of Arts

Core Requirements

Additional Requirements

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

First Year

Sophomore Year

Junior Year

Senior Year

Majoring in Computer Science:
Bachelor of Science

Core Requirements

Additional Requirements

The following is a suggested plan of study for B.S. majors. The nine required first-year/sophomore courses should 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

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

Combined 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 combined 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 combined 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 combined 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.

Minoring in Computer Science

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

Students with the appropriate prerequisites (for example, from a mathematics major) may include COMP 283; MATH 381, 566; and STOR 215 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 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:

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 whose honors project and thesis are judged by a faculty committee to be particularly distinguished.


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 and required to see this advisor prior to each registration period. Departmental advisors deal with all requirements specific to the major or minor. Beyond course selection, advisors are also available for discussing internships, co-op opportunities, study abroad in computer science, honors projects, and undergraduate research opportunities.

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 493 can be used to earn credit for appropriate work experience in the summer. COMP 493 satisfies the experiential education requirement. COMP 523 and 691H can also be used to satisfy the experiential education requirement. Another possibility is through study abroad (see below).

Internships in Industry

As described above, computer science majors have the opportunity to intern with a company for an extended period of up to nine months (one academic semester plus one summer) while remaining an enrolled student. In addition, more traditional summer-only internships are also routinely available.

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

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. Students may also be able to take other courses at NUS outside of the School of Computing on a case-by-case basis. Study abroad at NUS is eligible for the Phillips Ambassadors Scholarship. Please see for more information.

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. The department also annually presents the Stephen F. Weiss Award for Outstanding Achievement in Computer Science which includes a cash prize.

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


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.

Contact Information

For the latest information about the B.S. or B.A. degree with a major in computer science and for additional details about requirements, courses, advising, and other relevant information, please contact the student services manager, CB# 3175, Sitterson Hall, (919) 962-1900. Web site:


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

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

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

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.

61 First-Year Seminar: 3-D 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.

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.

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

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

72 First-Year Seminar: Introduction to Computers (3). Required preparation, previous programming experience. We will explore the process of design and the nature of computers by designing, building, and programming LEGO® robots.

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.

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.

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

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.

102 Computer-Mediated Communication and Collaboration (3). An introduction to computing and computers as a way to communicate and collaborate. This course will teach communication and collaboration tools that facilitate effective content development and delivery.

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.

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.

121 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 110, 116, or 121.

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.

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.

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.

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

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.

380 Computers and Society (3). A broad introduction to instructional technology and computer science issues in society: 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. Frequent guest speakers. Lecture course of 100+ students.

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

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.

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.

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

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

493 Computer Science Internship (3). 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.

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.

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.

520 Compilers (3). Prerequisites, COMP 410 and 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 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.

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.

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.

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.

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.

536 Enterprise Computing (3). Prerequisite, COMP 426. Designing and building enterprise systems. Basic principles, design considerations, and technologies for large multiserver systems. Requirements include a project in which teams design and build a substantial system.

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.

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.

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.

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.

562 Introduction to Machine Learning (3). Prerequisites, COMP 410, MATH 233, and STOR 435. Permission of the instructor for students lacking the prerequisite. 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.

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.

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.

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.

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.

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.

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

593 Co-op Experience (6–12). Permission of the director of undergraduate studies. Computer science majors only. Practical extension of computer science knowledge through industrial work experience. Pass/Fail only. Does not count in the computer science major or minor.

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.

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.

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.

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.

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

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.

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.

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.