John H. Glick, PhD, Area Coordinator

Perla L. Myers, PhD, CHAIR

Dwight R. Bean, PhD

Diane Hoffoss, PhD

Eric P. Jiang, PhD

Simon G. M. Koo, PhD

Stacy Langton, PhD

Luby Liao, PhD

Jack W. Pope, PhD

Lukasz Pruski, PhD

## The Computer Science Major

Computer science is the system of principles and theory which deals with what COMPuters do. It studies the nature of COMPutation. For any given problem, it asks whether the answer can be COMPuted, and, if so, what are the most efficient and practical ways to do the COMPutation. (Often the methods that are best for machines are quite different from those that are practical for human beings.)

Computers are machines that manipulate abstract symbols according to specified rules. Therefore, computer science relies heavily on abstract reasoning and mathematics. The mathematics involved is usually quite different, however, from traditional mathematics. Much of it has been developed recently in response to the development of COMPuters.

As an academic discipline within the liberal arts tradition, computer science has ties with many other disciplines. The natural sciences provide the physical principles upon which COMPuters are built. Computer science serves the sciences, engineering, and business in providing the means to perform COMPlex calculations and to analyze large amounts of data. Psychology and philosophy share with computer science the desire to understand the nature of reason, language, and intelligence.

The most important skills needed by a prospective computer scientist are an excellent command of one’s native language and the ability to think in a mathematical way.

### Major Requirements

1. Lower-division preparation for the major.

COMP 150 Computer Programming I (3)

COMP 151 Computer Programming II (3)

COMP 280 Introduction to Assembly Language (3)

COMP 285 Data Structures and Algorithms (3)

MATH 150 Calculus I (4)

MATH 151 Calculus II (4)

MATH 160 Logic for Mathematics and Computer Science (3)

Note: MATH 160 satisfies the core curriculum logic COMPetency requirement. Students majoring in computer science should take this course instead of PHIL 101 or 102.

2. Upper Division (27 units)

a. Required courses:

COMP 300 Principles of Digital Hardware (4)

COMP 305 Object-Oriented Design and Programming (3)

COMP 310 Operating Systems (3)

COMP 370 Automata, Computability, and Formal Languages (3)

COMP 465W Software Engineering (3)

COMP 495 Senior Project (2)

b. Nine upper division elective units chosen from:

COMP 340 Numerical Analysis (3)

COMP 345 Database Management Systems Design (3)

COMP 350 Computer Graphics (3)

COMP 355 Digital Modeling and Simulation (3)

COMP 360 Programming Languages (3)

COMP 375 Networking (3)

COMP 380 Neural Networks (3)

COMP 480 Algorithms (3)

COMP 494 Special Topics (3)

COMP 499 Independent Study (1-3)

c. At least 15 of the Upper-Division Units in the major must be COMPleted at USD.

d. It is highly recommended that computer science majors pursue a minor in a related field such as mathematics, physics, engineering, or business administration.

e. It is also recommended that computer science majors take one or more of the courses MATH 320 (Linear Algebra), MATH 350 (Probability), and MATH 355 (Combinatorics), for additional background in mathematics.

## The Minors

Students wishing to major in another field while also developing COMPetency in the use of COMPuters are encouraged to choose one of the minors described below.

### The Minor in Computer Science

The computer science minor is intended for students who have a general interest in the workings and uses of COMPuters. Minimum requirements for the minor in computer science are:

a. COMP 150 Computer Programming I (3)

b. COMP 151 Computer Programming II (3)

c. 12 additional units, at least 9 of which are in upper division courses, excluding COMP 498. One course at most from ELEC 310, 340, 410, and 450 can count toward these 12 units. COMP 300 and ELEC 310 cannot both apply toward the 12 units.

Note: Neither COMP 100 nor COMP 498 may be applied toward the requirements for the minor in computer science.

### The Minor in Information Science

The information science minor is intended for students who have a special interest in the analysis, design, implementation, and use of computer-based information systems and organizations. Minimum requirements for the minor in information science are:

a. COMP 150 Computer Programming I (3)

b. COMP 151 Computer Programming II (3)

c. COMP 285 Data Structures and Algorithms (3)

d. Nine additional units, at least 6 of which are in upper division courses chosen from:

1. the computer science offerings listed in this course catalog, excluding COMP 100 and COMP 498. COMP 345 is highly recommended

2. ITMG 350 – Management Information Systems.

## Lower-Division Courses (COMP)

COMP 100 Introductory Computer Programming (3)

An elementary introduction to computer programming and applications for non-majors and non-minors. Computer organization; problem solving; algorithms; structured programming in a simple computer language; computer applications; and current issues and trends in computer science. This course does not satisfy any of the requirements for the computer science major or minor and is not a substitute for COMP 150.

COMP 150 Computer Programming I (3)

Algorithms and programming in a selected computer language; expressions, statements, basic data types; sequence, decision, iteration; functions and procedures; arrays; recursion; file input and output; loop invariants; syntax analysis; and program design, documentation, validation, and debugging. Prerequisite: MATH 115 or equivalent, or pass Level 2 mathematics placement exam. COMP 100 is not a prerequisite.

COMP 151 Computer Programming II (3)

Continuation of COMP 150. Basic data structures, including lists, stacks, queues, and binary trees; abstract data types; sorting and searching algorithms; exception handling; event driven programming; Prerequisite: COMP 150 or equivalent.

COMP 160 Programming Languages (1-3)

