An introduction to the fundamental concepts and practices of procedural programming. Topics include data types, control structures,functions, arrays, files, and the mechanics of running, testing, and debugging. Emphasis is placed on program design and problemsolving techniques. The course also includes an introduction to the historical and social context of computing and an overview of computer science as a discipline.
An introduction to the fundamental concepts and practices of object-oriented programming. The object-oriented programming paradigm
is introduced, with a focus on the definition and use of classes as a basis for fundamental object-oriented program design. Other topics
include an overview of programming language principles, simple analysis of algorithms, basic searching and sorting techniques, and an
introduction to software engineering issues.
An introduction to and survey of the mathematics used in computer science including functions, relations, sets, counting, logic, Boolean
algebra, proof techniques, induction, recursion, computational complexity, and computability. Other topics may be included as time
A bottom-up exploration of the interaction between computer hardware and software. Topics begin with an introduction to digital logic,
and continue through elementary processor design, to assembly language, machine data representation, and computer arithmetic. Other
topics in contemporary computer architecture such as multicore processors and GPGPU’s may be discussed as time allows. Projects
include hardware and simulated digital circuits as well as programs in assembly language.
An introduction to the fundamental concepts of data structures and the algorithms that arise from them, using the object-oriented design
paradigm. Data structures covered include stacks, queues, linked lists, hash tables, trees, and graphs. Other topics include an introduction
to iterative and recursive algorithmic strategies and basic algorithm analysis.
Co-requisite: COMP 172 (unless already taken)
An introduction to the structure and components of computer networks, packet switching, layered architectures, loosely coupled computer communication, network services and protocols, as well as the analysis of generic network models. Topics include: network topologies, router architectures, network-aware applications, content dissemination systems, network security, and performance issues.
Coverage of the basic concepts of 2D and 3D graphics, including an overview of graphics hardware, use of a graphics application
programming interface, user interface design, techniques for computer animation, and graphical algorithms such as geometric
transformations, clipping, windowing, hidden surface removal, and raster graphics techniques for the representation of curves, surfaces,
Co-requisite: MATH 223 or 261 (unless already taken)
An introduction to the basics of 3D computer graphics, virtual environments (VEs), and human-computer interaction (HCI).
An introduction to the fundamentals of operating systems design and implementation. Topics include the process model and
implementation of processes, an overview of the major components of a modern operating system, mutual exclusion and interprocess
synchronization, a survey of scheduling algorithms, memory management techniques, and file systems.
An introduction to the design and use of database systems, as well as the key issues in building such systems. Topics include the
relational model, logical database design, query languages, and database implementation issues such as storage and indexing, query
processing and optimization, concurrency control, and transaction management. In addition to traditional database topics, this course
provides an introduction to key technologies for managing and exchanging data on the World Wide Web.