Related Links
Courses
Permanent Courses
Course information found here includes all permanent offerings and is updated regularly whenever Academic Senate approves changes. For historical information, see the Course Catalogs. For actual course availability in any given term, use Course Search in the Portal.
This course is a structured approach to algorithm development and problem solving using computer programming in an object-oriented programming language such as Java or Python. The course develops the concepts of procedural abstraction, program design, debugging, and testing in addition to teaching the standard features of a high-level computer programming language. Students will be introduced to the key concepts of object-oriented programming, including classes, inheritance, polymorphism, and interfaces. Societal issues related to computers (e.g. ethics, privacy, liability, and security) will also be discussed. (1S) Offered each semester.
An introduction to the design, creation, and maintenance of web pages and websites. Students learn how to critically evaluate website quality, how to create and maintain web pages, how to design web page layout and effective site navigation, and learn about web design standards and their importance. The course includes implementation using HTML, CSS, and other basic tools for Web based construction. The course then continues with higher level tools, including page design tools, DHTML, and related tools. Some site management techniques are covered, accessibility issues and working with clients discussed. The course progresses from introductory work on web design to a culminating project, usually on a student-selected project or a site for a local community organization. Offered in even years, spring semester. Prerequisite: junior standing.
Special topics applicable to a general audience. Course title and content vary, and the course may be repeated for credit when the title and content change. Offered occasionally. Prerequisite: varies with topic.
The course introduces the organization of the physical components of the computer (hardware) and the interface between the hardware, specifically via the Central Processing Unit (CPU), and the programs/instructions (software) that resulted in a functioning computational machine. In addition, the course introduces an in-depth study of the CPU in terms of its functional sub-units (Register File, Arithmetic and Logic Unit (ALU), datapath and control, pipelining) and interconnections, as well as in terms of its interface to memory and the external world. The course includes formal study of digital logic, Instruction Set Architecture (ISA), assembly language, memory hierarchy, and storage units. The course also explores alternative processor architecture and multiprocessing. Offered each fall. Prerequisite: Computer Science 111.
Practical coverage of data structures with opportunities for software problem-solving. Covers linked-lists, skip lists, general and balanced trees, hashing, and graphs, together with algorithms and standard tools for their implementation, plus algorithms for diverse sorting methods and complexity analysis of algorithms. Students learn how to use abstractions of data structures in designing software for applied problems, to implement the details of algorithms in writing programs, and to analyze the tradeoffs in choices of data structures and algorithms. Offered each spring. Prerequisite: Computer Science 111.
Introduces the concepts, design, and implementation of computer data communication networks, presenting both a service model and a layered-architecture model. The course examines the Internet and its services and protocols at the application, transport, network, and physical layer in terms of a client-server, socket-based model. The growth and control of the Internet and its social implications are also discussed. The principles of network, communications, and data security and integrity are presented. Offered even years, spring semester. Prerequisite: Computer Science 175.
An introduction to programming techniques for the construction of dynamic web sites, and an introduction to Web application development. Students will learn to program in the building blocks of the web, including JavaScript (client-side), PHP or Python (server-side), and SQL (database communication). Additional technologies introduced include HTML forms, HTML5, the Document Object Model (DOM), XML, JSON, and AJAX. Students will work in teams to design, implement, and deploy a full-featured web application, either a pre-provided project or a personally designed project. Offered even years, spring semester. Prerequisites: Computer Science 204 and Computer Science 165, or permission of instructor.
Selected aspects of computer science reflecting particular interests and experience of the instructor. Course title and content vary, and the course may be repeated for credit when the title and content change. Offered occasionally. Prerequisite: varies with topic.
The major classes of algorithms used across the diverse areas of computer science, including graph algorithms, pattern matching, graphical algorithms, parallel algorithms, encryption, and compression. General approaches to the design of algorithms, including divide-and-conquer, backtracking, dynamic programming, and transformation of problems. Further techniques for the analysis of the efficiency of algorithms. An introduction to the abstract classes of problems: P (solvable), NP and NP-Complete (solvable but intractable), and unsolvable problems. Offered in odd years, spring semester. Prerequisite: Computer Science 204 and Mathematics 160.
Overviews the basic techniques for threaded programs where multiple tasks share the computer resources as well as surveys the principles of modern operating systems. Topics covered include data races, deadlock, atomicity/mutual exclusion with implementation, communication between threads including shared memory and message passing, operating system design, hardware influences, concurrency mechanisms, threads and processes, process states and diagrams, scheduling, context states and interrupts, memory management, file systems, and examples from major contemporary operating systems. Actual threaded programming will be done. Offered in odd years, fall semester. Prerequisite: Computer Science 204.
To understand what a computer can and cannot do, we investigate different styles of languages used to program computers, study machine learning, where the computer partly programs itself, and construct abstract models of computers for a more formal analysis of their capabilities and limitations. The focus is on programming languages substantially different than the object-oriented languages students are expected to be familiar with. We investigate their capabilities and strengths, and how they are implemented. We learn the basic properties of the three main abstract classes of computers: Finite State Machines, Context-Free Grammars, and Turing Machines. We learn some problems that cannot be solved by computer, and the implications of these unsolvable problems on computer technology. Offered in even years, fall semester. Prerequisite: Computer Science 204 plus 2 additional units of Computer Science courses at the 200 level or above.
This course introduces relational database systems, including design, architecture, SQL, relational data modeling, entity-relationships, transactions, and reliability. The course also introduces information management systems, including human needs, indexing, quality issues, object-oriented model, and information representation and applications. Students will work in teams to design a database application, including testing, documentation, and review. Students will experience different roles in the team environment and continued presentation of work to the audiences. Appropriate software development tools will be learned and utilized. Students will study professional ethics and obligations. (CP). Offered every year. Prerequisite: junior standing and Computer Science 204.
Selected aspects of computer science reflecting particular interests and experience of the instructor. Course title and content vary, and the course may be repeated for credit when the title and content change. Offered occasionally. Prerequisite: varies with topic.
This course studies modern techniques for using multiple teams to develop a single program. This includes programming techniques (e.g. test-driven development), professional tools (e.g. GitHub), and Scrum-based coordination. Historical approaches, such as the Waterfall Model, are discussed, but the focus is on modern versions of Agile Programming and user-story driven incremental development. This is a project-based course, with new projects for each offering. Students attend weekly Scrum meetings, contribute regularly to the GitHub repository, design tests for both their own code and teammate’s code, and give a presentation on one of the standard design patterns. (CP) Prerequisites: Computer Science 111, 204, and 1 additional computer science course.
Individual, guided investigation of a problem or topic in computer science. Prerequisite: sophomore standing.
Work with faculty in classroom instruction. Graded credit/no credit.