University of PennsylvaniaWebsiteAcademic Catalog
Computer and Information ScienceDepartment Website
Majors
Courses
source 1source 2source 3source 4source 5source 6source 7source 8CIS 1100: Introduction to Computer Programming (1) intro
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, 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.
CIS 1200: Programming Languages and Techniques I (1) intro
A fast-paced 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 CIS 1100. (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 1100 first.
CIS 1210: Programming Languages and Techniques II (1) intro
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.
CIS 1250: Technology and Policy (1) impact
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 1250 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 1400: Introduction to Cognitive Science (1)
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. The course shows how the different views from the parent disciplines interact and identifies some common themes among the theories that have been proposed. The course pays particular attention to the distinctive role of computation in such theories and provides an introduction to some of the main directions of current research in the field. It is a requirement for the BA in Cognitive Science, the BAS in Computer and Cognitive Science, and the minor in Cognitive Science, and it is recommended for students taking the dual degree in Computer and Cognitive Science.
CIS 1600: Mathematical Foundations of Computer Science (1)
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.
CIS 1810: The Quantum and the Computer (1) science
This Freshman Seminar is designed to be a very introductory exposition about Quantum Computation and Quantum Information Science. There are no formal physics, mathematics, or computer science prerequisites. It is meant primarily for freshmen in SAS and Wharton, who have an itch to learn about a beautiful subject that intrinsically unites quantum physics, computation, and information science. The structure of the course will be lecture-based using small-team based exercises for evaluation. The enrollment will be limited to 20 students. Freshmen standing.
CIS 1901: C++ Programming (00.5)
This course will provide an introduction to programming in C++ and is intended for students who are already experienced with programming in C and in object-oriented languages such as Java. C++ provides programmers with a greater level of control over machine resources and is commonly used in situations where low level access or performance are important. This course will cover the features and abstractions that C++ provides to write code that is both safe and performant. This course recommends students to have completed CIS 1200 and CIS 2400.
CIS 1902: Python Programming (00.5)
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 high-level language using hands-on experience through programming assignments and a collaborative final application development project.
CIS 1903: Go Programming (00.5)
Go is an open source programming language created by Google designed for speed, efficiency and infrastructure. While Go is particularly proficient at concurrent systems programming, it has a variety of uses and has been gaining popularity in a variety of fields, including graphics, mobile applications and machine learning. Go is simple, fast and is continuing to rapidly grow in industry. In this course, we will cover what makes Go so unique and apply it to practical, real world situations. Topics covered will include concurrency and parallelism, goroutines and channels, web scraping, and other popular industry Go applications.
CIS 1904: Introduction to Haskell Programming (00.5)
Haskell is a high-level, 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. Evaluation will be based on regular homework assignments and class participation.
CIS 1905: Rust Programming (00.5)
Rust is a new, practical, community-developed systems programming language that 'runs blazingly fast, prevents almost all crashes, and eliminates data ra (rust-lang.org). Rust derives from a rich history of languages to create a multi-paradigm (imperative/functional), low-level language that focuses on high-performance, zero-cost safety guarantee in concurrent programs. It has begun to gain traction in industry, showing a recognized need for a new low-level systems language. In this course, we will cover what makes Rust so unique and apply it to practical systems programming problems. Topics covered will include traits and generics; memory safety (move semantics, borrowing, and lifetimes); Rust's rich macro system; closures; and concurrency. Evaluation is based on regular homework assignments as well as a final project and class participation.
CIS 1911: Using and Understanding Unix and Linux (00.5)
Unix, in its many forms, runs much of the world's computer infrastructure, from cable modems and cell phones to the giant clusters that power Google and Amazon. This half-credit 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 2400, CIS 3310, CIS 3410, CIS 3710, and CIS 3800.
CIS 1912: DevOps (00.5)
DevOps is the breaking down of the wall between Developers and Operations to allow more frequent and reliable feature deployments. Through a variety of automation-focused techniques, DevOps has the power to radically improve and streamline processes that in the past were manual and susceptible to human error. In this course we will take a practical, hands-on look at DevOps and dive into some of the main tools of DevOps: automated testing, containerization, reproducibility, continuous integration, and continuous deployment. Throughout the semester we build toward an end-to-end pipeline that takes a webserver, packages it, and then deploys it to the cloud in a reliable and quickly-reproducible manner utilizing industry-leading technologies like Kubernetes and Docker. Evaluation is based on homework assignments and a final group project.
CIS 1921: Solving Hard Problems in Practice (00.5)
What does Sudoku have in common with debugging, scheduling exams, and routing shipments? All of these problems are provably hard -- no one has a fast algorithm to solve them. But in reality, people are quickly solving these problems on a huge scale with clever systems and heuristics! In this course, we'll explore how researchers and organizations like Microsoft, Google, and NASA are solving these hard problems, and we'll get to use some of the tools they've built!
CIS 1951: iOS Programming (00.5)
This project-oriented course is centered around application development on current iOS mobile platforms. The first half of the course will involve fundamentals of mobile app development, where students learn about mobile app lifecycles, event-based programming, efficient resource management, and how to interact with the range of sensors available on modern mobile devices. In the second half of the course, students work in teams to conceptualize and develop a significant mobile application. Creativity and originality are highly encouraged!
CIS 1952: Android Programming (00.5)
This project-oriented course is centered around application development on current Android mobile platforms. The first half of the course will involve fundamentals of mobile app development, where students learn about mobile app lifecycles, event-based programming, efficient resource management, and how to interact with the range of sensors available on modern mobile devices. In the second half of the course, students work in teams to conceptualize and develop a significant mobile application. Creativity and originality are highly encouraged!
CIS 1961: Ruby on Rails Web Development (00.5)
This course will teach the fundamentals of developing web applications using Ruby on Rails, a rapid-development web framework developed by Basecamp, and adopted by companies like Airbnb, GitHub, Bloomberg, CrunchBase, and Shopify. The first part of the course will focus on Ruby, the language that powers Rails. Along the way, students will also pick up essential skills such as git, bash, HTML and CSS. The second part will focus on Rails, the web framework and will include all topics required to develop and deploy production-ready modern web applications with Rails. Throughout the course, students will be working on a web application project of their own choosing. Upon completion of the course, this application will be deployed and made accessible to the public.
CIS 1962: JavaScript Programming (00.5)
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, client-side app architecture and compile-to-JS 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.
CIS 1990: Special Topics (00.5) special
This course will be used for 'pilot versions' of new CIS courses of this type that the department is planning to offer. A given course will be offered as CIS 1990 at most twice; after this, it will be assigned a permanent course number.
CIS 2330: Introduction to Blockchain (00.5)
Blockchain or Distributed Ledger Technology (DLT) provides a decentralized method of information sharing between parties that do not trust each other. Instead the trust is in the underlying cryptographic algorithms. This practical introductory course provides experience with the fundamentals of cryptography (codes and ciphers, symmetric and asymmetric encryption, public and private keys, hashes, and zero knowledge proofs) - as it is applied to implementing a blockchain solution. This course covers the basics of a distributed ledger, how it is built, used, and secured. Methods of ensuring consensus - from proof-of-work to proof-of-stake will be explored and analyzed. Students will have both written and practical assignments to build and deploy components of a blockchain solution.
CIS 2400: Introduction to Computer Systems (1) sys
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 Computer Organization and Design (CIS 4710), Computer Operating Systems (CIS 3800), and Compilers and Interpreters (CIS 3410).
CIS 2450: Big Data Analytics (1) ai
In the new era of big data, we are increasingly faced with the challenges of processing vast volumes of data. Given the limits of individual machines (compute power, memory, bandwidth), increasingly the solution is to process the data in parallel on many machines. This course focuses on the fundamentals of scaling computation to handle common data analytics tasks. You will learn about basic tasks in collecting, wrangling, and structuring data; programming models for performing certain kinds of computation in a scalable way across many compute nodes; common approaches to converting algorithms to such programming models; standard toolkits for data analysis consisting of a wide variety of primitives; and popular distributed frameworks for analytics tasks such as filtering, graph analysis, clustering, and classification.
CIS 2610: Discrete Probability, Stochastic Processes, and Statistical Inference (1) math
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 1600. This course could be taken immediately following CIS 1600. 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 2620: Automata, Computability, and Complexity (1) theory
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, context-free grammars and pushdown automata, Turing machines and undecidability, tractability and NP-completeness. The course emphasizes rigorous mathematical reasoning as well as connections to practical computing problems such as test processing, parsing, XML query languages, and program verification.
CIS 3200: Introduction to Algorithms (1) algs
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 to 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 3333: Mathematics of Machine Learning (1) math
Machine learning is the study of algorithms (e.g. gradient descent) that learn functions (e.g. deep networks) from experience (e.g. data). Behind this simple statement is a lot of mathematical scaffolding: statistics for handling data, optimization for understanding learning algorithms, and linear algebra to create expressive models. This course provides the background to be able to understand mathematical concepts commonly used in machine learning. Topics include continuous probability, parametric distributions, and concentration inequalities from statistics; inner product spaces, functional analysis and Hilbert spaces from linear algebra; and multivariate calculus, Taylor’s theorem, and convexity from optimization.
CIS 3340: Advanced Topics in Algorithms (1) algs
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 desgin. 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 3410: Compilers and Interpreters (1) pls
You know how to program, but do you know how to implement a programming language? In CIS 3410 you'll learn how to build a compiler. Topics covered include: lexical analysis, grammars and parsing, intermediate representations, syntax-directed translation, code generation, type checking, simple dataflow and control-flow analyses, and optimizations. Along the way, we study objects and inheritance, first-class functions (closures), data representation and runtime-support issues such as garbage collection. This is a challenging, implementation-oriented course in which students build a full compiler from a simple, typed object-oriented language to fully operational x86 assembly. The course projects are implemented using OCaml, but no knowledge of OCaml is assumed.
CIS 3500: Software Design/Engineering (1) softeng
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 test-driven development; source control and continuous integration; requirements analysis; object-oriented design and testability; mobile and/or web application development; software testing; refactoring ; and software quality metrics.
CIS 3900: Robotics: Planning Perception (1) ai
This introductory course will present basic principles of robotics with an emphasis to computer science aspects. Algorithms for planning and perception will be studied and implemented on actual robots. While planning is a fundamental problem in artificial intelligence and decision making, robot planning refers to finding a path from A to B in the presence of obstacles and by complying with the kinematic constraints of the robot. Perception involves the estimation of the robots motion and path as well as the shape of the environment from sensors. In this course, algorithms will be implemented in Python on mobile platforms on ground and in the air. No prior experience with Python is needed but we require knowledge of data structures, linear algebra, and basic probability.
CIS 3980: Quantum Computer and Information Science (1) science
The purpose of this course is to introduce undergraduate students in computer computer science and engineering to quantum computers (QC) and quantum information science (QIS). This course is meant primarly for juniors and seniors in Computer Science. No prior knowledge of quantum mechanics (QM) is assumed. Enrollment is by permission of the instructor.
CIS 3990: Special Topics (0.51) special
Visit the CIS department website for descriptions of available Special Topics classes.
CIS 4000: Senior Project (0.51) capstone
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.
CIS 4010: Senior Project (1) capstone
Continuation of CIS 4000. 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 Adviser and the Course Instructor.
CIS 4100: CIS Senior Thesis (1) capstone
The goal of a Senior Thesis project is to complete a major research project under the supervision of a faculty member. The duration of the project is two semesters. To enroll in CIS 4100, students must develop an abstract of the proposed work, and a member of the CIS graduate group must certify that the work is suitable and agree to supervise the project; a second member must agree to serve as a reader. At the end of the first semester, students must submit an intermediate report; if the supervisor and reader accept it, they can enroll in CIS 4110. At the end of the second semester, students must describe their results in a written thesis and must present them publicly, either in a talk at Penn or in a presentation at a conference or workshop. Grades are based on the quality of the research itself (which should ideally be published or at least of publishable quality), as well as on the quality of the thesis and the oral presentation. The latter are evaluated jointly by the supervisor and the reader. The Senior Thesis program is selective, and students are generally expected to have a GPA is in the top 10-20% to qualify.
CIS 4110: CIS Senior Thesis (1) capstone
The goal of a Senior Thesis project is to complete a major research project under the supervision of a faculty member. The duration of the project is two semesters. To enroll in CIS 4100, students must develop an abstract of the proposed work, and a member of the CIS graduate group must certify that the work is suitable and agree to supervise the project; a second member must agree to serve as a reader. At the end of the first semester, students must submit an intermediate report; if the supervisor and reader accept it, they can enroll in CIS 4110. At the end of the second semester, students must describe their results in a written thesis and must present them publicly, either in a talk at Penn or in a presentation at a conference or workshop. Grades are based on the quality of the research itself (which should ideally be published or at least of publishable quality), as well as on the quality of the thesis and the oral presentation. The latter are evaluated jointly by the supervisor and the reader. The Senior Thesis program is selective, and students are generally expected to have a GPA is in the top 10-20% to qualify.
CIS 4120: Introduction to Human Computer Interaction (1) humans
In this course, you will learn the essentials of human-computer interaction (HCI). Over the course of a semester, you will learn how to design interactive systems that satisfy and delight users by undertaking the human-centered design process, from ideation to prototyping, implementation, and assessment with human users. You will learn key tools in the HCI toolkit, including need-finding, user studies, visual design, cognitive models, demo'ing, ethical considerations, and writing about your designs. This course also provides a primer on several areas of emerging technology in HCI, such as human-AI interaction and education technology. We will also cover ethics in HCI, including topics like inclusive design and dark patterns. To hone your craft as an HCI practitioner, during this course you will undertake a group project to design an innovative user interface. The final submission will include a working interactive prototype, demonstrations of the interface at a public departmental design showcase, and a written reflection on your design findings.
CIS 4190: Applied Machine Learning (1) ai
Machine learning has been essential to the success of many recent technologies, including autonomous vehicles, search engines, genomics, automated medical diagnosis, image recognition, and social network analysis, among many others. This course will introduce the fundamental concepts and algorithms that enable computers to learn from experience, with an emphasis on their practical application to real problems. This course will introduce supervised learning (decision trees, logistic regression, support vector machines, Bayesian methods, neural networks and deep learning), unsupervised learning (clustering, dimensionality reduction), and reinforcement learning. Additionally, the course will discuss evaluation methodology and recent applications of machine learning, including large scale learning for big data and network analysis.
CIS 4210: Artificial Intelligence (1) ai
This course investigates algorithms to implement resource-limited knowledge-based agents which sense and act in the world. Topics include, search, machine learning, probabilistic reasoning, natural language processing, knowledge representation and logic. After a brief introduction to the language, programming assignments will be in Python.
CIS 4230: Ethical Algorithm Design (1) impact
This class introduces aspiring data science technologists to the spectrum of ethical concerns, focusing on social norms like fairness, transparency and privacy. It introduces technical approaches to a number of these problems, including by hands-on examination of the tradeoffs in fairness and accuracy in predictive technology, introduction to differential privacy, and overview of evaluation conventions for predictive technology. It also provides guidelines for examining system training data for bias, representation (of race, gender and other characteristics) and ecological validity. Equipped with this knowledge, students will learn how to conduct informed analysis of the usefulness of predictive systems; they will audit for ethical concerns papers from the contemporary top artificial intelligence venues and the ongoing senior design projects.
CIS 4300: Natural Language Processing (1) ai
This course provides an overview of the field of natural language processing. The goal of the field is to build technologies that will allow machines to understand human languages. Applications include machine translation, automatic summarization, question answering systems, and dialog systems. NLP is used in technologies like Amazon Alexa and Google Translate.
CIS 4360: Introduction to Computational Biology & Biological Modeling (1) science
The goal of this course is to develop a deeper understanding of techniques and concepts used in Computational Biology. Both theoretical and practical aspects of a range of methods will be covered. Theoretical aspects will include statistical analysis, modeling, and algorithm design. This course cannot provide a comprehensive survey of the field but focuses on a select core set of topics and data types. We will discuss the genome browser, alignment algorithms, classical and non-parametric statistics, pathway analysis, dimensionality reduction, GWAS, multiple testing and machine learning, with primary focus on biomedical data. UNIX, R and Python will be utilized to learn to execute big data analysis pipelines, including RNA-Seq and DNA-Seq. UNIX and R will be taught from first principles but programming experience in Python is expected. Students without prior experience with Python should consider taking PHYS 1100 before taking this class. You will be provided with a computational (cloud based) platform on which to do all programming and assignments.
CIS 4410: Embedded Software for Life-Critical Applications (1) sys
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. Students will learn the principles, methods, and techniques for building life-critical embedded systems, ranging from requirements and models to design, analysis, optimization, implementation, and validation. Topics will include modeling and analysis methods and tools, real-time programming paradigms and languages, distributed real-time systems, global time, time-triggered communications, assurance case, software architecture, evidence-based certification, testing, verification, and validation. The course will include a series of projects that implements life-critical embedded systems (e.g., pacemaker, infusion pumps, closed-loop medical devices).
CIS 4480: Operating Systems Design and Implementation (1) sys
The purpose of this course is to teach the design and implementation of operating systems and operating systems concepts that appear in other advanced systems. The course divides into three major sections. The first part of the course discusses concurrency: how to manage multiple tasks that execute at the same time and share resources. Topics in this section include processes and threads, context switching, synchronization, scheduling, and deadlock. The second part of the course addresses the problem of memory management; it will cover topics such as linking, dynamic memory allocation, dynamic address translation, virtual memory, and demand paging. The third major part of the course concerns file systems, including topics such as storage devices, disk management and scheduling, directories, protection, and crash recovery. After these three major topics, the class will conclude with specialized topics such as virtual machines and case studies of different operating systems (e.g. Android, Windows, Linux, etc.).
CIS 4500: Database and Information Systems (1) sys
This course provides an introduction to the broad field of database and information systems, covering a variety of topics relating to structured data, ranging from data modeling to logical foundations and popular languages, to system implementations. We will study the theory of relational and XML data design; the basics of query languages; efficient storage of data, execution of queries and query optimization; transactions and updates; web-database development; and 'big data' and NoSQL systems. The course assumes mathematical and programming experience equivalent to CIS 1600 and CIS 1210.
CIS 4510: Computer and Network Security (1) sys
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 4550: Internet and Web Systems (1) sys
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 cross-platform interoperability (and what their limitations are); how to build high-performance application servers; how 'cloud computing' services work; how to perform Akamai-like 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 hands-on experience with a substantial implementation project. This semester's project will be a peer-to-peer implementation of a Googe-style search engine, including distributed, scalable crawling; indexing with ranking; and even PageRank. As a side-effect of the material of this course you will learn about some aspects of large-scale software development assimilating large APIs.
CIS 4600: Interactive Computer Graphics (1) graphics
This course focuses on programming the essential mathematical and geometric concepts underlying modern computer graphics. Using 3D interactive implementations, it covers fundamental topics such as mesh data structures, transformation sequences, rendering algorithms, and curve interpolation for animation. Students are also introduced to two programming languages widely used in the computer graphics industry: C++ and GLSL. The curriculum is heavily project-based, and culminates in a group project focused on building an interactive first-person world exploration application using the various real-time interaction and rendering algorithms learned throughout the semester.
CIS 4610: Advanced Rendering (1) graphics
This course is designed to provide a comprehensive overview to computer graphics techniques in 3D modeling, image synthesis, and rendering. Topics cover: geometric transformations, geometric algorithms, software systems, 3D object models (surface, volume and implicit), visible surface algorithms, image synthesis, shading, mapping, ray tracing, radiosity, global illumination, sampling, anti- aliasing, Monte Carlo path tracing, and photon mapping.
CIS 4620: Computer Animation (1) graphics
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 game virtual reality simulations and high-end animation applications.
CIS 4670: Scientific Computing (1) math
This course will focus on numerical algorithms and scientific computing techniques that are practical and efficient for a number of canonical science and engineering applications. Built on top of classical theories in multi-variable calculus and linear algebra (as a prerequisite), the lectures in this course will strongly focus on explaining numerical methods for applying these mathematical theories to practical engineering problems.
CIS 4710: Computer Organization and Design (1) sys
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 arithmatic, (5) datapath and control, (6) micro-programming, (7) pipeling, (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 4810: Computer Vision & Computational Photography (1) ai
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 hands-on experience with interesting things to do on images/videos. 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 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 4970: DMD Senior Project (1) capstone
The goal of this course is to provide an opportunity for seniors to define, desand execute a project of your own choosing that demonstrates the technical skiland 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 i writing and in presentations, accurately estimating what resources will be reqto complete your chosen task, coding necessary functionality, and executing your plan. Senior Standing or Permission of the instructor.
CIS 4980: Senior Capstone Project (1) capstone
The Senior Capstone Project is required for all BAS degree students, in lieu of the senior design course. The Capstone Project provides an opportunity for the student to apply the theoretical ideas and tools learned from other courses. The project is usually applied, rather than theoretical, exercise, and should focus on a real-world problem related to the career goals of the student. The one-semester project may be completed in either the fall or spring term of the senior year, and must be done under the supervision of a sponsoring faculty member. To register for this course, the student must submit a detailed proposal, signed by the supervising professor and the student's faculty advisor, two weeks prior to the start of the term.
CIS 5000: Software Foundations (1) pls
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 upper-level undergraduate CIS elective. Undergraduates who have satisfied the prerequisites are welcome to enroll. There are no formal prerequisites, but students should know how to program at the level of a couple of undergrad courses and have developed some 'mathematical maturity' (through two or more undergraduate math courses, including at least one involving rigorous proofs); a course in functional programming or compilers may also be helpful.
CIS 5010: Computer Architecture (1) sys
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, out-of-order, 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. Knowledge of computer organization and basic programming skills.
CIS 5020: Analysis of Algorithms (1) algs
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 5050: Software Systems (1) sys
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 upper-level undergraduate CIS elective.
CIS 5110: Theory of Computation (1) theory
Review of regular and context-free 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 co-NL. Reductions revisited, Cook-Levin Theorem, completeness, NL = co-NL. Advanced topics as time permits: Circuit complexity and parallel computation, randomized complexity, approximability, interaction and cryptography.
CIS 5120: Introduction to Human Computer Interaction (1) humans
In this course, you will learn the essentials of human-computer interaction (HCI). Over the course of a semester, you will learn how to design interactive systems that satisfy and delight users by undertaking the human-centered design process, from ideation to prototyping, implementation, and assessment with human users. You will learn key tools in the HCI toolkit, including need-finding, user studies, visual design, cognitive models, demo'ing, ethical considerations, and writing about your designs. This course also provides a primer on several areas of emerging technology in HCI, such as human-AI interaction and education technology. To hone your craft as an HCI practitioner, during this course you will undertake a group project to design an innovative user interface. The final submission will include a working interactive prototype, demonstrations of the interface at a public departmental design showcase, and a written reflection on your design findings.
CIS 5150: Fundamentals of Linear Algebra and Optimization (1) math
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 5180: Topics in Logic: Finite Model Theory and Descriptive Complexity (1) theory
This 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 first-order logic in the context of finite structures, in particular, the Ehrenfeucht-Fraisse Theorem and the Trahktenbrot Theorem. The first of these results is used to show limitations on the expressive power of first-order logic over finite structures while the second result demonstrates that the problem of reasoning about finite structures using first-order logic is surprisingly complex. The course then proceeds to consider various extensions of first-order logic including fixed-point operators, generalized quantifiers, infinitary languages, and higher-order 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 5190: Applied Machine Learning (1) ai
Machine learning has been essential to the success of many recent technologies, including autonomous vehicles, search engines, genomics, automated medical diagnosis, image recognition, and social network analysis, among many others. This course will introduce the fundamental concepts and algorithms that enable computers to learn from experience, with an emphasis on their practical application to real problems. This course will introduce supervised learning (decision trees, logistic regression, support vector machines, Bayesian methods, neural networks and deep learning), unsupervised learning (clustering, dimensionality reduction), and reinforcement learning. Additionally, the course will discuss evaluation methodology and recent applications of machine learning, including large scale learning for big data and network analysis.
CIS 5200: Machine Learning (1) ai
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 linear and logistic regression, SVMs, PCA and dimensionality reduction, EM and HMMs, and deep learning. Elementary probability, calculus, and linear algebra. Basic programming experience.
CIS 5210: Artificial Intelligence (1) ai
This course investigates algorithms to implement resource-limited knowledge-based agents which sense and act in the world. Topics include, search, machine learning, probabilistic reasoning, natural language processing, knowledge representation and logic. After a brief introduction to the language, programming assignments will be in Python.
CIS 5220: Deep Learning for Data Science (1) ai
Deep learning techniques now touch on data systems of all varieties. Sometimes, deep learning is a product; sometimes, deep learning optimizes a pipeline; sometimes, deep learning provides critical insights; sometimes, deep learning sheds light on neuroscience or vice versa. The purpose of this course is to deconstruct the hype by teaching deep learning theories, models, skills, and applications that are useful for applications.
CIS 5230: Ethical Algorithm Design (1) impact
This class introduces aspiring data science technologists to the spectrum of ethical concerns, focusing on social norms like fairness, transparency and privacy. It introduces technical approaches to a number of these problems, including by hands-on examination of the tradeoffs in fairness and accuracy in predictive technology, introduction to differential privacy, and overview of evaluation conventions for predictive technology. It also provides guidelines for examining system training data for bias, representation (of race, gender and other characteristics) and ecological validity. Equipped with this knowledge, students will learn how to conduct informed analysis of the usefulness of predictive systems; they will audit for ethical concerns papers from the contemporary top artificial intelligence venues and the ongoing senior design projects.
CIS 5260: Machine Translation (1) ai
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 5300: Natural Language Processing (1) ai
This course provides an overview of the field of natural language processing. The goal of the field is to build technologies that will allow machines to understand human languages. Applications include machine translation, automatic summarization, question answering systems, and dialog systems. NLP is used in technologies like Amazon Alexa and Google Translate. We highly recommend experience in machine learning to be successful in this course, along with a background in data structures and algorithms.
CIS 5350: Introduction to Bioinformatics (1) science
This course provides overview of bioinformatics and computational biology as applied to biomedical research. A primary objective of the course is to enable students to integrate modern bioinformatics tools into their research activities. Course material is aimed to address biological questions using computational approaches and the analysis of data. A basic primer in programming and operating in a UNIX environment will be presented, and students will also be introduced to Python R, and tools for reproducible research. This course emphasizes direct, hands-on experience with applications to current biological research problems. Areas include DNA sequence alignment, genetic variation and analysis, motif discovery, study design for high-throughput sequencing RNA, and gene expression, single gene and whole-genome analysis, machine learning, and topics in systems biology. The relevant principles underlying methods used for analysis in these areas will be introduced and discussed at a level appropriate for biologists without a background in computer science.
CIS 5360: Fundamentals of Computational Biology (1) science
Introductory computational biology course designed for both biology students and computer science, engineering students. The course will cover fundamentals of algorithms, statistics, and mathematics as applied to biological problems. In particular, emphasis will be given to biological problem modeling and understanding the algorithms and mathematical procedures at the 'pencil and paper' level. That is, practical implementation of the algorithms is not taught but principles of the algorithms are covered using small sized examples. Topics to be covered are: genome annotation and string algorithms, pattern search and statistical learning, molecular evolution and phylogenetics, functional genomics and systems level analysis.
CIS 5370: Biomedical Image Analysis (1) science
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 high-dimensional statistical analysis). Significant coverage of state-of-the-art biomedical research and clinical applications will be incorporated to reinforce the theoretical basis of the analysis methods.
CIS 5400: Principles of Embedded Computation (1) sys
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 upper-level undergraduate CIS elective.
CIS 5410: Embedded Software for Life-Critical Applications (1) sys
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. Students will learn the principles, methods, and techniques for building life-critical embedded systems, ranging from requirements and models to design, analysis, optimization, implementation, and validation. Topics will include modeling and analysis methods and tools, real-time programming paradigms and languages, distributed real-time systems, global time, time-triggered communications, assurance case, software architecture, evidence-based certification, testing, verification, and validation.
CIS 5420: Embedded Systems Programming (1) sys
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. C fluency.
CIS 5450: Big Data Analytics (1) ai
In the new era of big data, we are increasingly faced with the challenges of processing vast volumes of data. Given the limits of individual machines (compute power, memory, bandwidth), increasingly the solution is to process the data in parallel on many machines. This course focuses on the fundamentals of scaling computation to handle common data analytics tasks. You will learn about basic tasks in collecting, wrangling, and structuring data; programming models for performing certain kinds of computation in a scalable way across many compute nodes; common approaches to converting algorithms to such programming models; standard toolkits for data analysis consisting of a wide variety of primitives; and popular distributed frameworks for analytics tasks such as filtering, graph analysis, clustering, and classification.
CIS 5470: Software Analysis (1) softeng
This course covers the theory and practice of software analysis - a body of algorithms and techniques to reason about program behavior with applications to effectively test, debug, and secure large, complex codebases. The course surveys a wide range of applications of software analysis including proving the absence of common programming errors, discovering and preventing security vulnerabilities, systematically testing intricate data structures and libraries, and localizing root causes in complex software failures.
CIS 5480: Operating Systems Design and Implementation (1) sys
The purpose of this masters-level course is to teach the design and implementation of operating systems and operating systems concepts that appear in other advanced systems. The course divides into three major sections. The first part of the course discusses concurrency: how to manage multiple tasks that execute at the same time and share resources. Topics in this section include processes and threads, context switching, synchronization, scheduling, and deadlock. The second part of the course addresses the problem of memory management; it will cover topics such as linking, dynamic memory allocation, dynamic address translation, virtual memory, and demand paging. The third major part of the course concerns file systems, including topics such as storage devices, disk management and scheduling, directories, protection, and crash recovery. After these three major topics, the class will conclude with specialized topics such as virtual machines and case studies of different operating systems (e.g. Android, Windows, Linux, etc.).
CIS 5490: Wireless Communications for Mobile Networks and Internet of Things (1) sys
This course covers generations of wireless mobile network standards and systems, basic differences and their evolution, charting the development of mobile telecommunications systems from 3G, to today's state-of-the-art wireless technology 4G LTE, and the next generation wireless technology, 5G.
CIS 5500: Database and Information Systems (1) sys
This course provides an introduction to the broad field of database and information systems, covering a variety of topics relating to structured data, ranging from data modeling to logical foundations and popular languages, to system implementations. We will study the theory of relational and XML data design; the basics of query languages; efficient storage of data, execution of queries and query optimization; transactions and updates; web-database development; and 'big data' and NoSQL systems.
CIS 5510: Computer and Network Security (1) sys
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.
CIS 5520: Advanced Programming (1) softeng
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 5530: Networked Systems (1) sys
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 peer-to-peer 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 peer-to-peer networks. Preparation for this course would include taking CIS 1210 or equivalent knowledge.
CIS 5540: Programming Paradigms (1) pls
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 object-oriented. 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, rule-based programming, and others.
CIS 5550: Internet and Web Systems (1) sys
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 cross-platform interoperability (and what their limitations are); how to build high-performance application servers; how 'cloud computing' services work; how to perform Akamai-like content distribution; and how to provide transaction support in distributed environments.
CIS 5560: Cryptography (1) math
This course is an introduction to cryptography, both theory and applications, intended for advanced undergraduates and graduate students. Topics covered include symmetric cryptography, message authentication, public-key cryptography, digital signatures, cryptanalysis, cryptographic security, and secure channels, as well as a selection of more advanced topics such as zero-knowledge proofs, secure multiparty computation, privacy-enhancing technologies, or lattice-based cryptography.
CIS 5570: Programming for the Web (1) sys
This course will focus on web programming. The first half will focus on the basics of the internet and the Web, HTML and CSS, and basic and advanced Ruby. The second half will focus on Rails. Teams (of size 2-3) will build a web application in the second half of the semester as the class project. Through Rails, we'll ex;ore the 'culture' of web programming such as agile methodology, testing, key aspects of software engineering, using web services and APIs, and deploying to the cloud.
CIS 5590: Programming and Problem Solving (1) special
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 open-ended 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 5600: Interactive Computer Graphics (1) graphics
This course focuses on programming the essential mathematical and geometric concepts underlying modern computer graphics. Using 3D interactive implementations, it covers fundamental topics such as mesh data structures, transformation sequences, rendering algorithms, and curve interpolation for animation. Students are also introduced to two programming languages widely used in the computer graphics industry: C++ and GLSL. The curriculum is heavily project-based, and culminates in a group project focused on building an interactive first-person world exploration application using the various real-time interaction and rendering algorithms learned throughout the semester.
CIS 5610: Advanced Computer Graphics (1) graphics
This course is designed to provide a comprehensive overview to computer graphics techniques in 3D modeling, image synthesis, and rendering. Topics cover: geometric transformations, geometric algorithms, software systems, 3D object models (surface, volume and implicit), visible surface algorithms, image synthesis, shading, mapping, ray tracing, radiosity, global illumination, sampling, anti- aliasing, Monte Carlo path tracing, and photon mapping.
CIS 5620: Computer Animation (1) graphics
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.
CIS 5630: Physically Based Animation (1) graphics
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.
CIS 5640: Game Design and Development (1) graphics
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 5650: GPU Programming and Architecture (1) sys
This course examines the architecture and capabilities of modern GPUs. The graphics processing unit (GPU) is orders of magnitude faster for computation than traditional CPU, and with the power of general purpose programming, GPUs can be used for a diverse set of applications far removed from their traditional graphics usage. In this course, students will learn to program and optimize GPUs for computationally intensive algorithms. Topics covered include architectural aspects of modern GPUs, with a special focus on massively parallel programming, writing programs using CUDA, 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 C/C++. This course is appropriate as an upper-level undergraduate CIS elective.
CIS 5660: Procedural Computer Graphics (1) graphics
Sprawling cities, dense vegetation, infinite worlds - procedural graphics empower technical artists to quickly create complex digital assets that would otherwise be unfeasible. This course is intended to introduce the mathematical and algorithmic foundations of procedural modeling and animation techniques, and to offer hands-on experience designing and implementing visual recipes in original graphics projects by applying these methods. Students should have a strong interest in both the creative and technical aspects of computer graphics, as well as a solid programming background.
CIS 5670: Scientific Computing (1) math
This course will focus on numerical algorithms and scientific computing techniques that are practical and efficient for a number of canonical science and engineering applications. Built on top of classical theories in multi-variable calculus and linear algebra (as a prerequisite), the lectures in this course will strongly focus on explaining numerical methods for applying these mathematical theories to practical engineering problems. Students will be expected to implement solutions and software tools using MATLAB/C++, practice state-of-the-art parallel computing paradigms, and learn scientific visualization techniques using modern software packages.
CIS 5680: Game Design Practicum (1) graphics
The objective of the game design practicum is to provide students with hands on experience designing and developing 3D games as well as Virtual Reality (VR) and Augmented Reality (AR) applications. Working in teams of three, students will gain experience brainstorming original game concepts, writing formal design documents and developing a fully functional prototype of their game/application. Technical features to be designed and implemented include novel game mechanics and/or user interaction models, game physics, 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 multiplayer networking capabilities. State-of-the-art game engine middleware such as the Unity3D and Unreal game engines will be used to expose student to commercial-grade 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, object-oriented software design and engineering, project management (including effective team collaboration and communication techniques), design iteration through user feedback and play-testing, and most importantly, what makes a game or virtual reality experience interesting and fun to play.
CIS 5710: Computer Organization and Design (1) sys
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 arithmatic, (5) datapath and control, (6) micro-programming, (7) pipeling, (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 5730: Software Engineering (1) softeng
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 5800: Machine Perception (1) ai
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 upper-level undergraduate CIS elective.
CIS 5810: Computer Vision & Computational Photography (1) ai
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 hands-on experience with interesting things to do on images/videos. 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 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.
MATH 1400: Calculus, Part I (1) math
Brief review of High School calculus, applications of integrals, transcendental functions, methods of integration, infinite series, Taylor's theorem, and first order ordinary differential equations. Use of symbolic manipulation and graphics software in calculus.
MATH 1410: Calculus, Part II (1) math
Functions of several variables, vector-valued functions, partial derivatives and applications, double and triple integrals, conic sections, polar coordinates, vectors and vector calculus, first order ordinary differential equations. Applications to physical sciences. Use of symbolic manipulation and graphics software in calculus.
MATH 1610: Honors Calculus (1) math
Students who are interested in math or science might also want to consider a more challenging Honors version of Calculus II and III, Math 1610 and Math 2600 (the analogues of Math 1410 and Math 2400, respectively). These courses will cover essentially the same material as 1610 and 2400, but more in depth and involve discussion of the underlying theory as well as computations.
MATH 2400: Calculus, Part III (1) math
Linear algebra: vectors, matrices, systems of linear equations, vector spaces, subspaces, spans, bases, and dimension, eigenvalues, and eigenvectors, matrix exponentials. Ordinary differential equations: higher-order homogeneous and inhomogeneous ODEs and linear systems of ODEs, phase plane analysis, non-linear systems. Fall or Spring.
MATH 2600: Honors Calculus, Part II (1) math
This is an honors version of Math 2400 which explores the same topics but with greater mathematical rigor. Not Offered Every Year
MATH 3120: Linear Algebra (1) math
Linear transformations, Gauss Jordan elimination, eigenvalues and eigenvectors, theory and applications. Mathematics majors are advised that MATH 3120 cannot be taken to satisfy the major requirements. Not Offered Every Year
MATH 3130: Computational Linear Algebra (1) math
Many important problems in a wide range of disciplines within computer science and throughout science are solved using techniques from linear algebra. This course will introduce students to some of the most widely used algorithms and illustrate how they are actually used. Some specific topics: the solution of systems of linear equations by Gaussian elimination, dimension of a linear space, inner product, cross product, change of basis, affine and rigid motions, eigenvalues and eigenvectors, diagonalization of both symmetric and non-symmetric matrices, quadratic polynomials, and least squares optimazation. Applications will include the use of matrix computations to computer graphics, use of the discrete Fourier transform and related techniques in digital signal processing, the analysis of systems of linear differential equations, and singular value deompositions with application to a principal component analysis. The ideas and tools provided by this course will be useful to students who intend to tackle higher level courses in digital signal processing, computer vision, robotics, and computer graphics.
MATH 3140: Advanced Linear Algebra (1) math
Topics will include: Vector spaces, Basis and dimension, quotients; Linear maps and matrices; Determinants, Dual spaces and maps; Invariant subspaces, Cononical forms; Scalar products: Euclidean, unitary and symplectic spaces; Orthogonal and Unitary operators; Tensor products and polylinear maps; Symmetric and skew-symmetric tensors and exterior algebra.
STAT 4300: Probability (1) math
Discrete and continuous sample spaces and probability; random variables, distributions, independence; expectation and generating functions; Markov chains and recurrence theory.
PHYS 0150: Principles of Physics I: Mechanics and Wave Motion (1.5) sci
This calculus-based course is recommended for science majors and engineering students. Classical laws of motion; interactions between particles; conservation laws and symmetry principles; particle and rigid body motion; gravitation, harmonic motion, and applications of mechanics to real-world problems. Credit is awarded for only one of the following courses: PHYS 0008, PHYS 0101, 0150, 0170. Students with AP or Transfer Credit for PHYS 0101, or PHYS 0150 who complete PHYS 0150 will thereby surrender the AP or Transfer Credit.
PHYS 0151: Principles of Physics II: Electromagnetism and Radiation (1.5) sci
The topics of this calculus-based course are electric and magnetic fields; Coulomb's, Gauss's, Ampere's, and Faraday's laws; DC and AC circuits; Maxwell's equations and electromagnetic radiation. Credit is awarded for only one of the following courses. PHYS 0009, PHYS 0102, PHYS 0151, PHYS 0171. Students with AP or Transfer Credit for PHYS 0102 or PHYS 0151 who complete PHYS 0151 will thereby surrender the AP or Transfer Credit.
PHYS 0170: Honors Physics I: Mechanics and Wave Motion (1.5) sci
This course parallels and extends the content of PHYS 0150, at a significantly higher mathematical level. Recommended for well-prepared students in engineering and the physical sciences, and particularly for those planning to major in physics. Classical laws of motion: interaction between particles; conservation laws and symmetry principles; rigid body motion; non-inertial reference frames; oscillations. Credit is awarded for only one of the following courses: PHYS 0008, PHYS 0101, PHYS 0150, PHYS 0170. Students with AP or Transfer Credit for PHYS 0101 or PHYS 0150 who complete PHYS 0170 will thereby surrender the AP or Transfer Credit.
PHYS 0171: Honors Physics II: Electromagnetism and Radiation (1.5) sci
This course parallels and extends the content of PHYS 0151, at a somewhat higher mathematical level. Recommended for well-prepared students in engineering and the physical sciences, and particularly for those planning to major in physics. Electric and magnetic fields; Coulomb's, Ampere's, and Faraday's laws; special relativity; Maxwell's equations, electromagnetic radiation. Credit is awarded for only one of the following courses: PHYS 0009, PHYS 0102, PHYS 0151, or PHYS 0171. Students with AP or Transfer Credit for PHYS 0102 or PHYS 0151 who complete PHYS 0171 will thereby surrender the AP or Transfer Credit.
EAS 2030: Engineering Ethics (1) impact
In this course, students will study the social, political, environmental and economic context of engineering practice. Students will develop an analytical toolkit to identify and address ethical challenges and opportunities in the engineering profession, including studies of risk and safety, professional responsibility, and global perspectives. The course will begin with a foundation in the history of engineering practice and major Western ethical and philosophical theories. Students will then apply this material to both historical case studies, such as Bhopal, the NASA Shuttle Program, and Three Mile Island, as well as contemporary issues in big data, artificial intelligence, and diversity within the profession. Students will consider how engineers, as well as governments, the media, and other stakeholders, address such issues.
ESE 1120: Engineering Electromagnetics (1)
This course covers basic topics in electromagnetics, namely, electric charge, electric field, electric energy, conductors, insulators, dielectric materials, capacitors, electric current, magnetic field, inductors, Faraday's law of induction, alternating current (AC), impedance, Maxwell's equations, electromagnetic and optical wave propagation, with emphasis on engineering issues. Relevant topics are emphasized in our lectures in order to prepare students for other courses in ESE that rely on the contents on this course. Several laboratory experiments accompany the course to provide hands-on experience on some of the topics in the lecture and prepare students for the capstone project.
ESE 3010: Engineering Probability (1) math
This course introduces students to the mathematical foundations of the theory of probability and its rich applications. The course begins with an exploration of combinatorial probabilities in the classical setting of games of chance, proceeds to the development of an axiomatic, fully mathematical theory of probability, and concludes with the discovery of the remarkable limit laws and the eminence grise of the classical theory, the central limit theorem. The topics covered include: discrete and continuous probability spaces , distributions, mass functions, densities; conditional probability; independence; the Bernoulli schema: the binomial, Poisson, and waiting time distributions; uniform, exponential, normal, and related densities; expectation, variance, moments; conditional expectation; generating functions, characteristic functions; inequalities, tail bounds, and limit laws. But a bald listing of topics does not do justice to the subject: the material is presented in its lush and glorious historical context, the mathematical theory buttressed and made vivid by rich and beautiful applications drawn from the world around us. The student will see surprises in election-day counting of ballots, a historical wager the sun will rise tomorrow, the folly of gambling, the sad news about lethal genes, the curiously persistent illusion of the hot hand in sports, the unreasonable efficacy of polls and its implications to medical testing, and a host of other beguiling settings.
LAWM 5060: Technology, Law & Ethics (1) impact
What makes for a properly designed product? What are technologists’ responsivities for ensuring system security and protecting user privacy? What are the limits does intellectual property place on product design and technologists’ latitude to experiment with technologies? What are the proper bounds of nondisclosure and noncompete agreements? Introduction to Technology Law and Ethics is an innovative course that provides students with key legal and ethical principles that technology professionals, engineers, and high-tech entrepreneurs need to know. The course presents issues from the bottom up, the way a practicing technologist would experience them, using in-depth classroom discussion exploring real, current, and cutting edge examples
MEAM 1100: Introduction to Mechanics (1)
This lecture course and a companion laboratory course (MEAM 1470) build upon the concepts of Newtonian (classical) mechanics and their application to engineered systems. This course introduces students to mechanical principles that are the foundation of upper-level engineering courses including MEAM 2100 and 2110. The three major parts of this course are: I. Vector Mechanics; II. Statics and Structures; and III. Kinematics and Dynamics. Topics include: vector analysis, statics of rigid bodies, introduction to deformable bodies, friction, kinematics of motion, work and energy, and dynamics of particles. Case studies will be introduced, and the role of Newtonian mechanics in emerging applications including bio- and nano- technologies will be discussed. Students should be taking MATH 1400 concurrently with this course, unless they have MATH 1400 credit for taking it in a previous semester.
MEAM 1470: Introduction to Mechanics Lab (0.5)
This half-credit laboratory class is a companion to the Introduction to Mechanics lecture course (MEAM 110). It investigates the concepts of Newtonian (classical) mechanics through weekly hands-on experiments, emphasizing connections between theoretical principles and practical applications in engineering. In addition to furthering their understanding about the workings of the physical world, students will improve their skills at conducting experiments, obtaining reliable data, presenting numerical results, and extracting meaningful information from such numbers.