
Undergraduate Courses Graduate Courses
CIS 100 Level Courses CIS 500 Level Courses MCIT Courses
CIS 200 Level Courses CIS 600 Level Courses
CIS 300 Level Courses CIS 700, 800 & 900 Level Courses
CIS 400 Level Courses
CIS UNDERGRADUATE COURSES 


CIS 99  Undergraduate Research/Independent
Study 

An opportunity for the student to become
closely associated with a professor (1) in a research effort
to develop research skills and techniques and/or (2) to
develop a program of independent indepth study in a subject
area in which the professor and student have a common interest.
The challenge of the task undertaken must be consistent
with the student's academic level. To register for this
course, the student must submit a detailed proposal, signed
by the independent study supervisor, to the SEAS Office
of Academic Programs (111 Towne Building) no later than
the end of the "add" period.
Offered Fall 2014 and Spring 2015.

CIS
101  Introduction to Computer Science: Principles of
Information and Computation 
Corequisite:
Math 104 or 150
This course is an introduction to the basic principles
and great ideas of computer science intended for nonengineering
students. It covers some of the essential topics of contemporary
computer science from a mathematical perspective. No programming
experience necessary. Open to all nonSEAS students. SEAS
students my not take for credit toward engineering degree.
Not offered in 20142015. May not be counted in the Engineering category.

CIS 106 Visualizing the Past/Peopling the Past 
Crosslisted with ANTH 258, ANTH 620
Most people’s information about the Past is drawn from coffee table picture books, popular movies, video games, documentaries about discoveries of “ancient, mysterious, and lost” civilizations, and tours often lead by guides of limited or even dubious credentials. How are these ideas presented, formed, and circulated? Who creates and selects the information presented in this diverse media? Are these presentations accurate? Do they promote or hurt scientific explanations? Can the artistic, aesthetic, and scientific realms be bridged to effectively promote and interpret the past? How can modern technologies be applied to do a better job at presenting what is difficult to experience firsthand? This class will focus on case studies, critiques, and methods of how archaeology and the past are created, presented and used in movies, museums, games, the internet, and art.
Each year, the studioseminar focuses on a project. In addition to exploring general concepts of archaeology and the media, students will work in teams to produce an interactive, digital media exhibit using the latest modeling visualization programs for presenting the sacred landscape of the Inca capital of Cuzco, Peru. Cuzco is one of the most important UNESCO World Heritage sites and visited by nearly a million tourists a year. Potential class projects include flythroughs of architectural and landscape renderings, simulations of astronomy and cosmology, modeling of human behavior within architectural and landscape settings, and study artifacts in the Penn Museum.
Not offered in 20142015. 
CIS
110  Introduction
to Computer Programming (with Java, for Beginners) 

Introduction to Computer Programming is the first course in our series introducing students to computer science. In this class you will learn the fundamentals of computer programming in Java, with emphasis on applications in science and engineering. You will also learn about the broader field of computer science and algorithmic thinking, the fundamental approach that computer scientists take to solving problems.
Offered Fall 2014, Spring 2015, and Summer 2015.

CIS 120  Programming
Languages and Techniques I 

Prerequisite(s): Some previous programming experience
A fastpaced introduction to the fundamental concepts of programming and software design. This course assumes some previous programming experience, at the level of a high school computer science class or CIS110. (If you got at least 4 in the AP Computer Science A or AB exam, you will do great.) No specific programming language background is assumed: basic experience with any language (for instance Java, C, C++, VB, Python, Perl, or Scheme) is fine. If you have never programmed before, you should take CIS 110 first.
Offered Fall 2014 and Spring 2015.

CIS
121  Programming
Languages and Techniques II 

Prerequisite(s):
CIS 120, CIS 160
This is a course about Algorithms and Data Structures using the JAVA programming language. We introduce the basic concepts about complexity of an algorithm and methods on how to compute the running time of algorithms. Then, we describe data structures like stacks, queues, maps, trees, and graphs, and we construct efficient algorithms based on these representations. The course builds upon existing implementations of basic data structures in JAVA and extends them for the structures like trees, studying the performance of operations on such structures, and their efficiency when used in realworld applications. A large project introducing students to the challenges of software engineering concludes the course.
Offered Fall 2014 and Spring 2015.

CIS
125  Technology and Policy 
Have
you ever wondered why sharing music and video generates
such political and legal controversies? Is information
on your PC safe and should law enforcement be able to access
information you enter on the Web? Will new devices
allow tracking of your every move and every purchase?
CIS 125 is focused
on developing an understanding of existing and emerging
technologies, along with the political, societal and economic
impacts of those technologies. The technologies are
spread across a number of engineering areas and each of
them raise issues that are of current concern or are likely
to be a future issue.
Offered Spring 2015. May not be counted in the Engineering category. 
CIS
140  Introduction
to Cognitive Science 

Prerequisite(s): None
Crosslisted with: PHIL 044, LING 105,
PSYCH 107, COGS 001, PPE 140
How do minds work? This course surveys a wide range of answers to this question from disciplines ranging from philosophy to neuroscience. The course devotes special attention to the use of simple computational and mathematical models. Topics include perception, learning, memory, decision making, emotion and consciousness.
Offered Fall 2014.

CIS 160  Mathematical Foundations of Computer Science 

What are the basic mathematical concepts and techniques needed in computer science? This course provides an introduction to proof principles and logics, functions and relations, induction principles, combinatorics and graph theory, as well as a rigorous grounding in writing and reading mathematical proofs.
Offered Fall 2014, Spring 2015, and Summer 2015.

CIS 190  C++ Programming 
Prerequisite(s): CIS 240
This course will provide an introduction to programming in C++ and is intended for students who already have some exposure to programming in another language such as Java. C++ provides the programmer with a greater level of control over machine resources and are commonly used in situations where low level access or performance are important. This course will illuminate the issues associated with programming at this level and will cover issues such as explicit memory management, pointers, the compilation process and debugging. The course will involve several programming projects which will provide students with the experience they need to program effectively in these languages. This course assumes programming experience equivalent to CIS 110, CIS 120 or ESE 112 as a prerequisite.
Offered Fall 2014.

CIS 191 
Using and Understanding Unix and Linux

Prerequisite(s): CIS 110 or equivalent
Unix, in its many forms, runs much of the world's computer infrastructure, from cable modems and cellphones to the giant clusters that power Google and Amazon. This halfcredit course provides a thorough introduction to Unix and Linux. Topics will range from critical basic skills such as examining and editing files, compiling programs and writing shell scripts, to higher level topics such as the architecture of Unix and its programming model. The material learned is applicable to many classes, including CIS 240, CIS 331, CIS 341, CIS 371/372, and CIS 380. Prerequisite(s): CIS 110
Offered Fall 2014. 
CIS 192  Python Programming 
Prerequisite(s): CIS 120 or ESE 112.
Python is an elegant, concise, and powerful language that is useful for tasks large and small. Python has quickly become a popular language for getting things done efficiently in many in all domains: scripting, systems programming, research tools, and web development. This course will provide an introduction to this modern highlevel language using handson experience through programming assignments and a collaborative final application development project.
Offered Fall 2014.

CIS 193  C# Programming 
Prerequisite(s): CIS 110
C# is the premier programming language for the .NET framework. Over the last decade, the language has evolved to meet the needs of a variety of programming styles while supporting the evergrowing capabilities of the .NET runtime and libraries. This course provides a thorough introduction to the C# language and the .NET framework, building on the skills gained in the introductory programming courses (CIS 110, CIS 120, or ESE 112). In addition to providing the student with a solid background in C#, this course also explores topics that the .NET platform exposes such as objectoriented design, .NET runtime internals, and others based on class interest. A series of short, weekly homework assignments reinforces the concepts introduced in class and a groupbased final project of the students' design allows them to apply their C# knowledge toward a substantial problem.
TBA

