# Courses

# Course Descriptions

University of Arizona Catalog - Course Descriptions

Graduate Course Prerequisite Chart

Undergraduate Course Prerequisite Chart

- CSC 127A: Introduction to Computer Science
- CSC 127B: Introduction to Computer Science
- CSC 170B1: Computing: Science and Creativity
- CSC 196H: Ergalics: The Science of Computing
- CSC 227: Program Design and Development
- CSC 245: Introduction to Discrete Structures
- CSC 250: Essential Computing for the Sciences
- CSC 252: Computer Organization
- CSC 296H: Research Topics in Computer Science
- CSC 335: Object-Oriented Programming and Design
- CSC 337: Web Programming
- CSC 345: Analysis of Discrete Structures
- CSC 346: Cloud Computing
- CSC 352: Systems Programming and Unix
- CSC 372: Comparative Programming Languages
- CSC 380: Building Modern Applications with Python and C++
- CSC 386: C# Programming for .NET Platform
- CSC 387: Developing Enterprise Web Applications
- CSC 391: Preceptorship
- CSC 396H: Honors Proseminar
- CSC 397C: Programming Mobile Devices
- CSC 399H: Honors Independent Study
- CSC 422: Introduction to Parallel and Distributed Programming
- CSC 425: Computer Networking
- CSC 433: Computer Graphics
- CSC 436: Software Engineering
- CSC 437: Geometric Algorithms
- CSC 444: Data Visualization
- CSC 445: Algorithms
- CSC 447: Green Computing
- CSC 450: Algorithms in Bioinformatics
- CSC 452: Principles of Operating Systems
- CSC 453: Compilers and Systems Software
- CSC 460: Database Systems
- CSC 466: Computer Security
- CSC 473: Automata, Grammars and Languages
- CSC 477: Introduction to Computer Vision
- CSC 496H: Research Topics in Computer Science
- CSC 498H: Honors Thesis
- CSC 499H: Honors Independent Study
- CSC 520: Principles of Programming Languages
- CSC 522: Parallel and Distributed Computing
- CSC 525: Principles of Computer Networking
- CSC 533: Computer Graphics
- CSC 536: Software Engineering
- CSC 537: Geometric Algorithms
- CSC 544: Advanced Information Visualization
- CSC 545: Design and Analysis of Algorithms
- CSC 547: Green Computing
- CSC 550: Algorithms in Bioinformatics
- CSC 552: Advanced Operating Systems
- CSC 553: Principles of Compilation
- CSC 560: Database Systems Implementation
- CSC 566: Computer Security
- CSC 573: Theory of Computation
- CSC 576: Computer Architecture
- CSC 577: Introduction to Computer Vision
- CSC 620: Advanced Topics in Programming Languages
- CSC 625: Advanced Topic: Sensor and Ad Hoc Network Optimization
- CSC 630: Advanced Topics in Software Systems
- CSC 645: Advanced Topics: Great Results in Discrete Algorithms
- CSC 650: Algorithms for Computational Biology
- CSC 652: Advanced Topics in Operating Systems
- CSC 695A: Topics in Computing
- CSC 695B: Advanced Topic: Doctoral Minor Colloquium
- CSC 695C: Advanced Topic: Doctoral Colloquium

## CSC 127A: Introduction to Computer Science I

CSC 127A provides an introduction to programming in Java. The course focuses not only on the language features of Java, but also on issues of program design and development. This course is intended for students in technical disciplines (math, computer science, other sciences, engineering, MIS, etc).

Students will be asked to write various programs in Java (approximately 50-150 lines of code) and will be graded both on the correctness of their solutions and the design choices they have made in developing their programs.

Specific Java topics to be covered include: basic control structures (functions, if, for, while), primitive types, using predefined libraries and classes, arrays, classes, combinations of arrays and classes, file processing and simple recursion.

CSC 127A is the first semester of a two-semester sequence. CSC 127A focuses on procedural abstraction while CSC 127B focuses on data abstraction and complex data structures. CSC 227 focuses on data abstraction and complex data provides a one-semester alternative for students who can handle the material at an accelerated pace.

Prerequisites: College Algebra must be completed with a grade of C or better.

## CSC 127B: Introduction to Computer Science II

Students will be asked to write various programs in Java (approximately 100-250 lines of code) and will be graded both on the correctness of their solutions and the design choices they have made in developing their programs.

Specific Java and data structure topics to be covered include: advanced recursion, linked lists, binary trees, hashing, elementary analysis of efficiency. The course will also stress the concept of data abstraction, abstract data types and the use of Java classes to encapsulate abstract data types.

