Course Descriptions

Classes are offered in the semesters indicated. If not indicated, check the current course offerings.

The Degree Programs Page categorizes classes based on requirements for a Major or Minor in Computer Science and classes that count toward upper division or elective.


Lecture, 2 hours; laboratory, 2 hours. This course is an introduction to the concepts, techniques, uses, applications, and terminology of computers, computing, and networking. Emphasis is on the possibilities and limitations of computers and computing in a wide range of personal, commercial, and organizational activities. Topics include computer types, history of computing, computer organization and operation, computer languages, program development, computer applications (word processing, database, graphics, spreadsheets, etc.), basic networking, and computers in society. Weekly hands-on experience with a variety of operating systems, applications, and computer programming. Recommended for all students. Satisfies GE Area B3 (Specific Emphasis in Natural Sciences).

Lecture, 3 hours; laboratory, 3 hours. An overview of computer organization; arithmetic and logical expressions, decision and iteration, simple I/O; subprograms; principles of good programming style, readability, documentation, structured programming concepts; top-down design and refinements; techniques of debugging and testing. Use of the above concepts will be implemented in a standard high-level programming language. Satisfies GE Area B3 (Specific Emphasis in Natural Sciences).

Prerequisite: GE Math and English eligibility, or consent of instructor. This course is currently taught using Python.

A workshop designed to be taken with CS 115. Exploration of programming concepts through problem solving in a group setting.

Corequisite: CS 115.

A first course in computer graphics hardware and software. Topics include graphics hardware, microcomputer graphics, presentation and business graphics, graphics for artists, computer mapping, CAD/CAM (drafting and environmental applications), animation, 3-dimensional graphics and desktop publishing. Students will have hands-on experience using a variety of graphics programs on microcomputers. Not applicable to the CS major.

Prerequisite: Previous computer course or consent of instructor.

This lower-division course may be repeated with different subject matter. Content will be indicated by the specific topic. Not applicable to the CS major.

Prerequisite: Consent of instructor.

Laboratory, 3 hours. An introduction to the use of Unix as a programming environment. Communicating with a Unix host, shells and shell commands, files and directories, Gnome desktop, jobs and processes, scripting, programming utilities (compiler, linker, debugger, make, hex dump, etc.).

Prerequisites: CS 115 and previous or concurrent enrollment in CS 215, or consent of instructor.

Lecture, 3 hours; laboratory, 3 hours. Pointers and dynamic allocation of storage; linked lists; an introduction to the object oriented programming (OOP) paradigm; classes and objects; encapsulation; member variables and member functions; inheritance and polymorphism; scoping; templates; iterators; error handling techniques.

Prerequisites: CS 115 and previous or concurrent enrollment in CS 210, or consent of instructor. This course is currently taught using C++.

Lecture, 4 hours. Coverage of fundamental mathematical concepts blended with their applications in computer science. Topics include sets, functions and relations, Boolean algebra, normal forms, Karnaugh maps and other minimization techniques, predicate logic, formal and informal proof techniques, relational algebra, basic counting techniques, recurrence relations, introduction to graph theory with applications to computer science.

Prerequisites: CS 115 and Math 161 or 161X, or consent of instructor.

Lecture, 3 hours; laboratory, 3 hours. This course looks at the interface between computer hardware and software by introducing computer architecture and low-level programming. Topics to be covered include: data representations, digital logic, combinational and sequential circuits, computer system organization from the machine language point of view, and assembly language implementation of high-level constructs.

Prerequisites: CS 210 and CS 242, or consent of instructor.

This lower division course may be repeated with different subject matter. Content will be indicated by the specific topic. Not applicable to the CS major.

Prerequisite: as indicated in the specific topic description, or consent of instructor.

Lecture, 3 hours; laboratory, 3 hours. This course introduces the concept of the organization of data into different structures to support the efficient implementation of computer algorithms. The emphasis of the course is on the internal representation of the elementary and intermediate data structures, their time and space requirements, and their applications. A second component of the course is the study of more advanced features of object-oriented programming.

Prerequisites: CS 210, CS 215, and CS 242, or consent of instructor. This course is currently taught using C++.