CIS 194  Haskell Programming 
Haskell is a highlevel, purely functional programming language with a strong static type system and elegant mathematical underpinnings. It is being increasingly used in industry by organizations such as Facebook, AT&T, and NASA, along with several financial firms. We will explore the joys of functional programming, using Haskell as a vehicle. The aim of the course will be to allow you to use Haskell to easily and conveniently write practical programs. All are welcome, including those with no programming experience. Evaluation will be based on regular homework assignments and class participation.
Offered Fall 2014. 
CIS 195  iPhone Application Development 
Prerequisites: CIS 120 and CIS 240. Students should come with a strong understanding of the fundamentals of programming, especially the C language and memory management.
This projectoriented course is centered around application development on the iOS platform, Apple’s mobile operating system developed for the iPhone and other Apple mobile devices. The first half of the course will involve fundamentals of iPhone development, where students learn the ObjectiveC programming language for iOS, an objectoriented C dialect with Smalltalkstyle messaging, as well as efficient memory management and eventbased programming on the iOS platform. In the second half of the course, students work in teams to conceptualize and develop a significant iPhone application. Creativity and originality are highly encouraged!
Offered Fall 2014 
CIS 196  Ruby on Rails Web Development 
Prerequisites: CIS 120.
This course will teach the fundamentals of developing web applications using Ruby on Rails, a rapiddevelopment web framework developed by 37signals. The topics covered will start with Ruby, the language that powers Rails, and include all topics required to develop and deploy productionready web applications with Rails. During the entire course, students will be working on a project of their own choosing which will develop as they learn additional concepts. Upon completion of the course this application will be deployed and accessible to the public. Students will be encouraged to continue building their applications even after the course given support from the Philadelphia Ruby community.
TBA 
CIS 197 
JavaScript

This course provides an introduction to modern web development frameworks, techniques, and practices used to deliver robust client side applications on the web. The emphasis will be on developing JavaScript programs that run in the browser. Topics covered include the JavaScript language, web browser internals, the Document Object Model (DOM), HTML5, clientside app architecture and compiletoJS languages like (Coffeescript, TypeScript, etc.). This course is most useful for students who have some programming and web development experience and want to develop moderate JavaScript skills to be able to build complex, interactive applications in the browser.
Offered Fall 2014 
CIS
240  Introduction to Computer Architecture 

Prerequisite(s): CIS 110 or equivalent experience
You know how to program, but do you know how computers really
work? How do millions of transistors come together to form
a complete computing system? This bottomup course begins
with transistors and simple computer hardware structures,
continues with lowlevel programming using primitive machine
instructions, and finishes with an introduction to the C
programming language. This course is a broad introduction
to all aspects of computer systems architecture and serves
as the foundation for subsequent computer systems courses,
such as Digital Systems Organization and Design (CIS 371),
Computer Operating Systems (CIS 380), and Compilers and
Interpreters (CIS 341).
Offered Fall 2014 and Spring 2015.

CIS
261  Discrete
Probability, Stochastic Processes, and Statistical Inference 

Prerequisite(s):
CIS 160
The purpose
of this course is to provide a 1 CU educational experience
which tightly integrates the theory and applications of
discrete probability, discrete stochastic processes, and
discrete statistical inference in the study of computer
science.
The intended audience for this class is both those students
who are CS majors as well as those intending to be CS
majors. Specifically, it will be assumed that the students
will know: Set Theory, Mathematical Induction, Number
Theory, Functions, Equivalence Relations, PartialOrder
Relations, Combinatorics, and Graph Theory at the level
currently covered in CIS 160. This course could be taken
immediately following CIS 160. Computation and Programming
will play an essential role in this course. The students
will be expected to use the Maple programming environment
in homework exercises which will include: numerical and
symbolic computations, simulations, and graphical displays.
Offered Fall 2014

CIS
262  Automata,
Computability, and Complexity 

Prerequisite(s): CIS 160
This course explores questions fundamental to computer science such as which problems cannot be solved by computers, can we formalize computing as a mathematical concept without relying upon the specifics of programming languages and computing platforms, and which problems can be solved efficiently. The topics include finite automata and regular languages, contextfree grammars and pushdown automata, Turing machines and undecidability, tractability and NPcompleteness. The course emphasizes rigorous mathematical reasoning as well as connections to practical computing problems such as text processing, parsing, XML query languages, and program verification.
Offered Fall 2014.

CIS 277  Introduction to Computer
Graphics Techniques 

Prerequisite(s):
CIS 120
This course is focused on programming the essential geometric and mathematical concepts underlying modern computer graphics. Using 2D and 3D implementations, it covers fundamental topics on scene graphs, computational geometry, graphics algorithms, and user interface design. Programming languages introduced include C++, OpenGL, and Qt.
Offered Spring 2015.

CIS 298  Study Abroad 

CIS 320  Introduction to Algorithms 
Prerequisite(s):
CIS 120,121,160,262
How do you optimally encode a text file? How do you find
shortest paths in a map? How do you design a communication
network? How do you route data in a network? What are
the limits of efficient computation? This course gives
a comprehensive introduction to design and analysis of
algorithms, and answers along the way these and many other
interesting computational questions. You will learn about
problemsolving; advanced data structures such as universal
hashing and redblack trees; advanced design and analysis
techniques such as dynamic programming and amortized analysis;
graph algorithms such as minimum spanning trees
and network flows; NPcompleteness theory; and approximation
algorithms.
Offered Spring 2015.

CIS
330  Design
Principles of Information Systems (is now CIS 450) 

Prerequisite(s):CIS 121 and CIS 160
Introduction to database management systems and principles of design. The EntityRelationship model as a modeling tool. The relational model: formal languages, the industry standard SQL, relational design theory, query optimization. Storing and querying XML data. Recursive queries. Views and data integration. Overview of system level issues: physical data organization, indexing techniques, and transactions. Connecting databases to the Web. Course work requires programming in several different query languages, several written homeworks and a team project.
Not offered 20142015.

CIS
331  Intro to Networks and Security 

Prerequisites: CIS 160, CIS 240
This course introduces principles and practices of computer and network security. Topics covered include software security, including buffer overflows, malware, access control, and operating system
protections; network and web basics, attacks such as denial of service, and defenses; and an introduction to applied cryptography including symmetric and asymmetric encryption, message integrity, and
authentication. We will develop the security mindset, and consider threats and defenses for realworld systems, as well as broader issues such as privacy, legal questions, and ethics.
Offered Spring 2015.

CIS 334  Advanced Topics in Algorithms 
Prerequisite(s):
CIS 320
Can you check if two large documents are identical by
examining a small number of bits? Can you verify that
a program has correctly computed a function without ever
computing the function? Can students compute the average
score on an exam without ever revealing their scores to
each other? Can you be convinced of the correctness of
an assertion without ever seeing the proof? The answer
to all these questions is in the affirmative provided
we allow the use of randomization. Over the past few decades,
randomization has emerged as a powerful resource in algorithm
design. This course would focus on powerful general techniques
for designing randomized algorithms as well as specific
representative applications in various domains, including
approximation algorithms, cryptography and number
theory, data structure design, online algorithms, and
parallel and distributed computation.
***CIS 399  Spring 2015.

CIS 341  Compilers and Interpreters 
Prerequisite(s):
CIS121 and CIS240
You know how to program, but do you know how to implement a programming language? In CIS341 you'll learn how to build a compiler. Topics covered include: lexical analysis, grammars and parsing, intermediate representations, syntaxdirected translation, code generation, type checking, simple dataflow and controlflow analyses, and optimizations. Along the way, we study objects and inheritance, firstclass functions (closures), data representation and runtimesupport issues such as garbage collection. This is a challenging, implementationoriented course in which students build a full compiler from a simple, typed objectoriented language to fully operational x86 assembly. The course projects are implemented using OCaml, but no knowledge of OCaml is assumed.
Not offered 20142015.

CIS 350  Software Design/Engineering 
Prerequisite(s): CIS 240
You know how to write a "program". But how do you create a software "product" as part of a team, with customers that have expectations of functionality and quality? This course introduces students to various tools (source control, automated build systems, programming environments, test automation, etc.) and processes (design, implementation, testing, and maintenance) that are used by professionals in the field of software engineering. Topics will include: software development lifecycle; agile and testdriven development; source control and continuous integration; requirements analysis; objectoriented design and testability; Android application development; software testing; refactoring; and software quality metrics.
Offered Spring 2015.

CIS 368  User Interfaces and the Web 
Prerequisite(s): CIS 110, CIS 120, CIS 121, CIS 277
This course will teach the fundamentals of HumanComputer Interaction (theory, design, implementation, experimentation, evaluation) in the context of current web interaction mechanisms, technologies, and applications. The course content will emphasize and leverage open source technologies to design, prototype, implement, and test userinterfaces and functionality in the context of today's most intriguing web trend, social networking.
Not offered 20142015. 
CIS 371
 Computer Organization and Design 

Prerequisite(s):
CIS 240
This
is the second computer organization course and focuses on
computer hardware design. Topics covered are: (1) basic
digital system design including finite state machines, (2)
instruction set design and simple RISC assembly programming,
(3) quantitative evaluation of computer performance, (4)
circuits for integer and floatingpoint arithmetic, (5)
datapath and control, (6) microprogramming, (7) pipelining,
(8) storage hierarchy and virtual memory, (9) input/output,
(10) different forms of parallelism including instruction
level parallelism, datalevel parallelism using both vectors
and messagepassing multiprocessors, and threadlevel parallelism
using shared memory multiprocessors. Basic cache coherence
and synchronization.
Offered Spring 2015.

