# Graduate Course Descriptions

CSC 520: Principles of Programming Languages |
CSC 522: Parallel & Distributed Computing |
---|---|

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 |
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 |
CSC 533: Computer Graphics |
---|---|

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 |
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 |
CSC 537: Geometric Algorithms |
---|---|

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. |
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 |
CSC 545: Design & Analysis of Algorithms |
---|---|

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. |
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 II. Basic Algorithms: III. Additional topics (as time permits) Prerequisites: CSC 445, CSC 473, and MATH 362 |

CSC 547: Green Computing |
CSC 550: Algorithms in Bioinformatics |
---|---|

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 |
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 |
CSC 553: Principles of Compilation |
---|---|

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 |
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 566: Computer Security |
---|---|

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: Prerequisite: CSC 460. |
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 |
CSC 576: Computer Architecture |
---|---|

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 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 |
CSC 620: Advanced Topics in Programming Languages |
---|---|

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. |
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 |
CSC 630: Advanced Topics in Software Systems |
---|---|

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. | 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 |
CSC 650: Algorithms for Computational Biology |
---|---|

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. |
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 |
CSC 695A: Topics in Computing |
---|---|

Operating system design, development, analysis, and performance; specific topics to be determined by current literature and faculty and student interest. |
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 |
CSC 695C: Advanced Topic: Doctoral 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. | 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. |