CIS Homeline
Note from Undergraduate Chair
Degree Programs
  CIS Minor
CS as a Second Major
Academic Advising
  Penn Tutoring Services
Penn Mentoring Program
CIS Courses

Course Descriptions
Fall Course Schedule
Spring Course Schedule
Summer Course Schedule

Research at CIS
  Undergraduate Research
Student Groups and Activities
Financial Aid
Job and Internship Opportunities


CIS Home divider Penn Engineering divider PENN   spacer

 CIS Undergraduate Courses 

100 Level Courses
200 Level Courses
300 Level Courses
400 Level Courses

The acronym of the undergraduate Computer Science and Engineering courses has changed

from CSE to CIS (Computer and Information Science).  We made this change to bring the

names of our undergraduate courses in line with the name of our department.

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 in-depth 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.
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 non-engineering students. It covers some of the essential topics of contemporary computer science from a mathematical perspective. No programming experience necessary. Open to all non-SEAS students. SEAS students my not take for credit toward engineering degree.

CIS 105 - Introduction to Scientific Computing

(Crosslisted with MEAM 105)

This course will provide an introduction to computation and data analysis using MATLAB - an industry standard programming and visualization environment.  The course will cover the fundamentals of computing including; variables, functions, flow control, iteration and recursion.  These concepts will be illustrated through examples and assignments which show how computing is applied to various scientific and engineering problems.  Examples will be drawn from the simulation of physical and chemical systems, the analysis of experimental data, Monte Carlo numerical experiments, image and audio processing, and control of sensors and actuators.

This course does not assume any prior programming experience but will make use of basic concepts from calculus and Newtonian physics. 

CIS 110 - Introduction to Computer Programming (with Java, for Beginners)

How do you program computers to accomplish complex tasks? How do you break down a complex task into simpler ones? CIS 110 is a "Java lite" course that covers the fundamentals of object-oriented programming such as objects, classes, state, methods, loops, arrays, and inheritance using the Java programming language.

CIS 112 - Networked Life
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 (such as the Penn Facebook) to reliably have, and are there "simple" explanations for them? How does your position in a social or economic network (dis)advantage you, and why? 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.
CIS 120 - Programming Languages and Techniques I

This will be a fast-paced introduction to the fundamental concepts of  programming, with Java as the main experimental vehicle. We assume some previous programming experience at the level of a high school computer science class. If you got at least 4 in the AP Computer Science A or AB exam, you will do great. However, we do not assume  you know Java. Basic experience with any programming language (for  instance C, C++, VB, PHP, Perl, or Scheme) will be sufficient. A quiz  will be given in the second week of class to test your programming knowledge so that you can decide whether the class is for you.  If you have never programmed before, you should take CIS 110 first. We will  mainly use Java and the DrJava programming environment, but we will  also experiment with Python, a higher-level language.

CIS 121 - Programming Languages and Techniques II

(Prerequisite: CIS 120. CIS 260 is a pre or co-requisite for CIS121).

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 real-world applications. A large project introducing students to the challenges of software engineering concludes the course.

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.

CIS 140 - Introduction to Cognitive Science
(Cross listed with: Phil044, Ling105, Psych107)

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, action, thought, learning, memory and social interaction.
CIS 240 - Introduction to Computer Architecture
(Prerequisite(s): CIS 110, CIS 120, or significant programming 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 bottom-up course begins with transistors and simple computer hardware structures, continues with low-level 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).
CIS 260 - Mathematical Foundations of Computer Science I
What are the basic mathematical concepts and techniques needed in computer science? This course provides an introduction to Boolean logic, combinatorics, graph theory and probability theory as well as a rigorous grounding in writing and reading mathematical proofs.

top of page

CIS 261 - Discrete Probability, Stochastic Processes, and Statistical Inference

(Prerequisite(s): CIS 260)

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, Partial-Order Relations, Combinatorics, and Graph Theory at the level currently covered in CIS 260. This course could be taken immediately following CIS 260. 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.

CIS 262 - Automata, Computability, and Complexity
(Prerequisite(s): CIS 260)

The course provides an introduction to the theory of computation. The treatment is mathematical, but the point of view is that of Computer Science. Roughly speaking, the theory of computation consists of three overlapping subareas: (1) formal languages and automata; (2) computability and recursive function theory; (3) complexity theory. The course will focus mostly on (1) and (2). The topics covered include finite automata and regular languages, context-free languages, Turing machines, Church's Thesis, undecidability, reducibility and completeness, time complexity and NP completeness.
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, FLTK and Python.

CIS 298 - Study Abroad
CIS 320 - Introduction to Algorithms