CIS
380  Computer Operating Systems 

Prerequisite(s): CIS 240 or EE 300
This course surveys methods and algorithms used in operating
systems. Concurrent distributed operation is emphasized.
The main topics covered are as follows: process synchronization;
interprocess communications; concurrent/distributed programming
languages; resource allocation and deadlock; virtual memory;
protection and security; distributed operation; distributed
data; performance evaluation.
Offered Fall 2014.

CIS
390  Robotics 

Prerequisite(s): MATH 240, PHYS 150 or MEAM 110/147.
The rapidly evolving field of robotics includes systems designed to replace, assist, or even entertain humans in a wide variety of tasks. Recent examples include planetary rovers, robotic pets, medical surgicalassistive devices, and semiautonomous searchandrescue vehicles. This introductorylevel course presents the fundamental kinematic, dynamic, and computational principles underlying most modern robotic systems. The main topics of the course include: coordinate transformations, manipulator kinematics, mobilerobot kinematics, actuation and sensing, feedback control, vision, motion planning, and learning. The material is reinforced with handson lab exercises including basic robotarm control and the programming of visionguided mobile robots.
Not offered 20142015.

CIS 391  Introduction to Artificial Intelligence 

Prerequisite(s): CIS 121
Artificial Intelligence is considered from the point of
view of a resourcelimited knowledgebased agent who must
reason and act in the world. Topics include logic, automatic
theorem proving, search, knowledge representation and reasoning,
natural language processing, probabilistic reasoning, and
machine learning. Programming assignments in Python.
Offered Fall 2014.

CIS 398  Quantum Computer and Information
Science 
Prerequisite(s):
CIS 160, CIS 262, and MATH 240.
The purpose of this course is to introduce undergraduate
students in computer science and engineering to quantum
computers (QC) and quantum information science (QIS). This
course is meant primarily for juniors and seniors in CIS.
No prior knowledge of quantum mechanics (QM) is assumed.
Offered Spring 2015. 
CIS
400  Senior Project 

Prerequisite(s): Senior standing or
permission of instructor.
Design and implementation of a significant piece of work:
software, hardware or theory. In addition, emphasis on technical
writing and oral communication skills. Students must have
an abstract of their Senior Project, which is approved and
signed by a Project Adviser, at the end of the second week
of Fall classes. The project continues during two semesters;
students must enroll in CIS 401 during the second semester.
At the end of the first semester, students are required
to submit an intermediate report and give a class presentation
describing their project and progress. Grades are based
on technical writing skills (as per submitted report), oral
presentation skills (as per class presentation) and progress
on the project. These are evaluated by the Project Adviser
and the Course Instructor.
Offered Fall 2014.

CIS
401  Senior
Project 

Prerequisite(s): CIS 400, senior standing
or permission of instructor.
Continuation of CIS 400. Design and implementation of a
significant piece of work: software, hardware or theory.
Students are required to submit a final written report and
give a final presentation and demonstration of their project.
Grades are based on the report, the presentation and the
satisfactory completion of the project. These are evaluated
by the Project Advisor and the Course Instructor.
Offered Spring 2015.

CIS 430  Intro to Human Language Technology 

Prerequisite(s): CIS 121
This course is an automatic summarization that can help alleviate the information overload problem caused by the unprecedented amount of online textual information. The building of a summarization system requires good understanding of the properties of human language and the use of various natural language tools. In this course we will build several summarization systems of increasing complexity and sophistication. In the process we will learn about various natural language processing tools and resources such as part of speech tagging, chunking, parsing, Wordnet, and machine learning toolkits. We will also cover probability and statistics concepts used in summarization, but also applicable to a wide range of other languagerelated tasks.
Offered Fall 2012. 
CIS 441 
Embedded Software for LifeCritical Applications 
The goal of this course is to give students greater design and implementation experience in embedded software development and to teach them how to model, design, verify, and validate safety critical systems
in a principled manner. Stdents will learn the principles, methods, and techniques for building lifecritical embedded systems, ranging from requirements and models to design, analysis, optimization, implementation, and validation. Topics will include modeling and analysis methods and tools, realtime programming paradigms and languages, distributed realtime systems, global time, timetriggered communications, assurance case, software architecture, evidencebased certification, testing, verification, and validation. The course will include a series of projects that implements lifecritical embedded systems (e.g., pacemaker, infusion pumps, closedloop medical devices).
Offered Fall 2014. 
CIS
450  Database and Information Systems 

Prerequisite: CIS 121 or (CIT 594 and CIT 592) or equivalent.
Introduction to the theory and practice of data management systems, including databases and data integration. The EntityRelationship approach as a modeling tool. The relational model, algebra and calculus. Database design and relational normalization. Views and their role in security and integration. Physical data organization and indexing structures. Query execution and optimization. Updates and integrity: transaction management, concurrency control and recovery techniques. Databasebacked Web sites.
Offered Fall 2014

CIS
455  Internet and Web Systems 

Prerequisite(s):
Familiarity with threads and concurrency; strong Java programming skills.

This course focuses on the challenges encountered in building Internet and web systems: scalability, interoperability (of data and code), security and fault tolerance, consistency models, and location of resources, services, and data. We will examine how XML standards enable information exchange; how web services support crossplatform interoperability (and what their limitations are); how to build highperformance application servers; how "cloud computing" services work; how to perform Akamailike content distribution; and how to provide transaction support in distributed environments. We will study techniques for locating machines, resources, and data (including directory systems, information retrieval indexing, ranking, and web search); and we will investigate how different architectures support scalability (and the issues they face). We will also examine ideas that have been proposed for tomorrow's Web, and we will see some of the challenges, research directions, and potential pitfalls. An important goal of the course is not simply to discuss issues and solutions, but to provide handson experience with a substantial implementation project. This semester's project will be a peertopeer implementation of a Googestyle search engine, including distributed, scalable crawling; indexing with ranking; and even PageRank. As a sideeffect of the material of this course, you will learn about some aspects of largescale software development: assimilating large APIs, thinking about modularity, reading other people's code, managing versions, debugging, etc. 
Offered Spring 2015.

CIS
460
 Computer Graphics 

Prerequisite(s):
CIS 120 and 121, and preferably CIS 277.
A thorough introduction to computer graphics techniques,
covering primarily 3D modeling and image synthesis. Topics
cover: geometric transformations, geometric algorithms,
software systems (OpenGL), 3D object models (surface and
volume), visible surface algorithms, image synthesis, shading
and mapping, ray tracing, radiosity, global illumination,
photon mapping, antialiasing and compositing.
Offered Fall 2014.

CIS
462  Computer Animation


Prerequisite(s):
Previous exposure to major concepts in linear algebra (i.e.
vector matrix math), curves and surfaces, dynamical systems
(e.g. 2nd order massspringdamper systems) and 3D computer
graphics has also been assumed in the preparation of the
course materials.
This course covers core subject matter common to the fields
of robotics, character animation and embodied intelligent
agents. The intent of the course is to provide the student
with a solid technical foundation for developing, animating
and controlling articulated systems used in interactive
computer games, virtual reality simulations and highend
animation applications. The course balances theory with
practice by "looking under the hood" of current
animation systems and authoring tools and exams the technologies
and techniques used from both a computer science and engineering
perspective. Topics covered include: geometric coordinate
systems and transformations; quaternions; parametric curves
and surfaces; forward and inverse kinematics; dynamic systems
and control; computer simulation; keyframe, motion capture
and procedural animation; behaviorbased animation and control;
facial animation; smart characters and intelligent agents.
Offered Fall 2014.

CIS 477
 Mathematical Methods/Techniques for Linguistics and Natural
Language Processing 

Prerequisite(s): Phil 006 or instructor's
permission. Crosslisted with Ling 477.
Basic concepts of set theory, relations and functions, properties
of relations. Basic concepts of algebra. Grammars, languages,
and automata, finite state grammars, regular expressions,
contextfree and contextsensitive grammars, midly contextsensitive
grammars, unrestricted grammars, finite automata, pushdown
automata and other related automata, Turing machines. Syntax
and semantics of grammar formalisms. Strong generative capacity
of grammars, Grammars as deductive systems, parsing as deduction.
Relevance of formal grammars to modeling biological sequences.
The course will deal with these topics in a very basic and
introductory mannerideas of proofs and not detailed proofs,
and more importantly with plenty of linguistic examples
to bring out the linguistic relevance of these topics.
Not offered 20142015.

