Winter 2017 Undergraduate Calendar


COMPUTER SCIENCE: COURSES

Not all courses listed below will necessarily be offered every academic year.

All courses listed below are three lecture hours per week or equivalent, unless otherwise stated. In addition, laboratory/tutorial time may be scheduled as required.

Note: Most Computer Science courses require substantial time out of class in writing, correcting, and testing computer programs. Students should be prepared to devote a minimum of three to five hours a week per course to assignment work alone.

60-100. Key Concepts in Computer Science
The objectives of this course are to excite students' interest in computer science and to give students a precise understanding of a number of difficult concepts that are fundamental to modern computer science. Topics may include: induction and recursion; algebraic characterization; syntax; semantics; formal logic; soundness, completeness, and decidability; specification, algorithm, and determinism; complexity. (Restricted to students registered in programs offered wholly or jointly by Computer Science or by Mathematics and Statistics, or with approval of Computer Science.) (3 lecture hours and 1.5 laboratory hours a week)

60-104. Computer Concepts for End-Users
Introduction to the concepts of operation of a computer system, including hardware and software. Development of conceptual understanding of word processors, databases, spreadsheets, etc., and practical experience with their use. Networking concepts and data communication concepts will be introduced. The Internet will be introduced with students having access to internet resources. Management information systems including the systems development lifecycle will be discussed. Fundamental concepts of algorithm development and programming will be introduced. Hands-on experience with microcomputers as well as a distributed-computing environment will be involved. In addition to lecture time, laboratory/tutorial time may be scheduled as required. (May not be used to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours)

60-106. Programming for Beginners
This course introduces fundamental computer programming principles and structured programming concepts, with an emphasis on good programming. Stages of the software development cycles are introduced: analysis, design, implementation, debugging and deployment. May not be used to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours).

60-140. Introduction to Algorithms and Programming I
This course is the first of a two-course sequence designed to introduce students to algorithm design and programming in a high-level language such as C. The main objectives of the course are to develop the ability to identify, understand and design solutions to a wide variety of problems. Topics include: computer system overview, hardware and software, problem solving steps, concepts of variables, constants, data types, algorithmic structure, sequential logic, decisions, loops, modular programming, one-dimensional arrays, text files. If possible, problems like searching/sorting will be addressed. (3 lecture hours and 1.5 laboratory hours a week)

60-141. Introduction to Algorithms and Programming II
This course is the continuation of 60-140 that introduces students to more advanced algorithm design and programming in a high level language such as C. The main objectives of the course are to develop the ability to identify, understand, and design solutions to a wide variety of problems. Topics covered include: multi-dimensional arrays, pointers, strings, advanced modular programming, records, binary files, recursion, stacks, linked lists and introduction to algorithm analysis. (Prerequisite: 60-100 (or 62-140) and 60-140.) (3 lecture and 1.5 laboratory hours a week).

60-205. Introduction to the Internet
Students will be introduced to the Internet as a global information infrastructure, including the development of early and current communication protocols and services, packaging of data, and data transmission. Fundamental concepts of and tools to support Internet browsing through concepts of Universal Resource locators and Hypertext Markup Languages will be included. Students will be required to publish a website on the Internet using HTML. Web page enhancement through the use of JavaScript and other tools will be introduced. The functionality of electronic mail and bulletin board services will be introduced with hands-on experience in sending and receiving information, automated title searching, and an introduction to organizing information to be accessible over the network. Technical methods of binary data transfer on analog carriers will be introduced and comparison of Ethernet and ATM fibre-optic digital delivery will be discussed. In addition to lecture time, laboratory/ tutorial time may be scheduled as required. (Prerequisite: 60-104 or 60-106 or 60-140.) (May not be used to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours a week)

60-207. Problem Solving and Information on the Internet
Students will be introduced to logic and critical appraisals including reasoning skills and critical thinking in the computer age. Problem solving and heuristics will be discussed including how to solve problems by coming up with the right strategies. Searching using Boolean logic to pinpoint useful and reliable information will be introduced. Methods for being self-critical and critical of web information in order to perform evaluations will be studied. (Prerequisites 60-104 and 60-205.) (This course may not be taken to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours a week.)