CSC 127B is the second semester of a two-semester sequence. Students should not take CSC 127B unless they have already taken CSC 127A. CSC 227 provides a one-semester alternative for students who can handle the material at an accelerated pace.

Prerequisites: Grade of C or better in CSC 127A and College Algebra. [Credit allowed for CSC 127B or CSC 227 but not for both.]

## CSC 170B1: Computing: Science and Creativity

The evolution of computing from counting through artificial intelligence, the relevance and impact of computing, historical events, and influential mathematicians, scientists, entrepreneurs, and startups. Emphasis is placed on theories and hypothesis testing with scientific rigor. Students experience computing as a creative activity, use abstraction to focus on relevant concepts, develop algorithms, solve problems, and see how data and information facilitate the creation of knowledge. Programming will be done in a friendly, graphical environment. Lectures and labs are designed to improve critical thinking skills, communication, problem solving capabilities, and teamwork. Includes a weekly lab.

## CSC 196H: Ergalics: The Science of Computing

Is there a natural science of computing? Can scientific experiments test empirical theories concerning computer hardware and software? Is there a connection between ergalics and other sciences? And how can computers help other sciences? This seminar will delve into these fundamental questions about the interaction between science and computing.

## CSC 227: Program Design & Development

Programming in a high-level language such as Java for students with significant prior programming experience. Emphasis on program design issues. Programming topics: basic control structures, primitive data types, arrays, classes, recursion, linked structures, binary trees, hashing.

CSC 227 covers most of the material of the CSC 127A/127B sequence in one semester, providing an introduction to programming in Java. Students are expected to have substantial previous programming experience so that they can learn the material at a faster pace. Approximately the first third of the course will be devoted to material from CSC 127A and the remaining two-thirds will be devoted to material from CSC 127B.

Prerequisites: College Algebra must be completed with a grade of C or better. Prior programming experience recommended. [Credit allowed for CSC 127B or CSC 227 but not for both.]

## CSC 245: Introduction to Discrete Structures

Introduction to the structures and proof techniques used in computer science: sets, relations, functions, predicate logic, induction, finite automata, grammars, parsing.

Prerequisites: Grade of C or better in Math 111, Math 112, and CSC 127B or CSC 227.

## CSC 250: Essential Computing for the Sciences

This course teaches essential computing skills for students in scientific disciplines. No prior background in programming is required. The content focuses on three computational skills: (i) basic programming in a scripting language such as Python, and knowledge of its supported data structures; (ii) facility with the UNIX operating system environment, including file structure, regular expressions, and job control; (iii) essential database skills, including database accession and interfacing through the SQL query language.

## CSC 252: Computer Organization

Basic machine organization; elementary hardware concepts; interrupts. Machine operations and instructions; assembly language concepts and programming.

Prerequisites: Grade of C or better in CSC 127B or CSC 227.

## CSC 296H: Research Topics in Computer Science

Weekly presentations by faculty describing their research and opportunities for undergraduate participation. Strongly recommended for honors students as a way to build contacts with department faculty. Freshman and sophomores should register for CSC 296H; juniors and seniors should register for CSC 496H.

Prerequisites: Student must be active in the Honors College.

## CSC 335: Object-Oriented Programming & Design

This course explores object-oriented features such as inheritance and object-oriented design issues. The course also presents event-driven programming and the Java Swing classes for constructing interactive Graphical User Interfaces (GUIs). It will also include some of the Unified Modeling Language (UML) and several design patterns.

Students will complete a few programs using these Java features, and a fairly complex system by the end of the semester while working in teams.

Objectives - To teach the basics of object-oriented analysis, design and programming. Experience software development on a larger scale. Gain experience working on teams. Become comfortable with event-driven programming and graphical user interfaces and related design issues. Learn and apply some of the current tools of modern and object-oriented technology: Inheritance, Polymorphism, interfaces, Event-driven programming, graphical user interfaces, Uses cases, Responsibility driven design, Unified Modeling Language (UML), Object-Oriented Design Patterns.

Prerequisites: Grade of C or better in CSC 127B or CSC 227.

## CSC 337: Web Programming

Introduction to the techniques and technologies for developing dynamic web sites. Topics include a web server, PHP as the server-side scripting language, the MySQL database, JavaScript and AJAX for enriching web services, and page layout with HTML and CSS. Security concerns will be considered with details for prevention of such vulnerabilities in web applications. This course includes a team project to deploy a dynamic website. Weekly laboratory.

