Computing Science and Business Administration

Computing Science

CSCI1226 Introduction to Computing Science and Programming

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 will 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 will 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 will include divide-and-conquer and top-down design with step-wise refinement. Students will 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.


CSCI1227 Computer Programming and Problem Solving

This course is designed to extend the student’s knowledge of, and provide additional hands-on experience with, the programming language encountered in CSCI 1226, in the context of the structured data types provided by that language, and within the larger contexts of object-oriented programming and more complex problem-solving situations. Techniques for managing file input and output in the current language will also be studied. A number of classical algorithms and data structures for the storage and manipulation of information of various kinds in a computer’s internal memory will be studied. The student will acquire the knowledge that comes from actually implementing a non-trivial abstract data type and the experience that comes from having to make use, as a client programr, of an abstract type that has already been implemented.


CSCI1228 Accelerated Programming and Problem Solving

This course is intended for students who have programming experience from high school, and who have achieved the required grade on a challenge test administered at the beginning of the term. It begins with a quick review of the topics normally treated in CSCI 1226 followed by enhanced coverage of the current material from CSCI 1227.


CSCI2301 Data Structures and Numerical Methods for Engineers

This class introduces students to system analysis and software techniques. Topics covered include data structures such as stacks, queues, multiple linked lists, searching and sorting algorithms, and their implementation in an object-oriented programming language. Students use linear algebra and numerical methods in engineering examples, while leaning to implement properly structured solutions.


CSCI2307 Theoretical Foundations of Computing Science

This course complements CSCI 2341. It uses various mathematical concepts to define tools and address problems of fundamental status in Computing Science. Topics will involve notions related to graphs, formal languages and computability. Moreover, depending on the focus, other fundamental tools will be considered, which are utilized in topics such as database modeling, information coding, complexity, knowledge modeling, program correctness and automated reasoning.


CSCI2308 Introduction to Numerical Analysis [MATH 2308]

Discussion of errors in numerical analysis. Theoretical and practical considerations of numerical procedures in non-linear equations in one variable, systems of linear equations, and systems of non-linear equations, interpolation, polynomial approximation and integration.


CSCI2309 Selected Topics in Numerical Analysis [MATH 2309]

Select topics for MATH 2308 [CSCI 2308] may be further explored. Other topics may include linear least squares, eigenvalues and eigenvectors and optimization.


CSCI2327 Digital Logic and Computer Architecture

This course considers data representation, digital logic and computer organization at the assembly language level. The student will be introduced to the concept of computation at the digital logic level by studying devices for storing data, transferring data, and making decisions based on data patterns (e.g. flip-flops, registers, tri-states, bus structures, multiplexers, comparators, and adders). Computer organization includes the fetch—execute cycle of a processor, addressing modes of the machine, the data path, the memory hierarchy, and the input/output subsystem.


CSCI2328 Assembly Level Machine Organization and Language

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 will also learn assembly language programming for the processor.


CSCI2341 Data Structures and Algorithms I

This course provides an introduction to some of the fundamental theoretical concepts in computing science. These theoretical concepts will be applied to some programming problems. The course will introduce the basis for evaluating algorithms. This basis will be used to analyze various searching and sorting algorithms. Students will be introduced to the concept of lower-bound time requirements for specific problems. Examples of various problem solving strategies such as greedy algorithms, divide-and-conquer, and backtracking will be discussed.


CSCI2342 Data Structures and Algorithms II

This course provides an introduction to data structures and associated algorithms. Students will build on the theoretical and programming skills developed in CSCI 1226/1227/1228 and CSCI 2341 through a systematic study of some of the fundamental computing science concepts. The course will use the basis for evaluating algorithms, established in CSCI 2341, to study various data structures and related operations. The data structures that will be studied in this course include lists, stacks, queues, hash tables, binary trees, and binary search trees. The operations on these data structures include creation, destruction, insertions, deletions, searching, and sorting. Contiguous and linked designs and corresponding implementations of these data structures will be studied. Students will be expected to create some of the data structures. The advantages and disadvantages of using these data structures will be studied.


CSCI2355 Internet Technologies and Web Programming

