Introduction to Computer Programming
Introduction to Computer Programming is the first course in our series introducing students to computer science. In this class you will learn the fundamentals of computer programming in Java, with emphasis on applications in science and engineering. You will also learn about the broader field of computer science and algorithmic thinking, the fundamental approach that computer scientists take to solving problems.
Probability, Data Science and Statistica
This course tightly integrates the theory and applications of discrete probability, discrete stochastic processes, and discrete statistical inference in the study of computer science. The course will introduce the Minimum Description Length Paradigm to unite basic ideas about randomness, inference and computation. Students will be expected to use the Maple programming environment in homework exercises which will include numerical and symbolic computations, simulations, and graphical displays.
This course focuses on advanced topics in modern computer architecture, illustrated by recent case studies. Topics include fundamentals of quantitative analysis; pipelined, out-of-order, and speculative execution; superscalar, VLIW and vector processors; embedded processors; memory hierarchy design; thread-level parallelism; multiprocessors and multi-core architectures, synchronization and cache coherence protocols.
Numerical Methods for Computer Science
This course introduces some of the formal tools of computer science, using a variety of applications as a vehicle. You’ll learn how to encode data so that when you scratch the back of a DVD, it still plays just fine; how to distribute “shares” of your floor’s PIN so that any five of you can withdraw money from the floor bank account (but no four of you can); how to play chess; and more. Topics that we’ll explore along the way include: logic and proofs, number theory, elementary complexity theory and recurrence relations, basic probability, counting techniques, and graphs.
Design and implementation of operating systems. Topics include process synchronization and interprocess communication, processor scheduling, memory management, virtual memory, interrupt handling, device management, I/O, and file systems. Hands-on study of Linux operating system design and kernel internals, including work with Android devices. Experience with commercial virtualization tools and open source software.
Theoretical Computer Science
This course is an introduction to models of computation, computability, and complexity. We will ask questions like: How do we define the abstract notion of “computation” or a “computer”? What problems can be computed? What problems can be computed efficiently? Can we prove that some problems can never be computed, no matter how fast our computers become? The course is highly mathematical and abstract; in particular, there will be minimal programming assignments (if any) and homework problems will frequently involve proving or disproving various assertions. Students are expected to be comfortable with the material covered in Discrete Math or the equivalent.
Topics (not exhaustive): automata and the languages they define, context-free grammars and the languages they define, Turing machines, basic complexity theory (such as P vs. NP).
Advanced Programming and Data Structures
Complete data structures and algorithms course. The course teaches the following topics : Objects and ADTs, Constructors and destructors, Data Structure , Methods, Pre- and post-conditions C conventions, Error Handling, Arrays, Lists, Stacks, Stack Frames, Recursion, Sequential Searches, Binary Search , Trees, Complexity, Queues, Priority Queues , Heaps, Bubble , Heap Sort, Quick Sort , Bin Sort, Radix Sort, Searching Revisited, Red-Black trees, AVL trees, General n-ary trees, Hash Tables, Dynamic Algorithms, Fibonacci Numbers , Binomial Coefficients, Optimal Binary Search Trees, Matrix Chain Multiplication, Longest Common Subsequence, Optimal Triangulation , Graphs , Minimum Spanning Tree , Dijkstra’s Algorithm , Huffman Encoding , FFT , Hard or Intractable Problems, Eulerian or Hamiltonian Paths , Travelling Salesman’s Problem.
Algorithm Design and Analysis
How do you optimally encode a text ?le? How do you ?nd shortest paths in a map? How do you desgin a communication network? How do you route data in a network? What are the limits of ef?cient 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 ?os; NP-completeness theory; and approximation algorithms.
Programming Language Design
What makes a programming language like “Python” or like “Java?” This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML.
Data Mining and Information Retrieval
How does Google always understand what it is you’re looking for? How does Amazon.com figure out what items you might be interested in buying? How can categories of similar politicians be identified, based on their voting patterns? These questions can be answered via data mining, a field of study at the crossroads of artificial intelligence, database systems, and statistics. Data mining concerns itself with the goal of getting a computer to learn or discover patterns, especially those found within large datasets. We’ll focus on techniques such as classification, clustering, association rules, web mining, collaborative filtering, and others.
Entrepreneurship and Business Planning
This course focuses on investigating, understanding, and implementing the process of founding a start-up firm. Elements of searching out new venture opportunities, matching skills with a new venture, financing, competitive strategy, intellectual property, and operating a new venture will be explored. The focus of the course will be the development and presentation of a business plan created by teams of students with various academic backgrounds.
This course is designed to help students develop their knowledge, confidence, skills, and self-image necessary to pursue entrepreneurial ventures in such domains as business, government, and public service. It provides a foundation in the fundamentals of entrepreneurial leadership, as well as a source of inspiration and energy in the art and science of taking visions and bringing them to reality.
Innovation in Practice
Entrepreneurship is innovation in practice: transforming ideas into opportunities, and, through a deliberate process, opportunities into commercial realities. These entrepreneurial activities can take place in two contexts: the creation of new organizations; and within existing organizations. This course will present an entrepreneurial framework for these entrepreneurial processes, supported by case studies that illustrate essential elements. Successful entrepreneurs and expert practitioners will be introduced who will highlight practical approaches to entrepreneurial success.
This course focuses on institutional and product marketing methods used by start-up to medium-sized companies. After an overview of basic marketing principles, the course will cover the spectrum from day-to-day marketing activities of the entrepreneurial business to positioning and strategy. Students will learn to analyze, formulate, and implement marketing strategy, and learn the fundamentals of market research, pricing, and reaching and selling to customers.
This course focuses on understanding how to construct the data and find appropriate financing for a start-up venture. Various forms of financing are introduced: vendor financing, factoring, etc. Through a medley of tests, case studies, and team exercises, students exercise basic financial skills such as financial statement formulation, NPV analysis and scenario analysis.
High Technology Entrepreneurship
This course focuses on the key components of starting a venture-scalable high-tech business. The course will examine the full life cycle of a startup; from opportunity assessment and market sizing to R&D and operation plans and go-to-market and distribution strategy. The course will also cover venture capital, legal considerations and team building. The role of angel investors, venture capitalists, and non-dilutive funding will be covered in depth. Student teams will write and present a business plan to active venture capitalists.