Prerequisites: CSC 127A or CSC 227, ISTA 130, ECE 175 or equivalent experience in a high level programming language that includes variables, strings, selection, loops, methods, parameters, and arrays.

## CSC 345: Analysis of Discrete Structures

Topics include trees, graphs, program verification, algorithm analysis, recurrence relations, algorithm classes (greedy, divide and conquer), hashing, combinatorics and elementary probability.

Prerequisites: Grade of C or better in the following: (CSC 127B or CSC 227) AND (CSC 245 or MATH 243 or MATH 323).

## CSC 346: Cloud Computing

This course focuses on cloud programming, with an emphasis on using the cloud to solve Big Data problems. The course will not only look at how distributed systems, databases, networks, etc. are used to implement cloud computing platforms and cloud applications, but also the impact of the infinite scalability and pay-as-you-go on the platforms and applications.

Prerequisites: CSC 227, or CSC 127A and CSC 127B, or equivalent.

## CSC 352: Systems Programming & UNIX

Programming in C, including single and multi-dimensional arrays, lists, stacks, queues, trees, and bit manipulation. Unix topics, including debuggers, makefiles, shell programming, and other topics that support C programming.

Prerequisites: Grade of C or better in CSC 252 (or concurrent enrollment).

## CSC 372: Comparative Programming Languages

This course is a study of several modern programming languages and the programming paradigm that each language strives to accommodate. Functional programming is studied with ML. Logic programming is studied with Prolog. Icon is studied to provide an alternative perspective on traditional procedural programming.

For each language we will study data types, control structures, syntax and semantics, idiomatic constructs, translation into executable units, and the run-time environment. In some cases we will go behind the scenes to examine implementation of language elements.

An emphasis of the course will be to understand the design philosophy of each language and how that philosophy is exhibited in the elements of the language.

Prerequisites: CSC 127B or CSC 227; CSC Major.

## CSC 380: Building Modern Applications with Python and C++

Many modern applications are frequently built with an amalgam of a high-level scripting language and a low-level compiled language. This course covers techniques used for combining these types of languages, in particular Python with C/C++. We will see the basics of Python, modules systems, tools and libraries (GUI, I/O etc.), and issues in linking. No knowledge of either Python or C/C++ is assumed. The course will be mainly Python, but covers enough C/C++ to see the issues in bringing the languages together.

Prerequisites: CSC 127B or CSC 227, CSC 352 or equivalent knowledge by consent of instructor.

## CSC 386: C# Programming for .NET Platform

Introduction to C# and the .NET Platform for students with a Java background, covering the structures, paradigms, and problems for which the language and the platform were designed while teaching real-world applications of object-oriented programming and multilanguage systems.

Prerequisites: CSC 335

## CSC 387: Developing Enterprise Web Applications

Developing Enterprise Web Applications. Explores the issues involved in designing and building enterprise web applications : client/server and n-tier architectures, database access, XML, web services.

Grading : Students will produce an interactive website of their own design throughout the semester. Each week students will be required to add new functionality to their system and will lose points if they don't complete the work in a timely manner. The bulk of the grade will come from exams ( two midterms and a final) and evaluation of their individual project (one mid semester review and a final review)

Syllabus : Fundamental concepts of web programming, Basic HTML/CSS/Javascript, Client / Server programming, Server side controls, Brief overview of database, Basic XML/XSL, N-tier application architecture, Sessions and state management, Security for web applications, Web services

Prerequisites: CSC 386 or consent of instructor.

## CSC 391: Preceptorship

Specialized work on an individual basis, consisting of instruction and practice in actual service in a department, program, or discipline. Teaching formats may include seminars, in-depth studies, laboratory work and patient study.

## CSC 396H: Honors Proseminar

An introduction to the critical and analytical thinking required for conducting research into computing and the development and exchange of scholarly information. Readings include research articles published by faculty members and their colleagues. Students are encouraged to begin to think like research scientists and to use this course to help them focus on a topic for their honors thesis. Strongly recommended for juniors who are honors students; sophomores should register for CSC 296H.

## CSC 397C: Programming Mobile Devices

Students will learn how to develop mobile computing applications for handheld Internet devices. These devices are poised to become the future dominant software platform as a result of the rapid convergence of computers and mobile phones. Topics covered will include mobile operting systems and development environments, input modalities and user interfaces for mobile devices, thin clientes and mobile Web, and location-aware services. A course programming project will be required. Upon completion of the course, students will be able to develop, emulate, and test applications for mobile devices using the Android Framework.

## CSC 399H: Honors Independent Study

Qualified students working on an individual basis with professors who have agreed to supervise such work.

