Graduates of the BS program in Computer Science will be able to:
The department of Computer Science prepares students for advanced study and professional careers in the dynamically changing world of computing and information technology. To graduate with a Bachelor of science degree in computer science a student must finish:
CMPS 211 Discrete Structures 3.0; 3 cr.
syllabus This course introduces students to discrete structures, focusing on those relevant to computing sciences. Topics covered include Logic and Proofs, Sets, Sequences, Functions, Growth of Functions, Algorithms and their complexities, Induction and Recursion, Counting, and Recurrence Relations. This course is equivalent to MATH 211. Annually.
CMPS 212 Intermediate Programming with Data Structures 3.3; 3 cr. syllabus A continuation of CMPS 200, this course consolidates algorithm design and programming techniques, emphasizing large programs. This course also provides a detailed study of data structures and data abstraction, and an introduction to complexity considerations and program verification. Prerequisite: CMPS 200. Every semester.
CMPS 213 C/C++programming 1.2; 1 cr. syllabus This course exposes students to the C and C++ programming languages. The course covers basic syntax, defining structures and classes, I/O, pointers, arrays, memory management, references, overloading, templates, the Standard Template Library, inheritance and polymorphism. Annually.
CMPS 230 Digital Media Programming 3.0; 3 cr.
The class is an introduction to digital media programming and processing. The course explains the essential technology behind images, animations, sound, and video and how to write interactive programs that manipulate these media in creative ways. The class assumes basic knowledge in Java or a first course in programming. Prerequisite: CMPS 200.
CMPS 251 Numerical Computing 3.1; 3 cr.
Techniques of numerical analysis: number representations and round-off errors, root finding, approximation of functions, integration, solving initial value problems, Monte-Carlo methods. Implementations and analysis of the algorithms are stressed. Projects using MATLAB or a similar tool are assigned. Prerequisites: CMPS 200 or EECE 230, and MATH 201. This course is equivalent to MATH 251. Annually.
CMPS 253 Software Engineering 3.0; 3 cr.
A course that introduces the fundamentals of software engineering, with emphasis on the requirements elicitation and specification, and analysis and design phases of the software life cycle. Specifications are given as a set of operations (with pre- and post-conditions), and using a generic data model, and the design as a module dependency diagram where both data and procedural decomposition are emphasized. The course also introduces verification and testing of a design with respect to its specification, and the use of modularity and decomposition to ensure tractability of the verification. Students will apply the concepts learned to develop a software system. Prerequisite: CMPS 212. Annually.
CMPS 255 Computer Architecture 3.0; 3 cr.
A structured overview of the fundamentals of designing digital computer systems. Topics covered include digital logic and systems, machine level representation of data, assembly level machine organization, memory system organization and architecture, CPU implementation and virtual machines, and exposure to one or more micro/mini architectures. Prerequisites: CMPS 211 and CMPS 212. Annually.
CMPS 256 Algorithms and Data Structures 3.0; 3 cr.
A systematic study of algorithms and their complexity. Topics include techniques for designing efficient computer algorithms, proving their correctness, and analyzing their complexity; as well as advanced searching, sorting, selection, graph and matrix algorithms. Prerequisites: CMPS 211 and CMPS 212. Annually.
CMPS 257 Theory of Computation 3.0; 3 cr.
A course that covers basic theoretical principles embodied in automata and grammars. Topics include regular expressions, finite automata, context-free grammars and parsing, pushdown automata, closure properties, Turing machines, Church’s thesis, reductions and decidability. This course also provides a quick introduction to complexity theory. Prerequisites: CMPS 211 and CMPS 212. Annually.
CMPS 258 Programming Languages 3.0; 3 cr.
A course on the principles and programming styles that govern the design and implementation of contemporary programming languages, a history and overview of programming languages, fundamental issues in language design, and an introduction to language translation. This course focuses on design issues in imperative, object-oriented, functional, and rule-based paradigms. This last paradigm will be used to introduce intelligent systems issues. Languages such as C, C++, Haskell, and Prolog are used to illustrate key concepts. Prerequisite: CMPS 212. Annually.
CMPS 272 Operating Systems 3.0; 3 cr. syllabus
This course provides an introduction to the fundamentals of operating system function, design, and implementation. It contains a theory component about the concepts and principles that underlie modern operating systems, and a practice component to relate theoretical principles with operating system implementation. The course divides into three major parts. The first part of the course discusses concurrency (processes, threads, scheduling, synchronization, and deadlocks). The second part of the course discusses memory management (memory management strategies and virtual memory management). The third part of the course concerns file systems, including topics such as secondary storage systems and I/O systems. If time permits, the following topics will be briefly examined: virtualization, security, distributed synchronization, and perhaps other topics. A case study of a contemporary operating system like UNIX accompanies the course. Prerequisites: CMPS 213, CMPS 255 and CMPS 256. Annually.
CMPS 273 Systems and Network Programming 3.0; 3 cr. syllabus
This course focuses on the programming aspects of networking protocols. Topics include: designing and building programming applications that use computer networks, fundamental concepts required to build iterative and concurrent client/server networking applications using sockets. Then it moves to explain low level networking programming and other advanced socket topics. The course also presents the emerging peer-to-peer computing along with some tools needed to develop P2P applications. Prerequisite: CMPS 272. Annually.
CMPS 274 Compiler Construction 3.0; 3 cr. syllabus
A course that covers syntax specifications of programming languages, parsing theory, top-down and bottom-up parsing, parser generators, syntax-directed code generation, symbol table organization and management, dynamic storage allocation, code optimization, dataflow analysis, and register allocation. Prerequisites: CMPS 255, CMPS 258 and CMPS 257. Biennially.
CMPS 277 Database Systems 3.0; 3 cr. syllabus
An overview of the nature and purposes of database systems and an introduction to data modeling: entity relationship model, relational model with relational algebra, relational calculus and SQL; integrity constraints; file organization and index files; normalization. Prerequisite: CMPS 256. Annually.
CMPS 278 Web Programming and Design 3.0; 3 cr. syllabus
CMPS 281 Numerical Linear Algebra 3.0; 3 cr. syllabus
A course on direct and interactive methods for solving general and special systems of linear equations, covering LU decomposition, Choleski decomposition, nested dissection, marching algorithms; Jacobi, Gauss-Seidel, successive over-relaxation, alternating directions, and conjugate gradient iterative methods. This course is equivalent to MATH 281. Prerequisites: MATH 218 or 219; and MATH 251 or CMPS 211. Annually.CMPS 282 Advanced Software Engineering 3.0; 3 cr. syllabus
A course on state of the art software engineering for large distributed and concurrent systems. Fundamental principles and concepts for specifying, designing, analyzing, implementing, and testing such systems. Concurrent object oriented paradigms. Design patterns. Use of tools. Documentation using both formal and informal descriptions. Students will develop at least one large software system as part of the course. Prerequisite: CMPS 253. Annually.
CMPS 284 Computer Networks 3.0; 3 cr. syllabus
An introduction to network architectures and protocols, placing emphasis on Internet design principles and methodology. Specific topics include application layer protocols, network programming, transport protocols, circuit switching and packet switching, routing algorithms, multicast, local and wide area networks, error detection and correction, and performance evaluation. Prerequisite: CMPS 255. Annually.CMPS 285 Computer Graphics 3.0; 3 cr. syllabus
A course that covers the practice of, and underlying mathematical foundation for, interactive graphics programming. Topics include basic graphics systems, graphics primitives and attributes, windows and viewports, clipping, geometric transformations, color systems, 2D texture mapping, and introduction to 3D graphics. Programming in OpenGL will be used. Prerequisite: CMPS 212. Annually.
CMPS 286 Computer-Aided Geometric Design 3.0; 3 cr. syllabus
A course that discusses the representation of free-form curves and surfaces in modeling objects by computers, including curve approximation and interpolation, spline curves (Bezier and B-splines), visual smoothness of curves, geometric continuity, parameterization of curves, introduction to surface interpolation and approximation, and spline surfaces (Bezier and B-splines). Prerequisite: CMPS 212. Biennially.
CMPS 287 Artificial Intelligence 3.0; 3 cr. syllabus
An introduction to the principles and techniques that enable computers to behave intelligently. This course covers basic problem solving methods, knowledge representation, reasoning methods, learning from samples and from experience, expert systems and knowledge acquisition, machine learning, and neural networks. Several projects are given, some of which are in Prolog. Prerequisites: CMPS 256 and CMPS 258. Annually.
CMPS 288 Internals of Database Management Systems 3.0; 3 cr. syllabus
A course on the internals of database management systems, especially relational DBMS. Topics include query processing and optimization, transaction processing, concurrency control, recovery, distributed transactions, database security, client-server, multi-tier architectures, and web deployed database systems. Prerequisite: CMPS 277. Annually.
CMPS 289 Human Computer Interaction 3.0; 3 cr. syllabus
This course describes the psychological principles of human-computer interaction. Evaluation of user interfaces. Usability engineering. Task analysis, user-centered design, and prototyping. Conceptual models and metaphors. Software design rationale. Design of windows, menus, and commands. Voice and natural language I/O. Response time and feedback. Color, icons, and sound. Internationalization and localization. User interface architectures and APIs. Case studies and project. Prerequisites: CMPS 230 and CMPS 253. Biennially.
CMPS 296 Computer Science Tutorial 1–3 cr.
Prerequisite: Senior standing.CMPS 297 Special Topics in Computer Science 1–3 cr.
A course on selected topics which change according to the interests of the instructors and/ or students. Topics are chosen from state-of-the-art innovations in software and computer information systems. Prerequisite: Consent of instructor. Annually.
CMPS 299 Software Graduation Project 3 cr.
A course to enhance students’ skills with practical experience giving them the opportunity to integrate knowledge accumulated in different courses. In this course, students must deliver a software product, which passes through the design, analysis, implementation, testing, and evaluation stages. Prerequisites: CMPS 253, CMPS 272, CMPS 277, and senior standing. Annually.
A minor in computer science requires 18 credits:CMPS 200,CMPS 211,CMPS 212,CMPS 256, and six additional credits in computer science courses (CMPS) numbered 230 or above.
undergrad catalog for more details.