Pre-Major Foundation (28 credits)
In order to declare a Computer Science (CS) major, students are required to complete the following pre-major foundation courses with a grade of C- or better. Math courses should be taken before, or concurrently with, ICS courses. The cumulative GPA for ICS 141, ICS 240, and MATH 215 (or equivalents) must be at least 2.5 (A=4) in order to declare a major. Transfer students are advised to reference the CSC Department's General Guidelines for Transfer Courses and Prerequisites section of this catalog page.
This course is designed to prepare students for calculus. Topics include polynomial, rational, exponential, logarithmic, and trigonometric functions; the algebra of functions; multiple function representations; and an introduction to analytic geometry.
Full course description for Precalculus
This course covers a variety of important topics in math and computer science. Topics include: logic and proof, sets and functions, induction and recursion, elementary number theory, counting and probability, and basic theory of directed graphs.
Full course description for Discrete Mathematics
An introduction to the formulation of problems and developing and implementing solutions for them using a computer. Students analyze user requirements, design algorithms to solve them and translate these designs to computer programs. The course also provides an overview of major areas within the computing field. Topics include algorithm design, performance metrics, programming languages and paradigms, programming structures, number representation, Boolean algebra, computer system organization, data communications and networks, operating systems, compilers and interpreters, cloud computing, data analytics, mobile computing, internet of things, and artificial intelligence) database, internet, security, privacy, ethics, and other societal and legal issues. Lab work and homework assignments involving flow charting tools and programming using a language such as Python form an integral part of the course.
Full course description for Computational Thinking with Programming
Structure, design, and implementation of object-oriented computer programs. Topics include objects, classes, GUI, and layout managers. Introduction to containment, inheritance, and polymorphism. Programming projects involving multiple classes. Emphasis on methods, parameter passing, and arrays of objects. Exploration of problem-solving and algorithm-design techniques using pseudocode, Unified Modeling Language (UML) class diagrams, and simple patterns. Design of good test cases and debugging techniques.
Full course description for Programming with Objects
Introduces machine language, digital logic and circuit design, data representation, conventional von Neumann architecture, instruction sets and formats, addressing, the fetch/execute cycle, memory architectures, I/O architectures, as well as hardware components, such as gates and integrated chips.
Full course description for Computer Organization and Architecture
This course provides basic introduction to data structures and algorithms and emphasizes the relationship between algorithms and programming. Students will learn intermediate object-oriented design, programming, testing and debugging. Topics include algorithm complexity, generic programming, linked list, stack, queue, recursion, trees, searching, and sorting.
Full course description for Introduction to Data Structures
Choose one of the two courses below.
This course provides an overview of the differential calculus for single and multivariable functions and an introduction to the integral calculus and differential equations, with an emphasis on applications to the natural and physical sciences. Particular topics covered in the course include limits, ordinary and partial derivatives, applications of derivatives, definite integrals, fundamental theorem of calculus, applications of definite integrals, models involving differential equations, Eulers method, equilibrium solutions.
Full course description for Applied Calculus
Since its beginnings, calculus has demonstrated itself to be one of humankind's greatest intellectual achievements. This versatile subject has proven useful in solving problems ranging from physics and astronomy to biology and social science. Through a conceptual and theoretical framework this course covers topics in differential calculus including limits, derivatives, derivatives of transcendental functions, applications of differentiation, L'Hopital's rule, implicit differentiation, and related rates.
Full course description for Calculus I
Major Requirements (60 or 68 credits)
Once the pre-major foundation courses are complete, the following courses are required with a grade of C- or better. Students who haven’t declared or not accepted into the major will not be allowed to take 400-level courses in the discipline. Students are advised to reference the CSC department's General Guidelines section of this catalog page for further details on prerequisites.
Core Requirements (32 credits)
The Capstone course, ICS 499, should be taken in the final semester of your program, or at least during the semester you complete the last of the other required major courses.
Covers concepts and methods in the definition, creation and management of databases. Emphasis is placed on usage of appropriate methods and tools to design and implement databases to meet identified business needs. Topics include conceptual, logical and physical database design theories and techniques, such as use of Entity Relationship diagrams, query tools and SQL; responsibilities of data and database administrators; database integrity, security and privacy; and current and emerging trends. Use of database management systems such as MySQL. Coverage of HCI (Human Computer Interaction) topics. Development of GUI front ends to databases with application of HCI principles to provide a high level usability experience. Overlap: ICS 311T Database Management Systems.
Full course description for Database Management Systems
Exploration of the design and implementation of data structures and algorithms fundamental to computer systems and applications and to software engineering. Topics include trees, graphs, basic analysis of algorithmic complexity, fundamental questions of computability, and introduction to the algorithmic basis of intelligent systems. Programming projects.
Full course description for Algorithms and Data Structures
This course is a comprehensive introduction to the principal features and design of programming languages. It provides a comparative study of programming paradigms including structured programming, object-oriented programming, functional programming and logic programming. This course is a survey of programming concepts and constructs including data types, control structures, subprograms and parameter passing, nesting and scope, derived data types, input and output, and dynamically varying structures. Also covered are the principles of lexical and semantics analysis.
Full course description for Organization of Programming Languages
System development using the object-oriented paradigm. Programming topics include: inheritance, polymorphism, dynamic linking, generics, Graphical User Interfaces, and data serialization. Use-case and state-based approaches for the discovery of conceptual classes. Design principles including the Liskov Substitution Principle, Open Closed Principle, and Stable Dependencies Principle. Design patterns such as Factory, Iterator, Adapter, Facade, Bridge, Observer, Command, State, Composite, Singleton, and Mediator. Employment of design principles, design patterns, and the Model View Controller in the design of object-oriented systems. System implementation. Refactoring. Group projects.
Full course description for Object-Oriented Design and Implementation
Covers design and development of parallel and distributed algorithms and their implementation. Topics include multiprocessor and multicore architectures, parallel algorithm design patterns and performance issues, threads, shared objects and shared memory, forms of synchronization, concurrency on data structures, parallel sorting, distributed system models, fundamental distributed problems and algorithms such as mutual exclusion, consensus, and elections, and distributed programming paradigms. Programming intensive.
Full course description for Parallel and Distributed Algorithms
Principles and practices of the OSI and TCP/IP models of computer networks, with special emphasis on the security of these networks. Coverage of general issues of computer and data security. Introduction to the various layers of network protocols, including physical, data link, network, and transport layers, flow control, error checking, and congestion control. Computer system strengths and vulnerabilities, and protection techniques: Topics include applied cryptography, security threats, security management, operating systems, network firewall and security measures. Focus on secure programming techniques. Programming projects.
Full course description for Networks and Security
Principles, techniques, and algorithms for the design and implementation of modern operating systems. Topics include operating system structures, process and thread scheduling, memory management including virtual memory, file system implementation, input output systems, mass storage structures, protection, and security. Students will implement process, memory, and file management algorithms.
Full course description for Operating Systems
This course focuses on the theory and practice of effectively and efficiently building software systems that satisfy the requirements placed upon them by customers. This course gives an overview of the software lifecycle and introduces various process models used to develop software.
Full course description for Software Engineering and Capstone Project
Electives (8 credits) or Approved Minor
Either eight credits of approved upper-division electives, or complete a minor in a field approved by the academic advisor, is required for the Computer Science major.
Elective Option (8 credits)
Students are required to take a minimum of 8 credits of elective courses as part of the major and a means to meet the 24 credit upper division course requirement. Consult with academic advisor on acceptable electives.
• At least 4 credits of electives must come from any 300-level or higher CYBR ICS courses, not already required for the major, with the following exceptions: ICS 350I, ICS 370, ICS 381, ICS 383, ICS 390, and ICS 495.
• Repeatable exceptions: ICS 490 Special Topics in Information and Computer Sciences and ICS 492 Seminar on Emerging Technologies may be taken more than once for elective credit, so long as the topics differ.
• Any upper division Mathematics or Statistics course may be used as an elective except for internships and seminars.
• Internship/Residency: A maximum of 4-credits in ICS 350I Individualized Internship may be spread over 1-3 semesters.
Work with your academic advisor to assess if the minor option is appropriate for your degree and career plan. Students are allowed to have up to 8 credits overlapped with their current or previously completed major or minors.
Recommended fields for a minor include (but are not limited to): Industrial and Applied Mathematics, Applied Statistics, Biology, Chemistry, Computer Forensics, Cybersecurity, Design of User Experience, Game Studies, Physics, Project Management, and Technical Communication. Students with a previous Bachelor's degree should talk to their advisor about whether that degree can be used in lieu of a minor.
Transfer coursework equivalency is determined by the Computer Science and Cybersecurity (CSC) Department and initially evaluated upon admission with updates documented on Degree Audit Report (DARs). When transferring coursework, please be aware of the following:
• Many universities and community colleges offer courses equivalent to all of our Pre-Major courses. Many technical colleges offer some courses equivalent to some of our Pre-Major courses.
• Sometimes a course at the lower division at another university or college is equivalent to one of our upper division courses, or an upper-division courses at another university is equivalent to one of our lower-division courses.
• For the purpose of calculating upper division credits for the major electives or for university graduation requirements, the status of the course at the institution where the student took the course is what matters.
• Math courses should be taken before, or concurrently with, foundation ICS courses.
• Students are responsible to both be aware of and abide by prerequisites for CFS, CYBR, and ICS courses for which they enroll, and will be administratively dropped from a course if they have not met prerequisites
• For some courses, prerequisites are enforced automatically by the registration system.
• If your DARS report shows you have met the prerequisites for a course, and the registration system will not let you register, please contact your academic advisor.