Request Info > Apply > Visit Us >

Courses for the BS in Computer Science

Computer Science Undergraduate Courses

Click on any of the course titles below to see the course description:

CS 105 CCTS: Problem Solving with Computational Thinking

Using the Field of  all Possibilities as the Source for All Solutions

This course focuses on teaching students the higher order (critical) thinking skills needed in computer science (analysis, evaluation, logic and reasoning).

The course starts by explaining how computers work, and then focuses on having students read and write pseudo code as an easy way to introduce programming concepts such as variables, selection, repetition, and arrays without having to worry too much about syntax. During the course we will also read and discuss articles on current issues in the study of computer science. We will finish with a programming project in a simple programming language.

(4 credits) Prerequisites: STC 108, taken during students’ first semester or with consent of the Department faculty

CS 201 Procedural Programming

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: 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 162

CS 203 Object Oriented Programming

Greater Knowledge and Expression in Programming Languages

This course covers programming in Java, specifically 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

CS 221 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, hash maps, binary trees, heaps, red-black trees, and computing time of programs. (4 credits)

Prerequisite: CS 203

CS 272 Discrete Structures

Models and Mathematics of the Structures of Natural Law at the Basis of Computation

Discrete mathematics is becoming increasingly important because of its wide applicability in computer science, as well as in management and the other sciences. Two key processes in discrete mathematics studied in this course are algorithmic problem solving and recursion.

Topics include: logic and sets, graph theory, and difference equations. (Same as MATH 272) (4 credits) 

Prerequisite: MATH 162

CS 310 Systems Programming

Connecting Hardware and Software —The Most Fundamental Level of Software in the Operating System

Students learn the systems programs that link the outer activity of high-level programming languages with the internal activity of the computer hardware. Knowledge of this deeper level of systems programs gives a greater range of possibilities to the programmer. Students learn system software such as compilers, linkers, loaders, and debuggers, and the structure and functions of an operating system including device management, process management, system calls, and memory management. (4 credits)

Prerequisites: CS 221 and CS 272 / MATH 272

CS 321 Introduction to Algorithims

Focusing on Cause and Effect

Students are introduced to the study of algorithms.

Topics include: searching and sorting algorithms, computing time of programs and representations and algorithms for graphs. This course also includes a significant research paper around the efficiencies and running times of different algorithms (4 credits)

Prerequisite: CS 221 or consent of the department faculty.

CS 335 Software Development

Applying Knowledge of Software Systems for Greater Skill in Action

In this course, students participate in a comprehensive system development project to apply and integrate the concepts of software design and implementation.

Topics include: methods and tools for large system development including analysis, design, testing, and documentation. Students work in teams to develop a substantial programming project. (4 credits each) 

Prerequisite: CS 221 and at least one CS 400 level elective

CS 336 Senior Project

Practical Experience in Applying the Knowledge of Computer Science to Create Software Systems 

In this course students create an original software project from the ground up from the initial analysis and design phases through implementation and testing.

Students are expected to submit several project proposals before the start of the course, and submit a written project postmortem at the end of the course.

With Faculty approval this course can be extended to two months to facilitate a larger project (4 or 8 credits)

Prerequisites: CS 335

CS 350 Programming Languages

The Abstractions at the Basis of Programming Languages —Gaining Mastery Over All Programming Languages

This course involves substantial programming exercises that give students practical experience with several different programming language paradigms.

Topics include: syntax and semantics of programming languages; data types and structures; control flow including blocks, subroutines, and recursion; implementation methods for semantic features; and comparison of several programming languages. (4 credits) 

Prerequisite: CS 221 and CS 272 / MATH 272

CS 363 Computer Organization and Architecture

The Physiology of Computing Systems — The Logical and Physical Structures of Digital Computation

This course presents the internal structure of a computer, an introduction to assembly language, and the design of digital logic circuits and their use in structuring the various functional components of a computer, such as the memory and central processing unit.

Topics include: machine organization, logic gates, circuits, machine language, assembly language, memory, I/O systems, and how these all combine to create typical and atypical architectures. (4 credits)

Prerequisite: CS 201 and CS 272 / MATH 272

CS 390 Fundamental Programming Practices

Modern Programming Methods and Systems — Capture the Fundamental Principles of Knowledge for Greater Success in All Areas

This course provides a focused program for enhancing programming and analytical skills in five areas: problem-solving, data structures, object-oriented programming, the Java programming language, and the use of recursion in Java programs. These topics are of particular importance as a prerequisite for the courses in the graduate program in Computer Science.

Topics include: elements of Java programming, object-oriented design and implementation, data structures (including lists, stacks, queues, binary search trees, hash tables, and sets), the exception hierarchy, file I/O and streams, and JDBC. (4 credits)

Prerequisite: CS 221

CS 398 Computer Programming Internship

Knowledge and Experience for Maximum Growth