## CSC 422: Introduction to Parallel & Distributed Programming

Concepts and applications of parallel and distributed programs. Process interaction using shared variables and message passing; parallel computing; development of correct programs; general problem solving techniques; scientific computing; distributed systems. Programming assignments on multiple processor machines.

A concurrent program contains multiple processes that execute at the same time. The challenge is to get the processes to work correctly together. This course examines a variety of parallel and distributed programming problems, and shows how to solve them using shared variables and message passing. Homework will consist of problem sets and programming projects.

Specific topics include: Basic Concepts - Hardware, Applications, and Programming Styles - Processes and Synchronization - Programming with Shared Variables - Locks and Barriers - Semaphores - Monitors - Distributed Programming - Message Passing - Remote Procedure Call and Rendezvous - Paradigms for Process Interaction - Major Applications - Scientific Computing - Distributed Systems

Prerequisites: CSC 345, CSC 352; CSC Major.

## CSC 425: Computer Networking

Theory and practice of computer networks, emphasizing the principles underlying the design of network software and the role of the communications system in distributed computing.

This course explores the principles of computer networking and its role in distributed computing, with an emphasis on network software design. The course focuses on the underlying concepts of networking by discussing such topics as: network architecture: protocol, layering, encapsulation - resource allocation: multiaccess networks, congestion control - end-to-end services: reliability, flow control, message order - switching: forwarding, routing, contention, multicast, scalability - performance: latency, throughput, burstiness, jitter - applications: digital libraries, remote file access, video - data representation: presentation formatting, compression, encryption.

Grades will be based on two exams and several homework assignments. Homework will consist of both paper problems and experimental programming assignments.

Prerequisites: CSC 352; CSC Major.

## CSC 433: Computer Graphics

This course presents an introduction to computer graphics designed to give the student an overview of fundamental principles. Course work stresses the reduction of concepts to practice in the form of numerous programming assignments. The course will include an overview of common graphics hardware, 2D and 3D transformations and viewing, and basic raster graphics concepts such as scan-conversion, bitblt's, and clipping. Methods for modeling objects as polygonal meshes or smooth surfaces, and as rendering such as hidden-surface removal, shading, illumination, and shadows will be investigated.

Prerequisites: CSC 335, CSC 345, CSC 352 and MATH 215; CSC Major.

## CSC 436: Software Engineering

This course introduces the fundamental software engineering techniques for developing correct, efficient, reliable, maintainable and evolvable software for a large project. In the highly dynamic and competitive software industry, the customers' needs may sometimes be difficult to understand in advance or may change while the software is being developed. Therefore, software products may need to evolve iteratively instead of being designed completely in advance. The class project in this course will attempt to give you an experience in developing a high quality, evolvable software product.

Prerequisites: CSC 335, CSC 345, CSC 352; CSC Major.

## CSC 437: Geometric Algorithms

Study of algorithms for geometric objects, using a computational geometry approach, with emphasis on applications for graphics, VLSI and GIS. How to represent and overlay maps, find nearest neighbors, solve linear programming problems, search geometric data bases and more.

Prerequisites: CSC 345; CSC Major.

## CSC 444: Data Visualization

This course will present the fundamentals of data visualization, the art and science of using a computer to generate visual depictions of data. The course will present the foundations of graphic design, perceptual psychology and cognitive science, as well as the algorithmic basis for many for the visualization techniques. While statistical techniques may determine correlations among the data, visualization helps us frame what questions to ask.

The course is targeted at students looking for effective ways of understanding data from their own fields, as well as students interested in learning the fundamentals that will enable them to build and improve the state of the art. The successful student will learn to design, critique and improve data visualizations.

Prerequisites: CSC 335, CSC 345; CSC Major.

## CSC 445: Algorithms

The emphasis is on learning techniques for designing algorithms and data structures for various computer applications. We will learn how to create algorithms, to analyze them, and prove their correctness.

In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss implementation issues.

Topics to be discussed include: Paradigms of algorithm design, Sorting and Searching, String matching, Graph algorithms, Geometric algorithms, Approximation algorithms

Prerequisites: CSC 345; upper division writing proficiency; CSC Major.

## CSC 447: Green Computing

This course covers fundamental principles of energy management faced by designers of hardware, operating systems, and data centers. We will explore basic energy management option in individual components such as CPUs, network interfaces, hard drives, memory. We will further present the energy management policies at the operating system level that consider performance vs. energy saving tradeoffs. Finally we will consider large scale data centers where energy management is done at multiple layers from individual components in the system to shutting down entries subset of machines. We will also discuss energy generation and delivery and well as cooling issues in large data centers.

