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.
Problems and objectives of computer graphics. Vector, curve, and character generation. Interactive display devices. Construction of hierarchical image list. Graphic data structures and graphics languages. Hidden-line problems; windowing, shading, and perspective projection. Curved surface generation display.
The design of systems that can learn by reading. Ontology and knowledge base. Principal processing components: text segmentation, lexical analysis, name recognition and classification, parsing and syntactic regularization, word sense disambiguation, predicate-argument analysis, reference resolution, discourse structure. Joint inference methods. Knowledge acquisition strategies.
This is a project-oriented, team-organized course in which students will take responsibility for one or two processing components: selecting methods, making class presentations, creating and maintaining code. A good working knowledge of corpus-trained methods for these components is required (using log-linear or deep models). Implementation will be in Java, so good programming skills in Java are needed, along with a commitment to meeting javadoc documentation standards.
The tentative target is to read articles from Wikipedia.
Through the 1990s, processors got faster and faster, but around the turn of the millennium, CPUs started to reach physical limits. To drive innovation and produce more powerful computers, manufacturers began to pack multiple cores into each processor. However, most software is conceived by the programmer as a linear progression of instructions. Compilers can find some parallelization opportunities, but that’s not enough to take full advantage of multiple cores. Programmers must take much of the responsibility for making their programs exploit multiple cores, and this course discusses many modern techniques:
- Aspects of the architecture of modern machines
- Classic and modern algorithms for coordination and synchronization
- Data structures that exploit and extract performance from multiple cores
- Current and future programming techniques and best practices for multiple cores
- Strategies to debug and benchmark multi-threaded programs
Students will be expected to have experience with a programming-intensive course. Students must have previous experience with C++, but no experience writing multi-threaded C++ programs is necessary. The course will include lectures, homework, cumulative labs, a final project, and a midterm and final exam.
This course covers Scala, Spark programming, Spark architecture, Spark Streaming, and integration of Spark with the Hadoop ecosystem for developing Big Data applications. In addition, it covers the technologies that integrate well with Spark in the creation of Big Data applications. Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by developing a final project using Scala, Spark, and complementary Hadoop tools.
This is a capstone course that connects students directly with real-world information technology problems. The goal of this course is to teach the skills needed for success in real-world information technology via a combination of classroom lectures and practical experience with large projects that have been specified by local “clients.” The typical clients are primarily companies, but can also be government agencies or nonprofit organizations. Each project lasts for the entire semester and is designed to involve the full software project life cycle. Examples of such projects are development of software to solve a business problem, including specifying requirements, writing and testing prototype code, and writing a final report; and evaluation of commercial software to be purchased to address a business problem, including gathering requirements, designing an architecture to connect the new software with existing systems, and assessing the suitability of available software products.
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.
Many problems in science, business, and politics require heuristics—problem-solving techniques that often work well but give imperfect guarantees. This course teaches heuristics as they apply to the design of scientific experiments, the resolution of economic or political negotiations, and the construction of engineering devices in hostile environments. Students will work in small teams that will solve puzzles, conduct experiments, and build strategies for a competitive auction game. Students will use and learn computational tools, such as Python. The intent is to make you better able to face complex problems in any field of study you choose.