Department of Computer Science

An undergraduate may not enroll in any computer science course more than once without written consent of an undergraduate adviser in computer science. No student may enroll in any computer science course more than twice. No student may take more than three upper-division computer science courses in a semester without written consent of an undergraduate adviser in computer science.

The information in parentheses after a course number is the Texas Common Course Numbering (TCCN) designation. Only TCCN designations that are exact semester-hour equivalents of University courses are listed here. Additional TCCN information is given in Appendix A.

Computer Science: C S

Lower-Division Courses

C S 301K. Foundations of Logical Thought.

Introductory logic in the context of computing; introduction to formal notations; basic proof techniques; sets, relations, and functions. Three lecture hours a week for one semester. Some sections also require one discussion hour a week.

C S 302. Computer Fluency.

An introduction to the fundamental concepts of computing: how computers work, what they can do, and how they can be used effectively. Some programming is required. Three lecture hours or two lecture hours and one discussion hour a week for one semester. Credit for Computer Science 302 may not be earned after a student has received credit for Computer Science 303E, 305J, 307, 312, 312H, 314, or 314H. May not be counted toward a degree in computer science.

C S 303E. Elements of Computers and Programming.

Problem solving and fundamental algorithms for various applications in science, business, and on the World Wide Web, and introductory programming in a modern object-oriented programming language. The equivalent of three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 303E may not be earned after a student has received credit for Computer Science 307, 314, or 314H. May not be counted toward a degree in computer science.

C S 103F. Ethical Foundations of Computer Science.

An introduction to reasoning about the effects of the technology created by computer scientists and understanding the ethical and real-world consequences of that technology. Emphasizes direct participation and discussion using case studies to illustrate ethical topics. One lecture hour a week for one semester. Computer Science 103F and 109 (Topic: Ethical Foundations of Computer Science) may not both be counted.

C S 104C. Competitive Programming.

Explores the algorithms needed to solve a given problem, reason about corner cases, and write correct implementations under time pressure. Focuses on skills useful for international programming competitions, whiteboard job interviews, and programming tasks that require quickly solving challenging problems with creative use of algorithms. One lecture hour a week for one semester. Computer Science 104 and 109 (Topic: Competitive Programming) may not both be counted. Prerequisite: Computer Science 311 or 311H with a grade of at least C-, and registration or credit in Computer Science 314 or 314H with a grade of at least C-.

C S 105P. Topics In Computer Programming Languages.

An introduction to programming in a particular computer language. Includes designing and implementing programs. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C, with a grade of at least C-, and consent of instructor.

C S 108. Software Systems.

Introduction to the use of a particular software system. Students build applications that exploit the system being studied. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Offered on the pass/fail basis only. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C, with a grade of at least C-.

C S 109, 209, 309. Topics in Computer Science.

For each semester hour of credit earned, one lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Varies with the topic.

C S 311. Discrete Mathematics for Computer Science.

Restricted to computer science majors. A focus on discrete mathematical tools of fundamental importance to the working computer scientist. An emphasis is placed on using logical notation to express rigorous mathematical arguments. Subjects include proof by induction, introduction to graph theory, recurrences, sets, functions, and an introduction to program correctness. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 311, 311H, 313H, 313K, 336, 336H. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 312 or 312H; and Mathematics 408C, 408K, or 408N, or registration for Mathematics 408C.

C S 311H. Discrete Mathematics for Computer Science: Honors.

Restricted to honors computer science majors. A focus on discrete mathematical tools of fundamental importance to the working computer scientist. An emphasis is placed on using logical notation to express rigorous mathematical arguments. Subjects include proof by induction, graph theory, number theory, combinatorics, recurrences, sets, functions, an introduction to program correctness, and discrete probability. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 311, 311H, 313H, 313K, 336, 336H. Prerequisite: Mathematics 408K or 408N with a grade of at least C-; or registration or credit with at least C- in Mathematics 408C.

C S 312. Introduction to Programming.

First part of a two-part sequence in programming. Fundamental concepts of structured programming; procedures and data structures with a focus on problem solving strategies and implementation; introduction to concepts of informal specification, informal reasoning about program behavior, debugging, and ad hoc testing. Three lecture hours and one discussion hour a week for one semester. Only one of the following courses may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 312 may not be earned after a student has received credit for Computer Science 314 or 314H. Prerequisite: Credit with a grade of at least C- or registration for Mathematics 408C, 408K, or 408N.