(Prerequisites: CIS 120,121,260,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 problem-solving; advanced data structures such as universal hashing and red-black trees; advanced design and analysis techniques such as dynamic programming and amortized analysis; graph algorithms such as minimum  spanning trees and network flows; NP-completeness theory; and approximation  algorithms.

CIS 330 - Design Principles of Information Systems
(Prerequisite(s):CIS 121 and CIS 260.)

Introduction to database management systems and principles of design. The Entity-Relationship model as a modeling tool. The relational model: formal languages, the industry standard SQL, relational design theory, query optimization. Storing and querying XML data. Datalog and 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.
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 340 - Principles of Programming Languages
(Prerequisite(s): CIS 120,121,260)

This course is about the principles of programming languages. It studies programming language concepts by implementing a sequence of interpreters, compilers, and type checkers, each one introducing a new language concept. The goal of this course is threefold: By studying the concepts and abstractions of high-level programming languages, students should be able to use them more effectively. Second, by learning how the features of high-level programming languages are implemented, students should be able to program more expressively in low-level languages. Finally, by understanding the principles behind programming language design, students should be able to create, evaluate and compare programming languages.
CIS 341 - Compilers and Interpreter
(Prerequisite(s): Two semesters of programming courses, e.g., CIS 120-121, and CIS 240.)

Compilation principles and techniques for high-level languages. Topics include: lexical analysis, grammars, top-down parsing, bottom-up parsing, symbol-table management, syntax-directed translation, code generation, and optimization. The course involves a substantial programming project to develop a compiler.

top of page

CIS 350 - Software Design/Engineering
(Prerequisite(s): CIS 240.)

Large systems versus small programs. Problems of scale. Software life-cycle: design phase, implementation phase, testing, maintenance. Software re-use. Tools/Toolkits/Libraries. Programming as a group activity. Support tools, e.g., SCCS and RCS. Standards. Software readability and structure. Reading code. Style sheets. Software Testing: role in process, test cases, testers. Documentation. Embedded documentation and external documentation.
CIS 371 - Computer Organization and Design

(Prerequisite(s): CIS 240, knowledge of at least one programming language (preferably C)).

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 floating-point arithmetic, (5) datapath and control, (6) micro-programming, (7) pipelining, (8) storage hierarchy and virtual memory, (9) input/output, (10) different forms of parallelism including instruction level parallelism, data-level parallelism using both vectors and message-passing multi-processors, and thread-level parallelism using shared memory multiprocessors. Basic cache coherence and synchronization.

CIS 372 - Computer Organization and Design Lab

(Corequisite(s): CIS 371).

Laboratory for CIS 371. In this laboratory section, students gain experience with digital design techniques by designing and implementing actual ciruits using Verilog HDL and FPGAs. Five assignments culminate in the design and simulation of a complete 16-bit integer pipelined CPU.

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 sychronization; interprocess communications; concurrent/distributed programming languages; resource allocation and deadlock; virtual memory; protection and security; distributed operation; distributed data; performance evaluation.
CIS 381 - Computer Operating Systems Lab
(Corequisite(s): CIS 380)

This course is a semester long project to design and implement your own operating system. Typical components include a process management system, a commond interpreter, and a file management system.

top of page

CIS 390 - Robotics
(Prerequisite(s): Math 240, PHYS 150.)

Today's robots replace, assist, or entertain humans in many tasks. Recent examples of robots are planetary rovers, robot pets, medical surgical assistive devices, and semi-autonomous ground vehicles for search and rescue operations. The goal of this class is to introduce the students to the common kinematic and computational principles of the above examples and to provide them with hands-on experience with state of the art mobile robots and manipulators. The three main topics are coordinate system transformations and kinematics, visual sensing for localization, and computational geometry for motion planning. Laboratories involve building and programming Lego Mindstorms as well as using a manipulator and a haptic device.
CIS 391 - Introduction to Artificial Intelligence
(Prerequisite(s): CIS 121)

Artificial Intelligence is considered from the point of view of a resource--limited knowledge-based 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 Prolog and C++ or Java.
CIS 398 - Quantum Computer and Information Science

(Prerequisite(s): CIS 260, 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 CSE. No prior knowledge of quantum mechanics (QM) is assumed. (Enrollment is by permission of the instructor).

CIS 399-001:  Special Topics - Computer Vision

This is an introduction course to computer vision, modeled after a similar course at CMU called "Computational Photography". This course will explore three topics: 1) image morphing, 2) shape matching, and 3) image search. This course is intended to provide you a hands-on experience with interesting things to do on images/pixels. The world is becoming image-centric. Cameras are now found everywhere, in our cell phones, automobiles, even in medical surgery tools. Computer vision technology has lead to latest innovations in areas such as Hollywood movie production, medical diagnosis, biometrics, and digital library. This course is suited for students with all Engineering background, who has the basic knowledge of linear algebra and programming, and a lot of imagination. This course will run all semester and is 1 cu.. (This course will be renumbered to CIS 581 in Spring 09).

CIS 399-002:  Special Topics - C++ Programming

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.

CIS 399-003:  Special Topics - Linux/Unix Skills

