An accelerated introduction to the fundamental concepts of computer science for students who lack a formal background in the field. Topics include algorithm design and program development; data types; control structures; subprograms and parameter passing; recursion; data structures; searching and sorting; dynamic storage allocation and pointers; abstract data types, such as stacks, queues, lists, and tree structures; generic packages; and an introduction to the principles of object-oriented programming. The primary programming language used in the course will be Java. Students should expect an average of 12-16 hours of programming and related course work per week.
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balanced-tree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depth-first and breadth-first search, dynamic programming, and divide-and-conquer techniques.
Discusses the design, use, and implementation of imperative, object-oriented, and functional programming languages. The topics covered include scoping, type systems, control structures, functions, modules, object orientation, exception handling, and concurrency. A variety of languages are studied, including C++, Java, Ada, Lisp, and ML, and concepts are reinforced by programming exercises.
In this course we study the craft of software engineering. The semester begins with a thorough review of the Java Language and Virtual Machine, emphasizing library components and language features most relevant to most development projects. Later lectures cover more sophisticated features in the language like concurrency and thread-safety, writing tests, properly designing classes and Object-Oriented programs, and design patterns. Certain non-technical topics are critical to successful software development and are reinforced throughout the semester. These include writing readable code, the long-term consequences of bugs, the psychology of human motivation, successfully developing and reinforcing habits, what science knows about human productivity and drive, and how to motivate ourselves and our team. Lessons are reinforced with weekly assignments that are meticulously graded. Some submissions are critiqued, line-by-line, in classroom code reviews. The end of the semester includes a lecture on how to best prepare for interviews and write an effective resume, incorporating techniques from world-class athletes and performers on how to optimally perform under extreme stress.
Large-scale distributed systems are the core software infrastructure underlying cloud computing. These systems consist of tens of thousands of networked computers working together to provide unprecedented performance and fault-tolerance. Examples include distributed databases (e.g. Google's Spanner, Amazon's S3 and Dynamo), distributed computation frameworks (e.g. Hadoop/Spark and TensorFlow) or even decentralized currency system (e.g. BitCoin). This class teaches the abstractions, design and implementation techniques that allow you to understand and build such distributed systems.
Topics include multithreading, network programming, consistency, naming, fault tolerance, and security and several case studies of distributed systems.
This class is a graduate-level course, but undergraduate students are welcome! The course consists of lectures and a series of programming labs.
This class satisfies the Ph.D. breadth requirement in Systems and also serves as a M.S. capstone course.
This course teaches the security mindset and practical security concepts that are essential for software engineers, software developers, quality assurance testers and IT managers. The course discusses various attack techniques and defenses for real world applications and the security activities in the SDLC. Its main topics include: low-level exploits, web application security, malware, threat modeling, security requirements, secure coding practices, security & penetration testing, human factors and usability, mobile platform security, economics of security and legal and ethical issues. Course project and assignments may require Java, C, and/or scripting languages.
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.
This section is a fast paced version of the regular CSO class. Students who are considering research in their senior year or graduate school should take this class.
This course aims to give students an understanding of what's "under the hood" in a modern computer system. Take this class to boost your confidence on a computer and to understand how everything works like never before! We'll cover basic topics including how machines represent and execute programs, how user program interact with the OS, as well as advanced topics including how to write networked and concurrent programs. These topics are supported by a series of challenging lab assignments in C.
In this course students will learn how to develop interactive multimedia applications for both the desktop and the web. The course focuses on general programming techniques with an emphasis on the production of interactive graphical environments. In addition, a number of advanced topics will be covered including image processing, video games, simulations, basic computer vision, augmented reality and creating simple mashups using popular web services such as Flickr and Twitter.
In this course, students will learn to create applications for Apple's iPhone 3G using Objective-C and the iPhone SDK. Since its introduction this past summer, the Apple SDK has been revealed to be a powerful platform upon which to build sophisticated applications for the iPhone. Without actually having to own an iPhone, students will be able to build and test their applications on Intel Apple Macs using the freely available compiler and simulator. In addition to the development tools, students will become proficient in the object-oriented language Objective-C, the Apple iPhone Framework, and the principles of Cocoa development. This is a new, dynamic, constantly-evolving topic, and students will be at the forefront of a new technological advancement.
A practical introduction to creating modern web applications. Covers full stack web development - including topics such as database / data model design, MVC architecture, templating, handling user input, asynchronous processing, and client side interactivity. Students will use current server and client side web frameworks to build dynamic, data-driven sites. Various tools to support development will also be introduced, such as version control and build systems. Basic knowledge of HTML and CSS and familiarity with command line tools are recommended.
This course will introduce students to computer networks, using today's Internet as an example. Topics covered include socket programming, routing, forwarding, reliable transmission, congestion control, and medium access control. The course will involve a reasonable amount of programming in Python, and familiarity with programming is expected.