This course will discuss a number of fundamental architectures, protocols and scripting languages for displaying and transferring data of various kinds in the context of the Internet and the World Wide Web. Students will gain experience with web programming concepts and techniques.


CSCI3421 Data Communications and Networking


CSCI3428 Software Engineering

In this course, students will obtain experience in the development of large scale software systems. The software life-cycle will be studied in detail. Issues of software documentation, reliability, and maintenance will be discussed. Several strategies for specification (formal and informal), design (functional, top-down, object-oriented, etc.), implementation, and verification and validation will be considered. The course will involve a major project that will expose students to the stages of the software life-cycle. Students should expect to work in teams.


CSCI3430 Principles of Programming Languages

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.


CSCI3431 Operating Systems

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.


CSCI3451 Theory of Computation

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


CSCI3461 Database Systems

This course provides an introduction to the design, implementation, use and maintenance of databases. Topics will include: data models such as the entity-relationship model, the relational model, and the object-oriented model; relational languages such as relational algebra, relational calculus, and SQL; the theory of normal forms of database design; use of indexes for efficient date retrieval; and database implementation using a commercial database management system. Other topics may be included, such as query optimization, database control, and distributed database systems.


CSCI3462 File Structures

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 will be some discussion of advanced sort and merge algorithms for secondary storage.


CSCI3465 Object-Oriented Programming

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


CSCI3475 Human Computer Interaction

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. We will consider both classic and cutting-edge interaction technologies as they relate to human factors. This is a project-based course.


CSCI3482 Artificial Intelligence

This course provides a general introduction to artificial intelligence (AI). The course will 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. In addition to a theoretical introduction, students will also gain experience using one or more of the popular AI tools.


CSCI3826 – 3849 Special Topics in Computing Science

Approved seminar courses dealing with specialized subject-matter that are announced from time to time by the Department.


CSCI4408 Numerical Solution of Initial Value Problems [MATH 4408]

This course considers 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.


CSCI4409 Numerical Solution of Boundary Value Ordinary Differential Equations [MATH 4409]

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.


CSCI4423 Cryptography

This course provides an introduction to various aspects of data security. Possible topics: classical encryption methods such as Vignere and Vernan ciphers; the Data Encryption Standard; key distribution methods and public key encryption; and authentication using digital signatures. Applications of these methods in the design of protocols for data privacy and security will also be studied.


CSCI4452 Algorithm Analysis

This course will build on the concepts of algorithm analysis introduced in CSCI 2341. Some of the key techniques of efficient algorithm design that will be discussed: divide and conquer; greedy methods; dynamic programming; graph traversal; and change of representation. Measuring algorithm performance and lower bounds for various problems will be studied. An introduction to complexity theory-P, NP, polynomial time reducibility, and NP-completeness- will also be provided.


CSCI4463 Numerical Software

This course will study software development issues in the area of numerical analysis. The course will examine a number of numerical software tools such as Fortran90, Matlab, and Maple. The main course project will be the development of a numerical software package by students working in programming teams in a selected area of numerical algorithms.


CSCI4471 Computer Graphics

This course provides an overview of the principles and methodologies of computer graphics, including the representation, manipulation, and display of two- and three-dimensional objects. Subtopics may include characteristics of display devices (i.e., raster, vector); representing primitive objects (lines, curves, and surfaces) and composite objects; two- and three-dimensional transformations (translation, rotation, scaling); hidden lines and surfaces; shading and colouring; interactive graphics and the user interface; animation techniques.


CSCI4474 Information Retrieval

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


CSCI4476 Computer Vision and Digital Image Processing

This course provides an introduction to the concepts used in computer vision and digital image processing. Computer vision techniques extract information from an image, while image processing techniques modifies the image for viewing by the human eye. Topics covered include the following: sampling and resolution, image processing, edge detection, segmentation, discrete image transforms, restoration and enhancement, and image compression.


CSCI4477 Data Mining

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.


CSCI4500 Research Thesis

Research project in computing science carried out by the student under the supervision of any member of the Department. The student will submit a thesis and present it orally.


CSCI4826 - 4849 Special Topics in Computing Science

This course covers 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.