60-209. Social Media and Mobile Technology for End Users
This course provides review, analysis and use of social media and mobile technologies such as blogs, Facebook ™, twitter ™, texting, using mobile devices such as laptops, Apple devices, RIM devices, Android devices. Topics to be covered include: a comprehensive review of available social media and mobile technology, use of social media and mobile technology for sharing of knowledge and for group interaction, security and privacy, methods for analyzing end-user requirements for a social media application, and strategies for designing and building a social media application. (This course may not be taken to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours a week.)

60-212. Object-Oriented Programming Using Java
Concepts of classes and objects, Java applications, frames, event handling, control structures, methods, arrays, string manipulations, object-based programming, object-oriented programming - inheritance, polymorphism, interface and abstract classes, anonymous classes, data structures in Java, exception handling, introduction to graphical user interface. (Prerequisite: 60-141.) (3 lecture hours and 1.5 laboratory hours a week)

60-214. Computer Languages, Grammars, and Translators
Pragmatic and theoretical aspects of grammars, recognizers, and translators for computer languages will be discussed. The topics covered will include regular languages and context-free languages, including parsers and parser generators for such languages. Attribute grammars, syntax-directed translation, interpreters and compilers will also be discussed. (Prerequisite:60-100 and 60-212.) (3 lecture hours and 1.5 laboratory hours a week)

60-231. Theoretical Foundations of Computer Science
An introduction to Mathematical Logic, Set Theory, and Graph Theory. Topics include propositional logic, first order logic, proof techniques, mathematical induction, sets, operations on sets, relations, operations on relations, functions, countable and uncountable sets, graph-theoretic concepts, such as graph connectivity, graph isomorphism, trees, Euler graphs. (Restricted to students in Computer Science.) (Prerequisite: 60-100 and 62-190.)(3 lecture hours and 1.5 laboratory hours a week)

60-254. Data Structures and Algorithms
An introduction to the programming and analysis of linear and non-linear internal (main store) data structures and associated algorithms . Topics include the formal notion of an algorithm, elementary time and space complexity; linear lists (such as stacks, queues, linked structures.); non-linear lists (trees, binary trees); recursion; sorting techniques (such as heap sort, quick sort, merge sort, shell sort.); searching techniques (such as binary search, binary search trees, red-black trees, hashing.); algorithm design paradigms (such as divide-and-conquer, dynamic programming, greedy algorithms); and applications. (Prerequisite: 60-100 and 60-141) (3 lecture hours and 1.5 laboratory hours a week)

60-256. Systems Programming
This course introduces students to advanced software development techniques in system programming using the C language in the UNIX environment. Topics include introduction to modern operating systems, system calls, managing processes, the use of fork and exec, signals, file processing, filters, pipes, scripting languages, introduction to concurrency (e.g. synchronization), network programming (e.g. using sockets), client-server problems. (Prerequisite: 60-141.)(3 lecture hours and 1.5 laboratory hours a week)

60-265. Computer Architecture I: Digital Design
This course covers fundamental concepts of digital design and CPU architecture. Topics covered include number systems, switching algebra, logic gates, circuit minimization combinational circuit, read-only memory, random-access memory, programmable logic, synchronous and asynchronous sequential circuits, latches, flip-flops, registers, counters, register transfer language. and CPU architecture overview. (Prerequisite: 60-140) (3 lecture hours and 1.5 laboratory hours a week)

60-266. Computer Architecture II: Microprocessor Programming
This course uses microprocessor programming to explore the structure of a CPU and related components. Topics include data representation, central processing unit, arithmetic logic unit, control unit, assembly language concepts, memory segmentation, programming a typical microprocessor (e.g. Intel processors), instruction set architecture-addressing modes and formats, register set, runtime stack, floating point processor. (Prerequisite: 60-265). (3 lecture hours and 1.5 laboratory hours a week)

60-270. Advanced Web Design, Construction, and Deployment
This course is intended to teach the student about advanced website creation and to give an understanding of some of the technology behind websites, as well as an understanding of emerging web-related technologies. Topics covered will include JavaScript, Style Sheets, Dynamic HTML, XML, XHTML, Web Browser compatibility issues, and how web servers work. (Prerequisite: 60-205.) (This course may not be taken to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours a week)

