This course is intended for students in a CPS or Environmental Science Major or Specialist program. It provides an experiential learning opportunity with secondary school students and teachers. Students will research the literature of science pedagogy and acquire pedagogical content knowledge, particularly that of problem-based learning and the use of case studies. Then, through the creation of original, problem-based learning materials for Grades 11 and 12 classes and the preparation of teachers’ notes for these materials, they will enhance their subject specialization knowledge. They will then assist a teacher in implementing their materials in a school or, where the materials involve experiments, in the field or in the UTM teaching laboratories. The course is normally taken in the student's fourth year. Enrollment requires submitting an application to the CPS Department in the spring term, with the application due date being the final day of classes. Independent Studies Application Forms may be found at http://uoft.me/cpsforms. Applications should be submitted to the CPS Undergraduate Assistant. Registration on ACORN is also required.
Students will work toward the completion of an experimental or theoretical research project in an area of study within the chemical and physical sciences, namely, astronomy, chemistry, earth sciences or physics. Projects will be based on current trends in research and students will work to complete their projects with guidance provided by a team of facilitators and faculty advisors consisting of course coordinators and a researcher from the Department of Chemical and Physical Sciences. In addition to the rigorous development of research skills, the course will also provide students with training and practical experience in project management techniques and practical research, literary and communications skills development. CPS489Y5 requires submitting an application to the department Application forms may be found at http://uoft.me/cpsforms. Applications should be submitted to the CPS Undergraduate Assistant.
A broad introduction to the field of computer science, intended for non-computer scientists. Topics include: history of computing; digital information representations; computer chip logic design; cryptography; social issues in computing; operating systems; problem solving and algorithms; a challenging programming introduction. This is a rigorous course intended to teach computer science, and will not teach the use of any particular software products. A robust understanding of modern computers and their use is assumed.
An applied introduction to the fast-evolving field of artificial intelligence with a focus on using supervised learning models (such as image classifiers) and foundational models (such as large language models) in various interdisciplinary domains. Designed for students without a programming background, this course is accessible to a broad audience and emphasizes critical analysis of the role of data, the limitations and failure modes of AI systems, and the societal impact of AI systems, including risks, ethics, and safety.
Structure of computers; the computing environment. Programming in a language such as Python. Program structure: elementary data types, statements, control flow, functions, classes, objects, methods, fields. List: searching, sorting and complexity.
An introduction to the field of computer science that combines the tools and techniques of programming (using a modern programming language) with rigorous mathematical analysis and reasoning. Topics include data representations; program control flow (conditionals, loops, exceptions, functions); mathematical logic and formal proofs; algorithms and run-time analysis; and software engineering principles (formal specification and design, testing and verification). Prior programming experience is not required to succeed in this course.
A continuation of CSC110Y5 that extends principles of programming and mathematical analysis to further topics in computer science. Topics include object-oriented programming (design principles, encapsulation, composition, and inheritance); binary representation of numbers; recursion and mathematical induction; abstract data types and data structures (stacks, queues, linked lists, trees, graphs); and the limitations of computation.
Abstract data types and data structures for implementing them. Linked data structures. Encapsulation and information-hiding. Object-oriented programming. Specifications. Analyzing the efficiency of programs. Recursion. This course assumes programming experience in a language such as Python, C++, or Java, as provided by CSC108H5.
Introduction to a topic of current interest in computer science intended for a general audience. Content will vary from year to year.
An introduction to software design and development concepts, methods, and tools using a statically-typed object-oriented programming language such as Java. Topics from: version control, build management, unit testing, refactoring, object-oriented design and development, design patterns, advanced IDE usage, regular expressions, and reflection. Representation of floating-point numbers and introduction to numerical computation.
Software tools and development in a Unix/Linux environment, using a machine-oriented programming language (typically C). Core topics: software tools (shell utilities and make), processes and program execution, the memory model, system calls, file processing, interprocess communication (pipes and signals), and an introduction to concurrency, including multithreading.
An applied introduction to the fast-evolving field of artificial intelligence and deep learning. Students will learn to apply supervised deep learning models, with emphasis on data preparation, model evaluation, and the critical use of foundational models such as large language models. The course integrates hands-on practice with machine learning software frameworks while also addressing societal impact, including risks, ethics, and safety.
Mathematical induction; correctness proofs for iterative and recursive algorithms; recurrence equations and their solutions (including the "Master Theorem"); introduction to automata and formal languages.
An introduction to computer organization and architecture, using a common CPU architecture. Core topics: data representations and computer arithmetic, processor organization, the memory hierarchy and caching, instruction set and addressing modes, and quantitative performance evaluation of computing systems. Students will program in assembly and will evaluate simulated processor architectures.
Algorithm analysis: worst-case, average-case, and amortized complexity. Standard abstract data types, such as graphs, dictionaries, priority queues and disjoint sets. A variety of data structures for implementing these abstract data types, such as balanced search trees, hashing, heaps and disjoint forests. Design, implementation and comparison of data structures. Introduction to lower bounds.
Targeted instruction and significant practice in the communications required for careers in computer science. The curriculum covers written, oral and interpersonal communication. Students will hand in short pieces of writing each week, will make oral presentations several times in the semester, and will work together in simulated project meetings and other realistic scenarios of pair and small group interaction. This can be used to satisfy the writing requirement in CSC programs.
This course provides a richly rewarding opportunity for students in their second year to work in the research project of a professor in return for 299H course credit. Students enrolled have an opportunity to become involved in original research, learn research methods and share in the excitement and discovery of acquiring new knowledge. Participating faculty members post their project descriptions for the following summer and fall/winter sessions in early February and students are invited to apply in early March. See Research Opportunity Program (ROP) for more details.
This course provides a richly rewarding opportunity for students in their second year to work in the research project of a professor in return for 299Y course credit. Students enrolled have an opportunity to become involved in original research, learn research methods and share in the excitement and discovery of acquiring new knowledge. Participating faculty members post their project descriptions for the following summer and fall/winter sessions in early February and students are invited to apply in early March. See Research Opportunity Program (ROP) for more details.
Privacy and Freedom of Information; recent Canadian legislation and reports. Computers and work; employment levels, quality of working life. Electronic fund transfer systems; transborder data flows. Computers and bureaucratization. Computers in the home; public awareness about computers. Robotics. Professionalism and the ethics of computers. The course is designed not only for science students, but also those in social sciences or humanities.
An introduction to agile development methods appropriate for medium-sized teams and rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; estimation and prioritization; teamwork skills; basic UML; design patterns and refactoring; security.
An introduction to software development on the web. Concepts underlying the development of programs that operate on the web; survey of technological alternatives; greater depth on some technologies. Operational concepts of the internet and the web, static client content, dynamic client content, dynamically served content, n-tiered architectures, web development processes, and security on the web. Assignments involve increasingly more complex web-based programs.
An introduction to reliable and accurate transmission of information. Entropy, lossless and lossy data compression, optimal compression, information channels, channel capacity, error-correcting codes, and digital fountain codes. Course concepts form the basis for practical applications such as ZIP and MP3 compression, channel coding for DSL lines, communication in deep space and to mobile devices, CDs and disk drives, the development of the Internet, as well as linguistics and human perception.
An introduction to methods for automated learning of relationships on the basis of empirical data. Classification and regression using nearest neighbour methods, decision trees, linear models, and neural networks. Clustering algorithms. Problems of overfitting and of assessing accuracy.
User-centered design of interactive systems. Methodologies, principles, metaphors, task analysis, and other topics. Interdisciplinary design; the role of industrial design and the behavioural sciences. Interactive hardware and software; concepts from computer graphics. Classes of direct manipulation systems, extensible systems, rapid prototyping tools. Additional topics in interactive computational media. Students work on projects in interdisciplinary teams. Enrolment limited, but non-computer scientists welcome.
(Cross list with MAT302H5) The course will take students on a journey through the methods of algebra and number theory in cryptography, from Euclid to Zero Knowledge Proofs. Topics include: block ciphers and the Advanced Encryption Standard (AES); algebraic and number-theoretic techniques and algorithms in cryptography, including methods for primality testing and factoring large numbers; encryption and digital signature systems based on RSA, factoring, elliptic curves and integer lattices; and zero-knowledge proofs.
Major topics in the development of modern programming languages. Syntax specification, type systems, type inference, exception handling, information hiding, structural recursion, run-time storage management, and programming paradigms. Two non-procedural programming paradigms: functional programming (illustrated by languages such as Lisp, Scheme, ML or Haskell) and logic programming (illustrated by languages such as Prolog, XSB or Coral).
Computational methods for solving numerical problems in science, engineering and business. Linear and non-linear equations, approximation, optimization, interpolation, integration and differentiation. The aim is to give students a basic understanding of floating-point arithmetic and the implementation of algorithms used to solve numerical problems, as well as a familiarity with current numerical computing environments. Course concepts are crucial to a wide range of practical applications such as computational finance and portfolio management, graphics and special effects, data mining and machine learning, as well as robotics, bioinformatics, medical imaging and others.
Introduction to database management systems. The relational data model. Relational algebra. Querying and updating databases: the query language SQL. Application programming with SQL. Integrity constraints, normal forms, and database design. Elements of database system technology: query processing, transaction management.
An investigation of many aspects of modern information security. Major topics cover: Techniques to identify and avoid common software development flaws which leave software vulnerable to crackers. Utilizing modern operating systems security features to deploy software in a protected environment. Common threats to networks and networked computers and tools to deal with them. Cryptography and the role it plays in software development, systems security and network security.
Introduction to computer networks and systems programming of networks. Basic understanding of computer networks and network protocols. Network hardware and software, routing, addressing, congestion control, reliable data transfer, and socket programming.