Computing Science (CSCI)

CSCI 1226  Introduction to Computing Science and Programming    
3 credit hours  
Prerequisite: There is no formal prerequisite for this course; however, some prior experience with analytical thinking is highly recommended.

This course is designed to introduce the student to some of the key concepts in computing science and simultaneously provide introductory hands-on experience using a modern programming language. General topics include a brief history of computing; the place of hardware, software, and policies in any computing environment; a high-level view of the components of a computing system; and the tools one can expect to find in any programming environment. Programming language topics include input/output; simple data types; operators and expressions; looping and decision-making control constructs; subprograms and parameter passing; overall program structure and programming style considerations. Problem-solving and program-design strategies include divide-and-conquer and top-down design with step-wise refinement. Students design algorithms with data input and output to solve particular problems, and later implement those solutions as computer programs in the current programming language of choice. Classes 3 hrs. and lab 3 hrs. per week.

CSCI 1227  Computer Programming and Problem Solving    
3 credit hours  
Prerequisite: There is no formal prerequisite for this course; however, some prior experience with analytical thinking is highly recommended.

Students apply basic programming and problem-solving skills to typical problems one might encounter when working in any scientific field. Problems include creation, analysis and manipulation of textual and/or binary data sets of various kinds. Students write programs in a suitable language to perform these activities, but may also be introduced to various software packages that can be used for similar purposes.

CSCI 1228  Advanced Computer Programming and Problem Solving    
3 credit hours  
Prerequisite: CSCI 1226 with a minimum grade of C

This course is a continuation of CSCI 1226, and is designed to prepare students for higher-level courses, especially CSCI 2341. Students continue to solve problems, of increased complexity, in the programming language used in CSCI 1226, and may also be exposed to problem solving in a second programming language, if deemed appropriate. Classes 3 hrs. and lab 3 hrs. per week.

CSCI 1800 – 1825 Special Topics in Computing Science
6 credit hours
Course content varies from year to year.

CSCI 1826  1849 Special Topics in Computing Science
3 credit hours
Course content varies from year to year.  

CSCI 2307  Theoretical Foundations of Computing Science  MATH 2307  
3 credit hours  
Prerequisite: CSCI 1228 and MATH 2305

Students use various mathematical concepts to define tools and address problems of fundamental status in Computing Science. Topics include automata, formal languages, formal logic and computability. Other topics may be considered, such as information coding, complexity, knowledge modelling, and automated reasoning.

Note: Classes 3 hrs. and recitation 1.5 hrs. per week.
CSCI 2308  Introduction to Numerical Analysis  MATH 2308  
3 credit hours  
Prerequisite: MATH 1211 and CSCI 1226

Students discuss errors in numerical analysis, theoretical and practical considerations of numerical methods for approximations of derivatives, systems of linear equations, systems of non-linear equations, and approximation of functions using polynomial and piece-wise polynomial interpolation. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 2327  Digital Logic and Computer Architecture    
3 credit hours  
Prerequisite: CSCI 1228

Computer organization and design are introduced in general, with emphasis on the lower-level abstraction of a computer system. Topics include fundamental concepts in data representation, digital logic, CPU design, and instruction set architecture. Students explore assembly language programming for a particular processor family as a case study of a microprocessor architecture: programming model, addressing modes, instruction set and formats. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 2341  Data Structures and Algorithms I    
3 credit hours  
Prerequisite: CSCI 1228

This course introduces the fundamental Abstract Data Types of computing science, along with their availability and usage in the context of a modern programming language. These include contiguous and non-contiguous lists, stacks, queues, trees, maps, sets, and hash tables. A number of widely used algorithms, searching and sorting in particular, are discussed, along with their complexity. Emphasis in this course is placed on understanding when and how to use the various structures and algorithms studied, and students implement, using the programming language of choice, problem solutions that will help them gain that understanding. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 2355  Introduction to Internet Technologies and Web Programming    
3 credit hours  
Prerequisite: CSCI 1226 or CSCI 1227

Students focus on the client side of the client-server architecture represented by web browsers and web servers. Students gain experience with website development and web programming. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 2356  Mobile App Development    
3 credit hours  
Prerequisite: CSCI 1226

The emergence of new technologies makes it possible to develop apps that can be run on multiple devices (tablets, smart phones, and smart TVs). The objective of this course is to identify important features that should be part of an app and then introduce the necessary technologies for their implementation. The course will be appealing to computing science students as well as other science and engineering students. Classes 3 hrs. and recitation 1.5 hrs. per week

CSCI 2800 – 2825 Special Topics in Computing Science
6 credit hours
Course content varies from year to year.

CSCI 2826  2849 Special Topics in Computing Science
3 credit hours
Course content varies from year to year.   