C S 312H. Introduction to Programming: Honors.

Restricted to computer science majors. First part of a two-part sequence in programming. Fundamental concepts of structured programming; procedures and data structures with a focus on problem solving strategies and implementation; introduction to concepts of informal specification, informal reasoning about program behavior, debugging, and ad hoc testing. Three lecture hours and one discussion hour a week for one semester. Only one of the following courses may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 312H may not be earned after a student has received credit for Computer Science 314 or 314H. Prerequisite: Credit with a grade of at least C- or registration for Mathematics 305G, or a passing score on the College of Natural Sciences mathematics placement examination; and consent of the honors director.

C S 313E. Elements of Software Design.

Object-oriented design of software using Python, a modern high-level language. Introduction to abstract data types, fundamental algorithms, and basics of complexity analysis. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: Computer Science 303E, 305J, 312, or 312H with a grade of at least C-.

C S 314. Data Structures.

Second part of a two-part sequence in programming. Introduction to specifications, simple unit testing, and debugging; building and using canonical data structures; algorithm analysis and reasoning techniques such as assertions and invariants. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 307, 314, 314H, 315, 315H. Prerequisite: Computer Science 312 or 312H with a grade of at least C-.

C S 314H. Data Structures: Honors.

Second part of a two-part sequence in programming. Introduction to specifications, simple unit testing, and debugging; building and using canonical data structures; algorithm analysis and reasoning techniques such as assertions and invariants. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 307, 314, 314H, 315, and 315H. Prerequisite: Computer Science 312 or 312H with a grade of at least C-.

This course is used to record credit the student earns while enrolled at another institution in a program administered by the University's Study Abroad Office. Credit is recorded as assigned by the study abroad adviser in the Department of Computer Science. University credit is awarded for work in an exchange program; it may be counted as coursework taken in residence. Transfer credit is awarded for work in an affiliated studies program. May be repeated for credit when the topics vary.

Upper-Division Courses

C S 120N, 220N, 320N. Topics in Computer Science for Nonmajors.

For each semester hour of credit earned, one lecture hour a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Varies with the topic.

C S 323H. Elements of Scientific Computing: Honors.

Fundamentals of software issues related to scientific computing. Subjects include floating-point computations, numerical computation errors, interpolation, integration, solution of linear systems of equations, optimization, and initial value problems of ordinary differential equations. Implementation of algorithms are investigated using MATLAB for matrix and vector computations. Examples are drawn from a variety of science and mathematics areas. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Computer Science 323E and 323H may not both be counted. Prerequisite: Computer Science 303E, 305J, 307, 312, 312H, 315, or 315H with a grade of at least C-; credit with a grade of at least C- or registration for Mathematics 340L, 341, or Statistics and Scientific Computation 329C; and consent of the honors director.

C S 324E. Elements of Graphics and Visualization.

Basics of two- and three-dimensional computer graphics systems, modeling and rendering, and selected graphics software APIs. Other topics may include interactive graphics, animation, graphical user interfaces, and the graphical presentation of information. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C.

C S 326E. Elements of Networking.

Introduction to the principles and basic concepts of the Internet, networking applications and protocols, and simple client/server applications. Other topics may include network technologies and topologies, packet and circuit switching, LANS and WANS, Internet security, and network management. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C.

C S 327E. Elements of Databases.

A practical introduction to database management systems, with discussion of database administration and management. Survey of logical modeling, database design with a focus on relational databases, SQL query language, and current applications. Subjects may include data integrity, performance, concurrency, transaction processing, recovery, security, and Web applications. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C.

C S 328E. Topics in Elements of Computing.

Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 303E, 312, or 312H with a grade of at least C-.

C S 429. Computer Organization and Architecture.

Restricted to computer science majors. An introduction to low-level computer design ranging from the basics of digital design to the hardware/software interface for application programs. Includes basic systems principles of pipelining and caching, and requires writing and understanding programs at multiple levels. Four lecture hours and two discussion hours a week for one semester. Only one of the following may be counted: Computer Science 310, 310H, 429, 429H. Prerequisite: The following courses with a grade of at least C-: Computer Science 311 (or 313K) or 311H (or 313H); and Computer Science 314 (or 315) or 314H (or 315H).

C S 329E. Advanced Topics in Elements of Computing.

Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

