Parallel computers, or supercomputers or high-performance clusters are ubiquitous today in science and engineering. Parallel programming requires inventing new algorithms and programming techniques. This course covers the fundamental paradigms of parallel programming, with an emphasis on problem solving and actual applications. The parallel programming concepts and algorithms are illustrated via implementations in OpenMP and MPI (Message Passing Interface), as well as serial farming.
Focussing on both the principles and practice in computer security, this course provides an introduction to fundamental principles of computer systems and network security. It covers the best practices of computer systems and network security protection and defense. The roadmap for the course includes seven main sections, including security objectives, vulnerabilities, attacks and exploitation, wireless security, web application security, defense and countermeasures, and incident handling and forensic investigation. This course also presents the understanding tools needed to defend against attackers maintaining access and covering their tracks. This course examines and reviews various types of hacking tools as well as ways to harden the system or application against these attacks.
The techniques of algorithm design form one of the core practical technologies of computer science. This course introduces students to advanced techniques for designing and analysing algorithms, and explores their use in a variety of application areas. Topics include: sorting and search algorithms, graph traversal algorithms, combinatorial search, heuristics methods, and dynamic programming, intractable problems. Students learn the skill of understanding the computational complexities of computing problems and designing solutions for them.
As the worldwide smartphone market continues to grow, so does the demand for mobile applications. This course provides students with the skills for creating and deploying applications for mobile devices using Android, the most widely used operating system. With an emphasis on the Model-View-Controller paradigm this course provides students with the foundational knowledge that underlies many popular programming languages. The course cumulates with the development of an original Android application. Knowledge of Java is required.
Machine learning is the science of getting computers to act without being explicitly programmed. In the past decade, machine learning has given us self-driving cars, practical speech recognition, effective web search, and a vastly improved understanding of the human genome. This course introduces students to machine learning, data mining, and statistical pattern recognition. Topics include supervised learning (parametric/non-parametric algorithms, support vector machines, kernels, neural networks) and unsupervised learning (clustering, dimensionality reduction, recommender systems, deep learning). Students learn a variety of learning algorithms and determine which are most likely to be successful.
This seminar introduces the fundamentals of technology entrepreneurship. It involves taking a technology idea and finding a high-potential commercial opportunity, gathering resources such as talent and capital, figuring out how to sell and market the idea, and managing rapid growth. It also involves bringing incorporating a new technology idea into an existing business. There will be guest lecturers from the industry.
This course provides students with the foundations of data analysis – a burgeoning field that allows organizations to discover patterns in data to help explain current behaviours or predict future outcomes. Students learn the underlying theories, techniques and practices involved in modern data analysis in order to effectively collect, process, interpret and use data in decision making. More specifically, the course utilizes case studies from fields such as finance and statistics to expose students to topics including data collection, storage, processing, representation, and reporting, and also further develop their decision-making skills using decision trees and artificial intelligence.
Enterprise computing offers integrated solutions to organizations that need help managing a variety of problems including software development, resource management and data analytics. This course extends traditional Computer Science education by introducing students to a practical application of their skills through enterprise computing which integrates IT management and application development. Students are introduced to the principles, techniques and practices in modern enterprise computing with a focus on backend business logic computing and the technical foundation of data analysis. This course provides students with the foundation to manage all aspects of enterprise computing solutions including security, user experience, optimization, and distributed databases. Practical knowledge is further developed through lab work, case studies and guest-lectures of IT managers.
Apple iPhones are one of the most popular smartphones on the market today, with thousands of applications downloaded every day. This course provides students with the knowledge to develop applications for iPhones, iPads, and iPods, using the Cocoa Touch framework on iOS and introducing students to the programming language Swift. More specifically, students learn how to develop interfaces for mobile devices and the challenges faced when developing applications that use different input modalities. Other topics include web services and memory management for mobile devices.
This course is available only to students in the co-operative education option and will be completed in the term following their co-op terms. Students will complete a major project that integrates their academic and work experience.
We see you are accessing our website on IE8. We recommend you view in Chrome, Safari, Firefox or IE9+ instead.×