Lecture, 2 hours; laboratory, 2 hours. This course is an introduction to the theory and practice of video game design and programming. Video games combine, in real-time, concepts in computer graphics, human-computer interaction, networking, artificial intelligence, computer aided instruction, computer architecture, and databases. This course introduces students to a variety of game engines and frameworks and explores artificially intelligent agents. Students will work as part of a team to create a complete description document for a computer game and implement a prototype of the game.

Prerequisite: CS 315 or consent of instructor.

Lecture, 2 hours; laboratory, 2 hours. Current methods for increasing security, protecting privacy and guaranteeing degrees of confidentiality of computer records; ensuring computer installation safety; protecting software products; preventing and dealing with crime; value systems, ethics and human factors affecting use and misuse of computers. Discussion of recent technical, legal and sociopolitical issues influencing computer security problems, with an emphasis on malware.

Prerequisites: CS 215 and CS 252, or consent of instructor.

Laboratory, 2 hours. This course focuses on problem solving and program development in a team programming environment. Topics include techniques for problem analysis and algorithm design, rapid implementation and pair program- ming methods, use of standard container classes and library functions. Different types of problems will be selected each semester. May be repeated for credit. A maximum of 3 units can be applied to the Computer Science major. SSU students taking this course participate in regional and national programming competitions.

Prerequisite: CS 315 or consent of instructor.

Lecture, 4 hours. Instruction set design; stages of instruction execution, data and control path design; CISC, RISC, stack architectures; pipelining; program optimization techniques, memory hierarchy: cache models and design issues, virtual memory and secondary storage; I/O interfacing; advanced topics to include some of the following: parallel architectures, DSP or other special purpose architecture, FPGA, reconfigurable architecture, asynchronous circuit design.

Prerequisites: CS 215 and 252, or consent of instructor.

Lecture, 4 hours. This course focuses on the theoretical as well as the practical aspects of modern database systems. Topics include the study of the entity-relationship (E/R) model, relational algebra, data normalization, XML as a semi-structured data model, data integrity, and database administration. Current tools and technology are used to create and manipulate sample databases.

Prerequisite: CS 215 or consent of instructor.

Lecture, 2 hours; laboratory, 3 hours. Principles of object-oriented programming, including encapsulation, inheritance and polymorphism, and design patterns for object-oriented programming. Specific applications are developed in one or more object-oriented programming languages and will cover the use of application frameworks and graphical user interfaces based on object-oriented principles.

Prerequisite: CS 315, or consent of instructor. This course is currently taught using Java and C++.

Lecture, 2 hours; laboratory, 3 hours. This course introduces the theory and practice of computer networking, with coverage of key theories in data communication and how these theories relate to current practices and will drive future practices. Network hardware implementations of local area networks, wide area networks, telephone networks, and wireless networks are investigated. Network software implementations of switches and routers, peer-to-peer networking, and hosted applications are investigated with exercises in writing and debugging network protocols in the laboratory.

Prerequisites: CS 215 and CS 252, or consent of instructor.

Lecture, 4 hours. This course covers techniques of software design and development. Software lifecycle, requirements, formal specification, metrics, design, functional and structural testing, rapid prototyping, complexity, version control, and team management. Software metrics, tools for component-based software development. Team-based, agile, and scrum methodologies emphasized.

Prerequisite: CS 215 or consent of instructor.

Lecture, 2 hours; laboratory, 2 hours. An introduction to computer graphics. Survey of the fundamental algorithms and methodologies, including, but not limited to, polygon fill, line-drawing, antialiasing, geometric transformations, viewing and clipping, spline representation, occlusion and visible surface detection, illumination, texturing, color models, rendering, shaders, animation, and emerging techniques.

Prerequisites: CS 215 and MATH 161, or consent of instructor.

This course may be repeated with different subject matter for credit in the CS major.

Prerequisite: Upper-division standing with consent of a CS advisor and consent of instructor.

Lecture, 2 hours; laboratory, 3 hours. This course may be repeated with different subject matter for credit in the CS major.

Prerequisite: Upper-division standing with consent of a CS advisor and consent of instructor.