Prerequisites : CSC 452 or equivalent course in operating systems; CSC Major.

## CSC 450: Algorithms in Bioinformatics

This course introduces fundamental results in discrete algorithms for combinatorial problems in bioinformatics and computational biology. The emphasis is on realistic models of computational problems that arise in the analysis of biological data, and practical algorithms for their solution. The content has depth in the area of biological sequence analysis, and breadth in areas such as phylogeny construction, protein structure prediction, and genome rearrangement analysis. Grades are based on homeworks, exams, programming projects, and a class presentation.

Prerequisites: CSC 345. For undergraduate computer science majors, it is recommended that they have taken CSC 445. For both computer science and non-computer science majors, mathematical maturity will be helpful.

## CSC 452: Principles of Operating Systems

This course studies the principles and concepts that govern the design of modern computer operating systems. In general terms, the course covers the two primary functions of an operating system: insulating users and applications from details of the computer hardware, and managing the allocation of resources to improve efficiency. Specific topics covered include the process model of computation and the related areas of mutual exclusion and process synchronization, including the use of semaphores, message passing, and monitors. Process deadlock detection and prevention are also discussed. With respect to resource management, areas covered include processor scheduling, memory management, and management of secondary storage devices, such as magnetic disks. Memory management topics consist of swapping, virtual addressing, paging, segmentation, and sharing. Secondary storage management topics include file system organization, access methods, and performance optimizations. Implementation techniques are discussed for each of these topics, as well as protection and security concerns. Finally, the course will cover alternative operating system architectures, and the implications of future trends in computing on operating system design.

Prerequisites: CSC 352; CSC Major.

## CSC 453: Compilers & Systems Software

CSC 453 covers the design and implementation of translator-oriented systems programs, especially compilers. Topics covered include lexical analysis, top down and bottom up parsing, syntax-directed code generation, and debuggers.

Substantial programming is required.

Prerequisites: CSC 345 and CSC 352. CSC 372 is recommended; CSC Major.

## CSC 460: Database Systems

This is a broad coverage course which gives students a detailed examination of the use of database management systems. The topics covered include conceptual design, data models, query languages, logical database design, physical database design, and introduction to query optimization.

Prerequisites: CSC 335, CSC 345; CSC Major.

## CSC 466: Computer Security

This is an introductory course covering the fundamentals of computer security. In particular, the course will cover basic concepts of computer security such as threat models and security policies, and will show how these concepts apply to specific areas such as communication security, software security, operating systems security, network security, web security, and hardware-based security.

Prerequisites: CSC 352 or similar course in systems programming; CSC Major.

## CSC 473: Automata, Grammars & Languages

This course is an introduction to the fundamental models of computation used throughout computer science: finite automata, pushdown automata, and Turing machines. The hierarchical relationships among these models, their relative power and limitations, and their variants are studied. Student skills are developed in understanding and using rigorous definition and proof to attack precisely formulated questions about computability and computation. The only successful method known for learning these skills is by working challenging problems, therefore, heavy emphasis is laid upon student problem assignments and careful evaluation of student solutions. The course aims at improving students written communication skills, and serves as the program's writing emphasis course.

The course explores models for and fundamental limitations of the computational process. Proof techniques, major results and computing applications of the results will all be stressed. Important use of the course material is made later in the computer science curriculum.

Topics covered include: finite automata and regular expressions, Turing machines, properties of regular sets, Church's thesis, context-free grammars and pushdown automata, recursive and recursively , enumerable sets, properties of context-free languages, universal machines, parsing applications, undecidable problems and reducibility

Prerequisites: CSC 345; CSC Major.

## CSC 477: Introduction to Computer Vision

Computer vision is about building systems that see. Such a system would be able to take images and output a representation of what is in the world in front of the camera. We are all familiar with this process as it happens whenever we look around. However, putting this capability into a machine has proven to be very difficult and is the topic of much current research. In this course we will study the basic approaches that have been developed to analyze image data in an attempt to solve this problem, and their applications to other related areas such as computer graphics and image databases. This course should be considered by students interested in computer vision, image processing, image databases, computer graphics, artificial intelligence, and cognitive science.

The subject involves substantial math. While much of the required math will reviewed/developed as part of the course, students who are not strong in math should expect to spend extra time struggling with it. The course will also have substantial programming. Assignments will be in C/C++ and must either be developed on Linux, or ported to Linux for grading. Since some library support will be provided on Linux for certain assignments, doing them on an alternative platform may prove to be a disadvantage. It is possible that Matlab (a C like interpreted language) might be allowed/required for some assignments.

