This course is an introduction to computer science and programming intended for students in the natural sciences. The emphasis is on problems that might come up in a modern research laboratory. Assignments and exercises are done in Python programming language, which is favored by many natural scientists. The course teaches how to maintain an electronic notebook of calculations, to complement the traditional lab notebook. There is also a focus on standard data structures and good programming techniques, giving the student a solid grounding in modern programming techniques.
This course is an introduction to computer science and programming. The programming language Java is used to illustrate concepts in computer science. The course emphasizes the use of the computer as a problem-solving tool and the development of good programming style. CSCI 161 is the introductory course for students planning to major or minor in computer science. A weekly laboratory is required.
This course builds on the material learned in an introductory computer science course in order to strengthen a student's foundation in programming. The emphasis of this course is on creating steadily larger and more structured programs, and to present students with opportunities to encounter problems with higher degrees of complexity. Material covered may include such topics as sorting, exception handling, file input/output, use of various data structures (e.g., multidimensional arrays, maps, sets, etc.), use of the debugger, and systematic testing.
Students study the design and implementation of large software systems. Topics include design methodologies, programming team organization, and management, program verification and maintenance, design patterns and software engineering tools.
This course is a continuation of CSCI 161. It provides an introduction to the study of fundamental data structures and their associated algorithms. Students learn how to choose appropriate data structures and algorithms for particular problems. They learn about lists, stacks, queues, trees, sorting, searching, abstract data types, and object-oriented programming using an object-oriented programming language. A weekly laboratory is required.
Introduction to machine organization, machine structure, data representation, digital logic, and assembly language programming on a RISC based architecture.
Declarative programming languages are an important alternative to languages (such as C, C++, and Java) that use the more familiar imperative programming paradigm. This course introduces the functional and logic programming paradigms in depth through assignments in the programming languages Haskell and Prolog. These languages are based on models of computation that are fundamentally different from the von Neumann model underlying imperative programming languages, and exposure to these new paradigms provides valuable perspective on programming and problem solving in general.
Consideration of a diverse range of problems in computer science from problems in the design of correct and efficient algorithms and the implementation of data structures through problems in the theory of computation.
Students learn about numerical solutions to linear systems; numerical linear algebra, polynomial approximations (interpolation and extrapolation); numerical differentiation and integration. Students also learn about error analysis and how to select appropriate algorithms for specific problems.
This course is an introduction to the process of generating images with a computer. The emphasis is on the design and use of graphical facilities for two- and three-dimensional graphics. Students study the mathematical theory underlying computer generated graphics, and will implement programs utilizing these techniques. The mathematical topics covered include rotations, translations, and perspective. The core pieces of the graphics pipeline used in current graphics hardware are studied.
Computer networks have become a fundamental part of our everyday lives, used for everything from social networking to research and commerce. This course introduces the concepts behind modern computer networks and their implementation. It covers the software and hardware architecture of the internet, networking protocols like TCP and IP, how services like Email and the Web work, approaches for reliable and secure communication, and the details of both wired and wireless transmission. Programming exercises reinforce key concepts from the course.
This course is about how to find the best - or at least good - solutions to large problems frequently arising in business, industrial, or scientific settings. Students learn how to model these problems mathematically, algorithms for finding solutions to them, and the theory behind why the algorithms work. Topics include the simplex method, duality theory, sensitivity analysis, and network models. The focus is on linear models and models with combinatorial structure, but some nonlinear models are considered as well. Optimization software is used frequently.
This is a course in advanced data structures, the algorithms needed to manipulate these data structures, proofs that the algorithms are correct, and a runtime analysis of the algorithms. Students study advanced data structures such as Red-Black Trees, 2-3 Trees, Heaps, and Graphs. Students also study algorithm design techniques including Greedy Algorithms, Divide and Conquer, Dynamic Programming, and Backtracking. They also learn about NP-Complete problems.
An introduction to formal models of computers and computation. Topics include formal languages and automata theory, computability, decidability, and Church's Thesis.
The topics are chosen each time the course is offered to meet the interests of students and instructors. Possible topics include computer architecture, computer modeling and simulation, networks, advanced graphics, and advanced artificial intelligence.
This course introduces the student to the techniques of artificial intelligence. Students learn strategies for uninformed and informed (heuristic) search, knowledge representation, problem-solving, and machine learning. Additional topics may include motion planning, probabilistic reasoning, natural language understanding, and philosophical implications.
The senior capstone course provides computer science majors the opportunity to integrate the knowledge that they have gained from across the curriculum. Students are encouraged to work in teams, and can pursue either an applied or theory project. Students choosing applied projects participate in the identification of a problem, develop a project proposal outlining an approach to the problem's solution, implement the proposed solution, and test or evaluate the result. Students choosing a theory project conduct original research (e.g., develop a new algorithm) and evaluate its strengths and limitations. Regardless of the choice of project, students document their work in the form of written reports and oral presentations.
The management of data is one of the classical problems throughout the history of computing. This course centers around the fundamental concepts and theory that underpin the relational data model, which addresses numerous problems that plague data management, including data independence, consistency, information loss, and access performance. Course topics include the relational data model, database languages (e.g., SQL), relational database theory, database design (by decomposition), query execution, and considerations that affect system performance. Students design database schemas that effectively model an organization's information requirements and write programs that require database integration. Students also gain insight through the analysis and implementation of influential data structures and algorithms that are commonly used in modern relational database systems.
A practical computer software development experience to incorporate topics learned in advanced computer science courses with the tools and techniques for software development studied in the software engineering class. Students may enroll in either the one-semester, one-unit 460 or the two-semester, 0.5 unit per semester sequence, but not both.
A practical computer software development experience to incorporate topics learned in advanced computer science courses with the tools and techniques for software development studied in the software engineering class. Students may enroll in either the one-semester, one-unit 460 or the two-semester, 0.5 unit per semester sequence, but not both.
A practical computer software development experience to incorporate topics learned in advanced computer science courses with the tools and techniques for software development studied in the software engineering class. Students may enroll in either the one-semester, one-unit 460 or the two-semester, 0.5 unit per semester sequence, but not both.
One the most complex software systems ever assembled, the modern operating system serves as the interface between the human and the machine. This course traces how the simple idea of ``resource sharing'' unravels into some of the most confounding problems and original breakthroughs in computer science. Course topics include process and thread management, input/output, CPU scheduling, synchronization primitives, memory management, and file systems. Students taking this course learn how to deal with the intricacies of low-level programming, parallel computing and synchronization problems, and also receive kernel-development experience through the design and implementation of various subsystems in a real operating system. The C programming language is used for homework assignments and projects.
Compilers take input programs written in a high-level language and generate equivalent programs in a low-level language. This course introduces the mathematical tools (formal languages and automata) necessary for recognizing and validating input programs and the computational techniques used to construct equivalent output programs. Students develop first-hand experience with the process by implementing a sample compiler as a course project. The tools and techniques introduced in this course can be applied across a wide range of applications. In particular, this course is valuable preparation for writing any program that needs to read and act on structured input files.
A senior thesis allows students to explore areas of computer science that are new to them, to develop the skill of working independently on a project, and to synthesize and present a substantial work to the academic community. Thesis proposals are normally developed in consultation with the student's research committee. This committee consists of the student's faculty supervisor and two other faculty members. It is involved in the final evaluation of the project. The results are presented in a public seminar or written in a publishable form.
A senior thesis allows students to explore areas of computer science that are new to them, to develop the skill of working independently on a project, and to synthesize and present a substantial work to the academic community. Thesis proposals are normally developed in consultation with the student's research committee. This committee consists of the student's faculty supervisor and two other faculty members. It is involved in the final evaluation of the project. The results are presented in a public seminar or written in a publishable form.
Independent study is available to those students who wish to continue their learning in an area after completing the regularly offered courses in that area.
Independent study is available to those students who wish to continue their learning in an area after completing the regularly offered courses in that area.
This scheduled weekly interdisciplinary seminar provides the context to reflect on concrete experiences at an off-campus internship site and to link these experiences to academic study relating to the political, psychological, social, economic and intellectual forces that shape our views on work and its meaning. The aim is to integrate study in the liberal arts with issues and themes surrounding the pursuit of a creative, productive, and satisfying professional life. Students receive 1.0 unit of academic credit for the academic work that augments their concurrent internship fieldwork. This course is not applicable to the Upper-Division Graduation Requirement. Only 1.0 unit may be assigned to an individual internship and no more than 2.0 units of internship credit, or internship credit in combination with co-operative education credit, may be applied to an undergraduate degree.