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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Select topics for MATH 2308 [CSCI 2308] may be further explored. Other topics may include linear least squares, eigenvalues and eigenvectors and optimization.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
Send Page to Printer
Print this page.
Download Page (PDF)
The PDF will include all information unique to this page.