C S 429H. Computer Organization and Architecture: Honors.

Restricted to computer science majors. An introduction to low-level computer design ranging from the basics of digital design to the hardware/software interface for application programs. Includes basic systems principles of pipelining and caching, and requires writing and understanding programs at multiple levels. Four lecture hours and two discussion hours a week for one semester. Only one of the following may be counted: Computer Science 310, 310H, 429, 429H. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313H, or 313K; Computer Science 314, 314H, 315, or 315H.

This course is used to record credit the student earns while enrolled at another institution in a program administered by the University's Study Abroad Office. Credit is recorded as assigned by the study abroad adviser in the Department of Computer Science. University credit is awarded for work in an exchange program; it may be counted as coursework taken in residence. Transfer credit is awarded for work in an affiliated studies program. May be repeated for credit when the topics vary.

C S 329W. Cooperative Computer Science.

This course covers the work period of computer science students in the Cooperative Education program, which provides supervised work experience by arrangement with the employer and the supervising instructor. Forty laboratory hours a week for one semester. The student must repeat the course each work period and must take it twice to receive credit toward the degree; at least one of these registrations must be during a long-session semester. However, no more than three semester hours may be counted toward the major requirement. The student's first registration must be on the pass/fail basis; the second must be on the letter-grade basis. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313H, or 313K; 307, 314, 314H, 315, or 315H; 310, 310H, 429, or 429H; and consent of the undergraduate adviser.

C S 234. Technical Writing.

Application of techniques and strategies of effective technical writing, and of conventions used in documents such as letters, memos, proposals, abstracts, and reports. Two lecture hours a week for one semester. Computer Science 234 and 178 (Topic: Technical Writing) may not both be counted. May not be counted toward the number of hours in computer science required for the Bachelor of Science in Computer Science degree. Prerequisite: Computer Science 310, 310H, 429, or 429H with a grade of at least C-.

C S 337. Theory in Programming Practice.

Application of program-analysis theory to program design. Methodologies for large-scale program design. Designed to help students bring together theoretical and programming skills. Three lecture hours and one discussion hour a week for one semester. Computer Science 337 and 337H may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); and 331 (or 357), 331H (or 357H), 341, or 341H.

C S 337H. Theory in Programming Practice: Honors.

Application of program-analysis theory to program design. Methodologies for large-scale program design. Designed to help students bring together theoretical and programming skills. Three lecture hours and one discussion hour a week for one semester. Computer Science 337 and 337H may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); and 331 (or 357), 331H (or 357H), 341, or 341H.

C S 439. Principles of Computer Systems.

Restricted to computer science majors. An introduction to computer systems software abstractions with an emphasis on the connection of these abstractions to underlying computer hardware. Key abstractions include threads, virtual memory, protection, and I/O. Requires writing of synchronized multithreaded programs and pieces of an operating system. Four lecture hours and two discussion hours a week for one semester. Only one of the following may be counted: Computer Science 439, 439H, 352, 352H, 372, and 372H. Prerequisite: Computer Science 310, 310H, 429, or 429H with a grade of at least C-.

C S 439H. Principles of Computer Systems: Honors.

Restricted to computer science majors. An introduction to computer systems software abstractions with an emphasis on the connection of these abstractions to underlying computer hardware. Key abstractions include threads, virtual memory, protection, and I/O. Requires writing of synchronized multithreaded programs and pieces of an operating system. Four lecture hours and two discussion hours a week for one semester. Only one of the following may be counted: Computer Science 439, 439H, 352, 352H, 372, and 372H. Prerequisite: Computer Science 310, 310H, 429, or 429H with a grade of at least C-.

C S 340D. Debugging & Verifying Programs.

Basic concepts of formal methods with emphasis on using and applying mathematical logic plus finite state systems theory to program verification and debugging. Three lecture hours a week for one semester. Computer Science 340D and 378 (Topic: Debugging and Verifying Programs) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 341H. Automata Theory: Honors.

An introduction to the formal study of automata and of related formal languages with applications in computer science. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 341, 341H, Linguistics 340. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the honors director.

C S 343. Artificial Intelligence.

An introduction to the field of artificial intelligence (AI), starting from foundations in search and knowledge representation, and then sampling from major AI topics such as probabilistic reasoning, intelligent agents (including for games), machine learning, planning, natural language processing, robotics, computer vision, and philosophical foundations. Programming projects are required. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 343, 343H, 378H (Topic: Artificial Intelligence: Honors). Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