Introduction to a particular high-level programming language such as C, C++, Python, Ruby, MATLAB, and Maple. Programming assignments appropriate to the language studied. Prerequisite: COMP 150 or equivalent. This course does not satisfy any of the requirements for the major in computer science.

COMP 280 Introduction to Assembly Language (3)

Machine structure; machine language; assembly language instructions and addressing modes; data representations; subroutines; macros; traps and interrupts; and input and output. Prerequisite: COMP 151.

COMP 285 Data Structures and Algorithms (3)

Data structures, algorithm analysis and general programming design and applications; balanced trees, hashing, priority queues, sets, and graphs; more on sorting and searching; Prerequisites: COMP 151 and MATH 160, or equivalent courses.

## Upper-Division Courses (COMP)

COMP 300 Principles of Digital Hardware (4)

Combinational and sequential logic, registers, arithmetic units. Introduction to computer architecture. Three lectures and one laboratory per week. Prerequisites: COMP 280 and MATH 160, or consent of instructor.

COMP 305 Object-oriented Design and Programming (3)

Classes, encapsulation, inheritance, polymorphism, class derivation, abstract classes, namespaces, function overloading and overriding, function name overload resolution, container classes, template classes; unified modeling language (UML); constructing conceptual models, system sequence diagrams; design patterns; case studies. Prerequisite: COMP 285 or equivalent.

COMP 310 Operating Systems (3)

Principles of computer operating systems; process management; memory management; file systems; protection; deadlock. Concurrent programming. Prerequisites: COMP 285 and 300, or equivalent courses.

COMP 340 Numerical Analysis (3)

Approximate COMPutations and round-off errors; Taylor expansions; numerical solution of equations and systems of equations; systems of linear equations; numerical integration; numerical solution of differential equations; interpolation; and problem solving on the computer. Prerequisites: COMP 150 and MATH 151. Cross-listed as MATH 340.

COMP 341 NUMERICAL ANALYSIS II (3)

Estimation of eigenvalues and eigenvectors of matrices; numerical solutions of differential equations, existence, and stability theory; and computer lab assignments. Prerequisites: MATH 250, 320, 330 (may be taken concurrently), and COMP 340. Cross-listed as MATH 341.

COMP 345 Database Management Systems Design (3)

Introduction to database concepts; data models; query facilities; and file organization and security. Prerequisite: COMP 285.

COMP 350 Computer Graphics (3)

The development of high-level, device-independent graphics routines; basic line drawing algorithms, text design, and other graphics primitives; 2-D representations of coordinate systems, image segmentation, and windowing. Prerequisites: COMP 285 and MATH 151.

COMP 355 Digital Modeling and Simulation (3)

Mathematical modeling; probabilistic and deterministic simulations; pseudo-random number generators; event generators; queuing theory; game theory; and continuous models involving ordinary and partial differential equations. Prerequisites: COMP 305 and MATH 151.

COMP 360 Principles of Programming Languages (3)

The organization of programming languages with emphasis on language semantics; language definition, data types, and control structures of various languages. Prerequisite: COMP 285; COMP 280 is recommended.

COMP 370 Automata, Computability, and Formal Languages (3)

Finite state machines; formal grammars; COMPutability and Turing machines. Prerequisites: COMP 285, or upper division mathematics course.

COMP 375 Networking (3)

Introduction to the design and implementation of computer and communication networks. The focus is on the concepts and the fundamental design principles that have contributed to the global Internet’s success. Topics covered will include MAC layer design (Ethernet/802.11), the TCP/IP protocol stack, routing algorithms, congestion control and reliability, and applications (HTTP, FTP, etc.) and advanced topics such as peer-to-peer networks and network simulation tools. Recent trends in networking such as multimedia networking, mobile/cellular networks and sensor networks will also be discussed. Prerequisite: COMP 151 or equivalent.

COMP 380 Neural Networks (3)

A study of the fundamental concepts, architectures, learning algorithms and applications of various artificial neural networks, including perceptron, kohonen self organizing maps, learning vector quantization, backpropagation, and radial basis functions. Prerequisites: COMP 285 and MATH 151, or consent of instructor.

COMP 465W Software Engineering (3)

Theoretical and practical aspects of software development; project planning; requirements and specification; general and detailed design; implementation; validation and verification; formal documentation. Students will participate in developing documentation for a large software project. Prerequisite: COMP 305.

COMP 480 Algorithms (3)

Advanced theory of algorithms. Topics may include: algorithm analysis; algorithm design techniques; and computational complexity. Prerequisites: COMP 285 and MATH 151.

COMP 494 Special Topics (3)

Topics of special interest chosen by the instructor. Prerequisites: COMP 305 and consent of the instructor. COMP 494 may be repeated for credit with a different topic.

COMP 495 Senior Project (2)

The course involves participation in a capstone senior project of substantial interest to computer scientists. Emphasis is on the design and implementation of computer systems for real problems. A final written report and oral presentation in the presence of other students and faculty are required. Prerequisites: COMP 465W and senior standing.

COMP 498 Internship (1-3)

Practical experience in the application of the principles of computer science. Students will be involved in a software or hardware project. Enrollment is arranged on an individual basis according to the student’s interest, background, and the availability of positions. A written report is required. Units may not normally be applied toward the major or minor in computer science. COMP 498 may be repeated for a total of three units.

COMP 499 Independent Study (1-3)

Individual study including library or laboratory research or program writing. A written report is required. Prerequisites: COMP 151 and consent of instructor. COMP 499 may be repeated for a total of three units.