60-275. Selected Topics I
Topics may differ from year to year. (Prerequisite: 60-100 or 62-140, and 60-141.) (May be repeated for credit if content changes.) (3 lecture hours or equivalent.)

60-280. Software Development
This is a software development course to advance students' programming skills and to introduce basic software engineering concepts and techniques through practice. Topics for advancing programming skills to be covered include event-driven programming and advanced GUI design, concurrent programming techniques, reflection and inter-process communication. Basic software engineering topics include requirements analysis and design, medium sized project management, and automated software engineering tool development. (Prerequisite: 60-212.) (3 lecture hours and 1.5 laboratory hours a week.)

60-298. Co-op Work Term I
Supervised experience in an approved career-related setting with a focus on the application of theory and the development of transferable skills. The co-op work experience is designed to provide students with an enriched learning opportunity to integrate academic theory and concepts in an applied setting. (Prerequisite: Student must be enrolled in a co-operative education program. Offered on a Pass/non-Pass basis. Supervised practicum requires the successful completion of a minimum of 420 hours. Students who do not pass the course can not continue in the co-op program.)

60-305. Cyber-Ethics
A number of key concerns about social welfare in our cyber age will be explored. Law, morality, public policy, and how these both influence and are influenced by the Internet will be examined. This course will critically appraise issues surrounding, but not limited to, free speech, property rights (especially intellectual property), privacy, security, and artificial intelligence. Issues raised by ethical theorists, policy makers, legal experts, and computer scientists will be analyzed in this course. (Prerequisites: 60-104 and 60-205.) (This course may not be taken to fulfill the major requirements of any major or joint major in Computer Science.)(3 lecture hours a week)

60-307. Web-Based Data Management
This non-major course is intended to teach students how to design and build interactive data-driven Web sites, by extending their knowledge of relevant programming concepts and techniques introduced in 60-270, and introducing new tools and techniques. Students will learn advanced use of PHP and MySQL to build objects and “glue” them together using protocols such as JSON, code libraries such as AJAX and jQuery, and learn how to incorporate API’s from Web service providers such as Google Maps. (Prerequisite: 60-270). (This course may not be taken to fulfill the major requirements of any major or joint major in Computer Science.) (3 lecture hours a week.)

60-311. Introduction to Software Engineering
This course introduces the fundamental concepts, common principles, and general techniques of software engineering. It discusses the main issues involved in the development life-cycle of nontrivial software systems, including process models, feasibility studies, requirements elicitation and definition, rapid prototyping, design methodologies, verification and validation, and software evolution. Students taking this course are required to work on projects, which are designed to go through the major phases of large-scale software system development. (Prerequisite: 60-212 and 60-254.)(3 lecture hours a week)

60-315. Database Management Systems
This course will acquaint students with the Basic concepts of Database Systems. The topics covered will include 3-level architecture, introduction to file structures: B-trees, B+ Trees and Hashed files, relational model, relational algebra and calculus, SQL, and database design with Normalization Theory. (Prerequisite: 60-254 and 60-256 or 60-265.) (3 lecture hours a week)

60-322. Object-Oriented Software Analysis and Design
This course builds on the knowledge of object-oriented programming, data structures, systems programming .Students are introduced to object-oriented software analysis and design concepts (such as cohesion and coupling), and design practices currently used in industry , (such as design patterns and refactoring). These concepts and practices will be discussed through case studies and programming exercises.(Prerequisite: 60-212 and 60-254)(3 lecture hours a week)

60-330. Operating Systems Fundamentals
Operating system services, introduction to primary components of multi-programming operating systems, CPU scheduling, concurrent processes, process synchronization and interprocess communication, deadlocks, memory management, file systems, virtual memory, disk scheduling. (Prerequisite: 60-212, 60-254, 60-256, and 60-265 or 60-266.)(3 lecture hours a week)

60-334. World Wide Web Information Systems Development
This course is designed for people who want to make their data available to others over the Internet. Topics will include WWW authoring, WWW site planning, executable programs that create dynamic documents, the client-server model, multi-tier WWW software architecture, and security aspects. (Prerequisite: 60-212 and 60-254.) (3 lecture hours a week)