C S 343H. Artificial Intelligence: Honors.

An introduction to the field of artificial intelligence (AI), starting from foundations in search and knowledge representation, and then sampling from major AI topics such as probabilistic reasoning, intelligent agents (including for games), machine learning, planning, natural language processing, robotics, computer vision, and philosophical foundations. Programming projects are required. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 343, 343H, 378H (Topic: Artificial Intelligence: Honors). Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

C S 345. Programming Languages.

Survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Three lecture hours a week for one semester. Computer Science 345 and 345H may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 345H. Programming Languages: Honors.

A survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Three lecture hours a week for one semester. Computer Science 345 and 345H may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 349. Contemporary Issues in Computer Science.

An examination of social, professional, and ethical issues involved in the use of computer technology. Subjects may include software engineering ethics, computer safety and reliability, constitutional issues, intellectual property, computer crime, societal impact, emerging technologies, and philosophical issues. Three lecture hours a week for one semester. Computer Science 349 and 378 (Topic: Contemporary Issues in Computer Science) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 350C. Advanced Computer Architecture.

Relationships between programming and hardware design, high performance and low power microarchitectures, memory system design, technology and workload constraints on design, special techniques for coding, addressing, and control, and evaluation of design alternatives will be explored. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 350C, 352, or 352H. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 350F. Operating Systems.

Advanced coverage of core operating systems (virtual memory, file systems, scheduling), and intermediate and advanced operating systems concepts: multiprocessing, multi-core computing, linking, kernel design, virtual machines, and security. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 350F, 372, or 372H. Prerequisite: Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H) with a grade of at least C-.

C S 353. Theory of Computation.

An introduction to computability theory and computational complexity, focusing on the limits of computation. Subjects include undecidability, NP-completeness, time and space complexity, circuit complexity, and randomized complexity. Three lecture hours a week for one semester. Prerequisite: One of the following with a grade of at least C-: Computer Science 331 (or 357), 331H (or 357H), 341, or 341H.

C S 354R. Game Technology.

An examination of major technological components of computer games and their integration, modeling and animation, physics simulation, networking for games, interface and interaction techniques, and special effects. Three lecture hours a week for one semester. Computer Science 354R and 378 (Topic: Game Technology) may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 105C, 371G or 371P; and Computer Science 429 (or 310) or 429H (or 310H).

C S 354S. Game Development Capstone: Two-Dimensional Games.

Same as Music 354S and Theatre and Dance 354T (Topic 17). Participation in an interdisciplinary team to gain a thorough understanding of the two-dimensional game development process, through modeling of the environment and practices that are used in game studios. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 354S, 378 (Topic: Game Development Capstone: 2D Games), Music 354S, 376J (Topic: Game Development Capstone: 2D Games), Theatre and Dance 354T (Topic 17). Prerequisite: For computer science majors, Computer Science 429 or 429H with a grade of at least C- and consent of instructor; for others, consent of instructor.

C S 354T. Game Development Capstone: Three-Dimensional Games.

Same as Music 354T and Theatre and Dance 354T (Topic 18). Participation in interdisciplinary teams to gain a thorough understanding of the three-dimensional game development process, through modeling of the environment and practices that are used in game studios. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 354T, Music 354T, 376J (Topic: Game Development Capstone: 3D Games), Theatre and Dance 354T (Topic 18). Prerequisite: For computer science majors, Computer Science 429 or 429H with a grade of at least C- and consent of instructor; for others, consent of instructor.

C S 356. Computer Networks.

Introduction to computer networks with emphasis on the Internet. Three lecture hours a week for one semester. Prerequisite: Computer Science 439 (or 372) or 439H (or 372H) with a grade of at least C-.

C S 356R. Introduction to Wireless Networks.

An introduction to basic knowledge in wireless networks ranging from the physical layer to the application layer, and across different types of wireless networks such as WiFi, cellular, and multihop networks. Three lecture hours a week for one semester. Computer Science 356R and 378 (Topic: Introduction to Wireless Networks) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 361. Introduction to Computer Security.

An introduction to computer security, both in the abstract and in the context of real systems, including recognizing potential threats to confidentiality, integrity and availability, and developing familiarity with current security-related issues in computer science. Three lecture hours a week for one semester. Computer Science 361 and 378 (Topic: Introduction to Security) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 361C. Information Assurance and Security.

