Meeting Time: Tu 2:10pm - 6:00pm
Location: CATLab (Dickinson 235)
Office Hours: M/Th 4-5pm, F 2-3pm, Dickinson 211
Course Web Site: http://cs.bennington.edu/courses/f2014/cs4170.01/
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.
- Rohail Altaf
- Torrent Glenn
- Arthur Jongebloed
- Kiri Strack-Grose
- Logan Traynor
- Brendon Walter
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
- Hash maps/tables
- Be comfortable reading, reviewing and critiquing the code of others.
- Become familiar with methods for testing functionality and performance of code.
Finally, when applicable, you will also become familiar with examples of common uses of data structures in open-source and proprietary software.
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.
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.
- 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.
- Class participation and attendance (40%).
- Assignments and exercises (40%).
- Mid-term, end-of-term in-class evaluation (20%).
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 (email@example.com). 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.
Subject to change. Readings and assignments will be disseminated in class.
Week 0x01 (9/2): Intro, Logistics, Unix, GitHub, C, Tools, Structs Week 0x02 (9/9): Pointers, Linked Lists Week 0x03 (9/16): Linked Lists, Circular linked list, ring buffer Week 0x04 (9/23): Stacks & Queues Week 0x05 (9/30): Stacks & Queues Week 0x06 (10/7): Binary Trees Week 0x07 (10/14): COMPETITION 1 Week 0x08 (10/21): Binary Trees Week 0x09 (10/28): Sorting Week 0x0A (11/4): Graphs Week 0x0B (11/11): PLAN DAY Week 0x0C (11/18): Hashing Week 0x0D (11/25): Matrices Week 0x0E (12/2): COMPETITION 2 Week 0x0F (12/9): Wrap-up