Series of lectures on current developments in computer science. May be repeated for credit; a maximum of 3 units can be applied to the CS major; students will be required to attend all presentations, keep a journal, and do a research project based on one or more of the presentations. Contact the department for specific information. Cr/NC only.

CIP involves students in basic community problems. The most common task for a CS student will be tutoring at a local school. Not applicable to the CS major.

Prerequisites: CS 115 and consent of instructor.

Lecture, 4 hours. A systematic approach to the design and analysis of algorithms with an emphasis on efficiency. Topics include algorithms for searching and sorting, hashing, exploring graphs, integer and polynomial arithmetic. Foundations in recurrence relations, combinatorics, probability, and graph theory as used in algorithm analysis are covered. Standard design techniques such as divide-and-conquer, greedy method, dynamic programming, heuristics and probabilistic algorithms along with NP-completeness and approximation algorithms are included.

Prerequisite: CS 315 or consent of instructor.

Lecture, 3 hours. Overview of parallel patterns, programming models, and hardware. Topics include parallel performance analysis; types of parallelism; parallel decomposition of tasks; shared vs. distributed memory; synchronization; hands-on experience with multiple parallel programming models; and architectural support for parallelism.

Prerequisites: CS 252 and CS 315, or consent of instructor.

Lecture, 4 hours. This course covers the fundamental concepts of operating system design and implementation; the study of problems, goals, and methods of concurrent programming; and the fundamentals of systems programming. Topics include resource-management, process and thread scheduling algorithms, interprocess communication, I/O subsystems and device-drivers, memory management including virtual memory, segmentation, and page-replacement policies. These topics will be covered in theory and in practice through the study of the source code of a working operating system.

Prerequisites: CS 252 and 315, or consent of instructor.

Lecture, 2 hours; laboratory, 2 hours. Application of language and automata theory to the design and construction of compilers. Lexical scanning, top-down and bottom-up parsing; semantic analysis, code generation; optimization. Design and construction of parts of a simple compiler using compiler generation tools.

Prerequisites: CS 252 and 315, or consent of instructor.

Lecture, 4 hours. Overview of various kinds of computability, unsolvability, and decidability. The P versus NP problem. Abstract mathematical models of computing devices and language specification systems with focus on regular and context-free languages. Classification of computer-solvable problems.

Prerequisite: CS 315 or consent of instructor.

Lecture, 4 hours. A survey of the syntactic, semantic and implementation features of functional, procedural, object-oriented, logic and concurrent programming languages.

Prerequisites: CS 252 and 315, or consent of instructor.

Lecture, 2 hours; laboratory, 3 hours. The ISO reference model, theoretical basis for data communications, data transmission theory and practice, telephone systems, protocols, networks, internetworks with examples.

Prerequisite: CS 351, or consent of instructor.

Lecture, 3 hours. This course is a project-based course designed to provide a "real world, team oriented" capstone experience for computer science majors. Coursework will be organized around large programming projects. The content of the projects may vary depending on the interests of the instructor and may include industry, government, non-profit organization, or other affiliations.

Prerequisites: CS 315, CS 370, and senior standing in the major, or consent of instructor.

Lecture, 3 hours. A survey of techniques that simulate human intelligence. Topics may include: pattern recognition, general problem solving, adversarial game-tree search, decision-making, expert systems, neural networks, fuzzy logic, and genetic algorithms.

Prerequisite: CS 315 or consent of instructor.

This course is intended for students who are doing advanced work in an area of computer science (e.g., a senior project). May be repeated for credit.

Prerequisite: An upper-division CS course in the area of interest or consent of instructor.

Students, under the direction of one or more faculty members, undertake a substantial research project that is based on multiple upper-division CS courses. The result of the research is presented by the students in one of the Colloquium (CS 390) meetings.

Prerequisites: Senior standing and approved contract.

Student projects conceived and designed in conjunction with an off-campus organization or group. The internship is intended to provide on-the-job experience in an area of computer science in which the student has no prior on-the-job experience. Computer hardware or computer time required for the internship, as well as regular supervision of the intern, must be provided by the off-campus organization.

Prerequisite: Student must be within 30 units of completion of the CS major. Cr/NC only. No more than 3 units can be applied to the CS major.