This half-credit introductory course provides a solid background in the Unix/linux environment. Topics covered include the the Unix shell, the emacs editor, scripting, a number of important applications (e.g., revision control systems and latex), and user-level package installation. For each topic, we will discuss the basic concepts as well as how to use online resources (man and web pages) to do more advanced stuff. In addition, we will compare each Unix/linux application with the corresponding application (if one exists) on more familiar environments such as Windows or Mac OS X. The skills learned are applicable in the following classes: CIS 240, CIS 331, CIS 341, CIS 371/372, and CIS 380/381.

CIS 399-004:  Special Topics - Python Programming

Python is an interpreted, object-oriented, extensible programming language. It combines remarkable power with a clear syntax and has become one of the most popular scripting languages in use today. This course will provide an introduction to this remarkable language and will revolve around programming assignments that are designed to give students a command of the language and an exposure to the wide range of modules and libraries that are currently available. This course assumes programming experience equivalent to CIS 110, CIS 120 or ESE 112 as a prerequisite.

CIS 399-005: Special Topics - C# Programming
Prerequisite: object-oriented programming in Java, equivalent to having earned a B+ or better in CIS 110, CIS 120 or ESE 112 (or permission of   instructor).

The C# language is a strongly typed, object oriented, garbage-collected language which is designed to expose the full power of the .NET programming platform. The course will provide a thorough introduction to the features of this language and is intended for students who have had some prior exposure to object-oriented Java programming. It will revolve around programming assignments which are designed to provide students with the experience they need to program effectively in this language.  Students are expected to work about 10 hours per week including classtime, with projects due every 1-2 weeks.
CIS 399-006: Special Topics - User Interfaces and the Web

(Prerequisite(s): CIS 110, CIS 120, CIS 121, CIS 277

This course will teach the fundamentals of Human-Computer 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 user-interfaces and functionality in the context of today's most intriguing web trend, social networking.

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.

top of page

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.
CIS 410 - Intro to Geometric Methods in Computer Science

(Prerequisite(s): 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 430 - Intro to Human Language Technology***

Prerequisites: 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 language-related tasks.
CIS 434 - Intro to Parallel and Distributed Programming

Prerequisite(s):  Software design experience and programming proficiency in C/C++ or Java is required.  Students will undertake a real software design project and be expected to deliver a working product.

This course is a pragmatic introduction to parallel and distributed programming. It prepares students for developing and optimizing the performance of parallel programs. Topics include widely used programming paradigms such as multi-threading, message passing and remote procedure call.  In addition, the course covers enough information on synchronization, resource management and security so that students can analyze the correctness of  their program and optimize their performance.

CIS 455 - Internet and Web Systems
(Prerequisites: Knowledge of Java programming; CIS 330 & CIS 380 recommended.)

This course focuses on Internet and Web technologies and the underlying principles of distributed systems, information retrieval, and data management. The material covered will include web and applications server architectures, XML and semistructured data, schema mediation, document indexing and retrieval, peer-to-peer systems, distributed transactions and remote procedure calls. The course has a substantial group implementation project.
CIS 460 - 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, anti-aliasing and compositing.

CIS 461 - Computer Modeling & Animation Applications

Prerequisite(s): CIS 120-121 or equivalent experience and concurrent or past enrollment in CIS 460 or CIS 560.

This project-based course is designed to provide a comprehensive introduction to the application of computer graphics in a laboratory setting. Course materials and labs will facilitate understanding issues and trends in 3D computer graphics. Students will develop a facility with fundamental 3-D models and modeling software through a series of projects. The course will offer students a technical understanding of Polygonal and Spline based modeling, alternative and standard methods of 3-D model import and export, and model conversion. It will also cover procedural and scripting methods, techniques, and conventions for creating models and shaders that will function properly for rendering and animation. Practical application of topics covered in CIS 460/CIS 560 include: geometric transformations, hierarchies, articulation, modeling, blend shapes, vertex weighting, and animation. Experiments with various animation methods include: dynamics, forward and inverse kinematics, surface deformations, keyframe interpolation, motion capture, procedural animation, and facial animation. The course will be laboratory based and will use industry standard software.

CIS 462 - 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 mass-spring-damper 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 high-end 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; behavior-based animation and control; facial animation; smart characters and intelligent agents.

CIS 477 - Mathematical Methods/Techniques for Linguistics and Natural Language Processing
(Prerequisite(s): Phil 006 or instructor's permission. Cross listed 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, context-free and context-sensitive grammars, midly context-sensitive grammars, unrestricted grammars, finite automata, pushdown automata and other related automata, Turing machines. Syntax and semantics of grammar formalisms. Strong generative capacity of grammars, Grammers 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 manner--ideas of proofs and not detailed proofs, and more importantly with plenty of linguistic examples to bring out the linguistic relevance of these topics.
CIS 482 - Logic In Computer Science

(Pre-requisite(s): CIS 260.)

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 soundnessand completeness for both propositional and first-order 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.

top of page


CIS Home divider Penn Engineering divider PENN   spacer