Computer Science Undergraduate Courses
Click on any of the course titles below to see the course’s description:
Computer Programming 1: The Language of Computing — Expressing the Intelligence that Guides Computation
This course introduces the fundamental concepts related to computer programming, preparing students with the skills to write basic computer programs, and the knowledge to understand basic programs written by others. Topics include: Java built-in data types, flow control using conditionals and loops, arrays, console I/O, static methods, recursion, using libraries, and using classes to create your own data types. (4 credits) Prerequisite: MATH 153
Computer Programming 2: Greater Knowledge and Expression in Programming Languages
This course takes a deeper look at programming in Java, focusing on object oriented concepts and creating GUI applications. Topics include: classes and objects, primitives and references, inheritance and polymorphism, interfaces and abstract classes, exception handling, GUI programming in Swing, and serialization and file I/O. (4 credits) Prerequisite: CS 201
Fundamental Data Structures: Fundamental Structures of Information at the Basis of All Computation
Students use computer programming laboratory problems to apply the
principles of data structure organization in a practical
environment and develop advanced programming skills. The organizing
power of knowledge is found to be the source of order in computer
data structures. Topics include abstract data types, internal
representation of data, stacks, queues, linked lists, sparse
arrays, searching and sorting algorithms, dynamic storage
allocation, and computing time of programs. (4 credits) Prerequisite: MATH 162, CS 203
Algorithmic Data Structures: Information Structures to Represent Larger Systems
Students continue the study of high-level data organization techniques. Topics include hash tables, representations and algorithms for trees (including binary search trees, heaps, red black trees, 3-4 trees and B-trees), and representations and algorithms for graphs. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
Computer Science Dual Graduate/Undergraduate Courses
Computer Communication Networks: Connecting the Parts and Whole — Frictionless Flow of Information
The goal of this course is to learn the concepts, architecture principles, and terminology of computer networks by exploring how networks work and developing network applications. This course follows the top-down approach to understanding networks by using the Internet's architecture and protocols as the primary example of an implementation of network principles. We start at the application layer and continue through the transport layer, network layer, link layer, and the physical layer of computer networks. Students develop several network applications and complete several labs designed to trace and understand the predominant network protocols in use in the Internet. (4 credits) Prerequisites: CS 401 or consent of the department faculty.
Software Technologies: Advanced Principles of Natural Law in Software Systems
This course will cover the most current emerging methods, principles, and practices in software technologies and systems. The topics will vary, based on current technologies and instructor choices. (2 or 4 credits) Prerequisite: CS 401 or consent of the department faculty.
Scientific Computing: Software Models and Methods to Represent the Mathematical Precision of Natural Law
This course presents methods and principles for the application of computing systems to scientific and engineering problems. Areas studied in this course are numerical methods, scientific computation, and applications. Specific topics covered are computational efficiency, accuracy and precision, root finding, Taylor series and function evaluation, interpolation and approximation, finite difference calculus, curve fitting, and numerical integration. (4 credits) Prerequisites: CS 401 or consent of the department faculty.
Operating Systems: The Most Fundamental Level of Software — Organizing Hardware Resources into Coherent Virtual Systems
An operating system controls the central resources of the computer system and allocates them to individual users. Course topics include sequential and concurrent processes, mutual exclusion, resource sharing, process cooperation, deadlock, resource allocation, processor scheduling, memory management, segmentation and paging algorithms, timesharing systems, scheduling algorithms, and resource protection. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
This course goes deeply into the three aspects of computer security: confidentiality, integrity, and availability. Several models for confidential and integrity security policies are studied. The role of cryptography in assuring confidentiality and integrity is examined. Other topics include authentication, auditing, penetration testing, common vulnerabilities and intrusion detection. The course concludes with the case study of a realistic secure system. Students will be asked to read papers from the security literature and apply them to material given in the lectures. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
Secure Coding Practices
The course examines the 19 issues that account for 95% of the security vulnerabilities that occur in the field. The issues are: buffer overflows, format string problems, integer range errors, SQL injection, command injection, failure to handle errors, cross-site scripting, failing to protect network traffic, use of “magic” URLs and hidden fields, improper use of SSL, use of weak password-based systems, failing to store and protect data securely, information leakage, improper file access, trusting network address information, race conditions (improper thread programming), unauthenticated key exchange, failing to use cryptographically strong random numbers, and poor usability. The final project of the course will analyze and remove vulnerabilities from a Web application. The course will emphasize that a computer programmer needs both broad comprehension and the ability to focus to produce secure software. (2 or 4 credits) Prerequisite: CS 401 or consent of the department faculty.
Knowledge-Based Systems: Knowledge is the Basis of Thinking, Action, and Achievement — Creating Intelligent Software Systems
The field of artificial intelligence attempts to create computer programs that reflect the values of human intelligence. Course topics include state-space representations, tree and graph searches, predicate calculus and deduction, heuristics, learning and problem solving, natural language processing, expert systems, and programming languages for artificial intelligence. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
The standard processor for all new computers is now a multi-core processor, which has the potential to execute programs much more quickly. However, to utilize this potential, a programmer must have some knowledge of parallel programming techniques. During this course, students will spend most of their time writing and debugging parallel programs. The expected outcome will be to develop a new level of practical programming skill. This skill will not only be useful for programming of multi-core processors, but also operating systems programming and distributed database programming. The software tools used during this course include Microsoft Visual C/C++, the OpenMP threading standard, and the Message-Passing Interface (MPI) standard. In addition to multi-core processors, this course also covers techniques for programming a computer cluster (many individual workstations networked together and working collectively on a single computation) (4 credits) Prerequisite: CS 401 or consent of the department faculty.
Computer Graphics: How to Represent and Graphically Express the Dynamic Intelligence Captured in Software Systems
One of the fastest growing areas of computer technology, computer graphics is used extensively to present the vast amount of information resulting from a computing process. This course studies data representation, display devices and graphics hardware, display lists, device independence, two-dimensional and three-dimensional graphics, display of curves and surfaces, hidden line and hidden surface removal, shading and rotation techniques, graphics languages, and introduction to image processing. (2–4 credits) Prerequisite: CS 401 or consent of the department faculty.
Image Processing: Visual Expression of Total Knowledge
The course presents the concepts and operations of digital image processing, which treats all images as a collection of binary pixels. The course studies how these billions of parts are treated as a single integrated image, and the mathematical and algorithmic aspects of and tools for processing these images. Topics include image representation and transformations, filtering, and Fourier domain filtering and transformations, edge detection, segmentation, and other processing operations. The course includes a substantial lab component. (2-4 credits) Prerequisite: CS 401 or consent of the department faculty.
Theory of Computation: The Abstract Basis of All Possibilities in Computation
Formal abstract models of computation study the fundamental limitations and capabilities of computers. This course presents a hierarchy of increasingly sophisticated abstract machines in relation to their increasing ability to recognize more general classes of formal languages. Topics include formal grammar, finite-state machines, equivalence of finite-state machines, right-linear and left-linear grammar, context-free languages, Turing machines, unsolvable problems, and recursive functions. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
Distributed Computing and XML
This course will investigate the uses of XML in distributed computation. First an understanding of the W3C specifications for XML, XML Schema, XPath, XML namespaces, XSLT and XQuery will be acquired. Then three important applications of XML in distributed computing will be investigated: syndication, Web services and Ajax. Finally, advanced issues such as encrypted XML and binary XML will be considered. There will be daily labs using .NET 2.0. (4 credits) Prerequisite: CS 401 or consent of the department faculty.
Topics in Computing
This course surveys and studies current technologies and application areas in computing. Typically it will include a substantial research and laboratory component to gain experience with advanced areas of computing and computer science. (2–4 credits) Prerequisite: CS 401 or consent of the department faculty.