60-340. Advanced Object Oriented System Design Using C++
The main objective of this course is to explore advanced topics of the object oriented paradigm through the use of the C++ programming language. Topics covered include: advanced object oriented design, the use of abstraction to manage complexity, objects and classes, inheritance and class hierarchies, multiple inheritance, operator and method overloading, namespaces and visibility, templates, dynamic binding and virtual functions, exception handling, multi-threading and C++ standard library. In addition, the course will include a practical project, solving a real-life problem, implemented in C++, involving the client/server methodology, and an interface to a database using a graphics toolkit. (Prerequisites: 60-212, 60-256.) (3 lecture hours a week)

60-350. Introduction to Multimedia Systems
This course provides the student with basic concepts and techniques used in multimedia systems. Topics include: components of multimedia systems (text, audio, and video), media formats and standards, data compression techniques, hypermedia techniques, and authoring tools. (Prerequisite: 60-254 and 60-265.) (3 lecture hours a week)

60-352. Introduction to Computer Graphics
An introduction to computer graphics hardware and software, interfaces, standards, programming libraries, fundamental algorithms, rendering techniques, and algorithms for 2D and 3D applications. Substantial programming work is vital to this course. (Prerequisite: 60-254 and 62-120.) (3 lecture hours a week)

60-354. Theory of Computation
Finite Automata, regular expressions and languages; properties of regular languages; context-free grammars and languages; pushdown automata; properties of context-free languages. Introduction to Turing machines; recursive functions; undecidability. (Prerequisites: 60-214, 60-231 and 60-254.) (3 lecture hours a week)

60-367. Computer Networks
This course is an introduction to computer networks and their protocols. Topics include: network architectures, transport, routing, and data link protocols, addressing, local area networks, flow and congestion control, and network security. Examples will be drawn primarily from the Internet (e.g. TCP, UDP, IP) protocol suite. (Prerequisite: 60-212, 60-254, 60-256 and 60-265. Recommended corequisite: 60-330.)

60-368. Network Practicum
This course will acquaint the students with practical details of network software and hardware. Topics will include design, setup, configuration and implementation of various network functions. (Prerequisite: 60-330 and 60-367.) (3 lecture hours and 1.5 lab hours a week.)