CIS 480  Distributed Systems 
. 
Prerequisite(s): CIS 380, some network programming experience is desirable.
Ever increasing availability of inexpensive processors connected by a communication network has motivated the development of numerous concepts and paradigms for distributed realtime embedded systems. The primary objectives of this course are to study the principles and concepts of realtime embedded computing and to provide students handson experience in developing embedded applications. This course covers the concepts and theory necessary to understand and program embedded realtime systems. This includes concepts and theory for realtime system design, analysis, and certification; programming and operating systems for embedded systems; and concepts, technologies, and protocols for distributed embedded realtime systems.
The course will cover a variety of existing systems and technologies, e.g., realtime kernels, virtual machines, architectural description language, formal method tools, synchronous and logicaltime programming paradigms, and certification methods. The course requires active student participation ingroup projects. Each group will be responsible for the design and implementation of a lifecritical embedded system such as a pacemaker. The group projects are intended to complement the learning of principles and concepts through the application of theory in practice and the development of experimental skills in building embedded applications.
Not offered 20142015. 
CIS 482  Logic In Computer Science 

Prerequisite(s):
CIS 160
Logic has been called the calculus of computer science
as it plays a fundamental role in computer science, similar
to that played by calculus in the physical sciences and
traditional engineering disciplines. Indeed, logic is
useful in areas of computer science as disparate as architecture
(logic gates), software engineering (specification
and verification), programming languages (semantics, logic
programming), databases (relational algebra and SQL),
artificial intelligence (automatic theorem proving), algorithms
(complexity and expressiveness), and theory of computation
(general notions of computability). CIS 482 provides
the students with a thorough introduction to mathematical
logic, covering in depth the topics of syntax, semantics,
decision procedures, formal proof systems, and soundness and
completeness for both propositional and firstorder logic. The material is taught from a computer science perspective,
with an emphasis on algorithms, computational complexity,
and tools. Projects will focus on problems
in circuit design, specification and analysis of protocols,
and query evaluation in databases.
Not offered 20142015.

CIS 497  Senior Project (DMD Students only) 

Prerequisite(s): Senior standing
or permission of instructor.
The goal of this course is to provide an opportunity for seniors to define, design, and execute a project of your own choosing that demonstrates the technical skills and abilities that you have acquired during your 4 years as undergraduates. Evaluation is based on selecting an interesting topic, completing appropriate research on the state of the art in that area, communicating your objectives in writing and in presentations, accurately estimating what resources will be required to complete your chosen task, coding necessary functionality, and executing your plan.
Offered Fall 2014 and Spring 2015. 
NETS
112 
Networked Life 

What kind of science is appropriate for understanding the Facebook?
How does Google find what you're looking for... and exactly how do they make money doing so?
What properties might we expect any social network to reliably have, and are there simple explanations for them?
How does your position in an economic network (dis)advantage you?
How are individual and collective behavior related in complex networks?
What might we mean by the economics of spam?
What do game theory and the Paris subway have to do with Internet routing?
Networked Life looks at how our world is connected  socially, economically, strategically and technologically  and why it matters
Offered Fall 2014.

NETS 212: Scalable and Cloud Computing 
Prerequisites: CIS 120 (CIS 121 corequisite), CIS 160
What is the “cloud”? How do we build software systems and components that scale to millions of users and petabytes of data, and are “always available”?
In the modern Internet, virtually all large Web services run atop multiple geographically distributed data centers: Google, Yahoo, Facebook, iTunes, Amazon, EBAY, Bing, etc. Services must scale across thousands of machines, tolerate failures, and support thousands of concurrent requests. Increasingly, the major providers (including Amazon, Google, Microsoft, HP, and IBM) are looking at “hosting” thirdparty applications in their data centers – forming socalled “cloud computing” services.
This course, aimed at a sophomore with exposure to basic programming within the context of a single machine, focuses on the issues and programming models related to such cloud and distributed data processing technologies: how to think about dividing both data and work across large clusters of machines, both within and across data centers, how to design algorithms that do this parallel computation, and how to implement the algorithms in new frameworks such as MapReduce.
Offered: Fall 2014. 

CIS GRADUATE COURSES 


CIS 500  SOFTWARE FOUNDATIONS 

Prerequisite(s): CIS 121, 160, and 262 (or equivalents), plus substantial mathematical maturity (at least two additional undergraduate courses in math or theoretical CS). Undergraduatelevel coursework in programming languages, compilers, functional programming, or logic is helpful but not required.
This course introduces basic concepts and techniques in the foundational study of programming languages. The central theme is the view of programs and programming languages as mathematical objects for which precise claims may be made and proved. Particular topics include operational techniques for formal definition of language features, type systems and type safety properties, polymorphism, constructive logic, and the Coq proof assistant. This course is appropriate as an upperlevel undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. No permission from the instructor is needed. 

CIS 501  COMPUTER ARCHITECTURE 

Prerequisite: Knowledge of computer organization and basic programming skills.
This course is an introductory graduate course on computer architecture with an emphasis on a quantitative approach to cost/performance design tradeoffs. The course covers the fundamentals of classical and modern uniprocessor design: performance and cost issues, instruction sets, pipelining, superscalar, outoforder, and speculative execution mechanisms, caches, physical memory, virtual memory, and I/O. Other topics include: static scheduling, VLIW and EPIC, software speculation, long (SIMD) and short (multimedia) vector execution, multithreading, and an introduction to shared memory multiprocessors. 

CIS 502  ANALYSIS OF ALGORITHMS 

Prerequisite: CIT 594 or equivalent.
An investigation of paradigms for design and analysis of algorithms. The course will include dynamic programming, flows and combinatorial optimization algorithms, linear programming, randomization and a brief introduction to intractability and approximation algorithms. The course will include other advanced topics, time permitting. 

CIS 505  SOFTWARE SYSTEMS 

Prerequisite: Undergraduatelevel knowledge of Operating Systems and Networking, programming experience (CIT 594 or equivalent).
This course provides an introduction to fundamental concepts of distributed systems, and the design principles for building large scale computational systems. Topics covered include communication, concurrency, programming paradigms, naming, managing shared state, caching, synchronization, reaching agreement, fault tolerance, security, middleware, and distributed applications. This course is appropriate as an upperlevel undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. No permission from the instructor is needed. 

CIS 510  CURVES AND SURFACES: THEORY AND APPLICATIONS 

Prerequisite: Basic knowledge of linear algebra, calculus, and elementary geometry (CIS 560 not required.)
The course is about mathematical and algorithmic techniques used for geometric modeling and geometric design, using curves and surfaces. There are many applications in computer graphics as well as in robotics, vision, and computational geometry. Such techniques are used in 2D and 3D drawing and plot, object silhouettes, animating positions, product design (cars, planes, buildings), topographic data, medical imagery, active surfaces of proteins, attribute maps (color, texture, roughness), weather data, art, etc. Three broad classes of problems will be considered: Approximating curved shapes, using smooth curves or surfaces; Interpolating curved shapes, using smooth curves or surfaces; Rendering smooth curves or surfaces. 

CIS 511  THEORY OF COMPUTATION 

Prerequisite(s): Discrete Mathematics, Automata theory or Algorithms at the undergraduate level.
Review of regular and contextfree languages and machine models. Turing machines and RAM models, Decidability, Halting problem, Reductions, Recursively enumerable sets, Universal TMs, Church/Turing thesis. Time and space complexity, hierarchy theorems, the complexity classes P, NP, PSPACE, L, NL, and coNL. Reductions revisited, CookLevin Theorem, completeness, NL = coNL. Advanced topics as time permits: Circuit complexity and parallel computation, randomized complexity, approximability, interaction and cryptography. 

CIS 515  FUNDAMENTALS OF LINEAR ALGEBRA AND OPTIMIZATION 

Prerequisite: Undergraduate course in linear algebra, calculus
This course provides firm foundations in linear algebra and basic optimization techniques. Emphasis is placed on teaching methods and tools that are widely used in various areas of computer science. Both theoretical and algorithmic aspects will be discussed. 

CIS 518  TOPICS IN LOGIC: FINITE MODEL THEORY AND DESCRIPTIVE COMPLEXITY 

The course will examine the expressive power of various logical languages over the class of finite structures. The course begins with an exposition of some of the fundamental theorems about the behavior of firstorder logic in the context of finite structures, in particular, the EhrenfeuchtFraisse Theorem and the Trahktenbrot Theorem. The first of these results is used to show limitations on the expressive power of firstorder logic over finite structures while the second result demonstrates that the problem of reasoning about finite structures using firstorder logic is surprisingly complex. The course then proceeds to consider various extensions of firstorder logic including fixedpoint operators, generalized quantifiers, infinitary languages, and higherorder languages. The expressive power of these extensions will be studied in detail and will be connected to various problems in the theory of computational complexity. This last motif, namely the relation between descriptive and computational complexity, will be one of the main themes of the course. 

