B.S. in Computer Science
Courses
Computer Programming 1
The language of computing — expressing the intelligence that guides computation (CS 201)
This first upper-division course in computer science presents the basic principles of computer programming, with emphasis on developing practical programming skills through laboratory assignments. Topics include formulation of algorithms, top-down design, basic control structures, data types, functions, and subroutines. (4 units) Prerequisite: MATH 162
Computer Programming 2
Greater knowledge and expression in programming languages (CS 203)
Students use a substantial laboratory programming project as a vehicle for completing the basic knowledge of programming and developing good programming practices. Topics include structured data types, recursion, pointers, and issues of program design, structure, and correctness. (4 units) Prerequisite: CS 201
Data Structures
Fundamental structures of information at the basis of all computation (CS 220)
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, hash coding, searching and sorting algorithms, dynamic storage allocation, and computing time of programs. (4 units) Prerequisite: CS 203
Data and File Structures
Information structures to represent larger systems (CS 222)
Students continue the study of high-level data organization techniques. Topics include representations and algorithms for trees and graphs; file organization techniques; sequential, direct and indexed files; B-trees; and inverted and multi-list files. (4 units) Prerequisite: CS 220
Computer Organization and Digital Logic
The physiology at the basis of all computers — the logical and physical structures of digital computation (CS 262)
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, machine language, assembly language, logic gates, flip-flops, decoders, multiplexers, registers, combinatorial logic, and sequential circuits. (4 units)
Discrete Structures
Models and mathematics of the structures of natural law at the basis of computation (CS 272)
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 units) Prerequisite: MATH 162
Computer Architecture
The physiology of computing systems — the physical structures reflecting the underlying computational processes (CS 362)
This course investigates the levels and components of computer hardware as they contribute to the functioning of the computer. Topics include RTL systems and notations, bus structures, arithmetic logic units, execution and control design, micro-program control, input-output interface, hardware-software interactions, and microprocessors. Students study the integration of these system components in a sample uni-processor system and through case studies of actual machines. (4 units) Prerequisite: CS 262
Fundamentals of Modern Programming
Modern programming methods and systems — capture the fundamental principles of knowledge for greater success in all areas (CS 390)
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. Also studied are stacks, queues, linked lists, and trees, using the Java programming language. This course cannot be taken for graduate credit, but can replace CS 401: Modern Programming Practices. (2 units). Please note that either CS 401 or CS 390 (not both) may be used toward graduation requirements.
Computer Programming Internship
Knowledge and experience for maximum growth (CS 398)
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 all of their computer programming activities. (2 units) Prerequisite: consent of the Department faculty and the Academic Standards Committee
Modern Programming Practices
Current concepts and best practices in software development knowledge is the basis of action (CS 401)
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 units)
Database Management Systems
Capturing the organizing power of information in structured models, representations, and query languages (CS 422)
Database management systems organize and retrieve information, allowing the user to access the desired information easily and efficiently. Topics in this course include relational, hierarchical, and network data models; query languages; relational calculus, data normalization, and schemas; file organization techniques; data security and integrity; and study of a specific commercial database management system. (4 units) Prerequisite: CS 222
Software Engineering
Knowledge is the basis of action — principles and processes for developing large-scale software systems (CS 425)
This course introduces the major principles used in the development of software. General principles and methods are identified, and their application is located in various phases and models of software engineering. The focus is on understanding the organizing power inherent in the underlying concepts, principles, and processes, rather than any particular developmental method or model. Topics include: the nature and qualities of software; types and qualities of specifications; objectives of design; verification approaches; production process models; and classification of supporting tools and environments. (4 units) Prerequisite: CS 222
Algorithms
The dynamics of intelligence — the relationship of structure and dynamics as the basis for efficient and practical software development (CS 435)
This course presents methods for analyzing the efficiency of algorithms as well as a variety of known efficient algorithms. Topics include graph algorithms, combinatorial algorithms, searching and sorting, numerical and arithmetic algorithms, recurrence relations, computing time and space complexity of algorithms, and NP-complete problems. (4 units) Prerequisites: CS 222 and CS 272
Compiler Construction
Connecting name and form — the source of all programming languages in grammar and semantics (CS 440)
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 units) Prerequisite: CS 222
Computer Communication Networks
Connecting the parts and whole — frictionless flow of information (CS 450)
Computers are connected with high-speed communication lines in local area or wide area networks, for the purpose of sharing databases and distributing workloads to increase efficiency and improve service. Topics include sampling and information theory, error detecting and correction codes, network architecture, communication protocols and models, protocol analysis, hardware components, logical and physical topology, message routing and switching, flow control, local area networks, and data security. (4 units) Prerequisites: CS 222 and MATH 351
Software Technologies
Advanced principles of natural law in software systems (CS 455)
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 units)
Operating Systems
The most fundamental level of software — organizing hardware resources into coherent virtual systems (CS 465)
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 units) Prerequisite: CS 222
Knowledge-Based Systems
Knowledge is the basis of thinking, action, and achievement — creating intelligent software systems (CS 470)
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 units) Prerequisite: CS 222
Computer Graphics
How to represent and graphically express the dynamic intelligence captured in software systems (CS 475)
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 units) Prerequisite: CS 222
Image Processing
Visual expression of total knowledge (CS 476)
The course will introduce the students to the basic concepts and operations in digital image processing, and will be accompanied by lab/programming work, including team projects solving practical image processing problems that have been addressed by the imaging industry. Depth of coverage depends on the course length and students' background in mathematics and in programming. The course develops the mathematical-visual intelligence. The course covers image acquisition and representation, intensity transformation, spatial linear and non-linear filtering (image enhancement), Fourier transform and frequency domain representation (either on the conceptual level or the mathematical level as well, depends on students’ background), frequency domain filtering (depth depends on background and course length), Edge detection, segmentation, morphological image processing, color image processing. If time permits, topics such as Hough transform, Radon transform and tomography, fundamentals of image and video compression, object recognition, some concepts in computer graphics will also be presented. (2-4 units
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
Topics in Computing
Advanced topics in nature’s computing processes (CS 490)
This course provides topical knowledge relevant to professional applications of computing. Topics will vary each time it is offered. Topics may include: object-oriented programming, object-oriented analysis and design, client/server models and distributed systems, real-time programming, real-time systems, software quality assurance and measurement, applied AI and expert systems, and database management tools. (1 unit — may be repeated)