The primary goal of this course is to give you the knowledge and confidence you need to take an arbitrary programming problem and run with it. Our hope is that, in future CSE classes, you will be able to focus your attention on the new material you will be learning, rather than the mechanics of software development. We also hope that the knowledge you acquire in this class will serve you well in summer jobs, internships, or research opportunities that you take part in during your undergraduate career.
Because software developers are constantly being exposed to new tools and new languages, most of our time in this course will be spent teaching you how to master new tools and languages quickly. But competent software developers understand more than just tools and languages. There is an aesthetics to software development, and elegantly designed software systems are easier to build, maintain, and transfer to new developers. Consequently, we will also help you develop a sense of what distinguishes well designed systems from poorly designed systems. Finally, all professionals have a responsibility to think about how their work relates to the larger social context. For this reason, we will discuss the societal and ethical implications of computing throughout the quarter.
In this course, you will learn how to do the following:
It is important to emphasize that we won't attempt to teach you all the details of any topic. Rather, we will move quickly from one topic to another and assume you can find the missing details when the need arises. This is how professional software developers work. The hard part is knowing what to look for, and that is what this course will teach you.
This course will expose you to a tremendous number of tools, concepts, and issues. Keep the following things in mind:
We assume you know the material from CSE 142 and 143.
The following textbooks are strongly recommended for this class:
All the information in these books is also available in countless other books and online resources (including many listed on the CSE 303 Wiki). If you are already confident in your ability to locate information in these other resources, then you are free to do so. However, we have chosen these textbooks to give students with the assumed background (CSE 142 and 143) a complete, concise, and coherent picture of most course concepts. We strongly recommend that you read our suggested sections of these texts along with the lectures. The texts may also prove to be valuable resources throughout your career.
(Note that C++ for Java Programmers was officially listed as "recommended," but it is only slightly less important than the other books.)
The evaluation includes both assignments and exams. Because the best way to learn the tools and techniques that we will show you in this class is through hands-on experience, we expect you to spend most of your time on the assignments.
Late policy: Homework will always be due at 2:00 PM on the due date. This deadline is strict. Therefore, it is exceedingly unlikely that skipping class or being late to class because of homework is in your interest. For the entire quarter, you may have a total of three "late days" that must be used in 24-hour chunks. Once you use-up your late days, no additional extensions will be granted for any reason, so you are strongly advised to save them for emergencies. You may not use more than two for the same assignment.
Collaboration policy: You are encouraged to discuss the content of this class with each other. In particular, you are encouraged to point each other to relevant documentation (a useful man page, a book chapter, a web site, etc.) at any time. We also encourage you to work with others to discuss and prepare for the assignments. However, each student (or group of students, when working as a team) must produce their own solution, and you may NOT look at the final solutions produced by other students or groups.
Academic Integrity: Any attempt to misrepresent the work you did will be dealt with via the appropriate University mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty. Because there is a fine line between collaboration and cheating in this course, we require all students to read an understand our Academic Integrity Policy.
Please see the course schedule posted on the course web site.
Try to attend every lecture. If you miss a lecture, talk to a friend who was present, and be sure to check the class web site for messages.
The course web site is http://www.cs.washington.edu/303. Check here to see the course schedule and assignments, and also to see important announcements , a link to the class mailing list, and information on computing resources. A Course Wiki has also been set up so that students may ask questions about homework and see answers to these questions compiled in one place.