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 28, 30Shell scripting
Feb 4Midterm review
Feb 6(Cancelled due to illness)
Feb 8Processes
Feb 11Introduction to C
Feb 25Comparison: C vs Java
Feb 27Formatted I/O in C
Mar 1Data types in C
Mar 8Arrays in C
Mar 11Midterm review
Mar 13Pointers
Mar 15Functions and recursion
Mar 18Strings in C
Mar 20Structs and unions
Mar 29Dynamic memory management
Apr 1File manipulation in C
Apr 3Testing and debugging
Apr 3Software development lifecycle
Apr 5Make
Apr 8Git


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 4, 11Shell scripting
Feb 25Compiling C programs, gcc
Mar 4Snow closure
Mar 11, 18Data types, formatted I/O in C
Mar 25Structs, pointers, and dynamic memory management
Apr 1Debugging and make


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.