Develop the hard skills you’ll need for creating, designing and maintaining software in this specialized program. You’ll learn to apply the technologies and practices from computer science, project management, engineering, application domains, interface design, digital asset management and other fields to software engineering. UWindsor is tied for first in graduate employment rates. All our grads find jobs in their chosen field within two years of graduation. Not a professional engineering designation.
Taking Computer Science at University of Windsor has allowed me to explore so many different fields and topics that now I have a much better idea of what I want to achieve in my future. From data structures to website design classes, I've gained useful knowledge in various areas thanks to the amazing faculty and meaningful friendships. Additionally, I've had the unique experience of taking on a co-op position at the University, which has helped me gain valuable connections and real-world experience with modern web development techniques in a fast-paced team and environment. Overall, the program has certainly paved a bright pathway for my future by preparing me for the ever advancing computer science industry.
Ashad
Web & Digital Project CoordinatorAfter the first day I started playing video games, I knew I wanted my future job to do something with them. I am now studying computer science and hopefully will be able to program games of my own soon. It took me years of researching in different fields before I knew what path I wanted to choose in life. Although I know the expectation of figuring life out and choosing your future job when you’re a teenager could be a confusing process, I would be glad to help you in this journey. Come find me at Head Start this summer to put any confusion to rest before attending the University of Windsor in the fall :)
Parmida
Student AmbassadorCourse Requirements: Advanced Functions/MHF4U. English/ENG4U.
Strongly Recommended: Calculus & Vectors/MCV4U
Minimum Average: 70% (Min of 70% on all math courses)
Minimum Average (Co-op): 75%
Mean Average: 86%
Course Requirements: Grade 12 Advanced Functions. Grade 12 English.
Strongly Recommended: Grade 12 Calculus & Vectors
Minimum Average: 70% (70% average of math courses)
Minimum Average (Co-op): 75% (Co-op Programs: 75% + 70% average in all attempted math courses, excluding Grade 12 Data Management)
Mean Average: 83%
This program is available with or without Co-op. See Program and Co-operative Education Regulations in the Undergraduate Course Calendar.
Total courses: forty.
The major average will be calculated on the basis of grades obtained in COMP-1000, COMP-1400, COMP-1410, COMP-2120, COMP-2140, COMP-2310, COMP-2540, COMP-2560, COMP-2650, COMP-2660, COMP-2800, COMP-3110, COMP-3150, COMP-3220, COMP-3300, COMP-3540, COMP-3670, COMP-4110, COMP-4400, COMP-4540, COMP-4800, and either COMP-4960 or COMP-4990.
To remove any suggestion that the word “engineering,” in the context of courses or programs in Computer Science implies the meaning of “engineering” as used in the context of courses or programs in Professional Engineering, it is hereby acknowledged that Software Engineering is a collection of principles, models, methods, and techniques for the development, maintenance, evolution, and reuse of software that meets fundamental performance and quality requirements in an economic and competitive manner.
Ten courses, including COMP-1000, COMP-1400, COMP-1410, MATH-1250 (or MATH-1260), MATH-1720 (or MATH-1760), MATH-1730 and MATH-1020.
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).
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).
This course is the continuation of COMP-1400 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: COMP- 1000 (or MATH-1720) and COMP-1400.) (3 lecture and 1.5 laboratory hours a week).
This course will cover linear systems, matrix algebra, determinants, n-dimensional vectors, dot product, cross product, orthogonalization, eigenvalues, eigenvectors, diagonalization and vector spaces. (Prerequisites: Both Ontario Grade 12 Advanced Functions (MHF4U) and Calculus and Vectors (MCV4U) or MATH-1280.) (Antirequisites: MATH-1260, MATH-1270.) (3 lecture hours, 2 tutorial hours per week.)
This course is for students without Ontario Grade 12 Calculus and Vectors (MCV4U). The course MATH- 1250 is for students with MCV4U. This course will cover vectors, three-dimensional geometry, linear systems, matrix algebra, determinants, n- dimensional vectors, dot product, cross product, orthogonalization, eigenvalues, eigenvectors, diagonalization and vector spaces. The course is equivalent to MATH-1250 for all prerequisite purposes. (Prerequisite: Ontario Grade 12 Advanced Functions (MHF4U).) (Antirequisites: MATH-1250, MATH-1270.) (4 lecture hours, 2 tutorial hours per week.)
This course will cover trigonometric functions and identities, inverse trigonometric functions, limits and continuity, derivatives and applications, mean value theorem, indeterminate forms and l’Hôpital’s rule, antiderivatives and an introduction to definite integrals. This course is for students who have taken both Ontario Grade 12 Advanced Functions (MHF4U) and Ontario Grade 12 Calculus and Vectors (MCV4U). Students who do not have credit for MCV4U should take MATH-1760. (Prerequisites: Ontario Grade 12 Advanced Functions (MHF4U) and Ontario Grade 12 Calculus and Vectors (MCV4U) or MATH-1780.) (Antirequisite: MATH-1760.) (3 lecture hours, 1 tutorial hour per week.)
This course will cover a review of functions, trigonometric functions and identities, transcendental functions, inverse trigonometric functions, introduction to limits, continuity, derivatives and applications, mean value theorem, indeterminate forms and l’Hôpital’s rule, antiderivatives and an introduction to definite integrals. This course is for students who have taken Ontario Grade 12 Advanced Functions (MHF4U), but have not taken Ontario Grade 12 Calculus and Vectors (MCV4U). Students who have credit for MCV4U should take MATH-1720. The course is equivalent to MATH-1720 for all prerequisite purposes. (Prerequisite: Ontario Grade 12Advanced Functions (MHF4U).) (Antirequisite: MATH-1720.) (4 lecture hours, 1 tutorial hour per week.)
This course will cover antiderivatives, the definite integral and the fundamental theorem of calculus, techniques of integration, applications, improper integrals, sequences and series, convergence tests, power series, Taylor and Maclaurin series, and polar and parametric coordinates. (Prerequisite: MATH- 1760 or MATH-1720.) (3 lecture hours, 1 tutorial hour per week.)
This course will cover mathematical logic, proof methods and development of proof techniques, mathematical induction, sets, equivalence relations, partial ordering relations and functions. (Prerequisite: One of COMP-1000, MATH-1250, MATH-1260 or MATH-1270.) (2 lecture hours, 2 tutorial hours per week.)
Ten courses, including COMP-2120, COMP-2140, COMP-2310, COMP-2540, COMP-2560, COMP-2650, COMP-2660, COMP-2800, and STAT-2920 (or STAT-2910).
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: COMP-1410 or COMP-2087.) (3 lecture hours and 1.5 laboratory hours a week)
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: COMP-1000 and COMP-2120.) (3 lecture hours and 1.5 laboratory hours a week)
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: COMP-1000 and MATH-1020.) (3 lecture hours and 1.5 laboratory hours a week)
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: COMP-1000 and COMP-1410. Restricted to Computer Science students or permission of the School of Computer Science.) (3 lecture hours and 1.5 laboratory hours a week.)
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: COMP-1410 or COMP-2087)(3 lecture hours and 1.5 laboratory hours a week)
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: COMP-1400 or COMP-2087) (3 lecture hours and 1.5 laboratory hours a week).
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: COMP-2650). (3 lecture hours and 1.5 laboratory hours a week)
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: COMP-2120.) (3 lecture hours and 1.5 laboratory hours a week.)
This course will cover descriptive measures, combinatorics, probability, random variables, special discrete and continuous distributions, sampling distribution, and point and interval estimation. (Prerequisite: MATH-1730.) (3 lecture hours, 1 tutorial hour per week.)
Ten courses, including COMP-3110, COMP-3150, COMP-3220, COMP-3300, COMP-3540, COMP-3670.
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: COMP-2120 and one of COMP-2540 or COMP-2547)(3 lecture hours a week)
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: COMP-2540 and COMP-2560 or COMP-2650.) (3 lecture hours a week)
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: COMP-2120 and COMP-2540)(3 lecture hours a week)
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: COMP-2120, COMP-2540, COMP-2560, and COMP-2650 or COMP-2660.)(3 lecture hours a week)
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: COMP-2140, COMP-2310 and COMP-2540.) (3 lecture hours a week)
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: COMP-2120, COMP-2540 or COMP-2547, COMP-2560 and COMP- 2650. Recommended corequisite: COMP-3300.)
Ten courses, including COMP-4110, COMP-4400, COMP-4540, COMP-4800, and COMP-4990 (a 6.0 credit hour course).
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: COMP-3110 and COMP- 3300.) (3 lecture hours a week)
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: COMP-2140, COMP-2310 and COMP-2540.) (Restricted to Computer Science students.) (3 lecture hours a week.)
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: COMP-2310 and COMP- 2540) (Restricted to students in any Honours Computer Science program or consent of instructor.) (3 lecture hours a week.)
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: COMP-3110, COMP-3220 and COMP-3300.) (Restricted to Computer Science Students). (3 lecture hours a week)
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. Students will be required to submit project reports and give presentations on the technical components of the project. (a 6 credit course restricted to Semester 7 or Semester 8 students in Computer Science.) (Antirequisite: COMP- 4960.) (3 lecture hours or equivalent a week, for two terms.)