COS 126 Frequently Asked Questions

Is there a course website? Yes, our website is the basic resource for information about the course, including copies of the lecture notes and assignments.

What material is covered in COS 126? The course is a general introduction to the field of computer science, with a significant programming component. We have three primary goals. First, we want to demystify computer systems by unpeeling levels of abstraction down to the simplest physical component, leaving no black boxes. Second, we want to empower you by giving you the experience and insight necessary to exploit available technology whenever appropriate. Third, we want to build awareness of the substantial intellectual underpinnings of the field and its broad reach into other sciences. You can appreciate these ideas best if you know how to program, and you can be a more effective programmer if you understand the underlying concepts.

Are there any prerequisites? No. COS 126 is intended for novices.

I'm an engineer. Does COS 126 satisfy the SEAS computing requirement? Yes, certainly. More importantly, since it is a broad introduction to computing, it does so without limiting your choice of major afterwards.

I've never written a computer program before. Is COS 126 for me? Absolutely. It is accessible to any Princeton student with a typical high school background in math. It is especially appropriate for any student majoring in the sciences, engineering, math, or economics, although many other students take it as well.

I already know how to program. Should I take COS 126? If you have significant programming experience (e.g., an AP 5), then you should plan to take COS 217, 226, or 323 instead. Consult the instructor, freshman placement officer, or email wayne@cs.

Should I save COS 126 for a semester when I have a light load? Students who keep up with the work and consult course staff early when they need help report that the workload is entirely reasonable and that the course is well worth the time invested. One of the prime goals of the course is to provide you with the basic background that you need to be able to use computers effectively. If you get that background early, your life will be easier in your other courses, whatever your chosen major might be. One new feature of the course is that the work is now spread evenly throughout the semester (there is no final exam), leaving some time at the end for you to focus on your other courses.

I just can't fit COS 126 into my schedule. Couldn't I just find an easier course or pick up programming on my own? We have a word for the process of using a computer to attack a problem without attempting to understand the basic underlying principles: hacking. Paradoxically, as computer systems become more powerful and more complex, the limitations to problem-solving by hacking become more evident. As for your schedule, you might consider postponing some other technical course for which you have advanced placement, for example.

I've heard that COS 126 is designed to serve only COS and ELE majors and weed out others. Any truth to that? Not lately. Many experienced programmers now place out of the course, and many other students with no prior experience wind up using computers effectively throughout their college career because of the foundation provided by COS 126. COS 126 draws students from all around the University.

Will I get personal attention in a large class? Absolutely. We have a large, experienced, energetic, and novice-friendly course staff. The average precept size is 18 and is typically led by a regular Princeton faculty member. We also hire enthusiastic computer science majors to provide additional technical support. The course staff has won numerous teaching awards and students consistently rate it very highly (e.g., 4.6/5.0 in Fall, Spring 2002).

What kind of programming concepts are covered? We cover the programming fundamentals that we believe every scientist and engineer needs to know. This includes data types, flow-control, arrays, recursion, abstract data types, and elementary data structures. Our approach to teaching these concepts is to draw examples from a diverse range of commercial and scientific applications. To the extent possible, we focus on learning to program, as opposed to learning the details about any particular programming language or environment.

Why Java? We focus attention on a minimal subset of Java so that the programs we write are very similar to their counterparts in C, C++, C#, Python, Matlab, IDL, or any of numerous other languages. Our choice of language is not crucial, and our experience is that this approach makes it easy for you to quickly pick up new languages after completing COS 126. There is no perfect language and you certainly will find yourself programming in other languages in the future. We use Java because it is widely available, widely used, embraces a full set of modern abstractions, and has a variety of automatic checks for mistakes in programs. This makes it especially suitable for learning to program. We also exploit Java's built-in networking and multimedia capabilities.

What kinds of applications do you consider? One of the distinguishing features of our course is the range of real-world scientific and commercial applications from which we draw examples. Some lecture examples are listed below.

What kinds of programs will I be writing? We believe the best way to learn how to program is to write code and solve real problems. We assign several substantive programming assignments where you will apply programming concepts to solve nontrivial commercial and scientific problems from scratch (typically requiring at most 50 - 100 lines of code). Our sequence of assignments embodies our approach to teaching programming.

What other topics are covered? In addition to programming and scientific computing, we introduce computer architecture and the theory of computation.

What computing courses can I take after COS 126? COS 126 is uniquely designed to feed directly into any of the three intermediate level computer science courses offered in the department.

Can I use my own computer? Absolutely. We provide free software and detailed instructions for setting up and using a Java programming environment on your system, whether it be Windows, Mac OS X, or some flavor of Linux. We also provide support for public cluster machines in the Friend center.