Course Descriptions

Course Catalog for COMPUTER SCIENCE
CPSC 109
Digital Film Editing
The transition of filmmaking to the digital domain has greatly expanded the potential for creative expression through the medium. This hands-on course introduces students to the use and potential of digital editing software for a broad range of film production purposes. Students do not need to own a camera or video editing equipment; camera access will be provided and shared editing stations are available at Trinity.
1.00 units, Lecture
CPSC 110
Computers, Information, and Society
Computers are ubiquitous and infiltrate almost every aspect of our daily life. From laptops to cell phones we have access to a wealth of information that is both an indispensible tool of modern society and a potential risk to our privacy, security, and even our identity. How is information represented inside a computer? What are the important parts of a computer? How are these pieces used to represent, store, and communicate information? How is software used to manipulate this information? What languages are used today to communicate on the information highway (World Wide Web)? What are the impacts of this information and its use? We will learn the fundamentals of computer technology, information abstraction, software, and ethical questions raised in today's technologically advanced society. We will study the predominant languages of the internet (HTML, CSS, & JavaScript) to observe and understand how information is represented in a computer and communicated in the form of web pages. Basic computational constructs such as variables, functions, parameters, and control structures will be introduced.
1.00 units, Lecture
CPSC 110
Computers and Kinetic Content
Many of today’s computing applications are designed to interact with humans, necessitating a change both in how programs are written and how information is presented for human viewing. As computers become ever more integrated into society, it becomes increasingly important to provide content that facilitates the interaction between humans and computers. Kinetic content, whether animation or video, allows information and meaning to be conveyed from computers to humans far more effectively than simple textual content. This course will explore the core computing concepts of event-driven programming, objects, modularity, and control flow in the context of designing and creating computer animation and video, and the programs that utilize this kinetic content as the primary means of human-computer interaction.
1.00 units, Lecture
CPSC 110
Computational Intelligence and Society
Computers and robots are becoming increasingly powerful and are now capable of solving problems that were once beyond human ability. Computer chess programs routinely beat the best human players. Computers have proved significant mathematical theorems. Autonomous robots explore space, mow the lawn, and take care of the home-bound elderly. Some observers believe that computers will soon exceed human intelligence. What are the implications of computer intelligence on society and individuals? Should intelligent machines have rights? Should we limit computer power? Can we? As we explore these questions, we will learn how to build puzzle-solving and game-playing programs that display rudimentary forms of intelligence. Basic computational constructs such as variables, functions, parameters, and control structures will be covered.
1.00 units, Lecture
CPSC 110
Interactive Computer Graphics
Advances in computer technology have made computer graphics one of the most rapid and economical ways of generating digital images. It is not surprising to find computer graphics used in virtually all areas of modern life. Doctors use three-dimensional medical imaging techniques to view a cross section of body tissues and organs during surgery. Sophisticated engineering and architectural systems are now designed with an aid of computer graphics tools. High-resolution imaging of molecular structures allows scientists to study the behavior of highly complex processes. Computer-generated animations, scenes, and special-effects are commonly used in today’s motion pictures and video games. This course introduces fundamental techniques and tools used in computer graphics. The topics will include drawing, coloring, shading, and modeling three-dimensional objects. In addition to lectures on the underlying principles of computer graphics, students will engage in a series of hands-on laboratory exercises which will provide an opportunity to design and generate the various types of digital images. Students will also be introduced to basic concepts of computer programming to manipulate more elaborate images and create computer animations.
1.00 units, Lecture
CPSC 110
Principles of Computation
Computers have recently become so powerful that some even believe they will someday exceed human intelligence. However, the underlying basic structure of computers has remained surprisingly simple, and this elegant design is unlikely to change anytime soon. In this course, students will first read a romantic novel that introduces this fundamental concept and the vast world of computer science. Meanwhile, to understand and appreciate basic laws of computation, students will also learn how to program computers elegantly, using the Scheme language in which programs are usually simple functions. Fundamental constructs such as lists, functions and recursion will be covered. This course will thus focus on the simple but beautiful nature of computation, without nonessential technical details.
1.00 units, Lecture
CPSC 110
Open Source Software for Humanity
Free and open source software (FOSS) is software that can be modified, customized, and redistributed by users and programmers. From its modest beginnings in the 1970s through the rapid growth of the Internet and the Linux operating system, today's open source software movement is a global enterprise involving hundreds of thousands of programmers working together on thousands of software programs. A growing number of FOSS programs have a humanitarian focus. In this course, we will both learn about and contribute to a real open source project. We will work with the Sahana system, a crisis management system that was built in the aftermath of the Asian tsunami. We will learn to write Web-based application software using FOSS tools. Come and join the open source movement.
1.00 units, Lecture
CPSC 110
Visual Computing
With the recent advancement of information technology, the amounts of data produced by various digital devices and computing systems are staggering. This course focuses on the fundamental visualization techniques which are essential to gain meaningful insights into these massive datasets by presenting the underlying structure of the data in understandable, visual forms. Topics will include the human visual system, color theory, information coding, data representation, and interactive visualization techniques and software. Students will also explore application areas including health care, national security, space exploration, bioinformatics, aircraft design, market analysis, education, social networks, weather, and everyday life.
1.00 units, Lecture
CPSC 110
Computing with Mobile Phones
App Inventor for Android is a new open source programming language for Android smart phones. App Inventor is a visual language that enables novice programmers to create powerful mobile applications that interact with the web and with other phones. In this course, students will learn how to access the world of mobile services and applications as creators, not just consumers. They will learn to create entertaining and socially useful apps that can be shared with friends and family. In addition to learning to program and how to become better problem solvers, students will also explore the exciting world of computer science from the perspective of mobile computing and its increasingly important effect on society.
1.00 units, Lecture
CPSC 115
Introduction to Computing
A fundamental treatment of computer science topics featuring the study of the high-level programming language Python. Topics discussed will include computer architecture, programming languages, and ethical issues involved in computer use. Problem-solving techniques involved in writing programs will be studied, proper style and documentation will be required, and object-oriented program design will be introduced. A required weekly lab will involve an intensive study of programming techniques in Python.
Prerequisite: C- or better in Computer Science 110 or mathematics skills appropriate for enrolling in a calculus class.
1.25 units, Lecture
CPSC 203
Mathematical Foundations of Computing
An introduction to the principles of logic and discrete mathematics required in the study of computer science. Topics covered may include: propositional and predicate logic and their relationship to general proof techniques used in computing and correctness proofs of programs; mathematical induction applied to recursion and recurrence relations; set theory with an emphasis on infinite sets used in computing; counting principles useful in analyzing graphs and trees; relations and functions and their relationship to databases and functional programming languages. Computer programs will be used to explore concepts examined in the course.
Prerequisite: C- or better in Computer Science 110, or mathematics skills appropriate for enrolling in a calculus class.
1.00 units, Lecture
CPSC 215
Data Structures and Algorithms
A study of data structures and algorithms using a high-level programming language. The basic data structures (lists, stacks, queues, trees, and files) and basic algorithms (searching, sorting, and file management) will be introduced and implemented. Data and procedural abstraction, software design principles, and the analysis of the complexity of algorithms will be discussed. Details related to programming will be covered in a required weekly lab.
Prerequisite: C- or better in Computer Science 115L.
1.25 units, Lecture
CPSC 219
Theory of Computation
A selection of topics intended to serve as an introduction to formal languages and automata theory. The topics will be chosen from among finite state machines, pushdown automata, Turing machines, the Chomsky language hierarchy and related questions of computability.
Prerequisite: C- or better in Computer Science 115L and Computer Science 203
1.00 units, Lecture
CPSC 225
Event Driven Programming
Event driven programming is a paradigm in which the control flow of a program is driven by external events, which can range from user interaction via a mouse click to clock signals generated from within a computer system. This course will explore a variety of platforms for and applications of event driven programming.
Prerequisite: C- or better in Computer Science 115L.
1.00 units, Lecture
CPSC 275
Introduction to Computer Systems
This course introduces the fundamental organization and structure of modern computer systems from the perspective of a programmer. Students will become more effective programmers as they learn how computer systems compile, link, and execute programs, store information, and communicate. Topics covered will include data representations, computer arithmetic, low-level representations of programs, processor organization, the memory hierarchy and management, processes, and system-level I/O. A required weekly lab will involve a series of programming exercises related to these topics.
Prerequisite: C- or better in Computer Science 115L.
1.25 units, Lecture
CPSC 304
Computer Graphics
An introduction to geometric and computer graphics principles needed for developing software with graphical output. General principles of designing and testing of software systems with reusable components will be emphasized. Geometry and computer graphics topics covered will include coordinate systems, geometric transformations, windowing, curves, fractals, polyhedra, hidden lines, surfaces, color, and shading. Graphical programs that model phenomena from the natural sciences or aid the visualizing of conceptual models in computer science and mathematics will be used for examples and assignments.
Prerequisite: C- or better in Mathematics 132 and Computer Science 215L.
1.00 units, Lecture
CPSC 315
Systems Software
A study of the organization and implementation of computer operating systems. Topics include operating systems organization, file systems, memory and process management, resource allocation, recovery procedures, multiprogramming, and distributed processing. The Unix operating system will be used and emphasis will be placed on how various system functions have been implemented in the Unix environment.
Prerequisite: C- or better in Computer Science 215L, 275L and 203 (or concurrent enrollment in CPSC 203)
1.00 units, Lecture
CPSC 316
Foundations of Programming Languages
A study of the organization, specification, and behavior of programming languages. The course will focus on five different programming language paradigms: imperative, object-oriented, functional, logic, and concurrent. Programming assignments using example languages from each of these paradigms will be required. Emphasis will be placed on learning C++, PROLOG, and LISP in a Unix environment. Other topics covered include language syntax, control structures, objects, and functions.
Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203).
1.00 units, Lecture
CPSC 320
Analysis of Algorithms
A continuation of the study begun in Computer Science 215 of the complexity of algorithms used in computing. The notions of P, NP, and NP-complete problems and of non-computability will be covered. The algorithms studied will include examples involving sorting, graphs, geometry, and combinatorics. Theoretical aspects of algorithms will be studied as well as practical aspects useful in writing programs.
Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203).
1.00 units, Lecture
CPSC 333
Computer Networks
An introduction to the principles and practices of local area and wide area networking. Topics include the study of the layers of computer networking, network configurations, protocols, security, and reliability. Issues related to implementing networking configurations will be studied.
Prerequisite: C- or better in Computer Science 215L, 275L and 203 (or concurrent enrollment in CPSC 203)
1.00 units, Lecture
CPSC 340
Principles of Software Engineering
The study of issues involved in developing large-scale software systems. Topics covered include software life cycle, system design and specification, advanced programming concepts, and techniques for software testing, debugging, and maintenance. The issues studied will be applied to team projects.
Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203).
1.00 units, Lecture
CPSC 352
Artificial Intelligence
A study of basic principles and research methods in artificial intelligence. The course exposes students to selected topics in the field including pattern recognition, problem solving, theorem proving, knowledge representation, and natural language understanding by computers. The course will draw on recent advances made by cognitive scientists in each of these applications. Students are expected to study the theoretical background of an application. They will also complete several programming and simulation assignments during the semester.
Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203).
1.00 units, Lecture
CPSC 365
Distributed Computing
The study of the fundamental concepts involved in designing computations capable of executing in an environment composed of multiple, distinct computers. Topics covered include: virtual time and global states, synchronization, data consistency, distributed computing models and paradigms, deadlock and fault tolerance.
Prerequisite: C- or better in Computer Science 215L, 275L and 203 (or concurrent enrollment in CPSC 203)
1.00 units, Lecture
CPSC 371
Compiler Techniques
This course focuses on the basic problems underlying the translation of programming languages into executable code for target machines. We study the theory and implementation techniques for compiling block structured programming languages to produce assembly or object code for modern microprocessors. In this course, students will implement a compiler for a subset of modern dynamically typed programming language (Python). Unlike traditional courses in compilers that produce a working compiler at the end of the semester, we will incrementally build a working compiler for increasingly larger subsets of the Python language each week. Fluency in at least one programming language is assumed (Python, Java, C, etc.). The course compiler will be written in Python, but prior knowledge of Python is not required. Prior knowledge in assembly language is useful, but the course will cover the necessary requirements for students to complete the course compiler.
Prerequisite: C- or better in Computer Science 215 and 219, or concurrent enrollment in Computer Science 219.
1.00 units, Lecture
CPSC 372
Database Fundamentals
Principles of database systems, including such topics as data independence, storage structures, relational data models, network data models, security, and integrity. A programming project may be required.
Prerequisite: C- or better in Computer Science 215L and Computer Science 203 (or concurrent enrollment in 203).
1.00 units, Lecture
CPSC 375
High-Performance Computing
This course will introduce various programming models and techniques for multiprocessors. Students will design, implement, and evaluate parallel algorithms for solving complex problems that demand high computational speed. Topics covered include parallel machine architecture, analysis of parallel algorithms, load balancing, and various parallel algorithms including sorting, searching, linear systems, and image processing.
Prerequisite: C- or better in Computer Science 215 and one semester of calculus (Mathematics 131).
1.00 units, Lecture
CPSC 399
Independent Study
Independent work to develop maturity and initiative in the solution of a problem in the area of the student's special interests. This course may require concurrent registration in Computer Science 403 or 404. Submission of the special registration form, available in the Registrar's Office, and the approval of the instructor and chairperson are required for enrollment.
0.50 units min / 1.00 units max, Independent Study
CPSC 403
Computer Science Seminar
Students engaged in research (Computer Science 419) or independent study (Computer Science 399) and senior exercise students will meet with computer science faculty for oral presentations and critical discussions of journal papers, research plans, and research progress. Seniors using this course to satisfy the senior exercise requirement will be expected to complete a research or design project and make a formal presentation on its results to the seminar. The project may be an extension or revision of a project conducted in one of their other major courses.
0.50 units, Seminar
CPSC 404
Computer Science Seminar
Students engaged in research (Computer Science 419) or independent study (Computer Science 399) and senior exercise students will meet with computer science faculty for oral presentations and critical discussions of journal papers, research plans, and research progress. Seniors using this course to satisfy the senior exercise requirement will be expected to complete a research or design project and make a formal presentation on its results to the seminar. The project may be an extension or revision of a project conducted in one of their other major courses.
0.50 units, Seminar
CPSC 415
Special Topics: Introduction to Data Mining
This course will provide an introduction to the basic principles and methods in data mining. Key data mining techniques and algorithms will be introduced with practical applications from bioinformatics and other domains. Knowledge discovery through pattern mining, clustering, classification and rule learning will be introduced along with relevant domain and statistical background. The curriculum will include some programming in R and use of relevant packages for data mining tasks (no previous R programming experience necessary).
Prerequisite: C- or better in Computer Science 215.
1.00 units, Lecture
CPSC 415
Special Topics in Computing
The study of a specific intermediate or advanced topic in computer science. A specific topic may involve a specialized area of computer science or applications of computer science principles to other disciplines. Topics will vary from year to year depending on current developments in computing or interests of the instructor. This course may be repeated for credit.
1.00 units, Seminar
CPSC 415
Special Topics: Development for the World Wide Web
Developing systems for the World Wide Web has become a significant part of the computing world. In order to make this development easier developers have created various “web application frameworks.” In this course we will learn to develop web-based systems using such a framework, Ruby on Rails, which is used by well-known web-sites, e.g., Twitter, Github, Groupon, Shopify, and Yellow Pages. We will touch on the following topics: programming in Ruby; using Rails; setting up a test web-server using Mongrel; using a database like SQLite3; using HTML, CSS, and JavaScript; and using JavaScript libraries such as jQuery.
Prerequisite: C- or better in Computer Science 215.
1.00 units, Lecture
CPSC 415
Special Topics: Mobile Computing
A survey of the concepts and practices involved in the emerging field of mobile computing, with a focus on the Android and iOS operating systems. Topics include event-driven programming, the client-server model, location awareness (GPS), service management, and mobile security. The course will also address some of the broader impacts of mobile computing on privacy, health, and the economy. The course will be project based and students will build several mobiles apps for the Android platform.
Prerequisite: C- or better in Computer Science 215.
1.00 units, Lecture
CPSC 466
Teaching Assistantship
Submission of the special registration form, available in the Registrar's Office, and the approval of the instructor and chairperson are required for enrollment.
0.50 units min / 1.00 units max, Independent Study
CPSC 490
Research Assistantship
No Course Description Available.
0.50 units min / 1.00 units max, Independent Study
CPSC 498
Senior Project Part 1
This course is comprised of a research or implementation project and a final written report. This course is required for all senior computer science majors. Students must locate a project advisor and must submit a preliminary proposal to the project adviser by the last day of classes in the spring semester of the junior year. In addition to the proposal, submission of the special registration form, available in the Registrar's Office, and the approval of the instructor and chairperson are required for each semester of this year-long project. The course credits are considered pending in the first semester and will be awarded upon completion of the second semester.
1.00 units, Independent Study
CPSC 499
Senior Project Part 2
This course is comprised of a research or implementation project and a final written report. This course is required for all senior computer science majors. Students must locate a project adviser and must submit a preliminary proposal to the project adviser by the last day of classes in the spring semester of the junior year. In addition to the proposal, submission of the special registration form, available in the Registrar's Office, and the approval of the instructor and chairperson are required for each semester of this year-long project. The course credits are considered pending in the first semester and will be awarded upon completion of the second semester.
1.00 units, Independent Study