+---------------------------------------+ | Syllabus | | CSE 374: Programming Concepts & Tools | | Spring 2019 | +---------------------------------------+ Logistics and Contact Information --------------------------------- Instructor: Megan Hazen mh75[at]cs[dot]washington[dot]edu For most purposes, use the course staff email: cse374-staff[at]cs[dot]washington[dot]edu See the course homepage (https://www.cs.washington.edu/374/) for information about the course. You will also wish to refer to the Canvas course (https://canvas.uw.edu/courses/1271724) including lectures, assignments, TAs, and office hours. Course Description ------------------ (Course Catalogue) Covers key software development concepts and tools not in introductory courses. Concepts of lower-level programming (C/C++) and explicit memory management; techniques and tools for individual and group software development; design, implementation, and testing strategies. Intended for non-majors. Cannot be taken for credit if credit received for CSE 333. Prerequisite: CSE 143. This is a very practical, skills-oriented course. The goal is to gain exposure to a wide variety of useful concepts and tools. Lecture will introduce concepts, and homework will provide an opportunity to practice. There will be a strong emphasis on independent learning, as it will not be possible to cover each topic comprehensively in class. Goals ----- Successful course participants will: * Gain a basic familiarity with the Linux operating system and toolchain. * Develop the skills to automate common computing tasks such as file manipulation and string processing * Internalize C-level programming and obtain beginning proficiency in C programming * Learn the basics of programming tools such as debuggers, profilers, compilation managers, and version control * Learn core software-engineering practices regarding specification and testing * Understand the basic issues and pitfalls of shared-memory concurrency * Learn how to acquire additional information and skills independently Grading and Exams ----------------- 60% - Homework assignments 15% - Midterm exam 25% - Final exam In principal, all homeworks contribute equally to the 60%, but larger programming projects will be weighed somewhat more than others. Percentages are tentative and may be adjusted. Extra Credit Policy ------------------- Extra credit is designed to have little (but some) impact on your grade whether you do it or not. Not doing extra credit will not lower your grade - regardless of how many other students attempt it. Extra credit is designed to be challenging and an opportunity for people with extra time to work on something optional. You should not attempt the extra credit until you have finished the rest of an assignment. We will ignore extra-credit work on assignments that are not at least "almost perfect" otherwise. Late Policy ----------- Deadlines will be given with each assignment. These deadlines are strict. 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 FOUR free "LATE DAYS". You are strongly advised to save them for emergencies. YOU MAY NOT USE MORE THAN TWO FOR THE SAME ASSIGNMENT. On group projects 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. They must be used in 24-hour (integer) chunks. This policy may not be the same as in your other classes. You are responsible for understanding it if you choose to submit late work. If you do not have any remaining late days, you will be deducted 20% of the assignment's maximum points per day late. No assignment may be submitted more than two days late. Academic Integrity ------------------ Any attempt to misrepresent the work you submit will be dealt with via the appropriate University mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty. The guidelines for this course and more information about academic integrity are in a separate document (integrity.html). You are responsible for knowing the information in that document. Text ---- There are no books listed for this course. However, there are a large number of resources that may be useful. One skill you will exercise in this course is finding your own reliable resources - this may be a good time to build a bookmark table of your favorite resources. A number of useful links may be found on the course web page. Additionally, you may find the following books informative. Linux Pocket Guide Barrett, O'Reilly, 3nd ed., 2016 (different editions are ok too) The C Programming Language Kernighan & Ritchie, Prentice-Hall, 2nd ed, 1988 The Pocket Guide is a concise source of information and provides a useful reference to Linux at the level you need for 374. You are not responsible for memorizing all of the details in it. The Kernighan & Ritchie book is the classic reference on C from the people who invented the language. It has useful explanations and examples beyond the information presented in class or reference information available online. See the Linux and C resource pages on the course website for links to additional useful information on Linux and C. Communications -------------- This course has a Canvas page which will be the primary resource for up-to-date assignments and calendar items. It is your responsibility to stay on top of all Canvas announcements and assignments. A discussion board is linked to the course home page so we can keep in touch outside of class meetings. Please participate. The discussion page may be used for any course related purpose. When discussing code please refer to general approach, or possibly psuedo-code, but do not share code snippets. You will also automatically be subscribed to a class mailing list at your uwnetid address. This will primarily be used for announcements, clarifications, hints, and other notices from the course staff, and you are responsible for everything that is mailed there. Messages to the course staff that are not appropriate for the discussion board can be sent to cse374-staff[at]cs. Please don't send email to individual staff members if possible. Messages sent to the entire staff are more likely to receive a timely response, and it helps ensure the staff gives consistent answers to questions, as well as help us get a better idea of whether several people have the same or similar questions. Course Topics ------ Files, processes, and shells Command-line utilities I/O redirection File editing Shell scripting String processing; regular expressions C Programming Memory model Pointers Arrays Manual resource management The preprocessor Programming tools Debuggers Profilers Linkers Compilation managers Version-control systems Software-engineering issues Multiperson programming Specification Testing Code-reuse patterns C++ C with classes and objects Other differences from C Concurrency Threads Races and deadlocks Locks and Transactions Message-passing