Bachelor of Science in Computer Science
Students intending to enter this program at the freshman level should have completed two years of algebra and one semester of trigonometry in high school. One year each of high school geometry and physics, as well as basic knowledge of computer organization and programming, are very desirable.
All lower division courses (course numbers below 300) included among the degree requirements are available at many community colleges in California; students intending to enter the program upon transferring to San Francisco State University from a community college should take as many of those courses there as possible.
Students should plan their program of study in the major with the help of a departmental advisor as soon as possible in order that the correct sequence of courses is taken and a proper set of electives is chosen. It is also suggested that students consult with an advisor before selecting courses to meet the General Education requirements. (See program below for acceptable science electives.)
Students are encouraged to participate in the Computer Science Cooperative Education Program at SF State. Under this program, they may obtain industrial employment related to their academic studies. This combination of on-the-job training and academic experience can greatly enhance the value of an undergraduate degree in Computer Science.
An Endowed Scholarship Fund, established in the memory of Jules H. Strauss, offers an annual award to a computer science major who shows scholarly accomplishment and demonstrates financial need.
Students are advised that CR/NC grades are not acceptable in courses to be counted for the Computer Science major or minor programs.
Prerequisite Policy
CS Department strictly enforces prerequisites for all courses. Prerequisites are checked by CS faculty at the beginning of each course. A grade of C or better is required to be accepted as a prerequisite. The final decision about whether a student is ready to take a course is made by the instructor who teaches the course.
Computer Science (B.S.) — 71 units
Courses are 3 units unless otherwise indicated.
Mathematics and Physics — 22 units
- MATH 226 Calculus I (4)
- MATH 227 Calculus II (4)
- MATH 324 Probability and Statistics with Computing
- MATH 325 Linear Algebra
- PHYS 220 General Physics with Calculus I
- PHYS 222 General Physics with Calculus I Laboratory (1)
- PHYS 230 General Physics with Calculus II
- PHYS 232 General Physics with Calculus II Laboratory (1)
Science Elective — 3 units
Science elective selected from the following GE Segment II Physical and Biological Sciences, Category B, Biological Sciences courses. Other science courses are subject to approval.
Core Computer Science Requirements — 22 units
- CSC 210 Introduction to Computer Programming
- CSC 220 Data Structures
- CSC 230 Discrete Mathematical Structures for Computer Science
- CSC 256 Machine Structures
- CSC 300 GW Ethics, Communication and Tools for Software Development - GWAR
- CSC 340 Programming Methodology
- CSC 412 Advanced Software Lab (1)
- CSC 413 Software Development
Advanced Computer Science Requirements — 24 units
- CSC 415 Principles of Operating Systems
- CSC 510 Analysis of Algorithms I
- CSC 600 Programming Language Design
- CSC 648 Software Engineering
Electives — 12 units (see requirements below)
Senior Presentations. Each major is required to make an oral presentation during his/her senior year. Guidelines for the presentations are available on the Computer Science web site: http://cs.sfsu.edu.
Elective Requirements (four 3-unit courses)
Electives are selected from the nine subareas of Computer Science listed below. Electives must meet the following requirements.
- One of the electives must be CSC 520, Theory of Computing, or CSC 656, Computer Organization. (CSC 520 and CSC 656 can be used to partially meet the depth and breadth requirements.)
- Depth Requirement: two of the electives must be chosen from the same subarea of the discipline.
- Breadth Requirement: electives must be chosen from three different subareas.
Note: It is recommended that students planning to continue their study of Computer Science in graduate school take both CSC 656 and CSC 520.
The same courses can be used to meet depth and breadth requirements. However, a course cannot be counted towards more than one area of emphasis. For example, the following four electives can be used to meet the requirements in different ways in order to highlight a different area of emphasis (areas of emphasis are shown in parentheses):
- CSC 520 Theory of Computing (Algorithms and Theory of Computing, Programming Languages)
- CSC 656 Computer Organization (Architecture)
- CSC 675 Introduction to Database Systems (Algorithms and Theory of Computing, Database)
- CSC 668 Advanced Object Oriented Software Design and Development (Programming Languages, Software Engineering)
The different ways in which these courses can meet the elective requirements are:
Emphasis: Algorithms and Theory of Computing
CSC 520 meets requirement 1
CSC 520 and CSC 675 meet requirement 2 (depth in Algorithms)
CSC 520 or CSC 675 (Algorithms), CSC 656 (Architecture), and CSC 668 (Programming Languages or Software Engineering) meet requirement 3
Emphasis: Programming Languages
CSC 520 meets requirement 1
CSC 520 and CSC 668 meet requirement 2 (depth in Programming Languages)
CSC 520 or CSC 668 (Programming Languages), CSC 656 (Architecture), and CSC 675 (Database) meet requirement 3
In contrast, for example, the following courses do not meet the elective requirements because CSC 520 cannot be double counted as Algorithms and Programming Languages:
- CSC 520 Theory of Computing (Algorithms and Theory of Computing, Programming Languages)
- CSC 645 Computer Networks (Operating Systems and Distributed Processing)
- CSC 650 Secure Networked Systems (Operating Systems and Distributed Processing)
- CSC 651 System Administration (Operating Systems and Distributed Processing)
The courses listed below constitute a partial list of suitable courses for meeting the elective requirements. The department frequently offers, under the title of CSC 690, new courses that meet elective requirements. Many students also find that, by their senior year, they are prepared to undertake certain graduate courses in Computer Science. Occasionally, students in good academic standing may take CSC 699, Independent Study, instead of a regularly scheduled course. Students are advised to check university and college regulations regarding academic standing requirements. Finally, it is occasionally possible to use a course taken in a different department or at another university (but only if the course is not offered at San Francisco State University) to satisfy elective requirements. Any course substitutions must be approved in advance by a senior advisor.
Areas of Special Emphasis
Algorithms and Theory of Computing
- CSC 520 Theory of Computing
- CSC 621 Biomedical Imaging & Analysis
- CSC 630 Computer Graphics Systems Design
- CSC 637 Software Techniques for Computer Music
- CSC 671 Neural Networks
- CSC 675 Introduction to Database Systems
- MATH 400 Numerical Analysis
Architecture
Artificial Intelligence
- CSC 620 Natural Language Technologies
- CSC 621 Biomedical Imaging & Analysis
- CSC 665 Artificial Intelligence
- CSC 671 Neural Networks
Database
Graphics and Multimedia
- CSC 621 Biomedical Imaging & Analysis
- CSC 630 Computer Graphics Systems Design
- CSC 631 Multiplayer Game Development
- CSC 637 Software Techniques for Computer Music
- CSC 642 Human-Computer Interaction
- CSC 664 Multimedia Systems
Numerical and Symbolic Computing
Operating Systems and Distributed Processing
- CSC 615 UNIX Programming
- CSC 641 Computer Performance Evaluation
- CSC 645 Computer Networks
- CSC 650 Secure Networked Systems
- CSC 651 System Administration
- CSC 667 Internet Application Design and Development
Programming Languages
- CSC 520 Theory of Computing
- CSC 620 Natural Language Technologies
- CSC 665 Artificial Intelligence
- CSC 668 Advanced Object Oriented Software Design and Development