Prerequisites: MATH 215 or equivalent math background. Knowledge of probability helpful. CSC 345; CSC 352.

## CSC 496H: Research Topics in Computer Science

Weekly presentations by faculty describing their research and opportunities for undergraduate participation. Strongly recommended for honors students as a way to build contacts with department faculty. Freshman and sophomores should register for CSC 296H; juniors and seniors should register for CSC 496H.

Prerequisites: Student must be active in the Honors College.

## CSC 498H: Honors Thesis

An honors thesis is required of all the students graduating with honors. Students ordinarily sign up for this course as a two-semester sequence. The first semester the student performs research under the supervision of a faculty member; the second semester the student writes an honors thesis.

## CSC 499H: Honors Independent Study

Qualified students working on an individual basis with professors who have agreed to supervise such work.

## CSC 520: Principles of Programming Languages

This course will define, analyze and evaluate important concepts found in current programming languages. Its goals are to build an ability to evaluate and compare programming languages, both from the user's and implementor's view, and to develop precise mechanisms for specifying the semantics of programming languages.

Specific topics include: scope of objects and time of binding, module mechanisms (e.g., blocks, procedures, coroutines), data abstraction, datatypes, control structures, storage management and runtime support, operational, denotational, and axiomatic semantic specification, applicative and object-oriented languages.

Prerequisites: CSC 453

## CSC 522: Parallel & Distributed Computing

Basic concepts and semantics of concurrent programs. Synchronization methods and programming techniques: locks, semaphores, monitors, message passing, programming paradigms. High performance computing: hardware, applications, programming tools and techniques, parallelizing compilers, performance tuning. Distributed computing: RPC and rendezvous, distributed systems, decentralized control algorithms.

Prerequisites: CSC 422

## CSC 525: Principles of Computer Networking

This course explores the principles of computer networking and its role in distributed computing. The focus of the course is on the TCP/IP protocol suite as well as Internet architecture and infrastructure design. The course covers the underlying concepts of networking by discussing such topics as: Foundations of networking: communication, analog vs. digital, delay/latency, bandwidth, etc., Network architecture: protocols, layering, encapsulation, Resource allocation: multiaccess networks, congestion control, End-to-end services: reliability, flow control, message order, Experimental functionality: multicast, mobility, integrated and differentiated services, Switching: forwarding, routing, contention, multicast, scalability, Performance: latency, throughput, burstiness, jitter, Applications: web, remote file access, audio and video.

Grades will be based on two exams and several homework assignments. Homework will consist of both paper problems and experimental programming assignments. The programming assignments are in C so the ability to program in C is a prerequisite for the course.

Prerequisites: CSC 425

## CSC 533: Computer Graphics

This course presents an introduction to computer graphics designed to give the student an overview of fundamental principles. Course work stresses the reduction of concepts to practice in the form of numerous programming assignments. The course will include an overview of common graphics hardware, 2D and 3D transformations and viewing, and basic raster graphics concepts such as scan-conversion, bitblt's, and clipping. Methods for modeling objects as polygonal meshes or smooth surfaces, and as rendering such as hidden-surface removal, shading, illumination, and shadows will be investigated.

Prerequisites: CSC 335, CSC 345, CSC 352, MATH 215

## CSC 536: Software Engineering

This course introduces the fundamental software engineering techniques for developing correct, efficient, reliable, maintainable and evolvable software for a large project. In the highly dynamic and competitive software industry, the customers' needs may sometimes be difficult to understand in advance or may change while the software is being developed. Therefore, software products may need to evolve iteratively instead of being designed completely in advance. The class project in this course will attempt to give you an experience in developing a high quality, evolvable software product.

## CSC 537: Geometric Algorithms

The study of algorithms for geometric objects, using a computational geometry approach, with an emphasis on applications for graphics, VLSI, GIS, robotics, and sensor networks. Topics may include the representation and overlaying of maps, finding nearest neighbors, solving linear programming problems, and searching geometric databases. Graduate-level requirements include reading a paper in the field of computational geometry or related literature and discussing this paper with the instructor.

## CSC 544: Advanced Information Visualization

Information visualization is a research area that focuses on the use of visualization techniques to help people understand and analyze data. Visualization allows us to perceive relationships, patterns, and trends. While statistical techniques may determine correlations among the data, visualization helps us frame what questions to ask. Providing efficient and effective data visualization is a difficult challenge in many real world examples. One challenge lies in developing algorithmically efficient methods to visualize large and complex data sets. Another challenge is to develop effective visualizations that make the underlying patterns and trends easy to see. Even tougher is the challenge of providing interactive access, analysis, and filtering. All of these tasks become still more difficult with the size of the data sets arising in modern applications.

