Below are the courses available from the AUCSC subject code. Select a course to view the available classes, additional class notes, class times, and textbooks.
An introduction to computational thinking, problem solving, and the fundamental ideas of computing science through programming in a scripting language (such as Python or Ruby). Topics include algorithms, abstraction, and modelling; the syntax and semantics of a high-level language; fundamental programming concepts and data structures, including simple containers (arrays, lists, strings, dictionaries); basic software development methods and tools; documentation and style; introduction to object-oriented programming; exceptions and error handling; graphical user interfaces and event-driven programming; recursion; introduction to algorithm analysis and run-time efficiency. Prerequisite: Mathematics 30-1. Note: Credit may be obtained for only one of AUCSC 111 and AUCSC 120 (2019).
An introduction to object-oriented design and programming in Java; algorithm analysis; data structures and container classes (lists, stacks, queues, priority queues, maps, dictionaries), their implementations (arrays, linked lists, heaps, hash tables), and associated algorithms (insertion, removal, iterators, sorting, retrieval); introduction to recursion. Prerequisite: AUCSC 111 or 120. Corequisite: AUMAT 110 or 111 or 116 and 120. Note: Credit may be obtained for only one of AUCSC 112 and AUCSC 210.
Introduction to current topics in computing and their application to a wide variety of areas within our society. Topics may be chosen from, but are not limited to, the following: Artificial Intelligence, Big Data, Cloud Computing, Cryptocurrency, Data Compression, Data Mining, Encryption, Internet of Things, Machine Learning, Microchip Implants, Multimedia, Privacy, Robotics, Security, Social Media, Wearable Technology, and Virtual Reality. This course, being a concepts course and not a programming course, is intended to be interdisciplinary in nature.
Software engineering paradigms, requirements specification, iterative software development, object-oriented design patterns, visual modelling with UML, software architecture; testing, verification and maintenance; software development environments and software engineering tools; societal implications such as the cost of failure and professional responsibilities. Prerequisite: AUCSC 112 or 210.
Introduction to computer systems as multilevel machines. Topics include data representation; the organization and execution cycle of Von Neumann machines; assembly-level programming, addressing modes, control flow, procedure calls, input/output, interrupts, caching; finite state machines, Boolean algebra, logic gates, and digital circuits. Prerequisite: AUCSC 112 or 120 (2019).
Trees, binary trees, search trees, their implementation, traversal, and search and update operations. Introduction to graph theory; data structures for the representation of graphs, digraphs, and networks, and their associated algorithms (traversal, connected components, topological sorting, minimum-spanning trees, shortest paths, transitive closure). Dynamic equivalence relations and union-find sets; amortized analysis. String matching. Algorithm design techniques (divide-and-conquer, dynamic programming, the greedy method). Merge-sort and the analysis of divide-and-conquer algorithms with recurrence relations; bucket-sort, ratix-sort, and the lower bound on sorting; comparison of sorting algorithms. Prerequisites: AUCSC 112 or 210 and AUMAT 250.
Detailed study of software development processes, life cycles, and tools, especially object-oriented methods. Team work is emphasized in the completion of a large software project, from problem definition through to maintenance. Prerequisite: AUCSC 220.
Introduction to current database management systems in theory and practice. Topics include relational database design (including entity-relationship modelling, relational schema, and normal forms); relational algebra, use of a query language (typically SQL) and other components of a current database management system; overview of database system architecture, file structures (including B-tree indices), query processing, and transaction management; new directions. Prerequisites: AUCSC 112 or 210, and AUMAT 250.
Computer arithmetic and errors, solution of systems of linear equations, root finding, interpolation, numerical quadrature, and numerical solutions of ordinary differential equations. Applications from physics are included. Prerequisites: AUCSC 111, AUMAT 120, AUMAT 112; or consent of the instructor. Note: Credit may be obtained for only one of AUCSC 340, AUMAT 340, AUPHY 340.
Architecture of historical and contemporary computer systems, including CPU chips and buses, memory, secondary memory devices, and I/O interfaces. Performance enhancement techniques, including prefetching, pipelining, caching, branch prediction, out-of-order and speculative execution, explicit parallelism, and predication are discussed. The course also includes the data path and control logic at the microarchitecture level; error detection and correction; floating-point number representation and calculation; fast arithmetic circuits; instruction sets and formats; and an overview of alternative and parallel architectures, including RISC/CISC, SIMD/MIMD, shared memory and message passing architectures. Prerequisite: AUCSC 250.
Introduction to computer communication networks and network security. Physical and architectural elements and information layers of a communication network, including communication protocols, network elements, switching and routing, local area networks, and wireless networks. Authentication, cryptography, firewalls, intrusion detection, and communication security, including wireless security. Prerequisite: AUCSC 250. Corequisite: AUCSC 380
Principles of language design, abstraction, syntax and parsing, operational semantics (declaration, allocation, evaluation, run-time environment, typing, activation), and programming language paradigms (procedural, object-oriented, functional, logic programming). Prerequisites: AUCSC 112 or 210, and AUMAT 250. Corequisite: AUCSC 250.
Operating system functions, concurrent process coordination, scheduling and deadlocks, memory management and virtual memory, secondary storage management and file systems, protection. Prerequisites: AUCSC 250.
Intensive study of a specific area of Computing Science as defined by the student and a supervising instructor, including completion of a software project in the selected area. Prerequisite: *9 of senior-level Computing Science. Notes: Admission to AUCSC 395 normally requires a minimum GPA of 3.0 in Computing Science. An Application for Individual Study must be completed and approved before registration in the course.
A four-month work experience placement focused on gaining practical experience in software development and/or information systems, and an appreciation of the demands and responsibilities of the computing profession. Upon completion of the work experience term, the student must submit a report to the Department which summarizes, evaluates, and reflects on the work performed and the knowledge and experience gained during the placement. Prerequisites: At least *18 in Computing Science, third-year standing, and consent of the Department. Note: Participation in the practicum is by application only, and is restricted to Computing Science majors.
A four-month work experience placement focused on gaining practical experience in software development and/or information systems, and an appreciation of the demands and responsibilities of the computing profession. Upon completion of the work experience term, the student must submit a report to the Department which summarizes, evaluates, and reflects on the work performed and the knowledge and experience gained during the placement. Prerequisites: AUCSC 401 and consent of the Department. Note: Participation in the practicum is by application only, and is restricted to Computing Science majors.
Models of computers, including finite automata and Turing machines, basics of formal languages, compatibility, algorithm optimality, complexity classes (p, NP, NPcomplete, EXP, PSPACE, etc.), probabilistic algorithms, approximation algorithms, number-theoretic and other selected algorithms, including selection and order statistics. Prerequisites: AUCSC 310. Notes: This course may not be taken for credit if credit has previously been received for AUCSC 315 (2019), 410 (2019), or AUMAT 355 (2019).
Parallel architectures, programming language constructs for parallel computing, parallel algorithms and complexity. Message-passing, remote procedure call, and shared-memory models. Synchronization and data coherence. Load balancing and scheduling. Appropriate applications. Prerequisites: AUCSC 350.
Survey of concepts and applications of artificial intelligence, including knowledge representation, state-space search, heuristic search, expert systems and shells, natural language processing, propositional logic, learning and cognitive models, vision; implementation using an AI language (LISP or PROLOG). Prerequisites: AUCSC 370 and AUMAT 250.
Historical and social context of computing; the social and ethical responsibilities of the computing professional; the risks and liabilities that can accompany a computing application; intellectual property. The course includes extensive writing assignments and oral presentations. Prerequisite: At least *15 in Computing Science; at least third-year standing.
Intensive study of a specific area of Computing Science as defined by the student and a supervising instructor, including completion of a software project in the selected area. Prerequisite: *9 in Computing Science at the 300 level. Notes: Admission to AUCSC 495 normally requires a minimum GPA of 3.0 in Computing Science. An Application for Individual Study must be completed and approved before registration in the course.