CIS 520  MACHINE LEARNING 

Prerequisite(s): Elementary probability, calculus, and linear algebra. Basic programming experience.
This course covers the foundations of statistical machine learning. The focus is on probabilistic and statistical methods for prediction and clustering in high dimensions. Topics covered include SVMs and logistic regression, PCA and dimensionality reduction, and EM and Hidden Markov Models. 

CIS 521  FUNDAMENTALS OF AI 

Prerequisites: Students are expected to have the following background: Basic algorithms, data structures and complexity (dynamic programming, queues, stacks, graphs, bigO, P/NP) ; Basic probability and statistics (random variables, standard distributions, simple regression); Basic linear algebra (matrices, vectors, norms, inverses); Reasonable programming skills.
Modern AI uses a collection of techniques from a number of fields in the design of intelligent systems:probability, statistics, logic, operations research, optimal control and economics, to name a few. This course covers basic modeling and algorithmic tools from these fields underlying current research and highlights their applications in computer vision, robotics, and natural language processing. 

CIS 526  MACHINE TRANSLATION 

Prerequisites: None
Google translate can instantly translate between any pair of over fifty human languages (for instance, from French to English). How does it do that? Why does it make the errors that it does? And how can you build something better? Modern translation systems like Google Translate and Bing Translator learn how to translate by reading millions of words of already translated text, and this course will show you how they work. The course covers a diverse set of fundamental building blocks from linguistics, machine learning, algorithms, data structures, and formal language theory, along with their application to a real and difficult problem in artificial intelligence.
CIS 526 may be used towards fulfilling the CIS doctoral student seminar requirement. 

CIS 530  COMPUTATIONAL LINGUISTICS 

Computational approaches to the problem of understanding and producing natural language text and speech, including speech processing, syntactic parsing, semantic interpretation, discourse meaning, and the role of pragmatics and world knowledge. The course will examine both rulebased and corpusbased techniques. It is recommended that students have some knowledge of logic, basic linguistics, and/or programming. 

CIS 534  MULTICORE PROGRAMMING AND ARCHITECTURE 

Prerequisites: CIS 371 or CIS 501, and significant programming experience.
This course is a pragmatic examination of multicore programming and the hardware architecture of modern multicore processors. Unlike the sequential singlecore processors of the past, utilizing a multicore processor requires programmers to identify parallelism and write explicitly parallel code. Topics covered include: the relevant architectural trends and aspects of multicores, approaches for writing multicore software by extracting data parallelism (vectors and SIMD), threadlevel parallelism, and task based parallelism, efficient synchronization, and program profiling and performance tuning. The course focuses primarily on mainstream sharedmemory multicores with some coverage of graphics processing units (GPUs). Clusterbased supercomputing is not a focus of this course. Several programming assignments and a course project will provide students firsthand experience with programming, experimentally analyzing, and tuning multicore software. Students are expected to have a solid understanding of computer architecture and strong programming skills (including experience with C/C++). 

CIS 535  INTRODUCTION TO BIOINFORMATICS (GCB 535) 

The course covers methods used in computational biology, including the statistical models and algorithms used and the biological problems which they address. Students will learn how tools such as BLAST work, and will use them to address real problems. The course will focus on sequence analysis problems such as exon, motif and gene finding, and on comparative methods but will also cover gene expression and proteomics. 

CIS 537  BIOMEDICAL IMAGE ANALYSIS 

Prerequisites: Mathematics through multivariate calculus (Math 241), programming experience, as well as some familiarity with linear algebra, basic physics, and statistics.
This course covers the fundamentals of advanced quantitative image analysis that apply to all of the major and emerging modalities in biological/biomaterials imaging and in vivo biomedical imaging. While traditional image processing techniques will be discussed to provide context, the emphasis will be on cutting edge aspects of all areas of image analysis (including registration, segmentation, and highdimensional statistical analysis). Significant coverage of stateoftheart biomedical research and clinical applications will be incorporated to reinforce the theoretical basis of the analysis methods. 

CIS 540  PRINCIPLES OF EMBEDDED COMPUTATION 

Prerequisites:
This course assumes mathematical maturity, commensurate with either ESE 210 (Introduction to Dynamical Systems), or CIS 262 (Introduction to Theory of Computation). It is suitable for students who have an undergraduate degree in computer science, or computer engineering, or electrical engineering. It is also suitable for Penn undergraduates in CIS or CE as an upperlevel elective.
This course is focused on principles underlying design and analysis of computational elements that interact with the physical environment. Increasingly, such embedded computers are everywhere, from smart cameras to medical devices to automobiles. While the classical theory of computation focuses on the function that a program computes, to understand embedded computation, we need to focus on the reactive nature of the interaction of a component with its environment via inputs and outputs, the continuous dynamics of the physical world, different ways of communication among components, and requirements concerning safety, timeliness, stability, and performance. Developing tools for approaching design, analysis, and implementation of embedded systems in a principled manner is an active research area. This course will attempt to give students a coherent introduction to this emerging area.
This course is appropriate as an upperlevel undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. No permission from the instructor is needed. 

CIS 541 EMBEDDED SOFTWARE FOR LIFECRITICAL APPLICATIONS 

Prerequisite: CIS 240 Introduction to Computer Architecture or equivalent; ESE 350 Embedded Systems recommended
This course is focused on cyber physical systems with emphasis on realtime issues. Cyber phsyical systems are integrations of computation and communication with physical processes. Embedded computers monitor and control physical processes in realtime. As these embedded computers are increasingly networked, it is believed that there will be a revolutionary transformation. Just as personal computers have transformed from word processors to global communications devices for information gathering and sharing, embedded computers will change from small selfcontained systems to cyberphysical systems by sensing, monitoring, controlling our physical environment.
The course is to study principles, methods, and techiques for building highassurance cyberphysical systems. Topics will include requirements capture and modeling, mental models, assurance cases, hazard analysis, realtime programming and communication, realtime scheduling and virtual machines, feedback control in computer systems, vertification and validation, and evidencebased certification. The course will include a series of projects that will implement safetycritical embedded systems (e.g., pacemaker, infusion pump). 

CIS 542  EMBEDDED SYSTEMS PROGRAMMING 

Prerequisites: C fluency.
This course explores techniques for writing correct and efficient embedded code. Topics include C/C++ idioms, data abstraction, elementary data structures and algorithms, environment modeling, concurrency, hard real time, and modular program reasoning. 

CIS 550  DATABASE AND INFORMATION SYSTEMS 

Prerequisite: CIS 121 or (CIT 594 and CIT 592) or equivalent.
Introduction to the theory and practice of data management systems, including databases and data integration. The EntityRelationship approach as a modeling tool. The relational model, algebra and calculus. Database design and relational normalization. Views and their role in security and integration. Physical data organization and indexing structures. Query execution and optimization. Updates and integrity: transaction management, concurrency control and recovery techniques. Databasebacked Web sites. 

CIS 551  COMPUTER AND NETWORK SECURITY 

Prerequisite; CIS 553 or equivalent is required; CIS 500 is recommended.
This is an introduction to topics in the security of computer systems and communication on networks of computers. The course covers four major areas: fundamentals of cryptography, security for communication protocols, security for operating systems and mobile programs, and security for electronic commerce. Sample specific topics include: passwords and offline attacks, DES, RSA, DSA, SHA, SSL, CBC, IPSec, SET, DDoS attacks, biometric authentication, PKI, smart cards, S/MIME, privacy on the Web, viruses, security models, wireless security, and sandboxing. Students will be expected to display knowledge of both theory and practice through written examinations and programming assignments. 

CIS 552  ADVANCED PROGRAMMING 

Prerequisite: Four courses involving significant programming and a discrete mathematics or modern algebra course. Enrollment by permission of the instructor only.
The goals of this course are twofold: (1) to take good programmers and turn them into excellent ones, and (2) to introduce them to a range of modern software engineering practices, in particular those embodied in advanced functional programming languages. 

CIS 553  NETWORKED SYSTEMS 

Prerequisites; CIS 121 (Programming Languages and Techniques II), or equivalent, or permission of the instructor.
This course provides an introduction to fundamental concepts in the design and implementation of networked systems, their protocols, and applications.
Topics to be covered include: Internet architecture, network applications, addressing, routing, transport protocols, network security, and peertopeer networks. The course will involve written assignments, examinations, and programming assignments.. Students will work in teams to design and implement networked systems in layers, from routing protocols, transport protocols, to peertopeer networks. 

CIS 554  PROGRAMMING PARADIGMS 

