Programming in C and the UNIX Environment
CSE 271 Spring 2013 Syllabus (draft)

Course Web page
The course Web page is http://www.cse.lehigh.edu/~brian/course/cunix/. Announcements, assignments, and some lecture notes will be available there.
Instructor
The course will be taught by Prof. Brian D. Davison. My homepage is http://www.cse.lehigh.edu/~brian/ where my office hours and contact information can be found.

The grader for the course is Ben Shuyi Chen <shc313 AT lehigh.edu>. His office hour is Thu 4:00pm - 5:00pm in the PL122 Sun lab.

Time/Location
Lectures will be held Mon/Fri 1:10-2:00pm in Packard 258, but we will also make regular (weekly!) trips to the Packard 122 Sun lab (Wednesdays).
Prerequisites
Students are expected to have a strong background in structured programming (e.g., C++ in CSE 109 or equivalent) and some machine organization/architecture understanding (binary, bits, bytes, addresses, etc.).
Course Learning Outcomes
  • Write computer programs
  • Apply knowledge of data structures
  • Apply principles of operating systems
  • Write programs in a second computer language
  • Specific Course Objectives
  • Programming competency in the C programming language
  • Be comfortable using UNIX
  • Know how to use common C and UNIX development tools
  • Be able to write UNIX shell scripts
  • Be able to write moderate C programs utilizing common UNIX system calls
  • Textbooks
    This course has two required texts: Harley Hahn's Guide to Unix and Linux, by Hahn (McGraw-Hill, 2009) and Understanding Unix/Linux Programming: A Guide to Theory and Practice, by Molay (Prentice Hall, 2003). In addition, you need a C guide: either C Primer Plus, 5th Ed., by Prata (SAMS, 2005), which is more of a teaching book for those of you without a strong C++ background (but is highly recommended), or C: A Reference Manual, 5th Ed., by Harbison and Steele (Prentice Hall, 2002), for those of you who only want/need a good reference book. All are or will be available from the university and online bookstores.

    In addition, a number of useful books are available for free in electronic form via the library:

    • GNU Emacs Pocket Reference
    • UNIX in a Nutshell, 3rd ed
    • Learning the UNIX Operating System, 5th ed
    • Linux in a Nutshell, 4th ed
    • Advanced Linux Programming
    • SSH, The Secure Shell: The Definitive Guide
    • vi Editor Pocket Reference
    • Learning Perl, 3rd ed
    • Programming Perl, 3rd ed
    • and more...
    Expected Work
    Homework and programming assignments will consist mostly of C programs and Unix shell scripts. Tests will consist of two hourly exams, a final, and many short quizzes.
    Grading Components
    Expected grading: homeworks, quizzes, and class participation will be worth 20%; programs 40%; hourly exam 1 - 10%; hourly exam 2 - 10%; and final exam 20%.
    Grading Policies

    Attendance is strongly encouraged and unannounced quizzes may occur at any time. You are responsible for everything that occurs in class. A grade may be changed up to two weeks after an assignment, program, or exam is returned. After the final exam, no grades may be contested.

    Quizzes:
    Short quizzes will be given at the beginning of class on Fridays unless there is an hour exam. These quizzes should take no more than 10 minutes, and are closed book, closed notes.

    Homework:
    Late homework will be penalized according to the same process as for programs, below, unless a solution has been posted or presented in class, after which there will be no credit.

    Programs:
    Programs will be graded on correctness, style, and documentation. Each program will typically be graded out of 100 points, and then the score will be weighted to reflect its complexity. Programming assignments will consist of small (10-200 lines), medium (200-600), and large (600+ lines) projects.

    Unless explicitly stated otherwise, programs are due electronically at 11:59pm (local time) on the due date. Late programs will be accepted (up to two days after due), but will be penalized 10% per day that it is late.

    Tests:
    No makeup exams will be given. Students who are excused from an hour exam will be graded out of the remaining percentages.

    Course Topics
    We will cover many topics in this course over the semester. They are expected to include:
    • C programming: syntax, statements, data types, operators; the standard libraries; separate compilation; machine architecture concerns; safe programming practices.
    • Software development issues: Text editing; Automatic program testing; Source tools for compilation (make), maintenance (indent, cxref, cflow, cvs) and debugging (gdb, gprof).
    • Unix operation.
    • Shell programming/scripting.
    • Text Processing: awk, diff, grep, perl; LaTeX.
    • Unix systems programming: system calls; signals; processes and inter-process communication; files and filesystems.
    Computer Facilities
    The primary computer resource will be the various CSE Sun workstations (e.g., those in PL122) running the Solaris version of the UNIX operating system, but students are free to utilize other (equivalent) computers for developing their programming assignments. However, all programming assignments, unless explicitly stated otherwise, must work correctly and be submitted on the Suns. A list of the names of those machines can be found here. The Sunlab is open six days a week, and accessed remotely 24x7. See the schedule of available hours and when the lab is used by other classes.
    Policy on Academic Integrity and Collaboration
    All work, unless explicitly stated in the problem definition, is to be an individual effort. You are encouraged to discuss assignments with one another, your friends, and with the instructors and graders of the course. Indeed, this may be the most effective method of learning. You may share concepts, approaches and strategies for producing a solution. However all work submitted in your name must be your own. If necessary, violations will be considered as cases of academic dishonesty. The university provides academic integrity policies for which all students are responsible. For examples of what is and is not unfair collaboration, see this policy on improper collaboration.
    Policy on Disabilities
    If you have a disability for which you are or may be requesting accommodations, please contact both your professor and the Office of Academic Services, Room C212, University Center or call (610-758-4152) as early as possible in the semester. You must have documentation from the Academic Support Services office before accommodations can be granted.
    Other Relevant University Policies
    There are many other university policies described in the course catalog. A few that also apply here include:

    This page is http://www.cse.lehigh.edu/~brian/course/2013/cunix/syllabus.html
    Last revised: 23 January 2013, Prof. Davison.