This course will explore current research problems in visualizing large and complex data such as social networks with hundreds of thousands of participants and millions of relationships. Modeling such data and developing effective visualization tools is a challenging theoretical and practical task. This course will focus on classical as well as modern methods through projects that utilize real world large datasets from Netflix, IMDB, DBLP, and the Tree of Life.

## CSC 545: Design & Analysis of Algorithms

The emphasis of this course is on techniques for designing algorithms for various computer applications. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss techniques for implementing algorithms and improving program performance.

I. Introduction

· Mathematical preliminaries, in particular, mathematical induction.

· Analysis of algorithms.

· Techniques for improving performance.

II. Basic Algorithms:

· Algorithms involving sequences and sets -- string searching, data
compression, spell checking, sequence comparisons, etc.

· Graph algorithms--minimum spanning trees, shortest path problems,
matching, graph decomposition, network flows, etc.

· Geometric algorithms--convex hull, closest points, intersection
problems, etc.

· Algebraic and numerical algorithms--polynomial and matrix
multiplication, random numbers, probabilistic algorithms, FFT, etc.

· Reductions and NP-Completeness.

III. Additional topics (as time permits)

· Web Search algorithms

· Algorithms for Molecular Biology

Prerequisites: CSC 445, CSC 473, and MATH 362

## CSC 547: Green Computing

This course covers fundamental principles of energy management faced by designers of hardware, operating systems, and data centers. We will explore basic energy management option in individual components such as CPUs, network interfaces, hard drives, memory. We will further present the energy management policies at the operating system level that consider performance vs. energy saving tradeoffs. Finally we will consider large scale data centers where energy management is done at multiple layers from individual components in the system to shutting down entries subset of machines. We will also discuss energy generation and delivery and well as cooling issues in large data centers.

Prerequisites : CSC 452 or equivalent course in operating systems

## CSC 550: Algorithms in Bioinformatics

This course introduces fundamental results in discrete algorithms for combinatorial problems in bioinformatics and computational biology. The emphasis is on realistic models of computational problems that arise in the analysis of biological data, and practical algorithms for their solution. The content has depth in the area of biological sequence analysis, and breadth in areas such as phylogeny construction, protein structure prediction, and genome rearrangement analysis. Grades are based on homeworks, exams, programming projects, and a class presentation.

Prerequisites: CSC 345. For undergraduate computer science majors, it is recommended that they have taken CSC 445. For both computer science and non-computer science majors, mathematical maturity will be helpful.

## CSC 552: Advanced Operating Systems

This course studies fundamental concepts in modern operating systems, emphasizing the design of operating systems for parallel and distributed systems.

Specific topics include: Process Management - Memory Management - Interprocess Communication - Remote Procedure Call - Name Service - Authentication - Distributed File Systems - Process Migration - Distributed Shared Memory.

Grades will be based on exams, writing assignments, and programming projects. The class will involve extensive reading of papers from the literature.

Prerequisite: CSC 452

## CSC 553: Principles of Compilation

This course considers advanced topics in compilation. Emphasis will be placed on advanced topics in code generation, register allocation, and optimization. Specific topics discussed will include: LR parsing - code generation and machine independent peephole analysis - code generation for modern architectures such as RISC machines - register allocation - formulation and solution of data flow problems - optimization using data flow information.

Heavy emphasis will be placed on implementation of the concepts discussed in class.

Prerequisites: CSC 453 and CSC 473

## CSC 560: Database Systems Implementation

CSC 560 is a graduate-level course in database systems that will emphasize the
DBMS architecture and implementation issues. The topics to be covered
include:

· Storage structures: disk, records, pages and files

· Operating systems issues and buffer management

· Access methods: B+-tree, dynamic hashing, multidimensional indexes

· Query evaluation and optimization

· Transaction: concurrency control and recovery

· Parallel database systems

· Special topics: decision support, web database

Prerequisite: CSC 460.

## CSC 566: Computer Security

This is an introductory course covering the fundamentals of computer security. In particular, the course will cover basic concepts of computer security such as threat models and security policies, and will show how these concepts apply to specific areas such as communication security, software security, operating systems security, network security, web security, and hardware-based security.

Prerequisites: CSC 352 or similar course in systems programming.

## CSC 573: Theory of Computation

