+---------------------------------------+ | Syllabus | | CSE 374: Programming Concepts & Tools | | Spring 2021 | +---------------------------------------+ 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 . You will get a quicker and more comprehensive response. 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/1448831) including lectures, assignments, TAs, and office hours. Additionally, this course will use an EdStem discussion board(https://edstem.org/us/courses/4904/discussion/). The discussion board will provide invaluable information and discussion with your peers and instructors. 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 ----------------- 65% - Homework assignments 25% - Weekly review quizzes 10% - Final exam In principal, all homeworks contribute equally to the 65%, but larger programming projects will be weighed somewhat more than others. Percentages are tentative and may be adjusted. The quizzes are designed to be short and solidify mastery. Extra Credit Policy ------------------- Extra credit on homeworks 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 - due dates are specified with day and time in Pacific Daylight Time. These deadlines are strict - it is your responsbility to ensure that you can and do submit assignments on time. If you are aware of a challenge BEFORE the due date, or are faced with a true emergency, please contact your instructor. No late submission of short quizes will be allowed; answers will be posted to encourage review of the material and this does not support late submissions. You will have two attempts at each quiz, and you are encouraged to look up any answers you had questions about before the second attempt. Homework assignments that are late by up to four days will be graded with a penalty of 20% for each day. (For example, an assignment turned in 12-24 hours after the submission deadline will be considered one day late. You will receive a grade equal to 80% of the grade merited by the work. 24-48 hours will receive a grade equal to 60% of the earned grade, etc. An assignment received five or more days after the due date will not be graded and will earn a grade of zero.) Additionally, each student will receive three "late days". In order to use your late day you will note that you wish to use one, and the clock for the above penalties will start 24 hours after the submission deadline. Text ---- There is one book listed for this course (Linux Pocket Guide). 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, 3rd 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, but I strongly recommend that you read through 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. Flipped Classroom ----------------- This quarter will have some portion of the class meetings act as 'flipped classrooms'. This means that reading, or a video, for instruction will be assigned for completion before the class session. Then, class time will be spent working together on assignments. Flipped classrooms are used to maximize the benefit of time spent live with an instructor. Students will find that they are the most beneficial when the recommended instruction is completed before the class session. Communications -------------- This course has a Canvas page which will be the primary guide to all assignments. This page will be udpated frequently. It is your responsibility to stay on top of all Canvas announcements and assignments. An EdStem 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. 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. 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 (cs.washington.edu/academics/misconduct). You are responsible for knowing the information in that document. Please notice that you should not, in any situation, borrow another person's code or provide yours to a fellow student. Conduct and Accommodations -------------------------- This course adheres to University standards including those guidelines laid out about Academic Integrity (https://www.washington.edu/cssc/facultystaff/academic-misconduct/) and Student Conduct (https://www.washington.edu/studentconduct/). We refer students to support and accommodation services including Disability Services (http://depts.washington.edu/uwdrs/faculty/syllabus-statement/), Religious Accommodations (https://registrar.washington.edu/staffandfaculty/religious-accommodations-policy/), and Safe Campus (https://www.washington.edu/safecampus/) resources. This instructor seeks to ensure all students are fully included in each course, and strives to create an environment that reflects community and mutual caring. I encourage students with concerns about classroom or course climate to contact me directly. In the event you are more comfortable with a different approach, please refer to the resources above. 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