CSC 209 course outline
Course information (September 12)
Software tools (weeks of September 12, September 19)
- some notes
- (this is not in the Haviland et al book; we'll use Haviland for
some future topics... after we do some C...)
Shell programming (the rest of September)
The unix filesystem (week of October 4 -- might begin Sept 29)
The C programming language (approximately October)
Reference: King.
- introductory notes
References in King:
- Most of chapter 2 except 2.5 (see scanf below) and 2.6 (I'll do
#define in
with the rest of the C preprocessor stuff in a few weeks, but you can
read section 2.6 easily enough for understanding the rest of the
examples in King)
- You already know chapters 4, 5, and 6 from Java, and sort of chapter 9
Then:
- C data types; pointers and arrays
References in King:
- more of chapter 7
- chapters 11 and 12
- chapter 8.1 to the extent you don't already know it
- (multidimensional
arrays aren't anything new in C, given that you know them in Java; how
they work with pointers is kinda new, but not extremely, and I don't think
I'm going to go into that in this course, although you're quite welcome to
ask in office hours or by e-mail if you have any questions about that)
- C: printf and scanf (probably doing scanf
after strings; just basic printf at first here)
- C command-line arguments (argc and argv)
- then
files in C (chapter 22),
C strings (chapter 13),
C pre-processor (chapter 14),
and more C data types including
structs (chapter 16.1 through 16.3).
- Dynamic memory allocation (malloc), discussed in the above-cited
structs.html; see King chapter 17.
- Typedef (King 7.6).
Mid-term test (October 24)
Processes (October 27; November 1, 3)
Unix processes and dealing with them in C
Mid-term break, November 7 and 8
Inter-process and network communication (November 10, 15, 17)
socket code examples
I think that most socket matters are covered in the Haviland et al
book... except for the network newline
convention.
(But note that the Haviland et al book has some buggy socket code in that it
does not call htonl() and htons() appropriately. On a big-endian machine,
this doesn't matter; on a little-endian machine, such as the CDF linux
machines, it makes your program not work. See the above examples for proper
use of htonl() and htons().)
History of and versions of unix/linux
(November 22)
Present in this course especially to answer the question "what's the
difference between unix and linux?"
A number of philosophical documents from the GNU Project
can be found at
http://www.gnu.org/philosophy/philosophy.html.
For an introduction, see
"Why Software Should Not
Have Owners".
The "free software" movement is something I'm quite interested in and happy
to discuss outside of class time (e.g. in office hours) with those who are
interested.
Multitasking implementation and memory layout and such, as time permits
(November 24)
some notes about memory layout and OS considerations
Concurrency, as time permits
no time for this this term
Computer security (November 29, December 1)
- If you are interested in this topic, then among other things you may
want to read the classic (despite being only about fifteen years old)
paper by Farmer and Venema entitled
"Improving
the Security of Your Site by Breaking Into it", and perhaps the
even-more-classic
"Reflections on Trusting
Trust" by Ken Thompson (one of the primary inventors of unix) (paper from 1984).
(In the Ken Thompson paper, the "figure 1" is very hard to read, and besides,
perhaps you want to try it out.
Here is that program.
Not quite up to modern C standards -- gcc -Wall complains a bunch --
but it still works.)
POSIX threads (December 6)
Concluding notes (December 6)
final exam coverage
Regarding unnecessarily complex computer programs:
"The superior pilot uses his superior judgement to avoid situations in which he
has to demonstrate his superior skill." (traditional airplane pilot saying)
RFC 1958,
Architectural Principles of the Internet, contains a wonderful
sentence:
"If there are several ways of doing the same thing, choose one."
[main course page]