CSE 351: rudimentary knowledge of C programming; the ability to write, run, and debug programs; familiarity with Linux and the use of Linux compilation, editing, and debugging tools; a solid mental model of the relationship between between high-level code (e.g., C) code and assembly-level compiled code; simple data structures such as linked lists, trees, hash tables, and queues.
Courage and perserverance, even in the face of complexity and uncertainy.
This course is designed to give you substantial experience with programming. There will be three or four major programming assignments during the quarter; the assignments are designed to build on top of each other, so it is in your interest to make sure that earlier assignments are rock-solid.
All of our assignments assume you will be programming within a CSE Linux environment. There are three ways to do this:
Regardless of where you develop your assignments, we will test and grade them on the CSE lab machines or attu, so you must ensure that your code works properly there.
Assignments are expected to be done on time, however we realize that occasionally a bit of slack is needed for unexpected problems or to get rid of that "last" bug. For the entire quarter, you may have four free late days. You are strongly advised to save them for emergencies. You may not use more than two for the same assignment, and on group projects (if we have any) you may only use late days if all members of the group have them available, and all members of the group will be charged for each late day used.
Late days must be used in 24-hour (integer) chunks. If you are not finished with an assignment and have no more remaining late days you should turn in your best effort for partial credit either on time or after using any available late day(s). This policy may not be the same as in other classes. You are responsible for understanding it if you choose to submit late work.
Great programmers write great code. People become great programmers writing lots of code and learning from the experience. We will be assigning a mandatory programming exercise with most lectures, due before the next lecture. These will be short and simple, but they will reinforce the material from the lecture. We will grade them, but the grading will be coarse-grained:
We expect 0’s and 3’s to be relatively rare. As with larger assignments, exercises will be graded and evaluated on the CSE lab machines.
Some exercises have one or two questions to a paper you need read before lecture. Your answers need only be a few sentences each, as long as you have offered a quality response to demonstrate that you understand the paper. We won’t give feedback, but we will glance at your answers to make sure they make sense, and they will count for part of the grade.
We will have one midterm exam and a final exam. The dates are listed on the course schedule.
Grades will be assigned approximately as follows:
These percentages may be adjusted if appropriate.
There are no required textbooks for this course. Most people will find it useful to have both a C and a C++ reference; suggestions are given below. We do recommend that you have a copy of the C++ Primer as C++ is a big, complex language and it is hard to understand how it fits together from google and stack overflow snippets.
Many of these policies are taken verbatim from other CSE courses.
Collaboration is a very good thing. On the other hand, cheating is considered a very serious offense and is vigorously prosecuted. Vigorous prosecution requires that you be advised of the cheating policy of the course before the offending act.
For this course, the policy is simple: don't cheat. You know it when you're doing it. We'll recognize it when you do it. As an easy example, sharing assignment solution code with each other is cheating. As another easy example, relying heavily on some resource (e.g., some example code you found on the Web) without attributing it in your turnin is cheating.
That said, collaborating is, for many people, an effective way to learn. Learning isn't cheating. Helping each other write programs that are not assignments or exercises isn't cheating. Misrepresenting that you've learned something, or done the work that implies you've learned something, almost certainly is.