CSCI 3309  Advanced Numerical Analysis  MATH 3309  
3 credit hours  
Prerequisite: CSCI 2308 [MATH 2308]

This is a continuation of CSCI 2308 [MATH 2308]. Students engage with advanced topics in numerical methods for approximations of derivatives, systems of linear equations, systems of non-linear equations, and approximation of functions using polynomial and piece-wise polynomial interpolation, numerical integration, and approximation of functions by linear least squares. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3328  Assembly Level Machine Organization and Language    
3 credit hours  
Prerequisite: CSCI 2327

This course builds on the experience obtained in CSCI 2327 by examining some topics in more detail and applying them to a particular processor. The students also learn assembly language programming for the processor. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3342  Data Structures and Algorithms II    
3 credit hours  
Prerequisite: CSCI 2341

This course continues the study of data structures and algorithms begun in CSCI 2341, with the emphasis now shifting to implementation details. Students will be required to solve problems using both contiguous and linked structures, using dynamic data storage when and where appropriate. A selection of algorithms using these structures will also be discussed. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3355  Advanced Internet Technologies and Web Programming    
3 credit hours  
Prerequisite: CSCI 2355 or CSCI 2356

Students focus on the server side of the client-server architecture represented by web browsers and web servers. Students gain experience with website development and web programming, with an emphasis on the interaction between a website and a database associated with that website. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3380  Information Visualization and Interaction    
3 credit hours  
Prerequisite: CSCI 2341; and CSCI 2355 or CSCI 2356

Students are introduced to theories and techniques for interactive information design. They study how humans perceive and interact with visualized data, and how to design information systems for effective knowledge transfer and decision-making processes. Applications of such knowledge are broad, ranging from data analytics and scientific research, to multimedia content design. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3421  Data Communications and Networking    
3 credit hours  
Prerequisite: MATH 1216, CSCI 2327

Students examine the structure, operation, and APIs of computer communication networks are examined. Topics include protocols (such as IP, TCP, and HTTP) network architecture, administration, routing, address resolution, and supporting technologies.

CSCI 3428  Software Engineering    
3 credit hours  
Prerequisite: CSCI 2341

Students obtain experience in the development of large scale software systems. Issues of software documentation, reliability, and maintenance are discussed. Several strategies for specification, design, implementation, verification, and validation are considered. The course includes a major project that will expose students to the stages of the software life-cycle.

Note: Classes 3 hrs. and recitation 1.5 hrs. per week.
CSCI 3430  Principles of Programming Languages    
3 credit hours  
Prerequisite: CSCI 2341

This course is designed to introduce the student to some of the key concepts underlying all programming languages by comparing and contrasting major programming language paradigms such as procedural, functional, logic, object-oriented, and parallel. Topics may include history and evolution of programming languages; programming language design goals, the place of programming languages in the programming environment; virtual machines; data representation, manipulation and sharing; type checking; storage management; control structures; language mechanisms that support modularity; syntax and semantics. The laboratory component will provide hands-on experience with several different languages from different paradigms. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3431  Operating Systems    
3 credit hours  
Prerequisite: CSCI 2327

Students will study various aspects of operating systems with emphasis on the following topics: history, evolution, and philosophies; tasking and processes; process coordination and synchronization; scheduling and dispatch; physical and virtual memory organization; device management; file systems and naming; security and protection; communications and networking; distributed operating systems; and real-time concerns. Examples of two or more operating systems will be used to gain some systems programming experience. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3451  Theory of Computation    
3 credit hours  
Prerequisite: CSCI 2341 and CSCI 2307 [MATH 2307]

Students are introduced to some of the fundamental theoretical concepts in computing science. Students are also introduced to the concepts of decidable, P, NP, NP-complete, and NP-hard problems. Students study two classes of languages of interest to computing scientists, namely, regular and context free languages, and corresponding automata for recognizing these languages, are also studied. A brief discussion on the semantics of programming languages will be included. Turing machines are used to explore the concept of decidability along with examples of decidable and undecidable problems.

CSCI 3461  Database Systems    
3 credit hours  
Prerequisite: CSCI 2341 and MATH 2305

This course is an introduction to database systems. Topics include: data models such as the entity-relationship model, the relational model, and noSQL models; database languages; theory of database design; indexing; and transaction processing. Other topics may be included, such as query optimization, database control, and distributed database systems.

Note: Classes 3 hrs. and recitation 1.5 hrs. per week.
CSCI 3462  File Structures    
3 credit hours  
Prerequisite: CSCI 2341 and MATH 2305

This course provides the student with the tools and techniques required to organize and efficiently maintain data on a secondary storage devices. The course will consider the implementation and performance of structures such as fields, records and buffers; primary and secondary indexes; multi-level indexes and B-trees; indexed sequential files; and hash structures. Also included are some discussion of advanced sort and merge algorithms for secondary storage.

