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.
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 course covers a wide variety of topics in machine learning, pattern recognition, statistical modeling, and neural computation. It covers the mathematical methods and theoretical aspects, but primarily focuses on algorithmic and practical issues.
Cross-listing for DS-GA 1003.
This is the lab section for CSCI-GA.2946-001.
Data Science has recently gained a substantial interest in a variety of industries including healthcare, finance, manufacturing and marketing. It is positioned at the intersection point of computer science, data mining, machine learning, predictive analytics, business, statistics and domain expertise. It aims at finding hidden knowledge (patterns, models, associations) for the purpose of making better decisions. This course will introduce the basic fundamental concepts of the algorithms and the tools of extracting valuable insights from data with the ability to formulating and solving problems with it. Topics of this course include, but are not limited to: Basics of Data Analytics Project Lifecycle, Developing an Analytics Roadmap, Data Preprocessing, Data Analytics Use cases, Data Cleaning Algorithms, Feature Selection Algorithms, Introduction to Hadoop in Theory and in Practice, Algorithms for Finding Similar Data Items, Dimensionality Reduction techniques, Clustering Algorithms, Classification Algorithms, Introduction to Sentiment Analysis in short text (e.g Tweets), Mining Association Rules, Performance Measures, Ensemble Methods, Information retrieval systems and Recommendation Systems with applications in Bio-informatics, Text Mining and Social Network Analytics.
In this course we study the craft of software engineering. The semester begins with a thorough review of Java and the Java Virtual Machine. We concentrate on library components and language features most relevant to typical engineering projects. Later lectures cover more sophisticated topics, including concurrency and thread-safety, writing tests, object-oriented programming, and design patterns. The course also covers non-technical topics that are critical to software development including how to write with clarity, managing bugs, successfully developing and reinforcing salutary engineering habits, the nature of human productivity as it relates specifically to engineering, and communicating effectively with teammates. Lessons are reinforced with weekly assignments that are meticulously graded, with some submissions critiqued in classroom code reviews.
DevOps is more than just a fusion of development and operations. It is the cultural change that embraces Agile methodology, Lean Manufacturing, Social Coding, Behavior Driven and Test Driven Development, with new tools to provide Continuous Integration, Testing, and Delivery, and a fundamental shift in what it means to "move into production". Developers are empowered to "fail fast" and deploy early and often. Cloud Computing is at the heart of this movement. Cloud Native applications built from loosely coupled microservices require DevOps automation to manage the often complex production pipelines. DevOps allows businesses to move with increased agility and stability so that they can innovate at scale.
Upon completing this course students will know from hands-on experience how to work as an Agile team, socially code, and setup a DevOps pipeline to continuously integrate and test their code changes and deploy the Cloud Native applications that they write. They will also gain an understanding of what it means for Enterprise IT to use DevOps to become Cloud Native and operate at scale. Topics covered will include: Social Coding, Creating RESTful Microservices, IBM Bluemix. Watson Services, Docker, Cloud Foundry, GitHub, ZenHub, Travis CI, Jenkins, Vagrant, Behavior Driven and Test Driven Development, Python Flask, Redis, Cloudant, Ansible, SaltStack, Chef, Puppet. Students will be given access to IBM Bluemix and Watson Services for the duration of the course and will be submitting their homework on GitHub and deploying their homework to Bluemix. This course is 50% lecture and 50% hand-on so come prepared to learn by doing.
This is a capstone course.
The tremendous advances in process technology have created a revolution both in hardware and in software. On the hardware side, we moved from single core processors to multicore/manycore processors. Multicore chips are now everywhere. You can find them in smartphones, playstations, notebooks, all the way up to supercomputers. To benefit from these chips, software must be parallelized, which starts another revolution in software. The purpose of this course is to introduce you to both the hardware advances and parallel programming techniques targeting multicore and manycore processors. You will learn how to make the best use of the underlying hardware to build applications that are faster, more powerefficient, and more reliable.
Object-oriented programming (OOP) has emerged as a significant software development methodology. This course introduces the important concepts of object-oriented design and languages, including data abstraction and encapsulation, inheritance and dynamic method dispatch, subtyping, generics, and OOP-based concurrent programming paradigms. We will learn advanced programming techniques that use these concepts and explore how OOP language features are implemented by compilers. The course will include significant programming assignments, stressing object-oriented design. Programming assignments will use the programming language Scala, which will also be introduced in the course.
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.
In this course you will learn how to develop 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 (AR), virtual reality (VR) and data visualization techniques.
This exciting and fast-evolving field of computer science has many recent consumer applications (e.g., Microsoft Kinect, Google Translate, IPhone's Siri, digital camera face detection, Netflix recommendations, Google news) and applications within the sciences and medicine (e.g., predicting protein-protein interactions, species modeling, detecting tumors, personalized medicine). Students learn the theoretical foundations and how to apply machine learning to solve new problems.
In this course, students will learn to create applications for Apple’s iOS on both the iPhone and the iPad using Objective-C, Apple's new programming language Swift, and the iOS SDK. Since its introduction, the Apple iOS SDK has proved to be a powerful platform upon which to build sophisticated applications. Without actually having to own an iPhone or an iPad, students will be able to build and test their applications on Apple Macs using the freely available compiler and simulator, XCode. Students will become proficient in the object-oriented language Objective-C, Swift, Apple iOS Frameworks, and the XCode development environment. This is a new, dynamic, constantly-evolving topic, and students will be at the forefront a new technological advancement.
Most of us have learned to program a single microprocessor (single core) using a high-level programming language like C/C++, Java, ... This is called sequential programming. We feel very comfortable with this because we think in a sequential way and give the machine statements to be executed in sequence. However, this has to change. A microprocessor with single core no longer exists in almost all computers we are using today (including your tablets and smart phones). Most of our devices are now multicore processors. A multicore processor contains several cores (called CPUs or cores) on-chip. To make the best use of these multicore chips we need to program them in-parallel. Sequential programming, for all platforms from smartphones to supercomputers, is falling out of fashion and taking back-seat to parallel programming. How to think in parallel? How to write code in parallel to make the best use of the underlying hardware? How is that new hardware different from the traditional one? What will the future be for the software and hardware? This is the topic of this course.
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.