\documentclass[12pt]{article}
\usepackage{fullpage}

\newcommand{\unix}{\(\mbox{Unix}^{\!\!\textsc{\small tm}}\)}

\begin{document}

\title{Computer Science 271 \\
Software I}

\author{Dr. Stephen Bloch \\
office 112 Alumn\ae\ Hall \\
phone 877-4483 \\
email \texttt{sbloch@boethius.adelphi.edu} \\
office hours: whenever I'm not teaching \\
on Tuesday, Wednesday, and Thursday}

\maketitle

\section{Prerequisites}
This course assumes you have taken and passed CSC 171 (``Introduction to
Structured Programming with Pascal'') and CSC 172 (``Introduction to
Algorithms and Data Structures''), and that you either have taken or are
now taking CSC 270 (``Survey of Programming Languages'').
This course will demand a lot of time programming, testing, and debugging
in C, particularly in the latter half of the semester.
If you have
\emph{not} taken CSC 270 but are familiar with the C or C++ programming
language, you should have no problem; otherwise, you should reconsider
taking this course.  

\section{Subject Matter}
This course will explain the basic concepts common to many computer
operating systems and introduce you to a great number of tools and
features provided by operating systems, especially \unix, which is
currently the most popular at academic and research institutions and
coming into widespread use elsewhere.

The \unix\ operating system has more personality than most, not
because of how it works but because the people who built (and continue
to build) it left such a distinctive mark on it with their senses of
beauty, humor, and responsible behaviour.  These have led to a system
which, once you've grasped its fundamental philosophy, allows you both
to make efficient use of your time and to have fun at it.

The creators of \unix\ used computers
all day, every day, and wanted to use them as efficiently as possible.
These people loved elegance and simplicity, and hated re-inventing the
wheel, so they built a number of simple tools that could be combined as
needed in billions of ways.  They also loved whimsy, so you will find a
lot of puns and jokes built into the system.  On the other hand, they
believed strongly in personal responsibility, so destructive pranks,
invasions of privacy, and insults are strongly discouraged --- usually
not by rules, but by peer pressure.  \unix\ has evolved from a computer
system to a philosophy and finally to a community.  I hope, among other
things, to make you productive and civilized members of that community.

A disadvantage of building the whole system out of simple tools is that
you need to learn a lot of simple tools before you can do anything.  So
in the first half of the semester you'll read a lot of documentation 
and try your skill on small examples.  In the second half of the semester
the emphasis will shift from reading about \unix\ tools to actually using them.

Many of the people in this class are taking CSC 270 concurrently.
You'll need to learn the same \unix\ tools and commands for both courses,
but whereas for 270 it will suffice to learn only their simplest, most basic
uses, in this class we'll discuss each tool and command in greater detail.