This course assumes some prior familiarity with the topics of finite automata, context-free grammars and Turing machines, such as found in the course CSC 473.

The course begins by reviewing properties of major language classes in the Chomsky Hierarchy. Universal computation models besides Turing machines, such as general recursive functions, are examined to amplify the significance of Church's thesis. Unsolvable problems and reducibility are studied. The bulk of the course then focuses on what every student should know about machine-specific complexity theory, the interrelationships among complexity classes, and the study of both NP complete and provably intractable problems. Topics covered include Church's thesis, undecidability, complexity theory and intractable problems.

The course stresses methods for formal reasoning and modeling of general computation. The emphasis will be on written problem sets containing challenging problems. The key techniques to be learned are those of simulation of one computational model by another, reduction of one problem to another, and methods for classifying problem complexity.

Prerequisites: CSC 473

## CSC 576: Computer Architecture

CSC 576 introduces the design of computer systems from basic components to complete systems. The objectives of this course are to give students a basic understanding of hardware capabilities and to better comprehend software/hardware interfaces and tradeoffs. The course covers general design issues, such as the design and use of instruction sets, microcoding, pipelining, the memory hierarchy, caches, and hardware support for virtual memory. These issues are discussed in the context of standard uniprocessor architectures. Towards the end of the course, several distinct architectures will be discussed, including supercomputers and parallel architectures.

CSC 576 emphasizes reading, written homework assignments and tests. There is no hardware lab associated with this course.

Prerequisite: CSC 452, ECE 369

## CSC 577: Introduction to Computer Vision

Computer vision is about building systems that see. Such a system would be able to take images and output a representation of what is in the world in front of the camera. We are all familiar with this process as it happens whenever we look around. However, putting this capability into a machine has proven to be very difficult and is the topic of much current research. In this course we will study the basic approaches that have been developed to analyze image data in an attempt to solve this problem, and their applications to other related areas such as computer graphics and image databases. This course should be considered by students interested in computer vision, image processing, image databases, computer graphics, artificial intelligence, and cognitive science.

The subject involves substantial math. While much of the required math will reviewed/developed as part of the course, students who are not strong in math should expect to spend extra time struggling with it. The course will also have substantial programming. Assignments will be in C/C++ and must either be developed on Linux, or ported to Linux for grading. Since some library support will be provided on Linux for certain assignments, doing them on an alternative platform may prove to be a disadvantage. It is possible that Matlab (a C like interpreted language) might be allowed/required for some assignments.

## CSC 620: Advanced Topics in Programming Languages

Design, implementation, and compilation of programming languages; specific topics to be determined by current literature and faculty and student interest.

## CSC 625: Advanced Topic: Sensor and Ad Hoc Network Optimization

In this course we will discuss recent results related to problems such as: establishing communication protocols between sensors, computing sensors' optimal locations, maintaining schedules of activation of sensors, aggregating data from the sensors, maintaining connectivity between mobile sensors, handling security issues etc.

## CSC 630: Advanced Topics in Software Systems

Problems in design and development of large systems of programs; specific topics to be determined by current literature and faculty and student interest.

## CSC 645: Advanced Topics: Great Results in Discrete Algorithms

Design and analysis of algorithms; specific topics to be determined by current literature and faculty and student interest.

Prerequisite: CSC 545, or consent of instructor.

## CSC 650: Algorithms for Computational Biology

Design and implementation of algorithms for computational problems in molecular biology. Topics include exact and approximate string matching, multiple sequence alignment,DNA sequence assembly, physical mapping of chromosomes, and genome rearrangement. No background in molecular biology is required.

Prerequisite(s): CSC 545 or consent of instructor.

## CSC 652: Advanced Topics in Operating Systems

Operating system design, development, analysis, and performance; specific topics to be determined by current literature and faculty and student interest.

## CSC 695A: Topics in Computing

Presentation of current research topics in systems, theory, languages and architecture. For a current list of speakers and topics, see the colloquium speakers page.

Prerequisites: Graduate standing in Computer Science or permission from your advisor.

## CSC 695B: Advanced Topic: Doctoral Minor Colloquium

This class will be an exchange of scholarly information in a colloquium setting. Guest speakers consisting of faculty and industry representatives will give presentations concerning different areas in the computer science field.

## CSC 695C: Advanced Topic: Doctoral Colloquium

Designed to develop skills in the major professional forms: presentation, journal papers, theses, and dissertations. Students will be required to make one presentation in the colloquium setting. A minimum of three units during two separate semesters are required for all PhD graduate students. The course may be repeated beyond the required six units, but additional credits will not apply toward degree requirements.