60-371. Artificial Intelligence Concepts
This course covers fundamental concepts in Artificial Intelligence. Topics include informed and uninformed search, problem solving using propositional and first-order logics, knowledge representation and reasoning, plausible and uncertain reasoning, machine learning, ethical implications. An overview of some applied Artificial Intelligence such as natural language processing, planning and agent systems will be included. (Prerequisites:60-254 and (65-205 or 65-250) (3 lecture hours a week)

60-375. Selected Topics
Topics may differ from year to year. (Prerequisite: 60-212, 60-254, and 60-256. Additional courses may be required depending upon the subject.) (May be repeated for credit if content changes.)(3 lecture hours or equivalent a week)

60-376. Selected Topics
Topics may differ from year to year. (Prerequisite: 60-212, 60-254, and 60-256. Additional courses may be required depending upon the subject.) (May be repeated for credit if content changes.)(3 lecture hours or equivalent a week)

60-377. Game Design, Development and Tools
This course introduces professional game design and development tools. Students will become proficient in the use of a commercial grade game engine (e.g., Unity3D) and associated scripting/programming languages (e.g., C#) through programming intensive hands-on assignments. Topics may include game design and development concepts such as game objects and game components, game physics and collision handling, basic artificial intelligence, 2D and 3D graphics, textures and shaders, sprite animation, 3D animation, and audio. (Prerequisites: 60:254, 60-212.) (3 lecture hours a week)

60-398. Co-op Work Term II
Supervised experience in an approved career-related setting with a focus on the application of theory and the development of transferable skills. The co-op work experience is designed to provide students with an enriched learning opportunity to integrate academic theory and concepts in an applied setting. (Prerequisite: Student must be enrolled in a co-operative education program. Offered on a Pass/non-Pass basis. Supervised practicum requires the successful completion of a minimum of 420 hours. Students who do not pass the course cannot continue in the co-op program.)

60-411. Software Verification and Testing
This course covers fundamental concepts and techniques for software verification and testing. The students will learn through practice the testing process, automated software testing tools, and various test models together with the related test coverage criteria. (Prerequisites: 60-311 and 60-330.) (3 lecture hours a week)

60-415. Advanced and Practical Database Systems
This course covers both advanced theoretical database materials as well as specific database application development tools needed in the industry. The course completes database design and theory initiated in 60-315 and then adds database application development languages. Students will be exposed to the running environments (e.g., their compilers) and applying these on the database theory and design of the first part to develop full application. (Prerequisites: 60-315 and 60-330.)
(3 lecture hours a week)

60-420. Mobile Application Development
Students taking this course will learn how to create a mobile application for the Android platform. The topics covered will include: use of the mobile application development environment, specification of the requirements for a mobile application, design and implementation of the end-user interface, managing data in a mobile application environment, interfacing with data and programs residing on remote servers, creation of object-oriented programs to implement the mobile application, use of libraries and third-party software resources, deployment of a mobile application so that it is available to the public, and documentation, including creation of end-user instructions, and design/program documentation.Students will work individually, and will develop a mobile application that has been approved by the instructor of the course. (Prerequisites: 60-315, 60-322.) (3 lecture hours a week.)

60-422. Agile Software Development
This project-oriented course is designed to give students experience in developing projects using Agile software development process. The course will discuss principles of Agile methods for software development, with a concentration on the eXtreme Programming methodology, and will teach concepts related to its practices. Topics will include software and user interface design, build and development tools, data persistence, and proper software testing. Projects will involve the creation of industry-oriented software (e.g. in Java), and will expose participants to tools commonly used in industry. (Prerequisite: 60-322.)(3 lecture hours a week).

60-425. Oracle Database Design and Administration
This course is a practice-oriented course which follows the database course 60-415. The emphasis is on the tasks performed by a Data Base Administrator (DBA). The course will use the Oracle Database system to exemplify implementation of concepts. Students will learn how to install Oracle software, design a relational database system (using normalization) and implement it in Oracle, create user accounts and set privileges, implement appropriate security protocols, and design and implement appropriate backup procedures. (Prerequisite: 60-315) (1.5 lecture hours and 1.5 laboratory hours a week).

60-440. Principles of Programming Languages
Basic concepts of programming languages. Comparative study of the major programming paradigms, including imperative, object-oriented, functional, logic, and concurrent programming. Principles of programming language design and evaluation. Syntax, semantics and implementation techniques of programming languages. (Prerequisite: 60-214, 60-231 and 60-254.) (Restricted to Computer Science students) (3 lecture hours a week)

60-450. Multimedia System Development
The aim of this course is to discuss and learn technologies for the development of multimedia application, modeling and development of standalone and/or, networked multimedia systems, and computer generated 3D animation. (Prerequisite: 60-350 or consent of instructor.) (3 lecture hours a week)

60-454. Design and Analysis of Computer Algorithms
The intent of this course is to introduce the fundamental techniques in the design and analysis of computer algorithms. Topics include: asymptotic bounds, advanced data structures, searching, sorting, order statistics, oracle arguments, divide-and-conquer, greedy algorithms, dynamic programming, graph algorithms, NP completeness, and approximation algorithms. (Prerequisite: 60-231, 60-254 and 60-354.) (Restricted to Semester 7 and semester 8 students in Computer Science.)
(3 lecture hours a week)

60-467. Network Security
This course will introduce students to advanced topics in network security. Topics will include encryption and authentication techniques, detection and analysis of intrusions, and the security of electronic mail and web access. (Restricted to Computer Science students) (Prerequisites: 60-367.) (3 lecture hours a week)

60-468. Advanced Networking
The course will introduce students to advanced topics in networking. (Restricted to Computer Science Students) (Prerequisites: 60-367 and 60-368.)

60-470. Project Using Selected Tools
Students will complete a project using an advanced computing tool, such as a database package, simulation software, speech-recognition hardware module, etc. Students are required to submit a report describing the project and demonstrating mastery of the tool. Tools and the project are chosen by the student with the approval of the instructor. (Restricted to Computer Science Students ) (Prerequisite: 60-315, 60-322, and 60-330.) (3 lecture hours or equivalent a week)

60-473. Advanced Topics in Artificial Intelligence I
The course will introduce students to advanced topics in Artificial Intelligence. (Restricted to Honours Computer Science students) (Prerequisite: 60-371.) (3 lecture hours a week)

60-474. Advanced Topics in Artificial Intelligence II
The course will introduce students to advanced topics in Artificial Intelligence. (Restricted to Honours Computer Science students.) (Prerequisite: 60-371.) (3 lecture hours a week)

60-475. Selected Topics
In many cases the topics will coincide with a graduate course offering in a given year, and students will be required to complete the lecture component of that graduate course. Topics may include: advanced database management, graphics, artificial intelligence, information retrieval, theory of computation, functional programming, knowledge base systems, and foundations of programming languages. (Restricted to Semester 7 and Semester 8 students in Computer Science with permission of the instructor.) (May be repeated for credit if content changes.) (3 lecture hours or equivalent a week)

60-476. Selected Topics
In many cases the topics will coincide with a graduate course offering in a given year, and students will be required to complete the lecture component of that graduate course. Topics may include: advanced database management, graphics, artificial intelligence, information retrieval, theory of computation, functional programming, knowledge base systems, and foundations of programming languages. (Restricted to Semester 7 and Semester 8 students in Computer Science with permission of the instructor.) (May be repeated for credit if content changes.) (3 lecture hours or equivalent a week)

60-477. Artificial Intelligence for Games
This course provides students with an opportunity to explore theoretical and practical aspects of Artificial Intelligence for computer games. Topics may include agents, sensory systems, steering behaviours, pathfinding, decision making, planning, goal-oriented behaviour, multi-agents (groups, crowds) and learning. (This course could be used to satisfy the 60-473 (fourth year AI) requirement.) (Prerequisite: 60-377.) (Restricted to students in Honours Computer Science.)
(3 lecture hours a week)

60-480. Selected Topics in Software Engineering
This course intends to connect emerging technologies with the student's theoretical background in Computer Science related to Software Engineering concepts and techniques. Selected application domains include protocol security, web systems and distributed object systems and the theories involved include graph theory, set theory, automata and compiler theory. (Prerequisite: 60-311, 60-322 and 60-330.) (Restricted to Computer Science Students). (3 lecture hours a week)

60-496. Research Project
This course consists of two components: a) development of research skills, and b) development of technical writing and project presentation skills. This course requires students to complete a research project in some area of Computer Science under the supervision of a faculty member. The course will typically involve the development of some software or the design and/or implementation of some algorithm. Each student will be required to submit a project report and give one or more seminars on the research project. (a 6 credit course restricted to Semester 7 or Semester 8 students in BCS (Honours) or B.Sc. (Honours Computer Science with Software Engineering Specialization) with a major average of 8.0 or better). (Anti-requisite 60-499)(3 lecture hours or equivalent a week, for two terms

60-497. Co-op Work Term III
Supervised experience in an approved career-related setting with a focus on the application of theory and the development of transferable skills. The co-op work experience is designed to provide students with an enriched learning opportunity to integrate academic theory and concepts in an applied setting. (Prerequisite: Student must be enrolled in a co-operative education program. Offered on a Pass/non-Pass basis. Supervised practicum requires the successful completion of a minimum of 420 hours. Students who do not pass the course cannot continue in the co-op program.)

60-498. Co-op Work Term IV
Supervised experience in an approved career-related setting with a focus on the application of theory and the development of transferable skills. The co-op work experience is designed to provide students with an enriched learning opportunity to integrate academic theory and concepts in an applied setting. (Prerequisite: Student must be enrolled in a co-operative education program. Offered on a Pass/non-Pass basis. Supervised practicum requires the successful completion of a minimum of 420 hours. Students who do not pass the course cannot continue in the co-op program.)

60-499. Project Management: Techniques and Tools
This course requires students to complete an application development project in some area of Computer Science under the supervision of a faculty member. The course will typically involve the development of some software or the design and/or implementation of some algorithm. Each student will be required to submit a project report and give one or more seminars on the system development project. (a 6 credit course restricted to Semester 7 or Semester 8 students in Computer Science.) (Antirequisite: 60-496.) (3 lecture hours or equivalent a week, for two terms.