This course offers practical, professional experience in computer programming. Students apply classroom knowledge to an industrial or University project. During the internship, students submit detailed reports of their computer programming activities. (2 credits) 

Prerequisites: consent of the Department faculty and the Academic Standards Committee

Computer Science Dual Graduate/Undergraduate Courses

CS 401 Modern Programming Practices

Current Concepts and Best Practices in Software Development — Knowledge Is the Basis of Action

This course presents the fundamental principles of object-oriented programming. Students will learn how to write reusable and better-maintained software, and integrate this knowledge with laboratory assignments and projects.

Topics include: fundamental principles and models of object-oriented programming, UML class diagrams and design principles that promote reusability and maintainability of software. (2 credits) 

Prerequisite: CS 220 or equivalent

CS 422 Database Systems

Capturing the Organizing Power of Information

Database systems organize and retrieve information, allowing the user to access the desired information easily and efficiently.

Topics include: relational data model; SQL; ER modeling; relational algebra; data normalization; transactions; objects in the database; data security and integrity; data warehousing, OLAP, and data mining; distributed databases; and study of a specific commercial database system. (4 credits) 

Prerequisite: CS 401 or consent of the Department faculty

CS 423 Systems Analysis and Design

Systems Analysis and Design

One can think of the systems approach as an organized way of dealing with a problem. The software systems development life cycle (SDLC) has three major phases. It begins with preliminary and feasibility studies to make the decision to develop a system to solve a particular problem in a cost-effective and timely way. This is followed by a detailed system study, in which every aspect of the current system is analyzed and a new system is designed to meet the needs of the organization. Finally, the system design is brought to life through software engineering techniques including coding, testing, implementation and maintenance of the system. This focuses on the middle phase. A system will be studied in detail to gather requirements and its process elements analyzed for suitability and relevance to meet the needs of the system’s users. This is followed by an iterative and creative design process, using tools such as flowcharts, data flow diagrams (DFD), data dictionary, decision tables and decision trees, to provide an effective and detailed design of the system. (2–4 credits) 

Prerequisite: CS 401

CS 425 Software Engineering

Knowledge Is the Basis of Action — Principles and Processes for Developing Large-Scale Software Systems 

This course introduces the student to best practices in software development through a software development methodology. Students will learn how to bring together their skills in object-oriented analysis and design, in the use of UML diagrams for modeling software solutions, to produce robust, easily maintainable software. A software development methodology describes when and how object-oriented concepts and UML diagrams should be used to accomplish the aim of building quality software. The course centers around a small project in which the principles discussed in the lecture format can be illustrated and applied. By the end of the course, the student will have a running application, built in accord with the high standards of a contemporary development methodology. (4 credits) 

Prerequisite: CS 401 or consent of the Department faculty

CS 435 Algorithms

Discovering the Hidden Dynamics of Natural Law

This course presents methods for analyzing the efficiency of algorithms (including worst-case and average-case analysis) and introduces a variety of known, highly efficient algorithms. Analysis, design, and implementation of algorithms are given equal emphasis.

Topics include: searching and sorting, efficiency of operations on data structures (including lists, hash tables, balanced binary search trees, priority queues), graph algorithms, combinatorial algorithms, recurrence relations, NP-complete problems, and special topics as time allows. (In the past, special topics have included computational geometry, algorithms for cryptosystems, and approximation algorithms.) (4 credits) 

Prerequisites: CS 401 and MATH 272, or consent of the Department faculty

CS 440 Compiler Construction

Connecting Name and Form — The Source of All Programming Languages in Grammar and Semantics

Students learn the successive stages and detailed mechanics by which high-level programming languages are translated into machine language by a compiler.

Topics include: language and grammar specification, compiler structure, compiler generation tools, lexical analysis, parsing, syntax analysis, semantic analysis, intermediate language, code generation and optimization, storage management and linkages, user interface, and a large programming project implementing part of a compiler. (4 credits)

Prerequisite: CS 401 or consent of the Department faculty

CS 450 Computer 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.

CS 465 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.

CS 466 Computer Security

Computer Security

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.

CS 471 Parallel Programming

Parallel Programming

The standard processor for all new computers is now a multicore 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.

CS 472 Web Programming

Web Programming

Learn to develop Web 2.0 applications using many newer technologies such as XHTML, CSS, JavaScript, PHP, MySQL, and Ajax. The course features a project-based approach to learning with hands-on exercises requiring programming skills. Students apply design strategies to make scalable websites and access data from other websites and servers. Emphasis will be on programming and solving design issues. (4 credits)

Prerequisite: CS 401 or consent of the department faculty.

CS 475 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.

CS 485 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.

CS 490 Topics in Computing

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.

CS 499 Directed Study

Faculty Directed Study of Specialized Topics

(variable credits) Prerequisite: consent of the Department faculty


I am a US citizen or Green Card holder *

* required fields

Send Request >