Prerequisites; CIS 121 or CIT 594 or equivalent.
Achieving mastery in a new programming language requires more than just learning a new syntax; rather, different languages support different ways to think about solving problems. Not all programming languages are inherently procedural or objectoriented. The intent of this course is to provide a basic understanding of a wide variety of programming paradigms, such as logic programming, functional programming, concurrent programming, rulebased programming, and others. 

CIS 555  INTERNET AND WEB SYSTEMS 

Prerequisites: Familiarity with threads and concurrency; strong Java programming skills.
This course focuses on the challenges encountered in building Internet and web systems: scalability, interoperability (of data and code), security and fault tolerance, consistency models, and location of resources, services, and data. We will examine how XML standards enable information exchange; how web services support crossplatform interoperability (and what their limitations are); how to build highperformance application servers; how "cloud computing" services work; how to perform Akamailike content distribution; and how to provide transaction support in distributed environments. We will study techniques for locating machines, resources, and data (including directory systems, information retrieval indexing, ranking, and web search); and we will investigate how different architectures support scalability (and the issues they face). We will also examine ideas that have been proposed for tomorrow's Web, and we will see some of the challenges, research directions, and potential pitfalls. An important goal of the course is not simply to discuss issues and solutions, but to provide handson experience with a substantial implementation project. This semester's project will be a peertopeer implementation of a Googestyle search engine, including distributed, scalable crawling; indexing with ranking; and even PageRank. As a sideeffect of the material of this course, you will learn about some aspects of largescale software development: assimilating large APIs, thinking about modularity, reading other people's code, managing versions, debugging, etc. 

CIS 558  COMPUTER ANALYSIS AND MODELING OF BIOLOGICAL SIGNALS AND SYSTEMS (LING 525) 

Prerequisite: Undergraduatelevel knowledge of linear algebra.
A graduate course intended to introduce the use of signal and image processing tools for analyzing and modeling biological systems. We present a series of fundamental examples drawn from areas of speech analysis/synthesis, computer vision, and modeling of biological perceptual systems. Students learn the material through lectures and via a set of computer exercises developed in MATLAB. 

CIS 559  PROGRAMMING AND PROBLEM SOLVING 

Prerequisites: Proficiency in Java. CIS 320 or CIS 502, or equivalent.
This course develops students' problem solving skills using techniques that they have learned during their CS training. Over the course of the semester, students work on group projects in which they use programming techniques to solve openended problems, e.g. optimization, simulation, etc. There are no “correct” answers to these problems; rather, the focus is on the four steps of the problem solving process: algorithmic thinking; programming; analysis; and communication. 

CIS 560  COMPUTER GRAPHICS 

Prerequisite: One year programming experience (C, JAVA, C++).
A thorough introduction to computer graphics techniques, covering primarily 3D modeling and image synthesis. Topics cover: geometric transformations, geometric algorithms, software systems (OpenGL), 3D object models (surface and volume), visible surface algorithms, image synthesis, shading and mapping, ray tracing, radiosity, global illumination, photon mapping, antialiasing and compositing.


CIS 562  COMPUTER ANIMATION 

Prerequisite: Previous exposure to major concepts in linear algebra (i.e. vector matrix math), curves and surfaces, dynamical systems (e.g. 2nd order massspringdamper systems) and 3D computer graphics has also been assumed in the preparation of the course materials.
This course covers core subject matter common to the fields of robotics, character animation and embodied intelligent agents. The intent of the course is to provide the student with a solid technical foundation for developing, animating and controlling articulated systems used in interactive computer games, virtual reality simulations and highend animation applications. The course balances theory with practice by "looking under the hood" of current animation systems and authoring tools and exams the technologies and techniques used from both a computer science and engineering perspective. Topics covered include: geometric coordinate systems and transformations; quaternions; parametric curves and surfaces; forward and inverse kinematics; dynamic systems and control; computer simulation; keyframe, motion capture and procedural animation; behaviorbased animation and control; facial animation; smart characters and intelligent agents. 

CIS 563  PHYSICALLY BASED ANIMATION 

Prerequisite(s): Students should have a good knowledge of objectoriented programming (C++) and basic familiarity with linear algebra and physics. Some background in computer graphics is helpful.
This course introduces students to common physically based simulation techniques for animation of fluids and gases, rigid and deformable solids, cloth, explosions, fire, smoke, virtual characters, and other systems. Physically based simulation techniques allow for creation of extremely realistic special effects for movies, video games and surgical simulation systems. We will learn stateoftheart techniques that are commonly used in current special effects and animation studios and in video games community. To gain handson experience, students will implement basic simulators for several systems. The topics will include: Particle Systems, Mass spring systems, Deformable Solids & Fracture, Cloth, Explosions & Fire, Smoke, Fluids, Deformable active characters, Simulation and control of rigid bodies, Rigid body dynamics, Collision detection and handling, Simulation of articulated characters, Simulated characters in games. The course is appropriate for both upper level undergraduate and graduate students.


CIS 564  GAME DESIGN AND DEVELOPMENT 

Prerequisites: Basic understanding of 3D graphics and animation principles, prior exposure to scripting and programming languages such as Python, C and C++.
The intent of the course is to provide students with a solid theoretical understanding of the core creative principles, concepts, and game play structures/schemas underlying most game designs. The course also will examine game development from an engineering point of view, including: game play mechanics, game engine software and hardware architectures, user interfaces, design documents, playtesting and production methods. 

CIS 565  GPU PROGRAMMING AND ARCHITECTURE 

Prerequisite: CIS 460 or CIS 560, and familiarity with computer hardware/systems. The hardware/systems requirement may be met by CIS 501; or CIT 593 and 595; or CIS 240 (with CIS 371 recommended); or equivalent coursework.
This course examines the architecture and capabilities of modern GPUs. The graphics processing unit (GPU) has grown in power over recent years, to the point where many computations can be performed faster on the GPU than on a traditional CPU. GPUs have also become programmable, allowing them to be used for a diverse set of applications far removed from traditional graphics settings. Topics covered include architectural aspects of modern GPUs, with a special focus on their streaming parallel nature, writing programs on the GPU using high level languages like Cg and BrookGPU, and using the GPU for graphics and general purpose applications in the area of geometry modeling, physical simulation, scientific computing and games. Students are expected to have a basic understanding of computer architecture and graphics, and should be proficient in OpenGL and C/C++.
This course is appropriate as an upperlevel undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. No permission from the instructor is needed. 

CIS 568  GAME DESIGN PRACTICUM 

Prerequisites: CIS462/562: Computer Animation, CIS277 or CIS460/560: Computer Graphics
Corequisites: CIS564: Computer Game Design and Development
The objective of the game design practicum is to provide students with hands on experience designing and developing 3D computer games. Working in teams of three or four, students will brainstorm an original game concept, write a formal game design document then develop a fully functional prototype consisting of a playable level of the game. In addition to creation of original art and animation assets for the game, technical features to be designed and implemented include a novel game mechanic and/or user interaction model, game physics (i.e. particle systems and rigid body dynamics), character animation, game AI (i.e. movement control, path planning, decision making, etc.), sound effects and background music, 2D graphical user interface (GUI) design and optional multiplayer networking capabilities. Consistent with standard industry practices, game code and logic will be written using C++ and popular scripting languages such as Python and Lua. Stateoftheart game and physics engine middleware also will be used to expose students to commercialgrade software, production methodologies and art asset pipelines. As a result of their game development efforts, students will learn first hand about the creative process, design documentation, objectoriented software design and engineering, project management (including effective team collaboration and communication techniques), design iteration through user feedback and playtesting, and most importantly, what makes a game fun to play. 

CIS 570  MODERN PROGRAMMING LANGUAGE IMPLEMENTATION 

Prerequisite: CIS 500. An undergraduate course in compiler construction (CIS 341 or equivalent) is helpful but not required.
This course is a broad introduction to advanced issues in compilers and runtime systems for several classes of programming languages, including imperative, objectoriented, and functional. Particular attention is paid to the structures, analyses, and transformations used in program optimization. 

CIS 571  RECURSION THEORY (PHIL 411) 

This course covers the basic theory of recursive and recursively enumerable sets and the connection between this theory and a variety of decision problems of interest in a computational setting. The course proceeds to an exposition of recursion theoretic reducibilities. Elementary results about degrees of unsolvability are established. The theory of arithmetical, analytical, and projective hierarchies are presented. The study of functionals at this point provides an entry into the computationally important subject of recursion at higher types. Basic parts of the theory of inductive definitions and monotone operators are presented. If time and interest permit, this theory is applied to the analysis of the semantical paradoxes. The course concludes with an investigation of the lower levels of the analytical and projective hierarchies. Applications to the degrees of unsolvability of various logical systems will be presented, connections between the hierarchies and predicative formal systems are established, and the relation between the theory of the projective hierarchy and topics in classical descriptive set theory are indicated. 

