PROGRAMMING AND DATA STRUCTURES IN C
>> SPRING 2013 | [ SCHEDULE ] | [ PDF ] | [ SVN ] | [ wiki ]
Instructor: Andrew Cencini (acencini@bennington.edu)
Credits: 4
Meeting Time: Tu 2:10pm - 6:00pm
Location: CATLab (Dickinson 235)
Office Hours: M 2:10pm - 6:00pm, Dickinson 211
Course Web Site: http://cs.bennington.edu/courses/s2013/cs4170.01/

SUMMARY:
In this class, students will learn the C programming language, as well as the design and implementation of computer science's foundational data structures: stacks, queues, linked lists, trees, and their various and sundry variants. Since virtually every piece of software in existence relies upon several of these key data structures, the class will also look at examples of occurrences of these data structures in the wild, such as the Linux kernel and in other free and open-source software. Students will also learn to analyze the performance and suitability of algorithms and data structures, and how they are also connected to essential systems concepts. No prior knowledge of the C programming language is necessary, but at least one semester of programming experience (or its equivalent) is required.

STUDENTS:

  • Ben Broderick-Phillips
  • Hugh Crowl
  • Klemente Gilbert-Espada
  • Pratham Joshi
  • Jonathan Kiritharan
  • Maddy Moberg
  • Michael Reardon
  • Alexa Villaume
  • Brady Williams

PURPOSE OF THIS COURSE:
In this class you will learn the fundamentals of programming in the C programming language, as well as the design and use of essential data structures that are used throughout the world of computing. By the end of this class, you should be able to:

  • Be comfortable writing and compiling code on Linux from the command line.
  • Write and debug programs using the C programming language.
  • Enlist, sync, add, update and delete items from Subversion (SVN) source control.
  • Understand the design, efficiency, and appropriate use of data structures in C.
  • Be very comfortable with structs, pointers and standard I/O.
  • Be able to describe and implement:

    • Linked lists
    • Stacks
    • Queues
    • Trees
    • Graphs
    • Hash maps/tables

  • Be comfortable reading, reviewing and critiquing the code of others.
  • Become familiar with methods for testing functionality and performance of code.
While the class is taught using the C programming language, the applicability of this topic is fairly universal; therefore, you should also be able to understand how data structures are used (and sometimes, hidden from us) in other programming languages.

Finally, when applicable, you will also become familiar with examples of common uses of data structures in open-source and proprietary software.

FORMAT:
Our class will meet once per week for 4 hours. Class will typically consist of:

  • Basic overview of the subject matter / Q&A on reading.
  • Guided implementation of core concepts.
  • Self-guided lab work to expand upon core concepts.
  • Code review and wrapup.

TEXTBOOK:
Data Structures in C by Noel Kalicharan. Required.

The C Programming Language by Kernighan and Ritchie. Optional. This is a classic text that belongs in your personal library. It was not made required for this class only because we will be following Kalicharan more closely. Highly recommended.

REQUIREMENTS:

  • You will attend every class. More than one absence (excused or unexcused) will jeopardize your standing in the course.
  • You will check-in all required assignments prior to the start of the class in which they are due.
  • You will be an attentive and positive contributor to class discussion and activities.
  • You will seek out help promptly if you are struggling or falling behind.
  • You will submit your own ideas and work. Academic dishonesty will not be tolerated, and will be passed along without exception to college authorities.

EVALUATION:

  • Class participation and attendance (40%).
  • Assignments and exercises (40%).
  • Mid-term, end-of-term in-class evaluation (20%).
For the third item above, you will take part in a design and programming challenge in-class. The format will consist of one or more open-ended problems that can be solved using the tools and techniques you have learned in class – any materials or references (including Google, etc.) may be used. Code and any documentation will be submitted at the end of class, and you will meet with me to review your work.

GETTING HELP:
If you are struggling in class, or would like to investigate a topic in greater depth, come see me. My office hours are listed on the top of this syllabus. I enjoy and look forward to meeting with you – some general guidance on making sure we are able to meet:

  • I strongly prefer email (acencini@bennington.edu). I am on it way too much, so you'll likely get a reply within 12 hours unless I am extremely busy.
  • If you would like to meet with me, please consult my schedule (located here) and propose a date and time that is not generally booked.
  • If you plan to drop by during my office hours, it doesn't hurt to email in advance - I like to know if you are planning to show up, and can also let you know if there might be a wait.
  • If you need to meet me outside of my office hours, 18 hours notice is strongly suggested.
SCHEDULE:
Reading and Assignments will be disseminated in class.