Course Description

This course gives an introduction to using the Unix operating system, shell scripting, programming in C, software testing and debugging, version control systems, and basic software development methodologies.

The official calendar description is here.

The following is a brief, tentative list of topics that will be covered in this course:


C programming

Version control

Software development



The following is a tentative list of topics covered in the lectures. The dates are approximate. In particular, you will notice that there are some dates, including a large block at the end of the term, that have no associated lectures. I will use these as "overflow" areas because some topics will take longer to cover than anticipated on this schedule. Not all slides are available yet. They will be posted as I get them ready.

Jan 7Introduction
Jan 9Introduction to Unix
Jan 11Unix shells and basic concepts
Jan 14Files and directories
Jan 16Output redirection (same slides as Files and directories)
Jan 21Inodes (same slides as Files and directories)
Jan 23Searching, wildcards, and regular expressions
Jan 25Subversion
Jan 28Shell scripting
Jan 30Introduction to C
Feb 6Components of a C program
Feb 8Comparison of C vs Java
Feb 11Formatted I/O in C
Feb 15Data types in C
Feb 25Functions
Feb 27Recursion
Mar 6Command line arguments in C
Mar 8Writing large programs
Mar 11Make
Mar 13Dynamic memory allocation in C
Mar 15File manipulation in C
Mar 20Git
Mar 22Development methodologies


The following is the list of labs. The lab notes will be made available in time for each lab. This list is subject to change, but I hope the final result will be close to what is posted here.

Jan 14Log in to UNIX, write a simple Java program, basic UNIX commands, SVN basics
Jan 21Unix utilities and emacs
Jan 28Subversion (SVN)
Feb 4Shell scripting
Feb 11Compiling C programs, gcc
Feb 25Data types, formatted I/O in C
Mar 4Functions and recursion in C
Mar 11Debugging and testing
Mar 18Command line arguments, pointers in C
Mar 25Git
Apr 1TBD


Required Textbooks

K.N. King. C Programming: A Modern Approach. 2nd edition, W.W. Norton & Company, 2008.

G. Glass and K. Ables. UNIX for Programmers and Users. 3rd edition, Prentice Hall, 2003.

Recommended Reading

E. Nemeth, G. Snyder, T.R. Hein, and B. Whaley. Unix and Linux System Administration Handbook. 4th edition, Pearson Education, 2010.

B.W. Kernighan and D.M. Ritchie. The C Programming Language. 2nd edition, Prentice Hall, 1988.


Grade = max(30% * A + 20% * M + 50% * F, 30% * A + 70% * F)



You may discuss assignments with each other, but do not exchange notes.

Late Assignments

Late assignments are accepted only if you were sick on the day the assignment was due or if there is an important event in your personal life that prevents you from completing the assignment on time. In the latter case, you must discuss these circumstances with me in advance to apply for a reasonable extension.

Missed Exams

If you miss an exam, you will be given the opportunity to sit the exam at a later date. You must, however, present a good reason why you were not able to sit the exam at the regular scheduled time. Also, unless there are a large number of students who missed the regularly scheduled exam, make-up exams are oral exams.


I will not tolerate any form of plagiarism (copying from your classmates, copying solutions from the web, etc.). According to university regulations, I have to report you to the Faculty's Integrity Officer if I suspect you of academic dishonesty, and I will. The Integrity Officer may refer your case to the Senate Committee on Plagiarism. The penalty for plagiarism can range from failing the course to expulsion from the university. So please save me and yourself the aggravation. For more information, make sure you read the Dalhousie Academic Integrity Page.