What CS Course Should I Take?
The CS Department offers seven introductory courses in Computer Science. Here's a quick guide on how to choose which one to take.
Those planning to concentrate (major) in Computer Science should take either CSCI0150/0160, CSCI0170/0180, or CSCI0190. To help you decide which course sequence to take, you might attend the first lectures of both CSCI0150 and CSCI0170, and perhaps CSCI0190.
Students interested in taking Linear Algebra from a Computer Science perspective might consider CSCI0530.
Students in the Social Sciences and the Humanities who would like a solid introduction to applied Computer Science that is relevant to their concentrations might consider taking CSCI0931.
Students who would like an introduction to using computers might consider CSCI0020.
Finally, students in the Engineering and the Sciences who want a one-semester course on programming that's relevant to their disciplines might consider CSCI0040.
csci0020
CSCI0020, offered in the fall, is for students who want an introduction to the use of computers that does not involve much programming. It is intended primarily for humanities concentrators and may not be used as part of a CS concentration. This course offers a broad view of the digital world and acquaints the student with a variety of applications and the underlying theory that drives them. Students can expect to get a broad perspective on computing history and future trends as it applies to many current day activities and issues.
csci0040
CSCI0040, offered in the spring, is intended for students in engineering and the sciences who want to learn how to program (primarily in MatLab, but with a little C as well), but who do not necessarily want to be CS concentrators. Students will write a number of programs and complete several larger projects. The course introduces problem solving techniques that guide the thinking necessary to construct a program as part of the solution. It may not be used as part of a CS concentration.
csci0150 & csci0160
CSCI0150/0160 is a two-course sequence intended for those who might consider concentrating in Computer Science as well as for those who just want a strong background in programming practice (CSCI0150) and its theoretical foundations (CSCI0160). No prior background in programming is assumed or required. CSCI0150 is a challenging object-oriented programming course (using Java) in which students gain experience with object-oriented design techniques and the use of Swing, Java's 2D graphics library, through the design and implementation of a sequence of moderate to fairly lengthy interactive programs, including Tetris, a fascinating computer game. All programs use graphical user interfaces. In CSCI0160, students learn the theoretical tools used to analyze computation and make programs more efficient. A number of fundamental algorithms and data structures are covered, as well as their implementations. Students with questions about CS015 and CS016 are invited to email the professors teaching these courses in 2008-2009 (Andy van Dam, avd@cs.brown.edu (CSCI0150) and John Hughes, jfh@cs.brown.edu (CSCI0160)).
csci0170 & csci0180
The goal of CSCI0170 is to put you on the path to mastery of computer science. Computer science is a rich, diverse field, full of intellectual delights and challenges. One common thread is problem-solving; if you enjoy puzzles that require ingenuity and have elegant solutions, you will find this course deeply satisfying.
Programming is only a small part of computer science, but it is an essential one. Mastery requires that one fully understand one's tools. This course begins by teaching a lovely programming language called Scheme, which is a dialect of LISP. The syntax and semantics of Scheme can be learned in just a few days, making it an ideal first programming language.
CSCI0170 continues with a language in the ML family that exposes students to types and type-inference, pattern-matching, and modules. Both Scheme and ML exemplify the functional programming paradigm, which permits extremely concise and elegant solutions to many problems, although it lies out of the mainstream (e.g., it is rarely taught in high schools).
The follow-up course, CSCI0180, uses Java as a vehicle for teaching the object-oriented programming paradigm, which emphasizes modularity, flexibility, and extensibility. The fact that CSCI0170/0180 is multilingual and multiparadigmatic helps students develop an understanding of programming that transcends the syntax and idiosyncrasies of any one language.
How does one choose among the many possible methods for solving a computational problem? It is impractical to program all approaches and test them against each other. Analysis of algorithms uses mathematics to predict the computational performance of a method. In CSCI0170/0180, the study of analysis is interwoven with the study of programming.
Our goal is to help you learn introductory material in computer science. Studies show that students perform better in the long-run when their introductory CS experience is collaborative. Hence, collaboration on all assignments except exams---in particular, "pair programming"---is strongly encouraged in both CSCI0170 and CSCI0180.
CSCI0170 and CSCI0180 are not large classes (roughly 60 students), and lectures are highly interactive. No prior programming experience is necessary. Beginners are just as likely to succeed as seasoned programmers. In a typical year, at least one of the very top-performing students has had no prior programming experience.
csci0190
CSCI0190 is offered in the fall for students who have a strong prior computer science background and would like to complete the introductory year sequences (CSCI0150-0160 or CSCI0170-0180) in a single semester. It assumes students can already program in Java and have built programs of moderate size. The course uses multiple programming languages and styles, exposes students to interactive and distributed programming, and weaves the theoretical underpinnings of algorithms and data structures through this content. Ideal preparation is a 5 on the CS AP test or other equivalent background (to be approved by the professor). Prospective students are welcome to contact the professor, Shriram Krishnamurthi.
csci0530
CSCI 0530 (The CS Matrix Course) covers linear algebra and its applications to computer science problems. It satisfies the linear algebra requirement for the Sc.B. in Computer Science, and has no formal prerequisites; it is accessible to any student who is comfortable with mathematics and with programming. Students are welcome to take this course concurrently with an introductory CS course; the two complement each other.
The course is designed around a series of labs in which students carry out programming and data-processing assignments, and homeworks in which they derive proofs for the fundamental results in linear algebra.
Some of the labs:
- Geometric Transformations: explore transformations for moving and rotating shapes (graphics).
- Vector Space Document Model: From a corpus of news articles, select the article that is most relevant to a query, according to the cosine rule (information retrieval).
- Perspective Rectification: Given a photo of the CIT taken from an angle, synthesize an image of what one wall would look like if taken head on (computer vision).
- Integer Factorization: Use a sophisticated algorithm to factor a large integer (cryptanalysis of RSA).
- Error-Correcting Codes: explore use of a concise representation of bits that is resilient to single-bit errors (storage devices, radio communication).
- Eigenfaces: analyze some photos of faces to obtain a heuristic for distinguishing faces from nonfaces (computer vision).
- Latent Semantic Indexing: analyze a corpus of news stories to obtain categories and the words that characterize them (information retrieval)
- PageRank: analyze a corpus of Wikipedia articles to sort them by importance, using the ranking method originally used by Google (web search).
- Image Restoration: using linear programming, restore a noisy binary image (image processing).
Other applications are discussed in lecture and homework, such as game theory, random walks, graph layout, fitting data to a model (e.g. a line or a quadratic), and a little game called Fiver.
Prospective students who have questions are encouraged to contact the instructor, Philip Klein, klein@cs.brown.edu.
csci0931
This course, an Introduction to Computation in the Social Sciences and Humanities, introduces students to the use of computation for solving problems relevant to the humanities and social sciences. The course is broken down into a series of real-world problems taken from the news, from books such as Freakonomics, and from current research. For each problem, students discuss how one might actually test the hypothesis the problem poses using available data. Students then create and run experiments that actually perform such tests. The sorts of problems covered are drawn from such topics as:
- Analysis of Company 10-K reports as an indication of takeover/failure
- Analysis of State of the Union speeches
- Search queries as indicators of a flu outbreak
- Wiki analysis
- News bias
- Authorship of Federalist Papers
Topics covered include
- data gathering
- data analysis
- web-based interfaces
- security
- algorithms
- scripting
We prefer students with no prior Computer Science background, though some familiarity with using computers, such as having created spreadsheets, is useful. Interested students are invited to contact the team of faculty who are developing the course: Steve Reiss (spr@cs.brown.edu), Tom Doeppner (twd@cs.brown.edu), John Hughes (jfh@cs.brown.edu), and Shriram Krishnamurthi.
| Page Owner: Webmaster | Last Modified: Fri Apr 17 10:48:27 2009 |