CIS 572  SET THEORY (PHIL 413) 

This course is an introduction to set theory. It will begin with a study of ZermeloFraenkel set theory (ZF) as a partial description of the cumulative hierarchy of sets. Elementary properties of cardinal and ordinal numbers will be developed in ZF. The inner model of constructible sets will be used to establish the relative consistency of the axiom of choice and the generalized continuum hypothesis with ZF. The method of forcing will be introduced to establish the independence of the continuum hypothesis from ZF and other independence results. Large cardinals and their bearing on the resolution of questions about the continuum will be considered. 

CIS 573  SOFTWARE ENGINEERING 

Prerequisites: CIT 591 and 593, or CIS 120, 121, and 240, or equivalent; proficiency in Java.
Writing a “program” is easy. Developing a “software product”, however, introduces numerous challenges that make it a much more difficult task. This course will look at how professional software engineers address those challenges, by investigating best practices from industry and emerging trends in software engineering research. Topics will focus on software maintenance issues, including: test case generation and test suite adequacy; code analysis; verification and model checking; debugging and fault localization; refactoring and regression testing; and software design and quality. 

CIS 580  MACHINE PERCEPTION 

Prerequisite: A solid grasp of the fundamentals of linear algebra. Some knowledge of programming in C and/or Matlab.
An introduction to the problems of computer vision and other forms of machine perception that can be solved using geometrical approaches rather than statistical methods. Emphasis will be placed on both analytical and computational techniques. This course is designed to provide students with an exposure to the fundamental mathematical and algorithmic techniques that are used to tackle challenging image based modeling problems. The subject matter of this course finds application in the fields of Computer Vision, Computer Graphics and Robotics. Some of the topics to be covered include: Projective Geometry, Camera Calibration, Image Formation, Projective, Affine and Euclidean Transformations, Computational Stereopsis, and the recovery of 3D structure from multiple 2D images. This course will also explore various approaches to object recognition that make use of geometric techniques, these would include alignment based methods and techniques that exploit geometric invariants. In the assignments for this course, students will be able to apply the techniques to actual computer vision problems.
This course is appropriate as an upperlevel undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. No permission from the instructor is needed. 

CIS 581 COMPUTER VISION & COMPUTATIONAL PHOTOGRAPHY 

This is an introductory course to Computer Vision and Computational Photography. This course will explore three topics: 1) image morphing, 2) image matching and stitching, and 3) image recognition. This course is intended to provide a handson experience with interesting things to do on images/videos. The world is becoming imagecentric. Cameras are now found everywhere, in our cell phones, automobiles, even in medical surgery tools. Computer vision technology has led to latest innovations in areas such as Hollywood movie production, medical diagnosis, biometrics, and digital library. This course is suited for students from all Engineering backgrounds, who have the basic knowledge of linear algebra and programming, and a lot of imagination. 

CIS 582  LOGIC IN COMPUTER SCIENCE 

Prerequisite: CIS 160 or CIT 592 or equivalent
Logic has been called the calculus of computer science as it plays a fundamental role in computer science, similar to that played by calculus in the physical sciences and traditional engineering disciplines. Indeed, logic is useful in areas of computer science as disparate as architecture (logic gates), software engineering (specification and verification), programming languages (semantics, logic programming), databases (relational algebra and SQL), artificial intelligence (automatic theorem proving), algorithms (complexity and expressiveness), and theory of computation (general notions of computability). CIS 582 provides students with a thorough introduction to mathematical logic, covering in depth the topics of syntax, semantics, decision procedures, formal proof systems, and soundness and completeness for both propositional and firstorder logic. The material is taught from a computer science perspective, with an emphasis on algorithms, computational complexity, and tools. Projects will focus on problems in circuit design, specification and analysis of protocols, and query evaluation in databases. 

CIS 597  MASTER'S THESIS RESEARCH 

For students working on an advanced research leading to the completion of a master's thesis. 

CIS 599  INDEPENDENT STUDY FOR MASTER'S STUDENTS 

For master's students studying a specific advanced subject area in computer and information science. Involves coursework and class presentations. A CIS 599 course unit will invariably include formally gradable work comparable to that in a CIS 500level course. Students should discuss with the faculty supervisor the scope of the Independent Study, expectations, work involved, etc. 

CIS 601  ADVANCED TOPICS IN COMPUTER ARCHITECTURE 

Prerequisite:
Graduate Computer Architecture (CIS 501) or strong performance in undergraduate Digital Systems Organization and Design (CIS 371).
This course will focus on research topics in computer architecture, and include reading and presenting research papers and an optional project. The content will differ with each offering, covering topics such as multicore programmability, datacenter and warehousescale computing, security, energyefficient architectures, etc. 

CIS 610  ADVANCED GEOMETRIC METHODS IN COMPUTER SCIENCE 

