Getting Started with CS@USC

Journey into Computer Science: Which path will you choose?

USC Viterbi offers a variety of courses that will introduce you to computer science and programming. Whether you're a first year, senior, or graduate student - it's never too late to start! Learn more about our introductory classes below.

Undergraduate Introductory Course Sequence

For all pre-engineering students, prospective minors, and admitted majors:

CSCI 102 - Fundamentals of Computation
Fundamental concepts of algorithmic thinking as a primer to programming. Introduction to C++. It provides a slower-paced introduction to computation and programming for students who have had little exposure to these topics or who simply want to ensure a solid foundation before beginning CSCI 103.

CSCI 103 - Introduction to Programming
Basic datatypes, assignments, control statements (if, switch, for, while), input/output (printf, scanf, cin, cout), functions, arrays, structures, recursion, dynamic memory, file handling. Programming in C/C++. Prerequisite: CSCI 102.

CSCI 170 - Discrete Methods in Computer Science
Sets, functions, series. Big-O notation and algorithm analysis. Propositional and first-order logic. Counting and discrete probability. Graphics and basic algorithms. Basic number theory. Prerequisite: CSCI 102.

CSCI 104 - Data Structures and Object Oriented Design
Introduces the student to standard data structures (linear structures such as linked lists, (balanced) trees, priority queues, and hashtables), using the C++ programming language.
Prerequisite: CSCI 103 and CSCI 170.

For our undergraduate students in the Computer Science [CSCI] and Computer Engineering & Computer Science [CECS] majors:

EE 109 - Introduction to Embedded Systems
Information representations, embedded C language constructs, assembly programming, state machines, and fundamental circuit analysis. Embedded topics will include digital I/O, serial I/O protocols, analog-to-digital conversion and interrupt mechanisms.
Co-requisite: 1 from EE 155 or CSCI 103.

USC Viterbi’s Information Technology Program offers a variety of courses for students interested in an introduction to several popular programming languages:

Note: CSCI 103 already teaches C/C++. CSCI 201 teaches Java. These two courses are mandatory in all CS majors.

Note: These introductory ITP courses count as free electives for the CS majors, and for most other major programs. They do not count as technical electives for CS majors.

ITP 104 - Web Publishing (HTML & CSS)
Web publishing using HTML, CSS and other Web technologies. Concepts and theory of Web site creation, page layout and production. Introduction to advanced topics.

ITP 109 - Introduction to Java Programming
Introduction to object-oriented software design for business problems. Creation of console applications, windowed applications, and interactive Web applets. Note: Java is already taught in CSCI 201.

ITP 115 - Programming in Python
Python’s high level data structures and clear syntax make it an ideal first language with powerful applications to science, business, finance, math, and the web.

ITP 165 - Introduction to C++ Programming
Fundamentals of C++ syntax and semantics, including function prototypes, overloading, memory management, abstract data types, object creation, pointers to class members, and I/O streams. Note: C/C++ is already taught in CSCI 102 and CSCI 103.

ITP 168 - Introduction to MATLAB
Fundamentals of MATLAB: a high-performance numeric computation and visualization environment. Overview of linear algebra and matrix manipulation; using 2-D and 3-D plotting routines; programming in MATLAB; basic numerical analysis.

For non-computer science undergraduate students interested in computer science as a General Education option, consider the following course for your GE-F Quantitative Reasoning requirement:

CSCI 100xg - Explorations in Computing
A behind-the-scenes overview of the computational/algorithmic principles that form the basis of today's digital society. Exploration areas include social media, web search, video games and location-based services.
Note: No credit will be awarded to computer science majors (CSCI, CECS, CSGM, or CSBA).

For non-computer science juniors/seniors and graduate students interested in an accelerated programming introduction:

CSCI 455x - Introduction to Programming Systems Design
Intensive introduction to programming principles, discrete mathematics for computing, software design and software engineering concepts.
Prerequisite: departmental approval.
Not available for credit to computer science majors, graduate or undergraduate.

DSCI 510 - Principles of Programming for Data Science
Programming in Python for retrieving, searching and analyzing data from the Web. Learning to manipulate large data sets.

Undergraduate Admission Information

Prospective B.S. Applicants: For more information about applying directly to CS@USC, visit: Viterbi Undergraduate Admissions

Current USC Students: For more information about Changing Majors to CS/Viterbi, visit: Viterbi Pre-Engineering Change of Major Process

Graduate Admission Information

Along with a traditional M.S. and Ph.D. program in Computer Science, we also offer a transitional M.S. in Computer Science for Scientists and Engineers, which welcomes prospective graduate students with undergraduate degrees in other engineering fields and sciences to start their journey into computer science.

Prospective M.S. Applicants: For more information about applying directly to CS@USC, visit: Viterbi M.S. Programs: How to Apply

Prospective Ph.D. Applicants: For more information about applying directly to CS@USC, visit: CSCI Ph.D. Application Information