\pagebreak[3]
\section{Texts}
The main text for this course is \emph{A Student's Guide to Unix},
by Harley Hahn.
I've ordered the black-covered second edition of Hahn through the bookstore.
(If you have the blue-covered first edition, you may use that instead, but
check with me: the chapter numbers are different and some subjects have
been added.)
This very engaging,
fun book discusses \unix\ philosophy and many common tools and commands.
It does not cover \unix\ internals and programmers'
tools, so I expect you to learn about those through online documentation
later in the semester.  

I expect to give a few reading assignments in \emph{C by Dissection},
by Kelley \& Pohl, 3rd edition.  This is the same textbook we're using in
CSC 270, which most of you are taking concurrently.  If you're not taking
CSC 270, find somebody to borrow the book from.  (If you have the 2nd
edition, check with me; the chapter numbers are different.)
I may also give some reading
assignments on the World Wide Web, by email, or in magazines.

To be more specific, I want you to read most of the Hahn book
\emph{before the midterm exam}.  This amounts to about a
hundred pages a week.  It's easy reading because the book is written
in a light style, % and most of what you read will be immediately useful,
but you \emph{do} need to keep up with the reading.

\textbf{You are responsible for everything
in the reading assignments, whether or not I discuss it in a lecture.}

\section{Grading}
As I write this (a week before classes start), I envision five homework
assignments, each worth 10\% of the semester grade,
a midterm worth 20\%, and a final exam worth 30\%.
I may change this somewhat as the semester unfolds.

% These numeric grades will be converted to letter grades as follows:
% I'll draw a curve showing the distribution of numeric grades, and look
% for naturally-occurring ``clumps''.  For each clump, especially the
% top and bottom ones, I'll examine some exam and
% homework papers to decide what letter grade seems appropriate.  This
% method corrects for excessively hard or excessively easy assignments
% while not penalizing anybody for having genius classmates.

Exams must be taken at the scheduled time, unless arranged in advance
or prevented by a documented medical or family emergency.  If you have
three or more exams scheduled on the same date, or
a religious holiday that conflicts with an exam or assignment due date,
please notify me in writing within the first two
weeks of the semester in order to receive due consideration.
% (and I'd
% prefer it if you let me know earlier --- you should know within the
% first week of class when all your exams are).
Exams not taken without one of
the above excuses will get a grade of 0.

Homework and programming
assignments will be accepted late, with a penalty of 1/3 per 24 hours
or portion thereof after they're due.  An hour late is 33\% off, 25
hours late is 67\% off, and after 48 hours don't bother turning it in.
It's still a good idea to do as much of it as you can, however,
because I'll assume on the exams that you've done the homework.

Programs are not abstract works of art,
they are supposed to run and solve real problems.  So if I get a program
that doesn't compile or run, or a program that has little or nothing to do
with the problem I assigned, I will give it a zero, no matter how much
time you put into it.  Don't bother turning in a program you haven't
tested yourself.

\section{Ethics}
Most of the assignments in this class are to be done individually.  You
may \emph{discuss general approaches} to a problem with classmates, but
you \emph{may not copy} large pieces of programs or homework solutions.
If you do, \emph{all} the students involved will be penalized.

All work on an exam must be entirely the work of the one
person whose name is at the top of the page.  If I have evidence that
one student copied from another on an exam, \emph{both} students will be
penalized; see above.

\section{Schedule}
This class meets every Tuesday and Thursday from 12:15 to
1:30 PM, except on University holidays or if I cancel class.
%
% \subsection{Floating Events}
All dates in the following schedule are tentative, except those fixed
by the University; if some topic listed here as taking one lecture in
fact takes two lectures to cover adequately, or {\em vice versa},
the schedule will shift.

% In no case will an assignment be due earlier than indicated in the
% following schedule, but some may be due later; this will be announced
% in class a reasonable time in advance.  I'll try to keep an updated
% version of this schedule available online.  

All reading assignments below are from the Hahn textbook unless stated
otherwise.
I expect you to have read the specified chapters in the textbook
\emph{before} the lecture that deals with that topic; this way I can
concentrate my time on answering questions and clarifying subtle or
difficult points in the textbook, rather than on reading 
to you, which will bore both of us.  \textbf{Please read ahead!}

\pagebreak

\begin{tabbing}
{\bf Date(s) \hskip10pt} \=
{\bf Assgnmnt} \=
{\bf Reading \hskip50pt} \=
{\bf Subject} \kill
{\bf Date(s)} \>
{\hskip-13pt \bf Assignment} \>
{\bf Reading} \>
{\hskip40pt \bf Lecture Subject} \\
%
5 Sept \> \> \> Administrivia, accounts, passwords, introduction \\
10 Sept \> HW1 \> 1--4,16 \> What is \unix? How do I use it? \\
12 Sept \> \> 5--6 \> Windows and keyboards and mice, oh my! \\
17 Sept \> \> 7--8; \texttt{info info} \> Common \unix\ commands and help \\
19 Sept \> \> 9--10 \> Command shells \\
20 Sept \> \> \> Last day to add courses \\
24 Sept \> HW2 \> 11 \> Shell scripts \\
26 Sept \> \> 24--25 \> The \unix\ File System \\
1 Oct \> \> 26--27 \> More on the \unix\ File System \\
3 Oct \> HW1 due \> 18--19 \> Redirection, pipes, and filters \\
4 Oct \> \> \> Last day to drop courses \\
8 Oct \> \> 20--21 \> Displaying and printing files; review for midterm \\
10 Oct \> \> \> Midterm exam \\
15 Oct \> \> 13--15 \> Basic communication and the Net \\
17 Oct \> HW2 due \> 17 \> More on electronic mail; discuss midterm \\
22 Oct \> \> 22--23 \> ``Real'' text editors \\
24 Oct \> HW3 \> \> Programming and \unix \\
29 Oct \> \> K\&P 10 \> The Shell-Program Interface \\
31 Oct \> \> K\&P 13;\texttt{man} pages \> The \texttt{stdio} library \\
5 Nov \> HW4 \> \texttt{man} pages \> Process control: \texttt{fork},
\texttt{exec}, \texttt{wait} \\
7 Nov \> HW3 due \> \texttt{man} pages \> More on process control \\
8 Nov \> \> \> Last day to withdraw from classes \\
12 Nov \> \> \texttt{man} pages \> Low-level I/O \\
14 Nov \> \> \texttt{man} pages \> Process control meets I/O: \texttt{pipe} \\
19 Nov \> HW5 \> \texttt{man flex} \> The \texttt{flex} scanner generator \\
21 Nov \> \> K\&P 14;\texttt{info make} \> The \texttt{make} utility \\
26 Nov \> HW4 due \> \> \texttt{make} meets \texttt{flex} \\
28 Nov \> \> \> Thanksgiving --- no classes \\
3 Dec \> \> \texttt{man rcsintro}, \emph{etc.} \> The \texttt{rcs}
version-control utility \\
5 Dec \> \> \> Usenet, Listserv, and Browsers \\
10 Dec \> \> Web pages \> The World Wide Web and HTML \\
12 Dec \> HW5 due \> \> Catch up and review for final \\
17 Dec \> \> \> 1:00--3:00 PM, Final Exam \\

% 30 Aug \> \> \> Administrivia, accounts, \& passwords \\
% 1 Sept \> \> 1--2 \> What is an operating system?  What is \unix\? \\
% 4 Sept \> \> \> Labor Day --- no classes \\
% 6 Sept \> \> 3--4, (5?) \> Logging in and out, etc. \\
% 8 Sept \> \> 6--7 \> Basic \unix\ commands \\
% 11 Sept \> HW1 \> 8--9 \> Online documentation and command syntax \\
% 13 Sept \> \> 10--11 \> Command shells \\*
% \> \> \> Last day to add courses \\
% 15 Sept \> \> \> Shell scripts \\
% 18 Sept \> \> 19 \> Text editors (\texttt{ex, vi, emacs, sed, awk}) \\
% 20 Sept \> HW2 \> 20--21 \> The \unix\ file system \\
% 22 Sept \> \> 22 \> File-manipulation commands \\
% 25 Sept \> \> \> Rosh Hashanah --- no classes \\
% 27 Sept \> HW1 due \> 12--13 \> Basic Communication and the Net \\
% 29 Sept \> \> 14 \> Electronic mail \\*
% \> \> \> Last day to drop courses \\
% 2 Oct \> \> 15--16 \> Filters, pipes, and combining programs \\*
% 4 Oct \> \> \> Yom Kippur --- no classes \\
% 6 Oct \> \> 17--18 \> Displaying and printing \\
% 9 Oct \> HW2 due \> \> The Shell-Program Interface \\
% 11 Oct \> HW3 \> \> Review for midterm, catch up \\
% 13 Oct \> \> \> Midterm exam \\
% 16 Oct \> \> \texttt{man} pages \> The \texttt{stdio} library \\
% 18 Oct \> \> \texttt{man} pages \> Process control: {\tt fork, exec, wait} \\
% 20 Oct \> HW3 due \> \texttt{man} pages \> More on process control \\
% 23 Oct \> \> \> Discuss midterm \\
% 25 Oct \> HW4 \> \texttt{man} pages \> Low-level \unix\ I/O calls \\
% 27 Oct \> \> \texttt{man} pages \> More on \unix\ system calls \\*
% \> \> \> Last day to apply for May degree \\
% 30 Oct \> \> \texttt{man} pages \> The \texttt{rcs} version control utility \\
% 1 Nov \> \> \texttt{man} pages \> The \texttt{gdb} debugger \\
% 3 Nov \> \> \texttt{man} pages \> More on \texttt{gdb} \\*
% \> \> \> Last day to withdraw from courses \\
% 6 Nov \> \> \texttt{man} pages \> The \texttt{make} compilation control
% utility \\
% 8 Nov \> \> \texttt{man} pages \> More on \texttt{make} \\
% 10 Nov \> \> \texttt{man} pages \> The \texttt{flex} scanner generator \\
% 13 Nov \> HW4 due \> \texttt{man} pages \> More on \texttt{flex} \\
% 15 Nov \> \> \texttt{man} pages \> Yet more \texttt{flex}; \texttt{yacc} \\
% 17 Nov \> HW5 \> \texttt{man} pages \> More on \texttt{yacc} \\
% 20 Nov \> \> handouts \> {\TeX} and {\LaTeX} \\
% 22 Nov \> \> handouts \> More on {\TeX} and {\LaTeX} \\
% 24 Nov \> \> \> Thanksgiving break --- no classes \\
% 27 Nov \> \> 23--24 \> The Net \\
% 29 Nov \> \> 24--25 \> The Net, continued \\
% 1 Dec \> \> \texttt{man} pages \> The World Wide Web and browsers \\
% 4 Dec \> \> on-line help \> HTML: writing your own Web pages \\
% 6 Dec \> \> on-line help \> HTML continued \\
% 8 Dec \> \> \> catch up \\
% 11 Dec \> HW5 due \> \> Review for Final Exam \\
% 15 Dec \> \> \> 10:30 AM--12:30 PM, Final Exam
\end{tabbing}

\end{document}

			Homework assignments

HW1: demonstrate ability to use basic commands in my office
HW2: write a shell script using filters, I/O redirection, etc.
HW3: write a program using I/O and command-line arguments
HW4: write a shell with built-in commands and searched-for commands
HW5: extend the shell

