Competence in standard programming practices is essential to an in-depth study of the science of computing. Although many of the activities of computer professions are not programming-related, the language of computing is founded on programming. In addition, computer science has its roots in the discipline of mathematics.
At a minimum, computer science students must have an understanding of discrete mathematics and calculus in order to explore the theoretical foundations of computing. Mathematics and programming prerequisites should be completed early in the major.
Programming skills erode when left unused for long periods of time. As a consequence, programming classes taken more than five years ago will not be applied to meet the requirements for this major.
Since programming ability is crucial for success in computer science, the CSC Department invites students without recent transcripted credits in programming courses for one-on-one sessions with their advisor to discuss their programming background.
Students may take waiver exams for introductory courses to help determine their appropriate placement in the introductory programming sequence.
- Students get introduced to programming in ICS 140 Computational Thinking with Programming in the Python programming language.
- in the programming sequence are ICS 141 Programming with Objects and ICS 240 Elementary Data Structures, both using the Java programming language. Mathematics courses should be taken concurrently with these courses.
Students should note individual course prerequisites and enroll in the proper sequence of courses. The prerequisite courses should be completed before upper-division (300-level) classes are taken in the major. Transfer credit for the major prerequisite courses is common as is demonstrating competency through passing departmental waiver exams.
These courses are designed to deepen student understanding of the discipline of computer science. The study of computer hardware, operating systems and software design processes provides the understanding of the operation of the computer necessary for the development of robust, efficient systems. The capstone and software design classes provide students with the project management, teamwork, presentation and business writing experiences that employers have identified as keys to professional success.
In addition, students address ethical issues and professional responsibilities in the capstone course. The upper-division courses (300- or 400-level) should be completed in the middle of the degree, except for ICS 499 Software Engineering and Capstone Project, which is taken in one of the last two semesters (preferably the final semester). To graduate, students must complete at least 32 credits of upper division coursework in the major.
Elective or Minor Requirements
The remaining requirements for the major may be fulfilled in one of two ways:
- Do a minor (or previous bachelor's degree)in field approved by the advisor, or
- Complete 8 credits of elective coursework as described below.
Students are encouraged to consult their advisors early in the program to make a decision on the above choices.
Recommended fields for a minor include Applied Mathematics, Biology, Chemistry, Computer Forensics, 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.
Elective courses allow concentrated work in an area of choice. Choices include practical and theoretical advanced computing topics, computer security, internships, and advanced mathematics. Students are encouraged to choose a set of elective courses that form a cohesive package.
Electives for the computer science major must be distributed as follows:
- At least 4 credits from one upper-division ICS course other than ICS 350I (internship) or ICS 370
- At least 4 credits from an upper-division MATH course or an upper-division ICS course other than ICS 370
The contents of ICS 490 Special Topics in Information and Computer Sciences and of ICS 492 Seminar of Emerging Technologies vary from semester to semester, and may be taken more than once (with different topics for elective credit. Any specific offering of ICS 490 will state whether it may be applied as an elective.
No student may be enrolled in an ICS or CFS course unless they have completed all course prerequisites with a grade of C- or better.
Students get introduced to programming in ICS 140 Computational Thinking with Programming in the Python programming language. Next in the programming sequence are ICS 141 Programming with Objects and ICS 240 Elementary Data Structures, both using Java programming language. Mathematics courses should be taken concurrently. Students should note individual course prerequisites and enroll in the proper sequence of courses. The prerequisite courses should be completed before upper-division (300-level) classes are taken in the major. Transfer credit for the major prerequisite courses is common.
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
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
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
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
Requirements (120 credits)
Required (32 credits)
These courses are designed to deepen student understanding of the discipline of computer science. The study of computer hardware, operating systems and software design processes provides the understanding of the operation of the computer necessary for the development of robust, efficient systems. The capstone and software design classes provide students with the project management, teamwork, presentation and business writing experiences that employers have identified as keys to professional success. In addition, students address ethical issues and professional responsibilities in the capstone course. The upper-division courses (300- or 400-level) should be completed in the middle of the degree, except for ICS 499 Software Engineering and Capstone Project, which is taken in one of the last two semesters (preferably the last semester). To graduate, students must complete at least 32 credits of upper division coursework in the major.
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
Eight credits of upper-division elective are required or, a minor in a field approved by the academic advisor. NOTE: ICS 300 or 400 level course not in the required course list can be an elective (ICS 490, Special Topics, may be taken twice to count for both electives), except for ICS 370 or ICS 381. At most 4 credits of elective may also come from an internship (ICS 350i), or upper division mathematics or statistics courses.
Prerequisites, need to choose between MATH 208 or MATH 210
Reduced required course credits to 32 and increased Elective credits