CSCI 3465  Object-Oriented Programming    
3 credit hours  
Prerequisite: CSCI 2341

This course provides an introduction to object-oriented analysis, design, and programming. Emphasis is on the creation of reusable software. The object-oriented approach to software development is compared and contrasted with other approaches, such as the classical “structured” approach. Students gain hands-on experience by programming in a suitable object-oriented programming language. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3475  Human Computer Interaction    
3 credit hours  
Prerequisite: CSCI 1227 or CSCI 1228 or CISY 2320

The objective of this course is to teach future software developers, designers and managers to avoid pitfalls of wasting time and energy building software that no one will be able to use. This is accomplished by leading the students through a design process, from identifying and learning about the users/clients to creating and finally evaluating prototypes. Both classic and cutting-edge interaction technologies as they relate to human factors are considered. This is a project-based course. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 3479  Introduction to Virtual and Augmented Reality    
3 credit hours  
Prerequisite: CSCI 2341 and CSCI 2327

Students are introduced to virtual reality (VR) and augmented reality (AR). Topics include the history of VR/AR; the fundamentals of developing VR and AR applications and experiences; the current state of VR/AR technologies and applications; human perception and the relationships with VR/AR; development tools; methods and techniques for VR/AR; the evolution of user interface (UI) and user experience (UX) in VR and AR. Other topics may be included. Students gain practical knowledge with related development projects. Classes 3 hrs. and recitation 1.5 hrs. per week

CSCI 3482  Artificial Intelligence    
3 credit hours  
Prerequisite: CSCI 2341 and MATH 2305

Students consider philosophical, mathematical, experimental, and implementation aspects of such topics as problem solving, searching, game playing, genetic algorithms, learning, neutral networks, natural language processing, vision, knowledge representation, logic, expert systems, reasoning under uncertainty, fuzzy sets, planning, and robotics.

CSCI 3800 – 3825 Special Topics in Computing Science
6 credit hours
Prerequisite: permission of instructor
Approved seminar courses dealing with specialized subject-matter that are announced from time to time by the Department.

CSCI 3826 – 3849 Special Topics in Computing Science
3 credit hours
Prerequisite: permission of instructor
Approved seminar courses dealing with specialized subject-matter that are announced from time to time by the Department.

CSCI 4301  Systems Security    
3 credit hours  
Prerequisite: CSCI 2341 and CSCI 2327

Students examine the security of systems, including a basic survey of security requirements, techniques for detecting and defending against system intrusion. Topics to be covered are related to security requirements of e-commerce, banking, medical, social engineering, and vulnerabilities of computer languages, networks, hardware, authentication, and databases. Security defense using auditing, encryption, authentication, hardware, physical security, network and host based intrusion detection, and redirection are covered.

CSCI 4408  Numerical Solution of Initial Value Ordinary Differential Equations  MATH 4408  
3 credit hours  
Prerequisite: CSCI 2308 [MATH 2308]

Students consider the numerical solution of initial value ordinary differential equations. Topics may include multi-step methods, Runge-Kutta methods, stability, stiffness, step-size selection, local error, etc.

CSCI 4409  Numerical Solution of Boundary Value Ordinary Differential Equations  MATH 4409  
3 credit hours  
Prerequisite: CSCI 2308 [MATH 2308]

This course is concerned with the numerical solution of boundary value ordinary differential equations. Topics may include finite difference methods, shooting methods, collocation methods, conditioning, mesh selection, error estimation, etc.

CSCI 4423  Cryptography    
3 credit hours  
Prerequisite: CSCI 2341 and MATH 2305

Students are provided with an understanding of how to use and evaluate algorithmic and mathematical primitives to achieve security goals such as privacy of information, secure key distribution, and digital signatures. Primitives include block ciphers, hash functions, birthday attacks, primality testing and discrete logarithms.

CSCI 4427  Computational Methods in Graph Theory  MATH 4427  
3 credit hours  
Prerequisite: MATH 2311 or MATH 2320 or MATH 2301

Various graph theoretic algorithms and their application to different problems are discussed. Topics are chosen from the following: the connector problem, the shortest path problem, the Chinese Postman problem and Euler trails, matchings and their applications to the personnel and optimal assignment problems, colouring problems (with reference to timetabling) and flows in networks.

CSCI 4430  Complex Networks    
3 credit hours  
Prerequisite: MATH 1216, MATH 2305

The course focuses on the scientific study of networks, including computer networks, social networks and biological networks. Subjects covered in this course include the measurement and structure of networks, the fundamentals of network theory, computer algorithms, and spectral methods and mathematical models of networks, all at a much greater scale.