Selected subjects from the broad area of information assurance, including computer security, communications security, operations security, and risk assessment. Three lecture hours a week for one semester. Computer Science 361C and 378 (Topic: Information Assurance and Security) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 361S. Network Security and Privacy.

An examination of common computer security threats; fundamental techniques for implementing secure software systems and networks; practical experience in attacking and defending networked systems. Three lecture hours a week for one semester. Computer Science 361S and 378 (Topic: Network Security and Privacy) may not both be counted. Prerequisite: Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H) with a grade of at least C-.

C S 369. Systems Modeling.

Introduction to performance modeling, with emphasis on computer systems. Modeling methodology, queueing network models, simulation, analysis of results. Three lecture hours a week for one semester. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics Scientific Computation 321).

C S 370. Undergraduate Reading and Research.

Supervised study of selected problems in computer science, by individual arrangement with supervising instructor. The equivalent of three lecture hours a week for one semester. Computer Science 370 and 370F may not both be counted. No more than three semester hours may be counted toward a degree in computer science. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the undergraduate adviser.

C S 370F. Undergraduate Reading and Research: Writing.

Supervised study of selected problems in computer science, by individual arrangement with supervising instructor. The equivalent of three lecture hours a week for one semester. Computer Science 370 and 370F may not both be counted. No more than three semester hours may be counted toward a degree in computer science. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the undergraduate adviser.

C S 371L. iOS Mobile Computing.

Overview of mobile computing with an emphasis on developing applications for the iOS operating system. Three lecture hours a week for one semester. Computer Science 371L and 378 (Topic: iOS Mobile Computing) may not both be counted. Prerequisite: Credit with a grade of at least C- or registration in Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H).

C S 371M. Mobile Computing.

Overview of mobile computing. Emphasis on mobile application development. Use of mobile capabilities: sensors, location, telephony, and multimedia. Three lecture hours a week for one semester Computer Science 371M and 378 (Topic: Mobile Computing) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-; and credit with a grade of at least C- or registration for Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H).

C S 371P. Object-Oriented Programming.

Programming using class derivation, inheritance, and dynamic polymorphism. Application of a simple object-oriented design methodology to several software development problems. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 371R. Information Retrieval and Web Search.

Introduction to traditional and recent methodologies for indexing, processing, querying, and classifying unstructured and semi-structured textual data, including hypertext and World Wide Web documents. Three lecture hours a week for one semester. Computer Sciences 371R and 378 (Topic: Intelligent Information Retrieval and Web Search) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 373. Software Engineering.

Introduction to current knowledge, techniques, and theories in large software system design and development. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 377. Principles and Applications of Parallel Programming.

Models of parallel computation, fundamental concepts for representation of parallel computation structures, study of representative parallel programming systems, and programming of parallel algorithms and computations. Three lecture hours a week for one semester. Prerequisite: Computer Science 439 (or 372) or 439H (or 372H) with a grade of at least C-.

C S 377P. Programming for Performance.

Investigation on the performance-critical features of modern computer architectures and how applications can take advantage of them to obtain high performance. Three lecture hours a week for one semester. Computer Science 377P and 378 (Topic: Programming for Performance) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 178, 378. Undergraduate Topics in Computer Science.

One or three lecture hours a week for one semester. Only one of the following may be counted unless the topics vary: Computer Science 178, 378, 178H, 378H. May be repeated for credit when the topics vary. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

C S 178H, 378H. Undergraduate Topics in Computer Science: Honors.

For each semester hour of credit earned, one lecture hour a week for one semester. Only one of the following may be counted unless the topics vary: Computer Science 178, 378, 178H, 378H. May be repeated for credit when the topics vary. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

C S 379H. Computer Science Honors Thesis.

Directed reading, research, and/or projects in areas of computer science, under supervision of a faculty member, leading to an honors thesis. The thesis must be approved by a committee of three readers. The equivalent of three lecture hours a week for one semester, by arrangement with a faculty member. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313H, or 313K; Computer Science 314, 314H, 315, or 315H; Computer Science 310, 310H, 429, or 429H; Mathematics 408C, 408K, or 408N; nine additional semester hours of upper-division coursework in computer science; and consent of the student's research supervisor and the departmental honors adviser.