To declare the Computer Science major, students are required to complete the following premajor foundation courses with a grade of C- or higher and a minimum GPA of 2.5 for ICS 141, ICS 240 and MATH 215 or transfer equivalents. For further details, reference the General Guidelines section below.
Choose one of the following two courses.
This course introduces fundamental concepts in computer programming and the development of computer programs to solve problems across various application domains. Topics include number systems, Boolean algebra, variables, decision-making and iterative structures, lists, file manipulation, and problem deconstruction via modular design approaches. Lab work and homework assignments involving programming using a language such as Python form an integral part of the course.
Full course description for Computational Thinking with Programming
This course is designed to provide a fast-paced exposure to the C programming language for students majoring in a computer-related discipline. The following topics are briefly reviewed using C syntax: looping, selection, variables, scope rules, functions and pass-by-value arguments. New topics include pass-by-address arguments, formatted and unformatted I/O, user defined types (enum, struct, union), preprocessing directives, file handling, pointers, pointer arithmetic, string manipulation and selected library functions.
Full course description for C Programming
Complete all of the following five courses.
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
Structure, design, and implementation of object-oriented computer programs. Topics include sequential structures, selection structures, repetition structures, recursion, quadratic sorting algorithms, exceptions, objects, and classes. Emphasis on methods, parameter passing, arrays, and arrays of objects. Exploration of problem-solving and algorithm-design techniques using pseudocode and Unified Modeling Language (UML). Design of good test cases and debugging techniques are highlighted. Programming projects involving multiple classes.
Full course description for Problem Solving with Programming
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 inheritance, polymorphism, algorithm complexity, generic programming, linked list, stack, queue, recursion, trees, hashing, searching, and sorting.
Full course description for Introduction to Data Structures
Calculus requirement: choose one of the following two courses.
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
Once the premajor foundation are complete, students must complete all of the following courses with a grade of C- or higher.
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.
Students who have not declared their major or have not been accepted into the major will not be allowed to take any 400-level major courses. For further details on prerequisites, reference the General Guidelines section below.
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 and development of 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 Algorithm Design and Analysis
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
Either eight upper-division credits, or a minor in a field approved by the academic advisor, are required for the Computer Science major.
Electives Option:
Complete a minimum of eight upper-division credits (i.e, 300-level, or higher) of elective courses. Consult with academic advisor on acceptable electives.
Note the following:
-At least 4 credits of electives must come from upper-division (i.e., 300-level, or higher) ICS courses, not already required for the major, with the following exceptions: ICS 350I, ICS 370, ICS 38*, and ICS 48*.
-The contents of ICS 490 Special Topics in Information and Computer Sciences and ICS 492 Seminar on Emerging Technologies vary from semester to semester and may be taken more than once for elective credits (with permission of the CSC department) as long as they cover different topics.
-Any 300-level or higher CFS, CYBR, ICS, MATH or STAT course may be used as an elective except for the following courses: CFS 350I, CFS 499, CYBR 350I, CYBR 362, CYBR 498, CYBR 499, ICS 370, MATH 350I, MATH 499 and STAT 350I.
-A maximum of 4 credits in ICS 350I Individualized Internship spread over 1-3 semesters may be used as elective credits.
Minor Option:
Work with your academic advisor to assess if the minor option is appropriate for your degree and career plan. Students with a previous bachelor's degree should talk to their advisor about whether that degree can be used in lieu of a minor. 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.
Transfer Courses
Transfer coursework equivalency is determined by the Computer Science and Cybersecurity (CSC) department and is initially evaluated upon admission with updates documented on the Degree Audit Report (DARS). When transferring coursework, please be aware that many universities, community, and technical colleges offer 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 course at another institution is equivalent to one of our lower-division courses. To calculate 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.
Prerequisites
Students must be aware of and abide by prerequisites for all courses for which they are enrolled. No student may be enrolled in a course unless they have completed all course prerequisites with a grade of C- or higher. Students will be administratively dropped from a course if they have not met the required 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.