Note: Lecture 3 hrs per week and recitation 1.5 hrs per week
CSCI 4452  Algorithm Analysis    
3 credit hours  
Prerequisite: CSCI 2341 and MATH 2305

Key techniques of efficient algorithm design are discussed including: divide and conquer; greedy methods; dynamic programming; graph traversal; and change of representation. Analyzing algorithm performance and lower bounds for various problems are studied.

CSCI 4463  Numerical Software    
3 credit hours  
Prerequisite: CSCI 2341 and CSCI 2308 [MATH 2308]

Software development issues in the area of numerical analysis are studied, and a number of numerical software tools such as Fortran90, Matlab, and Maple are examined. The main course project is the development of a numerical software package by students working in programming teams in a selected area of numerical algorithms.

CSCI 4471  Computer Graphics    
3 credit hours  
Prerequisite: MATH 1211, MATH 2301, and CSCI 2341

This course is an overview of the principles and algorithms of computer graphics. Topics include: representation of primitive objects (curves, and surfaces), texture mapping, radiometry, graphic toolkits, and animation systems. Typical projects have ranged from coding animations to writing a ray tracer. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 4472  Deep Learning for Computer Vision    
3 credit hours  
Prerequisite: MATH 2301 and CSCI 1228

Students are introduced to deep learning fundamentals and architectures with a focus on computer vision tasks such as image classification, object detection, image segmentation, image synthesis, and 3D reconstruction. Relevant case studies are discussed. Students learn to build neural networks for computer vision problems using Python and Tensorflow. Classes 3 hrs. and recitation 1.5 hrs. per week.

CSCI 4474  Text Mining and Social Network Analysis    
3 credit hours  
Prerequisite: CSCI 2341

This course considers manipulations on a bibliographic database. Topics covered include an introduction and basic definitions, inverted file structures, automatic indexing, prototype systems, retrieval and refinements and natural language processing.

CSCI 4476  Digital Image Processing    
3 credit hours  
Prerequisite: CSCI 2341

Students are introduced to the theoretical concepts and algorithms used to process digital images. Topics include sampling and resolution, image filtering, edge detection, segmentation, discrete image transforms, restoration and enhancement, and image compression. Students practice the concepts by implementing the image processing algorithms in Matlab or OpenCV.

CSCI 4477  Data Mining    
3 credit hours  
Prerequisite: CSCI 2341

Data mining refers to a family of techniques used to detect interesting knowledge in data. With the availability of large databases to store, manage and assimilate data, the new thrust of data mining lies at the intersection of database systems, artificial intelligence and algorithms that efficiently analyze data. The course will use concepts from pattern recognitions, statistics, data analysis and machine learning. The size of databases and high complexity of techniques present many interesting computational challenges.

CSCI 4480  Big Data Management and Visualization    
3 credit hours  
Prerequisite: CSCI 2341

Students study the management of data sets that are too large or complex for traditional data-processing platforms. Data storage and retrieval concepts, including data warehousing, cloud, and distributed computing are covered. Tools and technologies to help summarize, visualize, and understand the significance of data are introduced along with principles and practices of business intelligence. Classes 3 hrs. and recitation 1.5 hours per week.

CSCI 4500  Research Thesis    
6 credit hours  
Prerequisite: honours standing and permission of the Department.

The student conducts a research project in computing science under the supervision of any member of the Department. The student will submit a thesis and present it orally.

CSCI 4551  Current Practices in Computing and Data Science I    
3 credit hours  
Prerequisite: CSCI 2355 (or CSCI 2356), CSCI 3461 (or CSCI 4477), and CSCI 3431

This course will allow students to acquire skillsets and build a portfolio in a designated computing and/or data science paradigm based on current trends in the industry. The students will learn theoretical and practical aspects of the paradigm by implementing real-world solutions for one or two projects.

CSCI 4552  Current Practices in Computing and Data Science II    
3 credit hours  
Prerequisite: CSCI 2355 (or CSCI 2356), CSCI 3461 (or CSCI 4477), and CSCI 3431

This course will allow students to acquire skillsets and build a portfolio in a designated computing and/or data science paradigm based on current trends in the industry. The students will learn theoretical and practical aspects of the paradigm by implementing real-world solutions for one or two projects.

CSCI 4800 - 4825 Special Topics in Computing Science
6 credit hours
Prerequisite: permission of instructor.
These courses cover advanced topics in computing science chosen according to the interests of the students and instructor, and requires some measure of independence and initiative from the student.

CSCI 4826 - 4849 Special Topics in Computing Science
3 credit hours
Prerequisite: permission of instructor.
These courses cover advanced topics in computing science chosen according to the interests of the students and instructor, and requires some measure of independence and initiative from the student.