York University Computer Science Skill Tree (Course Prerequisite List)
EECS 1001 (1.00) Research Directions in Computing
An introduction to research directions within the department and more broadly within the field. Students will attend lectures and other events organised by the department. Note: This course is expected to be completed in the first-year of study.
EECS 1012 (3.00) Introduction to Computing: A Net-centric Approach
The objectives of 1012 are threefold: providing a first exposure to event-driven programming, teaching students a set of computing skills (including reasoning about algorithms, tracing programs, test-driven development, unit testing), and providing an introduction to computing within a mobile, net-centric context. It uses problem-based approach to expose the underlying concepts and an experiential laboratory to implement them. A mature mobile software infrastructure (such as HTML, CSS, and JavaScript) is used so that students can pick up key programming concepts (such as variables and control flow) within a client-server context without being bogged down in complex or abstract constructs. Laboratory exercises expose students to a range of real-world problems with a view of motivating computational thinking and grounding the material covered in lecture.
EECS 1015 (3.00) Introduction to Computer Science and Programming
This course is an introduction to the concepts and tools of computer science as students learn a procedural subset of the Python programming language. Python has a variety of libraries in different domains allowing for the solution of interesting problems which has made it a popular language in industry and the academy. Students do hands-on work to design, write, debug and test computer programs that solve problems computationally. Students study variables, assignments, expressions (arithmetic, relational and logical) and sequencing of statements to implement solutions for computational problems, in Python. They document programs with comments and preconditions. They analyze the type correctness of programs via a type checker. They use an Integrated Development Environment (IDE) to develop, unit-test and debug programs given a problem specification. They apply conditionals (including nested conditionals) to implement algorithms to solve computational problems. They code functions to develop modular programming solutions for computational problems. They apply Python loops (including nested loops) to implement algorithms to solve computational problems. They apply data structures, including tuples, sets, lists and dictionaries, to implement algorithms to solve computational problems. They code simple recursive functions to implement algorithms to solve computational problems.
MATH 1019 (3.00) Discrete Mathematics for Computer Science
Introduction to abstraction. Use and development of precise formulations of mathematical ideas. Informal introduction to logic; introduction to naïve set theory; induction; relations and functions; big O-notation; recursive definitions, recurrence relations and their solutions; graphs and trees.
MATH 1025 (3.00) Applied Linear Algebra
Topics include spherical and cylindrical coordinates in Euclidean 3-space, general matrix algebra, determinants, vector space concepts for Euclidean n-space (e.g. linear dependence and independence, basis, dimension, linear transformations etc.), an introduction to eigenvalues and eigenvectors.
MATH 1300 (3.00) Differential Calculus with Applications
Limits, derivatives with applications, antiderivatives, fundamental theorem of calculus, beginnings of integral calculus.
EECS 1022 (3.00) Programming for Mobile Computing
Provides a first exposure to object-oriented programming and enhances student understanding of key computing skills such as reasoning about algorithms, designing user interfaces, and working with software tools. It uses problem-based approach to expose the underlying concepts and an experiential laboratory to implement them. A mature mobile software infrastructure (such as Java and the Android programming environment) is used to expose and provide context to the underlying ideas. Laboratory exercises expose students to a range of real-world problems with a view of motivating computational thinking and grounding the material covered in lectures.
MATH 1310 (3.00) Integral Calculus with Applications
MATH 1090 (3.00) Introduction to Logic for Computer Science
The syntax and semantics of propositional and predicate logic. Applications to program specification and verification. Optional topics include set theory and induction using the formal logical language of the first part of the course.
EECS 2001 (3.00) Introduction to the Theory of Computation
Introduction to the theory of computing, including automata theory, formal languages and Turing machines; theoretical models and their applications in various fields of computer science. The emphasis is on practical applications of the theory and concepts rather than formal rigour.
EECS 2021 (4.00) Computer Organization
Introduction to computer organization and instruction set architecture, covering assembly language, machine language and encoding, addressing modes, single/multicycle datapaths (including functional units and controls), pipelining, memory segments and memory hierarchy.
This course continues the separation of concern theme introduced in LE/EECS 1020 3.00 and LE/EECS1021 3.00. While 1020 and 1021 focuses on the client concern, this course focuses on the concern of the implementer. Hence, rather than using an API (Application Programming Interface) to build an application, the student is asked to implement a given API. Topics include implementing classes (non-utilities, delegation within the class definition, documentation and API generation, implementing contracts), aggregations (implementing aggregates versus compositions and implementing collections), inheritance hierarchies (attribute visibility, overriding methods, abstract classes versus interfaces, inner classes); applications of aggregation and inheritance in concurrent programming and event-driven programming; recursion; searching and sorting including quick and merge sorts); stacks and queues; linked lists; binary trees.
EECS 2031 (3.00) Software Tools
Tools commonly used in the software development process: the C language; shell programming; filters and pipes; version control systems and "make"; debugging and testing.
MATH 2015 (3.00) Applied Multivariate and Vector Calculus
Topics covered include partial derivatives; grad, div, curl and Laplacian operators; line and surface integrals; theorems of Gauss and Stokes; double and triple integrals in various coordinate systems; extrema and Taylor series for multivariate functions.
MATH 2030 (3.00) Elementary Probability
Introduction to the theory of probability as preparation for further study in either mathematical or applied probability and statistics. Topics include probability spaces, conditional probability, independence, random variables, distribution functions, expectation, Chebyshev's inequality, common distributions, moment-generating functions and limit theorems.
EECS 2101 (3.00) Fundamentals of Data Structures
The course discusses the fundamental data structures commonly used in the design of algorithms. Abstract operations on data structures are specified using pre- and post-conditions and/or system invariants. Trade-offs between a number of different implementations of each abstract data types (ADT) are analyzed. Each algorithm operating on data structures is proved correct using loop invariants or induction. Both formal and informal proofs are introduced, but most of the reasoning is done informally. Data structures are coded and unit tested in an object oriented language. Selecting the appropriate ADT and a suitable implementation depending on the application is covered.
MATH 2271 (3.00) Differential Equations for Scientists and Engineers
Introduction to ordinary and partial differential equations, including their classification, boundary conditions, and methods of solution. Equations, methods, and solutions relevant to science and engineering are emphasized, and exploration is encouraged with the aid of software. Three lecture hours per week. One term. Three credits.
EECS 3000 (3.00) Professional Practice in Computing
Professional, legal and ethical issues in the development, deployment and use of computer systems; their impact on society including privacy and security, computer crime, malware, and intellectual property; professional ethics and responsibilities; guest lecturers from industry, government and university.
EECS 3101 (3.00) Design and Analysis of Algorithms
Review of fundamental data structures. Analysis of algorithms: time and space complexity. Algorithm design paradigms: divide-and-conquer, exploring graphs, greedy methods, local search, dynamic programming, probabilistic algorithms, computational geometry. NP-complete problems.
EECS 3201 (4.00) Digital Logic Design
Theory, analysis, and design of logic circuits used in digital systems. Students will be introduced to design of switching circuits to implement logic gates, digital number representation and arithmetic circuits. They will learn how to use logic gates to construct combinational and sequential logic circuits and functional blocks. The course and the laboratory introduces the students to hardware description language and modern cad tools.
EECS 3213 (3.00) Communication Networks
Introduces the basics of communications and networking. Topics include transmission media; fundamental limits; protocols and hierarchies; the OSI model; encoding of data as signals; error and flow control; medium access; routing; internetworking; transport services; high-level applications.
EECS 3214 (3.00) Computer Network Protocols and Applications
This course focuses on the higher-level network protocols, security issues, network programming, and applications.
EECS 3215 (4.00) Embedded Systems
Introduction to the design of embedded systems using both hardware and software. Topics include microcontrollers; their architecture, and programming; design and implementation of embedded systems using field programmable gate arrays.
EECS 3221 (3.00) Operating System Fundamentals
Principles of operating systems. Concurrent processes, CPU scheduling, deadlocks, memory management, file systems, protection and security, and case studies.
EECS 3311 (3.00) Software Design
A study of design methods and their use in the correct implementation, maintenance and evolution of software systems. Topics include design, implementation, testing, documentation needs and standards, support tools. Students design and implement components of a software system.
EECS 3342 (3.00) System Specification and Refinement
Theory and tools for specifying computer systems (sequential, concurrent and embedded). Specification (via set theory and predicate logic), modelling, abstraction, refinement and formal reasoning are undertaken before code development so that systems are correct by construction under the stated assumptions.
EECS 3401 (3.00) Introduction to Artificial Intelligence and Logic Programming
Artificial Intelligence (AI) deals with how to build intelligent systems. In this course, we examine fundamental concepts in AI: knowledge representation and reasoning, search, constraint satisfaction, reasoning under uncertainty, etc. The course also introduces logic programming and Prolog.
EECS 3421 (3.00) Introduction to Database Systems
Concepts, approaches and techniques in database management systems (DBMS). Logical model of relational databases. An introduction to relational database design. Other topics such as query languages, crash recovery and concurrency control.
EECS 3431 (3.00) Introduction to 3D Computer Graphics
Introduces the fundamental concepts and algorithms of three-dimensional computer graphics, including object modelling, transformations, cameras, visibility and shading.
EECS 3451 (4.00) Signals and Systems
An introduction to the mathematical background in signals and systems; signal and image processing: sampling, discrete Fourier transform, filtering; linear system theory; Kalman filtering; feedback.
EECS 3461 (3.00) User Interfaces
Introduces user interfaces and the tools and mechanisms to create and prototype them. Students work in small groups and learn how to design user interfaces, how to realize them and how to evaluate the end result.
EECS 3481 (3.00) Applied Cryptography
An overview of cryptographic algorithms and the main cryptosystems in use today, emphasizing the application of cryptographic algorithms to designing secure protocols.
EECS 3482 (3.00) Introduction to Computer Security
Introduces fundamental computer security concepts. Topics include security goals and terminology, an overview of the various security domains, an introduction to cryptography, security policies, risk management and auditing. Laboratory exercises emphasize these topics in a practical manner.
EECS 3216 (3.00) Digital Systems Engineering: Modeling, Implementation and Validation
This is a project intensive course to introduce students to modeling, implementation, testing, and validation of hardware-based embedded systems. The emphasis in this course is on complex digital systems that interact with physical systems.
EECS 4101 (3.00) Advanced Data Structures
Amortized and worst-case analysis of data structures. Data structuring paradigms: self-adjustment and persistence. Lists: self-adjustment with the move-to-front heuristic. Search trees: splay trees, finger search trees. Heaps: skew heaps, Fibonacci heaps. Union-find trees. Link-and-cut trees. Multidimensional data structures and dynamization. Integrated with: GS/CSE 5101 3.00.
EECS 4111 (3.00) Automata and Computability
Introduction to more advanced topics in theoretical foundations of computer science, including the study of formal languages and automata, formal models of computation, and computational complexity measures. Integrated with: GS/CSE 5111 3.00.
EECS 4141 (3.00) Introduction to Quantum Computing
This course presents an overview of the quantum computing field without assuming any prior exposure to quantum mechanics. Drawing parallels between quantum and classical computing, the course covers the physical layer briefly before moving to quantum gates, the circuit model, and quantum algorithms. Quantum information is covered through applications.
EECS 4161 (3.00) Mathematics of Cryptography
Probability, information theory and number theory and applications to cryptography. Classical codes such as Caesar shift, Vigenere, ADFGVX, rectangular substitution, and others. Other topics: comma free codes, perfect secrecy, index of coincidence, public key systems, primality testing and factorization algorithms.
EECS 4201 (3.00) Computer Architecture
The internal structure and design ideas embodied in many computers and the techniques for evaluating them. Fast arithmetic algorithms, memory system designs, pipeline techniques, input-output subsystems and parallel computing structures. Future trends in computer architecture.
EECS 4214 (4.00) Digital Communications
Introduces fundamental principles underlying design and analysis of digital communication systems. Develops mathematical/physical understanding from the information source through the transmitter, channel, receiver, and information sink. Topics include baseband transmission, matched filtering, modulation, channel coding, and spread spectrum.
EECS 4215 (3.00) Mobile Communications
Provides an overview of the latest developments and trends in wireless mobile communications, and addresses the impact of wireless transmission and user mobility on the design and management of wireless mobile systems.
This course deals with the elicitation, specification and analysis of software requirements and provides a critical description of available methods and tools, and practical exercises on applying these methods and tools to realistic problems. Three lecture hours per week. One laboratory hour per week. One term. Three credits.
EECS 4313 (3.00) Software Engineering Testing
An introduction to systematic methods of testing and verification, covering a range of static and dynamic techniques and their use within the development process; emphasizes the view that design should be carried out with verification in mind to achieve overall project goals.
EECS 4314 (3.00) Advanced Software Engineering
Advanced software engineering methods, processes and measurements (from requirements through to system evolution) for managing and delivering reliable software on time and within budget. Understanding the different types of systems and their associated technical, ethical and professional issues.
EECS 4315 (3.00) Mission-Critical Systems
Theory and practical tools underlying deductive and algorithmic methods for ensuring the safety and correctness of mission critical systems (e.g. medical systems, nuclear reactors and train systems) with the practical ability to use verification tools to perform software certification.
EECS 4401 (3.00) Artificial Intelligence
This is a second course in Artificial intelligence that covers selected topics in this area such as: reasoning about action and planning, uncertain and fuzzy reasoning, knowledge representation, automated reasoning, non-monotonic reasoning and answer set programming, ontologies and description logic, local search methods, Markov decision processes, autonomous agents and multi-agent systems, machine learning, reasoning about beliefs and goals, and expert systems.
EECS 4404 (3.00) Introduction to Machine Learning and Pattern Recognition
Machine learning is the study of algorithms that learn how to perform a task from prior experience. This course introduces the student to machine learning concepts and techniques applied to pattern recognition problems in a diversity of application areas.
EECS 4411 (3.00) Database Management Systems
A study of principles of database management systems. A thorough analysis of theory of normal, relational algebra and calculus and query languages based on these concepts. Other topics: security and integrity issues, concurrency control, distributed systems, query optimization.
EECS 4412 (3.00) Data Mining
Introduces and presents basic concepts of data mining, data mining techniques, models and applications. Topics include association rule mining, classification models, sequential pattern mining and clustering.
EECS 4413 (3.00) Building E-Commerce Systems
A study of the technical infrastructure that underlies Electronic Commerce on the Internet. The foundational concepts are presented through a series of projects that use an industrial-strength framework on the server side, standard-compliant technologies on the client side, and a variety of messaging protocols on the network side. Best practices, security concerns, and performance issues are emphasized throughout.
EECS 4414 (3.00) Information Networks
Information networks are effective representations of pairwise relationships between objects. Examples include technological networks (e.g., World Wide Web), online social networks (e.g., Facebook), and biological networks (e.g., Protein-to-Protein interactions). The study of information networks is an emerging discipline of immense importance that combines graph theory, probability and statistics, data mining and analysis, and computational social science. This course provides students with both theoretical knowledge and practical experience of the field by covering models and algorithms of information networks and their basic properties. In addition, analysis of information networks provides the means to explore large, complex data coming from vastly diverse sources and to inform computational problems and better decisions. Topics include: basic graph theory, network measurements, network models, community detection, graph partitioning, link analysis, link prediction, information cascades & epidemics, influence maximization, network ties, recommendation systems, mining graphs, and connections to problems in the social sciences and economics.
EECS 4415 (3.00) Big Data Systems
Storing, managing, and processing datasets are foundational to both computer science and data science. The enormous size of today's data sets and the specific requirements of modern applications necessitated the growth of a new generation of data management systems, where the emphasis is put on distributed and fault-tolerant processing. New programming paradigms have evolved, an abundance of information platforms offering data management and analysis solutions appeared and a number of novel methods and tools have been developed. This course introduces the fundamentals of big data storage, retrieval, and processing systems. As these fundamentals are introduced, exemplary technologies are used to illustrate how big data systems can leverage very large data sets that become available through multiple sources and are characterized by diverse levels of volume (terabytes; billion records), velocity (batch; real-time; streaming) and variety (structured; semi-structured; unstructured). The course aims to provide students with both theoretical knowledge and practical experience of the field by covering recent research on big data systems and their basic properties. Students consider both small and large datasets because both are equally important and justify different trade-offs. Topics include: software frameworks for distributed storage and processing of very large data sets, MapReduce programming model, querying of structured data sets, column stores, key-value stores, document stores, graph databases, distributed stream processing frameworks.
EECS 4421 (3.00) Introduction to Robotics
An introduction to robotic manipulators and autonomous vehicles. The course covers the kinematics and dynamics of manipulators and autonomous platforms, robot sensors and navigation.
EECS 4422 (3.00) Computer Vision
Fundamental concepts of Computer vision and including aspects of biological vision, image formation process, image processing, feature extraction and matching, 3-D parameter estimation, applications and statistical techniques. Twelve supervised laboratory hours.
EECS 4441 (3.00) Human-Computer Interaction
Introduces the concepts and technology necessary to design, manage and implement interactive software. Students work in small groups and learn how to design user interfaces, how to realize them and how to evaluate the end result. Both design and evaluation are emphasized.
EECS 4443 (3.00) Mobile User Interfaces
The design and implementation of user interfaces for touchscreen devices and tablet computers. Students develop user interfaces that include touch, multi-touch, vibration, device motion, position, and orientation, environment sensing, video capture, and audio capture. Twelve Supervised laboratory hours that emphasize these topics in a practical manner.
EECS 4452 (3.00) Digital Signal Processing: Theory and Applications
Fundamental digital signal processing. Inner product, Hilbert space, orthogonality principle, discrete-time Fourier transform, discrete Fourier transform, z-transform, multirate systems, sampling and interpolation.
EECS 4461 (3.00) Hypermedia and Multimedia Technology
Design and application of computer systems which provide information resources for learning, online-help, conceptual exploration, visualization and entertainment; e.g. hypertext/hypermedia, networked information-servers, systems for collaborative work, and "virtual reality". One or two topics are discussed in depth using current research literature.
EECS 4481 (3.00) Computer Security Laboratory
Provides a thorough understanding of the technical aspects of computer security. It covers network, operating systems, and application software security. Computer laboratory projects provide exposure to various tools in a hands-on setting.
EECS 4482 (3.00) Network Security and Forensics
This course provides a comprehensive coverage of theoretical and practical aspects of network security and forensics. The emphasis is on the limitations and attacks against network protocols and architectures most widely used in practice, as well as the best known detection, prevention and remediation techniques against these attacks. The course also has a strong emphasis on hands-on learning either by using already existing real-world tools or by developing new custom software. Familiarity with the TCP/IP protocol suite and basic computer networking concepts is required.
EECS 4491 (3.00) Simulation and Animation for Computer Games
Introduction to simulation and animation techniques used in computer games, with a focus on the algorithms and methods that support moving objects in the virtual environments.
EECS 2101 (3.00)
Fundamentals of Data Structures
Prerequsites:
Click on a course to see its description here
Zoom: 1x
There is now a new and improved version of this site!
Features include:
Prerequisite as logic equations
Filter by reachable (tick a box then turn on filter, accessible nodes will 'light up')