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  

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. Classes 3 hrs. and lab 3 hrs. per week.

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 2301  Data Structures and Numerical Methods for Engineers  
3 credit hours  
Prerequisite: CSCI 1226 or EGNE 1204

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.

Note: This course is intended only for Engineering students; Computing Science students should take CSCI 2341 instead; and no credit will be given for this course simultaneously with or subsequent to CSCI 2341. Classes 3 hrs. and recitation 1.5 hrs. per week.
CSCI 2307  Theoretical Foundations of Computing Science  [MATH 2307]  
3 credit hours  
Prerequisite: CSCI 1228 and MATH 2305

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

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. 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  Internet Technologies and Web Programming  
3 credit hours  
Prerequisite: CSCI 1226 or CSCI 1227

Students discuss a number of fundamental concepts, technologies and techniques essential to the Internet and the World Wide Web, with emphasis 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, smart TVs, and tablets). 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 as well as other science and engineering students. Classes 3 hrs. and recitation 1.5 hrs. per week

CSCI 3309  Selected Topics in Numerical Analysis  [MATH 3309]  
3 credit hours  
Prerequisite: CSCI 2308 [MATH 2308]

Select topics for MATH 2308 [CSCI 2308] may be further explored. Other topics may include linear least squares, eigenvalues and eigenvectors and optimization. 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 3421  Data Communications and Networking  
3 credit hours  
Prerequisite: 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

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

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 provides an introduction to the design, implementation, use and maintenance of databases. Topics 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.

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 3826  Special Topics in Computing Science  
3 credit hours  
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 Problems  [MATH 4408]  
3 credit hours  
Prerequisite: CSCI 2308 [MATH 2308]

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.

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

This course provides an introduction to various aspects of data security. Possible topics include: 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 are studied.

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 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 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  Computer Vision and Digital Image Processing  
3 credit hours  
Prerequisite: CSCI 2341

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.

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 4826  Special Topics in Computing Science  
3 credit hours  
Prerequisite: permission of instructor.