Prerequisite: CIS510 or coverage of equivalent material.
The purpose of this course is to present some of the advanced geometric methods used in geometric modeling, computer graphics, computer vision, etc. The topics may vary from year to year, and will be selected among the following subjects (nonexhaustive list): Introduction to projective geometry with applications to rational curves and surfaces, control points for Rational curves, rectangular and triangular rational patches, drawing closed rational curves and surfaces; Differential geometry of curves (curvature, torsion, osculating planes, the Frenet frame, osculating circles, osculating spheres); Differential geometry of surfaces (first fundamental form, normal curvature, second fundamental form, geodesic curvature, Christoffel symbols, principal curvatures, Gaussian curvature, mean curvature, the Gauss map and its derivative dN, the Dupin indicatrix, the Theorema Egregium, equations of CodazziMainardi, Bonnet's theorem, lines of curvatures, geodesic torsion, asymptotic lines, geodesic lines, local GaussBonnet theorem). 

CIS 613  NONLINEAR CONTROL THEORY (MEAM 613/EE 613) 

Prerequisite: A sufficient background to linear algebra (ENM 510/511 or equivalent) and a course in linear control theory (MEAM 513 or equivalent), or written permission of the instructor.
This course studies issues in nonlinear control theory, with a particular emphasis on the use of geometric principles. Topics include: controllability, accessibility, and observability for nonlinear systems; Forbenius' theorem; feedback and input/output linearization for SISO and MIMO systems; dynamic extension; zero dynamics; output tracking and regulation; model matching; disturbance decoupling; examples will be taken from mechanical systems, robotic systems, including those involving nonholonomic constraints, and active control of vibrations. 

CIS 620  ADVANCED TOPICS IN ARTIFICIAL INTELLIGENCE 

Prerequisite: CIS 520 or equivalent.
Discussion of problems and techniques in Artificial Intelligence (AI). Knowledge Representation and Reasoning, Planning, Natural Language Processing, Constraint Systems, Machine Learning; Applications of AI. 

CIS 625  INTRODUCTION TO COMPUTATIONAL LEARNING THEORY 

Prerequisite:
Prior courses in algorithms, complexity and statistics would be helpful but are not necessary.
This course is an introduction to Computational Learning Theory, a field which attempts to provide algorithmic, complexitytheoretic and statistical foundations to modern machine learning. The focus is on topics in computational learning theory for researchers and students in artificial intelligence, neural networks, theoretical computer science, and statistics. 

CIS 630  ADVANCED TOPICS IN IN NATURAL LANGUAGE PROCESSING 

Prerequisite: CIS 530 or permission of instructor.
Different topics selected each offering; e.g., NL generation, questionanswering, information extraction, machine translation, restricted grammar formalisms, computational lexical semantics, etc. 

CIS 635  ADVANCED COMPUTATIONAL BIOLOGY (BIOL 537) 

Prerequisite: Biol 536 or permission of instructor.
Discussion of special research topics. 

CIS 639  STATISTICAL APPROACHES TO NATURAL LANGUAGE UNDERSTANDING 

This course examines the recent development of corpusbased techniques in natural language processing, focusing on both statistical and primarily symbolic learning techniques. Particular topics vary from year to year. 

CIS 640  ADVANCED TOPICS IN SOFTWARE SYSTEMS 

Prerequisite: CIS 505 or equivalent.
Different topics selected for each course offering. 

CIS 650  ADVANCED TOPICS IN DATABASES 

Prerequisite: CIS 550.
Advanced topics in databases: distributed databases, integrity constraints, failure, concurrency control, relevant relational theory, semantics of data models, the interface between programming of languages and databases. Objectoriented databases. New topics are discussed each year. 

CIS 660  ADVANCED TOPICS IN COMPUTER GRAPHICS & ANIMATION 

Prerequisite: CIS 560 or permission of instructor.
The goal of the course is to review stateofthe art research in the fields of computer graphics and animation as well as provide students with working knowledge of how to convert theory to practice by developing an associated graphics/animation authoring tool. The course is comprised of primers, lectures, student presentations and the authoring tool group project. Each student will be responsible for presenting one primer and at least two SIGGRAPH papers to the class. Working in teams of two, students will design and develop an authoring tool that that facilitates the creation of a new type of user interaction, animation/simulation capability or 3D graphics special effect. Research papers published in the SigGraph Conference proceedings will provide the basis for the features/functionality/special effects that can be selected for implementation in the authoring tool. Each group will analyze the need and user requirements for the tool they plan to develop, prepare a formal software design document, construct a project work plan, develop the authoring tool functionality and user interface, test the design and demonstrate the authoring of associated content. A plugin to standard authoring tools such as Maya or Houdini must also be developed to enable importing of appropriate assets and/or exporting of results. 

CIS 670  ADVANCED TOPICS IN PROGRAMMING LANGUAGES 

Prerequisite: CIS 500.
The details of this course change from year to year, but its purpose is to cover theoretical topics related to programming languages. Some central topics include: denotational vs operational semantics, domain theory and category theory, the lambda calculus, type theory (including recursive types, generics, type inference, and modules), logics of programs and associated completeness and decidability problems, specification languages, and models of concurrency. The course requires a degree of mathematical sophistication. 

CIS 673  COMPUTERAIDED VERIFICATION 

Prerequisite: Basic knowledge of algorithms, data structures, automata theory, propositional logic, operating systems, communication protocols, and hardware (CIS 262, CIS 380, or permission of the instructor). This course introduces the theory and practice of formal methods for the design and analysis of concurrent and embedded systems. The emphasis is on the underlying logical and automatatheoretic concepts, the algorithmic solutions, and heuristics to cope with the high computational complexity. Topics: Models and semantics of reactive systems; Verification algorithms; Verification techniques. Topics may vary depending on instructor. 

CIS 677  ADVANCED TOPICS IN ALGORITHMS AND COMPLEXITY 

Prerequisite: Consent of the instructor.
This course covers various aspects of discrete algorithms. Graphtheoretic algorithms in computational biology, and randomization and computation; recent literature in dynamic graph algorithms, approximation algorithms, and other areas according to student interests. 

CIS 680  ADVANCED TOPICS IN MACHINE PERCEPTION 

Prerequisite: A previous course in machine perception or knowledge of image processing, experience with an operating system and language such as Unix and C, and aptitude for mathematics. Graduate seminar in advanced work on machine perception as it applies to robots as well as to the modeling of human perception. Topics vary with each offering. Check with instructor. 

CIS 682  FRIENDLY LOGICS 

The use of logical formalisms in Computer Science is dominated by a fundamental conflict: expressiveness vs. algorithmic tractability. Database constraint logics, temporal logics and description logics are successful compromises in this conflict: (1) they are expressive enough for practical specifications in certain areas, and (2) there exist interesting algorithms for the automated use of these specifications. Interesting connections can be made between these logics because temporal and description logics are modal logics, which in turn can be seen, as can database constraint logics, as certain fragments of firstorder logic. These connections might benefit research in databases, computeraided verification and AI. Discussion includes other interesting connections, eg., with SLDresolution, with constraint satisfaction problems, with finite model theory and with automata theory. 

CIS 700  SPECIAL TOPICS 

Onetime course offerings of special interest.
Equivalent to a CIS 5XXlevel course. 

CIS 800  PhD SPECIAL TOPICS SEMINAR 

Onetime course offerings of special interest.
Equivalent to a CIS seminar course. 

CIS 895  TEACHING PRACTICUM 

Enrollment for students participating in Teaching Practicum. 

CIS 899  INDEPENDENT STUDY FOR DOCTORAL STUDENTS 

For doctoral students studying a specific advanced subject area in computer and information science. The Independent Study may involves coursework, presentations, and formally gradable work comparable to that in a CIS 500 or 600 level course. The Independent Study may also be used by doctoral students to explore research options with faculty, prior to determining a thesis topic. Students should discuss with the faculty supervisor the scope of the Independent Study, expectations, work involved, etc. The Independent Study should not be used for ongoing research towards a thesis, for which the CIS 999 designation should be used. 

CIS 990  MASTERS THESIS 

For master's students who have taken ten course units and need only to complete the writing of a thesis or finish work for incompletes in order to graduate. CIS 990 carries full time status with zero course units, and may be taken only once. 

CIS 995  DISSERTATION 

For PhD candidates working exclusively on their dissertation research following their dissertation proposal. There is no credit or grade for CIS 995. 

CIS 996  RESEARCH SEMINAR 

Introduction to research being conducted in the department. Mandatory for first year doctoral students  taken as fifth course for no credit at no cost. 

CIS 999  THESIS/DISSERTATION RESEARCH FOR DOCTORAL STUDENTS 

For students pursuing advanced research to fulfil PhD dissertation requirements. 




CIT 590 PROGRAMMING LANGUAGES AND TECHNIQUES 

Prerequisite: none
Introduction to fundamental concepts of programming and computer science for students who have little or no experience in these areas. Principles of modern objectoriented programming languages: abstraction, types, polymorphism, encapsulation, and inheritance. Basic algorithmic techniques and informal complexity analysis. Graphical user interfaces. Substantial programming assignments. This course is for students who do not have an academic background in computer science and who are not pursuing the Master's in Computer Information Technology and who are not graduate students in the CIS Department. Students in SEAS graduate programs such as EE, TCOM, BIOT, MEAM, & MSE, as well as students outside SEAS, such as those in Cell & Molecular Biology (CAMB) and Genomics & Computational Biology (GCB) in the Medical School, as well as graduate students from other disciplines in the University will find this course useful. 

CIT 591  PROGRAMMING LANGUAGES AND TECHNIQUES I 

Introduction to fundamental concepts of programming and computer science. Principles of modern objectoriented programming languages: abstraction, types, polymorphism, encapsulation, and inheritance. Basic algorithmic techniques and informal complexity analysis. Graphical user interfaces. Substantial programming assignments. This course is for MCIT students only. 

CIT 592  MATHEMATICAL FOUNDATIONS OF COMPUTER SCIENCE 

Foundations: Sets, Functions, Summations, and Sequences. Introduction to algorithms. Counting techniques: The pigeonhole principle, permutations and combinations. Discrete probability. Selected topics from Number theory and/or Graph Theory. 

CIT 593  INTRODUCTION TO COMPUTER ARCHITECTURE 

This course provides an introduction to fundamental concepts of computer systems and computer architecture. You will learn the C programming language and an instruction set (machine language) as a basis for understanding how computers represent data, process information, and execute programs. The course also focuses on the Unix environment and includes a weekly handson lab session. 

CIT 594  PROGRAMMING LANGUAGES AND TECHNIQUES II 

Prerequisite: CIT 591 or consent of instructor.
Basic data structures, including lists, stacks, queues, hash tables, trees, priority queues, and Java Collections. Algorithms, algorithm types, and simple complexity analysis. Development and implementation of program specifications. Software architecture and design methods, including modular program development, correctness arguments, and testing techniques. Concepts illustrated through extensive programming assignments. 

CIT 595  DIGITAL SYSTEM ORGANIZATION AND DESIGN 

Prerequisite: CIT 593 or equivalent.
This course explores various topics in modern operating systems and computer architecture, including multithreading and synchronization, interprocess communication, memory management (caching, virtual memory, etc.), I/O, and security. We also look at techniques that are used to enhance processor performance at the hardware and software level. You will learn a variety of C and C++ programming techniques that will make you a better IT professional, and will get an understanding of what's happening “under the covers” in modern computer systems. 

CIT 596  THEORY OF COMPUTATION 

Prerequisite: CIT 592 or equivalent.
Relations. Finite automata, regular languages, regular grammars, and applications. Pushdown automata, trees, contextfree grammars, and applications. Turing machines. Introduction to computability and complexity theory. 

CIT 597  PROGRAMMING LANGUAGES AND TECHNIQUES III 

CIT 591 or equivalent and CIT 594 or equivalent. No prior experience with C# or .NET required.
Advanced objectoriented programming for Linux and Windows web servers, taught handson in a lab. Java and/or C# topics may include serialization, synchronization, reflection, advanced I/O, servlets and generic handlers, dependency injection, protecting against SQL injection, XML, Javascript, SOAP and REST web services, database access for web pages, and others. Substantial programming assignments. May be taken by MCIT and CIS graduate students. 
Semester of above course offerings may be subject to change due to departmental priorities, student needs, faculty availability, etc.
Return to CIS Graduate Program web page  www.cis.upenn.edu/grad/

