Effective Programming in C and UNIX
Instructor Ananda Gunawardena (guna)
Office Location Gates 6005
Phone (412) 268-1559
Office Hours T,TR 10:30AM-12:00PM
B Joe Burgess
G Alex Reece
15-123 Effective Programming in C and UNIX
All Semesters: 9 units
This course is designed to provide a substantial exposure to the C programming language
and the Unix programming environment for students with some prior programming
experience but minimal exposure to C. Features of the C language that are emphasized
include arrays, structs and unions, dynamic memory allocation (malloc and free),
pointers, pointer arithmetic, and casting. Data structures that are emphasized include
dynamic lists and hash tables. Students will develop a sense of proper programming style
in the C idiom, and will be exposed to cross-platform portability issues. Students will
learn to use tools such as emacs/vi, make, and gdb to assist them in the design, testing
and debugging of their programs. Students will also learn about data structures like
linked lists, sparse matrices, stacks, queues, heaps, trees and graphs and sorting techniques,
regular expressions and will be able to use scripting languages such as Perl and Shell scripting to solve
problems. This course serves as the prerequisite for 15-213.
This primary objective of this course is to prepare students on
how to use C, Unix, scripting tools to manage development projects. The course also
emphasizes the preparation for 15-213, Systems Programming course, which in turn
prepares them for operating systems and distributed systems and other systems courses.
We will use the C language (old fashioned C not C++) to teach the basics of pointers,
memory addressing, copying and moving memory, and other fundamental system tasks
for the first half of the course and data structures and algorithms in C for second half of the course .
We assume that you have taken at least one programming course and you
are comfortable working with a compiler and also debugging programs. As such the
depth and rigor of the course will be more than a typical intro course. You are expected to
devote a considerable amount of time to plan, develop, test and debug your code.